[svn:parrot] r44743 - in branches/ops_pct: . compilers/data_json compilers/imcc compilers/json compilers/ncigen/t compilers/ncigen/t/NCIGENAST compilers/nqp compilers/opsc compilers/pct compilers/pge compilers/pirc/src compilers/pirc/t compilers/tge config/auto config/auto/sizes config/auto/warnings config/gen config/gen/call_list config/gen/crypto config/gen/makefiles config/gen/platform config/gen/platform/generic config/gen/platform/openbsd config/init config/init/hints config/inter docs docs/book/draft docs/book/pct docs/dev docs/pdds docs/pdds/draft docs/project examples/c examples/embed examples/languages/abc examples/languages/abc/t examples/languages/squaak examples/nci examples/pge examples/pir examples/sdl examples/sdl/lcd examples/sdl/minesweeper examples/sdl/tetris ext/Parrot-Embed/lib/Parrot ext/Parrot-Embed/t ext/nqp-rx ext/nqp-rx/src/stage0 include/parrot include/parrot/atomic include/parrot/oplib lib/Parrot lib/Parrot/Configure lib/Parrot/Configure/St ep lib/Parrot/Docs lib/Parrot/Docs/Section lib/Parrot/Harness lib/Parrot/OpTrans lib/Parrot/Ops2c lib/Parrot/Pmc2c ports/cpan ports/cygwin ports/debian ports/fedora ports/mandriva ports/suse runtime/parrot/include runtime/parrot/languages runtime/parrot/library runtime/parrot/library/Configure runtime/parrot/library/Data runtime/parrot/library/Data/Dumper runtime/parrot/library/HTTP runtime/parrot/library/Math runtime/parrot/library/Math/Random runtime/parrot/library/Parrot runtime/parrot/library/SDL runtime/parrot/library/Test runtime/parrot/library/Test/Builder runtime/parrot/library/YAML runtime/parrot/library/YAML/Dumper src src/atomic src/call src/dynpmc src/gc src/interp src/io src/nci src/ops src/packfile src/pmc src/runcore src/string src/string/charset src/string/encoding t t/codingstd t/compilers/imcc/imcpasm t/compilers/imcc/reg t/compilers/imcc/syn t/compilers/json t/compilers/pct t/compilers/pge t/compilers/tge t/configure t/distro t/dynoplibs t/dynpmc t/example s t/library t/manifest t/native_pbc t/oo t/op t/perl t/pir t/pmc t/run t/src t/steps/auto t/steps/gen t/steps/init/hints t/tools t/tools/dev t/tools/install t/tools/ops2pm t/tools/pmc2cutils tools/build tools/dev tools/util

cotto at svn.parrot.org cotto at svn.parrot.org
Sun Mar 7 19:34:00 UTC 2010


Author: cotto
Date: Sun Mar  7 19:33:20 2010
New Revision: 44743
URL: https://trac.parrot.org/parrot/changeset/44743

Log:
[opsc] sync branch with trunk

Added:
   branches/ops_pct/compilers/imcc/Rules.in
      - copied unchanged from r44740, trunk/compilers/imcc/Rules.in
   branches/ops_pct/src/nci/   (props changed)
      - copied from r44740, trunk/src/nci/
   branches/ops_pct/src/pmc/imageiosize.pmc
      - copied unchanged from r44740, trunk/src/pmc/imageiosize.pmc
   branches/ops_pct/src/pmc/opcode.pmc
      - copied unchanged from r44740, trunk/src/pmc/opcode.pmc
   branches/ops_pct/src/pmc/oplib.pmc
      - copied unchanged from r44740, trunk/src/pmc/oplib.pmc
   branches/ops_pct/t/compilers/imcc/reg/spill_old.t
      - copied unchanged from r44740, trunk/t/compilers/imcc/reg/spill_old.t
   branches/ops_pct/t/op/errorson.t
      - copied unchanged from r44740, trunk/t/op/errorson.t
   branches/ops_pct/t/op/gc-leaky.t
      - copied unchanged from r44740, trunk/t/op/gc-leaky.t
   branches/ops_pct/t/pmc/imageio.t
      - copied unchanged from r44740, trunk/t/pmc/imageio.t
   branches/ops_pct/t/pmc/imageiosize.t
      - copied unchanged from r44740, trunk/t/pmc/imageiosize.t
   branches/ops_pct/t/pmc/opcode.t
      - copied unchanged from r44740, trunk/t/pmc/opcode.t
   branches/ops_pct/t/pmc/oplib.t
      - copied unchanged from r44740, trunk/t/pmc/oplib.t
   branches/ops_pct/tools/dev/mk_nci_thunks.pl
      - copied unchanged from r44740, trunk/tools/dev/mk_nci_thunks.pl
   branches/ops_pct/tools/dev/nci_thunk_gen.pir
      - copied unchanged from r44740, trunk/tools/dev/nci_thunk_gen.pir
Replaced:
   branches/ops_pct/src/nci/api.c
      - copied unchanged from r44740, trunk/src/nci/api.c
   branches/ops_pct/src/nci/core_thunks.c
      - copied unchanged from r44740, trunk/src/nci/core_thunks.c
   branches/ops_pct/src/nci/core_thunks.nci
      - copied unchanged from r44740, trunk/src/nci/core_thunks.nci
   branches/ops_pct/src/nci/extra_thunks.c
      - copied unchanged from r44740, trunk/src/nci/extra_thunks.c
   branches/ops_pct/src/nci/extra_thunks.nci
      - copied unchanged from r44740, trunk/src/nci/extra_thunks.nci
Deleted:
   branches/ops_pct/compilers/imcc/Rules.mak
   branches/ops_pct/config/gen/call_list/
   branches/ops_pct/config/gen/call_list.pm
   branches/ops_pct/config/gen/makefiles/CFLAGS.in
   branches/ops_pct/include/parrot/events.h
   branches/ops_pct/include/parrot/tsq.h
   branches/ops_pct/runtime/parrot/library/Math/Random/
   branches/ops_pct/src/events.c
   branches/ops_pct/src/tsq.c
   branches/ops_pct/t/library/mt19937ar.t
   branches/ops_pct/t/library/mt19937ar.txt
   branches/ops_pct/t/op/bitwise.t
   branches/ops_pct/t/steps/gen/call_list-01.t
   branches/ops_pct/tools/build/cc_flags.pl
   branches/ops_pct/tools/build/nativecall.pir
   branches/ops_pct/tools/build/nativecall.pl
Modified:
   branches/ops_pct/   (props changed)
   branches/ops_pct/CREDITS
   branches/ops_pct/ChangeLog
   branches/ops_pct/Configure.pl
   branches/ops_pct/DEPRECATED.pod
   branches/ops_pct/MANIFEST
   branches/ops_pct/MANIFEST.SKIP
   branches/ops_pct/MANIFEST.generated
   branches/ops_pct/META.yml
   branches/ops_pct/NEWS
   branches/ops_pct/PBC_COMPAT
   branches/ops_pct/PLATFORMS
   branches/ops_pct/README
   branches/ops_pct/VERSION
   branches/ops_pct/compilers/data_json/Defines.mak
   branches/ops_pct/compilers/data_json/Rules.mak   (contents, props changed)
   branches/ops_pct/compilers/imcc/   (props changed)
   branches/ops_pct/compilers/imcc/cfg.c
   branches/ops_pct/compilers/imcc/cfg.h
   branches/ops_pct/compilers/imcc/imc.c
   branches/ops_pct/compilers/imcc/imcc.l
   branches/ops_pct/compilers/imcc/imcc.y
   branches/ops_pct/compilers/imcc/imclexer.c
   branches/ops_pct/compilers/imcc/imcparser.c
   branches/ops_pct/compilers/imcc/imcparser.h
   branches/ops_pct/compilers/imcc/instructions.c
   branches/ops_pct/compilers/imcc/instructions.h
   branches/ops_pct/compilers/imcc/main.c
   branches/ops_pct/compilers/imcc/optimizer.c
   branches/ops_pct/compilers/imcc/parser_util.c
   branches/ops_pct/compilers/imcc/pbc.c
   branches/ops_pct/compilers/imcc/pbc.h
   branches/ops_pct/compilers/imcc/pcc.c
   branches/ops_pct/compilers/imcc/reg_alloc.c
   branches/ops_pct/compilers/imcc/sets.c
   branches/ops_pct/compilers/imcc/sets.h
   branches/ops_pct/compilers/imcc/symreg.c
   branches/ops_pct/compilers/imcc/symreg.h
   branches/ops_pct/compilers/json/Rules.mak   (props changed)
   branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t
   branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t
   branches/ops_pct/compilers/ncigen/t/parse_00.t
   branches/ops_pct/compilers/ncigen/t/parse_01.t
   branches/ops_pct/compilers/ncigen/t/parse_02.t
   branches/ops_pct/compilers/nqp/Rules.mak   (props changed)
   branches/ops_pct/compilers/opsc/Defines.mak   (props changed)
   branches/ops_pct/compilers/opsc/Rules.mak   (props changed)
   branches/ops_pct/compilers/pct/Rules.mak   (props changed)
   branches/ops_pct/compilers/pge/Rules.mak   (props changed)
   branches/ops_pct/compilers/pirc/src/bcgen.c
   branches/ops_pct/compilers/pirc/src/main.c
   branches/ops_pct/compilers/pirc/src/pir.y
   branches/ops_pct/compilers/pirc/src/pircapi.c
   branches/ops_pct/compilers/pirc/src/pircompiler.c
   branches/ops_pct/compilers/pirc/src/pircompiler.h
   branches/ops_pct/compilers/pirc/src/pircompunit.c
   branches/ops_pct/compilers/pirc/src/pircompunit.h
   branches/ops_pct/compilers/pirc/src/piremit.c
   branches/ops_pct/compilers/pirc/src/piremit.h
   branches/ops_pct/compilers/pirc/src/pirmacro.c
   branches/ops_pct/compilers/pirc/src/pirmacro.h
   branches/ops_pct/compilers/pirc/src/pirparser.c
   branches/ops_pct/compilers/pirc/src/pirpcc.c
   branches/ops_pct/compilers/pirc/src/pirpcc.h
   branches/ops_pct/compilers/pirc/src/pirregalloc.c
   branches/ops_pct/compilers/pirc/src/pirregalloc.h
   branches/ops_pct/compilers/pirc/src/pirsymbol.c
   branches/ops_pct/compilers/pirc/src/pirsymbol.h
   branches/ops_pct/compilers/pirc/t/basic.t
   branches/ops_pct/compilers/pirc/t/heredoc.t
   branches/ops_pct/compilers/pirc/t/macro.t
   branches/ops_pct/compilers/pirc/t/stmts.t
   branches/ops_pct/compilers/pirc/t/subflags.t
   branches/ops_pct/compilers/tge/Rules.mak   (props changed)
   branches/ops_pct/config/auto/cgoto.pm
   branches/ops_pct/config/auto/gcc.pm
   branches/ops_pct/config/auto/icu.pm
   branches/ops_pct/config/auto/perldoc.pm
   branches/ops_pct/config/auto/pmc.pm
   branches/ops_pct/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/ops_pct/config/auto/warnings.pm
   branches/ops_pct/config/auto/warnings/test_c.in
   branches/ops_pct/config/gen/crypto/digest_pmc.in
   branches/ops_pct/config/gen/makefiles.pm
   branches/ops_pct/config/gen/makefiles/docs.in
   branches/ops_pct/config/gen/makefiles/dynoplibs.in
   branches/ops_pct/config/gen/makefiles/dynpmc.in
   branches/ops_pct/config/gen/makefiles/root.in
   branches/ops_pct/config/gen/opengl.pm
   branches/ops_pct/config/gen/platform/generic/env.c
   branches/ops_pct/config/gen/platform/generic/exec.c
   branches/ops_pct/config/gen/platform/generic/memexec.c
   branches/ops_pct/config/gen/platform/openbsd/memexec.c
   branches/ops_pct/config/gen/platform/platform_interface.h
   branches/ops_pct/config/init/hints/darwin.pm
   branches/ops_pct/config/init/hints/mswin32.pm
   branches/ops_pct/config/init/hints/openbsd.pm
   branches/ops_pct/config/init/optimize.pm
   branches/ops_pct/config/inter/charset.pm
   branches/ops_pct/config/inter/encoding.pm
   branches/ops_pct/config/inter/libparrot.pm
   branches/ops_pct/docs/book/draft/README   (props changed)
   branches/ops_pct/docs/book/draft/appa_glossary.pod   (props changed)
   branches/ops_pct/docs/book/draft/appb_patch_submission.pod   (props changed)
   branches/ops_pct/docs/book/draft/appc_command_line_options.pod   (props changed)
   branches/ops_pct/docs/book/draft/appd_build_options.pod   (props changed)
   branches/ops_pct/docs/book/draft/appe_source_code.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch01_introduction.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch02_getting_started.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch07_dynpmcs.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch08_dynops.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch10_opcode_reference.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch11_directive_reference.pod   (props changed)
   branches/ops_pct/docs/book/draft/ch12_operator_reference.pod   (props changed)
   branches/ops_pct/docs/book/draft/chXX_hlls.pod   (props changed)
   branches/ops_pct/docs/book/draft/chXX_library.pod   (props changed)
   branches/ops_pct/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch01_introduction.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch02_getting_started.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch03_compiler_tools.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch04_pge.pod   (props changed)
   branches/ops_pct/docs/book/pct/ch05_nqp.pod   (props changed)
   branches/ops_pct/docs/dev/c_functions.pod   (props changed)
   branches/ops_pct/docs/embed.pod
   branches/ops_pct/docs/parrothist.pod
   branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod
   branches/ops_pct/docs/pdds/draft/pdd11_extending.pod
   branches/ops_pct/docs/pdds/pdd17_pmc.pod
   branches/ops_pct/docs/pdds/pdd28_strings.pod
   branches/ops_pct/docs/pdds/pdd30_install.pod   (props changed)
   branches/ops_pct/docs/project/release_manager_guide.pod
   branches/ops_pct/docs/tests.pod
   branches/ops_pct/examples/c/nanoparrot.c
   branches/ops_pct/examples/c/pbc_info.c
   branches/ops_pct/examples/embed/cotorra.c   (contents, props changed)
   branches/ops_pct/examples/languages/abc/   (props changed)
   branches/ops_pct/examples/languages/abc/t/01-tests.t
   branches/ops_pct/examples/languages/squaak/   (props changed)
   branches/ops_pct/examples/nci/QtHelloWorld.pasm
   branches/ops_pct/examples/nci/QtHelloWorld.pir
   branches/ops_pct/examples/nci/sdl_blue_rectangle.pir
   branches/ops_pct/examples/pge/demo.pir   (props changed)
   branches/ops_pct/examples/pir/make_hello_pbc.pir
   branches/ops_pct/examples/sdl/anim_image.pir
   branches/ops_pct/examples/sdl/anim_image_dblbuf.pir
   branches/ops_pct/examples/sdl/blue_font.pir
   branches/ops_pct/examples/sdl/blue_rect.pir
   branches/ops_pct/examples/sdl/bounce_parrot_logo.pir
   branches/ops_pct/examples/sdl/lcd/clock.pir
   branches/ops_pct/examples/sdl/mandel.pir
   branches/ops_pct/examples/sdl/minesweeper/eventhandler.pir
   branches/ops_pct/examples/sdl/minesweeper/field.pir
   branches/ops_pct/examples/sdl/minesweeper/mines.pir
   branches/ops_pct/examples/sdl/move_parrot_logo.pir
   branches/ops_pct/examples/sdl/raw_pixels.pir
   branches/ops_pct/examples/sdl/tetris/app.pir
   branches/ops_pct/examples/sdl/tetris/block.pir
   branches/ops_pct/examples/sdl/tetris/board.pir
   branches/ops_pct/examples/sdl/tetris/eventhandler.pir
   branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs
   branches/ops_pct/ext/Parrot-Embed/t/pipp.t
   branches/ops_pct/ext/nqp-rx/Rules.mak   (props changed)
   branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir
   branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir
   branches/ops_pct/ext/nqp-rx/src/stage0/P6Regex-s0.pir
   branches/ops_pct/include/parrot/atomic/gcc_pcc.h
   branches/ops_pct/include/parrot/call.h   (contents, props changed)
   branches/ops_pct/include/parrot/charset.h
   branches/ops_pct/include/parrot/context.h
   branches/ops_pct/include/parrot/debugger.h
   branches/ops_pct/include/parrot/encoding.h
   branches/ops_pct/include/parrot/extend.h
   branches/ops_pct/include/parrot/gc_api.h   (contents, props changed)
   branches/ops_pct/include/parrot/hash.h
   branches/ops_pct/include/parrot/imcc.h
   branches/ops_pct/include/parrot/interpreter.h
   branches/ops_pct/include/parrot/io.h
   branches/ops_pct/include/parrot/memory.h
   branches/ops_pct/include/parrot/nci.h
   branches/ops_pct/include/parrot/oo.h
   branches/ops_pct/include/parrot/op.h
   branches/ops_pct/include/parrot/oplib.h
   branches/ops_pct/include/parrot/oplib/core_ops.h
   branches/ops_pct/include/parrot/packfile.h
   branches/ops_pct/include/parrot/parrot.h
   branches/ops_pct/include/parrot/pmc.h
   branches/ops_pct/include/parrot/pmc_freeze.h
   branches/ops_pct/include/parrot/pobj.h
   branches/ops_pct/include/parrot/runcore_api.h   (contents, props changed)
   branches/ops_pct/include/parrot/runcore_profiling.h   (contents, props changed)
   branches/ops_pct/include/parrot/runcore_trace.h   (props changed)
   branches/ops_pct/lib/Parrot/Configure/Compiler.pm
   branches/ops_pct/lib/Parrot/Configure/Messages.pm
   branches/ops_pct/lib/Parrot/Configure/Step/List.pm
   branches/ops_pct/lib/Parrot/Configure/Step/Test.pm   (props changed)
   branches/ops_pct/lib/Parrot/Distribution.pm
   branches/ops_pct/lib/Parrot/Docs/File.pm
   branches/ops_pct/lib/Parrot/Docs/Section/C.pm
   branches/ops_pct/lib/Parrot/Docs/Section/Tools.pm
   branches/ops_pct/lib/Parrot/H2inc.pm   (props changed)
   branches/ops_pct/lib/Parrot/Harness/DefaultTests.pm
   branches/ops_pct/lib/Parrot/Op.pm
   branches/ops_pct/lib/Parrot/OpTrans.pm
   branches/ops_pct/lib/Parrot/OpTrans/CGoto.pm
   branches/ops_pct/lib/Parrot/Ops2c/Utils.pm
   branches/ops_pct/lib/Parrot/OpsFile.pm
   branches/ops_pct/lib/Parrot/Pmc2c/Attribute.pm
   branches/ops_pct/lib/Parrot/Pmc2c/MethodEmitter.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PCCMETHOD.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMC.pm
   branches/ops_pct/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/ops_pct/lib/Parrot/Pmc2c/UtilFunctions.pm
   branches/ops_pct/ports/cpan/pause_guide.pod   (props changed)
   branches/ops_pct/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/ops_pct/ports/debian/libparrot-dev.install.in   (props changed)
   branches/ops_pct/ports/debian/libparrot.install.in   (props changed)
   branches/ops_pct/ports/debian/parrot-doc.install.in   (props changed)
   branches/ops_pct/ports/debian/parrot.install.in   (props changed)
   branches/ops_pct/ports/fedora/parrot.spec.fedora   (props changed)
   branches/ops_pct/ports/mandriva/parrot.spec.mandriva   (props changed)
   branches/ops_pct/ports/suse/parrot.spec.suse   (props changed)
   branches/ops_pct/runtime/parrot/include/test_more.pir
   branches/ops_pct/runtime/parrot/languages/   (props changed)
   branches/ops_pct/runtime/parrot/library/Configure/genfile.pir
   branches/ops_pct/runtime/parrot/library/Data/Dumper.pir
   branches/ops_pct/runtime/parrot/library/Data/Dumper/Base.pir
   branches/ops_pct/runtime/parrot/library/Data/Dumper/Default.pir
   branches/ops_pct/runtime/parrot/library/HTTP/Daemon.pir
   branches/ops_pct/runtime/parrot/library/Math/Rand.pir   (contents, props changed)
   branches/ops_pct/runtime/parrot/library/OpenGL.pir
   branches/ops_pct/runtime/parrot/library/P6object.pir
   branches/ops_pct/runtime/parrot/library/Parrot/Coroutine.pir
   branches/ops_pct/runtime/parrot/library/Rules.mak   (props changed)
   branches/ops_pct/runtime/parrot/library/SDL.pir
   branches/ops_pct/runtime/parrot/library/SDL/App.pir
   branches/ops_pct/runtime/parrot/library/SDL/Button.pir
   branches/ops_pct/runtime/parrot/library/SDL/Color.pir
   branches/ops_pct/runtime/parrot/library/SDL/Constants.pir
   branches/ops_pct/runtime/parrot/library/SDL/Event.pir
   branches/ops_pct/runtime/parrot/library/SDL/EventHandler.pir
   branches/ops_pct/runtime/parrot/library/SDL/Font.pir
   branches/ops_pct/runtime/parrot/library/SDL/Image.pir
   branches/ops_pct/runtime/parrot/library/SDL/LCD.pir
   branches/ops_pct/runtime/parrot/library/SDL/Rect.pir
   branches/ops_pct/runtime/parrot/library/SDL/Sprite.pir
   branches/ops_pct/runtime/parrot/library/SDL/StopWatch.pir
   branches/ops_pct/runtime/parrot/library/SDL/Surface.pir
   branches/ops_pct/runtime/parrot/library/Test/Builder/Test.pir
   branches/ops_pct/runtime/parrot/library/Test/More.pir
   branches/ops_pct/runtime/parrot/library/YAML/Dumper.pir
   branches/ops_pct/runtime/parrot/library/YAML/Dumper/Base.pir
   branches/ops_pct/runtime/parrot/library/YAML/Dumper/Default.pir
   branches/ops_pct/runtime/parrot/library/distutils.pir
   branches/ops_pct/runtime/parrot/library/dumper.pir
   branches/ops_pct/runtime/parrot/library/libpcre.pir
   branches/ops_pct/runtime/parrot/library/pcre.pir
   branches/ops_pct/runtime/parrot/library/yaml_dumper.pir
   branches/ops_pct/src/   (props changed)
   branches/ops_pct/src/atomic/gcc_x86.c
   branches/ops_pct/src/call/args.c
   branches/ops_pct/src/call/context.c
   branches/ops_pct/src/call/context_accessors.c
   branches/ops_pct/src/call/ops.c   (contents, props changed)
   branches/ops_pct/src/call/pcc.c   (props changed)
   branches/ops_pct/src/debug.c
   branches/ops_pct/src/dynext.c
   branches/ops_pct/src/dynpmc/dynlexpad.pmc
   branches/ops_pct/src/dynpmc/foo.pmc
   branches/ops_pct/src/dynpmc/gdbmhash.pmc
   branches/ops_pct/src/dynpmc/rational.pmc
   branches/ops_pct/src/embed.c
   branches/ops_pct/src/exceptions.c
   branches/ops_pct/src/exit.c
   branches/ops_pct/src/extend.c
   branches/ops_pct/src/frame_builder.c
   branches/ops_pct/src/gc/alloc_memory.c   (contents, props changed)
   branches/ops_pct/src/gc/alloc_resources.c   (contents, props changed)
   branches/ops_pct/src/gc/api.c   (contents, props changed)
   branches/ops_pct/src/gc/gc_inf.c
   branches/ops_pct/src/gc/gc_ms.c
   branches/ops_pct/src/gc/gc_private.h
   branches/ops_pct/src/gc/malloc.c   (props changed)
   branches/ops_pct/src/gc/malloc_trace.c   (props changed)
   branches/ops_pct/src/gc/mark_sweep.c   (contents, props changed)
   branches/ops_pct/src/gc/system.c   (contents, props changed)
   branches/ops_pct/src/global.c
   branches/ops_pct/src/global_setup.c
   branches/ops_pct/src/hash.c
   branches/ops_pct/src/hll.c
   branches/ops_pct/src/interp/inter_cb.c   (contents, props changed)
   branches/ops_pct/src/interp/inter_create.c   (contents, props changed)
   branches/ops_pct/src/interp/inter_misc.c   (contents, props changed)
   branches/ops_pct/src/io/api.c
   branches/ops_pct/src/io/buffer.c
   branches/ops_pct/src/io/core.c
   branches/ops_pct/src/io/filehandle.c
   branches/ops_pct/src/io/socket_api.c
   branches/ops_pct/src/io/socket_unix.c
   branches/ops_pct/src/io/socket_win32.c
   branches/ops_pct/src/io/unix.c
   branches/ops_pct/src/key.c
   branches/ops_pct/src/library.c
   branches/ops_pct/src/main.c
   branches/ops_pct/src/multidispatch.c
   branches/ops_pct/src/nci_test.c
   branches/ops_pct/src/oo.c
   branches/ops_pct/src/ops/bit.ops
   branches/ops_pct/src/ops/cmp.ops
   branches/ops_pct/src/ops/core.ops
   branches/ops_pct/src/ops/core_ops.c
   branches/ops_pct/src/ops/experimental.ops
   branches/ops_pct/src/ops/io.ops
   branches/ops_pct/src/ops/math.ops
   branches/ops_pct/src/ops/object.ops
   branches/ops_pct/src/ops/ops.num
   branches/ops_pct/src/ops/pmc.ops
   branches/ops_pct/src/ops/set.ops
   branches/ops_pct/src/ops/sys.ops
   branches/ops_pct/src/packfile.c
   branches/ops_pct/src/packfile/pf_items.c
   branches/ops_pct/src/parrot_debugger.c
   branches/ops_pct/src/pbc_dump.c
   branches/ops_pct/src/pbc_merge.c
   branches/ops_pct/src/pmc.c
   branches/ops_pct/src/pmc/arrayiterator.pmc
   branches/ops_pct/src/pmc/bigint.pmc
   branches/ops_pct/src/pmc/bignum.pmc
   branches/ops_pct/src/pmc/callcontext.pmc
   branches/ops_pct/src/pmc/capture.pmc
   branches/ops_pct/src/pmc/class.pmc
   branches/ops_pct/src/pmc/codestring.pmc
   branches/ops_pct/src/pmc/complex.pmc
   branches/ops_pct/src/pmc/continuation.pmc
   branches/ops_pct/src/pmc/coroutine.pmc
   branches/ops_pct/src/pmc/cpointer.pmc
   branches/ops_pct/src/pmc/default.pmc
   branches/ops_pct/src/pmc/env.pmc
   branches/ops_pct/src/pmc/exception.pmc
   branches/ops_pct/src/pmc/exporter.pmc
   branches/ops_pct/src/pmc/filehandle.pmc
   branches/ops_pct/src/pmc/fixedbooleanarray.pmc
   branches/ops_pct/src/pmc/fixedfloatarray.pmc
   branches/ops_pct/src/pmc/fixedintegerarray.pmc
   branches/ops_pct/src/pmc/fixedpmcarray.pmc
   branches/ops_pct/src/pmc/fixedstringarray.pmc
   branches/ops_pct/src/pmc/float.pmc
   branches/ops_pct/src/pmc/handle.pmc
   branches/ops_pct/src/pmc/hash.pmc
   branches/ops_pct/src/pmc/hashiterator.pmc
   branches/ops_pct/src/pmc/imageio.pmc
   branches/ops_pct/src/pmc/integer.pmc
   branches/ops_pct/src/pmc/key.pmc
   branches/ops_pct/src/pmc/lexinfo.pmc
   branches/ops_pct/src/pmc/managedstruct.pmc
   branches/ops_pct/src/pmc/namespace.pmc
   branches/ops_pct/src/pmc/nci.pmc
   branches/ops_pct/src/pmc/null.pmc
   branches/ops_pct/src/pmc/object.pmc
   branches/ops_pct/src/pmc/orderedhash.pmc
   branches/ops_pct/src/pmc/os.pmc
   branches/ops_pct/src/pmc/packfile.pmc
   branches/ops_pct/src/pmc/packfileannotations.pmc
   branches/ops_pct/src/pmc/packfileconstanttable.pmc
   branches/ops_pct/src/pmc/packfiledirectory.pmc
   branches/ops_pct/src/pmc/packfilefixupentry.pmc
   branches/ops_pct/src/pmc/packfilefixuptable.pmc
   branches/ops_pct/src/pmc/packfilerawsegment.pmc
   branches/ops_pct/src/pmc/parrotinterpreter.pmc
   branches/ops_pct/src/pmc/parrotlibrary.pmc
   branches/ops_pct/src/pmc/parrotthread.pmc
   branches/ops_pct/src/pmc/pmc.num
   branches/ops_pct/src/pmc/pmcproxy.pmc
   branches/ops_pct/src/pmc/pointer.pmc
   branches/ops_pct/src/pmc/resizablebooleanarray.pmc
   branches/ops_pct/src/pmc/resizablefloatarray.pmc
   branches/ops_pct/src/pmc/resizableintegerarray.pmc
   branches/ops_pct/src/pmc/resizablepmcarray.pmc
   branches/ops_pct/src/pmc/resizablestringarray.pmc
   branches/ops_pct/src/pmc/role.pmc
   branches/ops_pct/src/pmc/scalar.pmc
   branches/ops_pct/src/pmc/scheduler.pmc
   branches/ops_pct/src/pmc/sockaddr.pmc
   branches/ops_pct/src/pmc/socket.pmc
   branches/ops_pct/src/pmc/string.pmc
   branches/ops_pct/src/pmc/stringhandle.pmc
   branches/ops_pct/src/pmc/stringiterator.pmc
   branches/ops_pct/src/pmc/sub.pmc
   branches/ops_pct/src/pmc/task.pmc
   branches/ops_pct/src/pmc/undef.pmc
   branches/ops_pct/src/pmc/unmanagedstruct.pmc
   branches/ops_pct/src/pmc_freeze.c
   branches/ops_pct/src/runcore/cores.c   (contents, props changed)
   branches/ops_pct/src/runcore/main.c   (contents, props changed)
   branches/ops_pct/src/runcore/profiling.c   (contents, props changed)
   branches/ops_pct/src/runcore/trace.c   (props changed)
   branches/ops_pct/src/scheduler.c
   branches/ops_pct/src/string/api.c
   branches/ops_pct/src/string/charset.c
   branches/ops_pct/src/string/charset/ascii.c
   branches/ops_pct/src/string/encoding.c
   branches/ops_pct/src/string/encoding/utf16.c
   branches/ops_pct/src/string/encoding/utf8.c
   branches/ops_pct/src/string/primitives.c
   branches/ops_pct/src/sub.c
   branches/ops_pct/src/thread.c
   branches/ops_pct/src/utils.c
   branches/ops_pct/src/vtable.tbl
   branches/ops_pct/src/vtables.c
   branches/ops_pct/t/codingstd/c_arg_assert.t
   branches/ops_pct/t/codingstd/c_cppcomments.t
   branches/ops_pct/t/codingstd/c_function_docs.t
   branches/ops_pct/t/codingstd/c_indent.t
   branches/ops_pct/t/codingstd/c_macro_args.t
   branches/ops_pct/t/codingstd/c_parens.t
   branches/ops_pct/t/codingstd/copyright.t
   branches/ops_pct/t/codingstd/cuddled_else.t
   branches/ops_pct/t/codingstd/linelength.t
   branches/ops_pct/t/codingstd/opcode_doc.t
   branches/ops_pct/t/codingstd/perlcritic.t
   branches/ops_pct/t/codingstd/pod_description.t
   branches/ops_pct/t/codingstd/pod_syntax.t
   branches/ops_pct/t/codingstd/trailing_space.t
   branches/ops_pct/t/compilers/imcc/imcpasm/optc.t
   branches/ops_pct/t/compilers/imcc/reg/spill.t
   branches/ops_pct/t/compilers/imcc/syn/hll.t
   branches/ops_pct/t/compilers/imcc/syn/labels.t
   branches/ops_pct/t/compilers/imcc/syn/objects.t
   branches/ops_pct/t/compilers/imcc/syn/op.t
   branches/ops_pct/t/compilers/imcc/syn/scope.t
   branches/ops_pct/t/compilers/imcc/syn/subflags.t
   branches/ops_pct/t/compilers/imcc/syn/veracity.t
   branches/ops_pct/t/compilers/json/from_parrot.t
   branches/ops_pct/t/compilers/pct/past.t
   branches/ops_pct/t/compilers/pge/00-basic.t
   branches/ops_pct/t/compilers/pge/02-match.t
   branches/ops_pct/t/compilers/pge/03-optable.t
   branches/ops_pct/t/compilers/pge/04-compile.t
   branches/ops_pct/t/compilers/pge/06-grammar.t
   branches/ops_pct/t/compilers/pge/pge-hs.t
   branches/ops_pct/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/ops_pct/t/compilers/tge/basic.t
   branches/ops_pct/t/compilers/tge/parser.t
   branches/ops_pct/t/configure/008-file_based_configuration.t
   branches/ops_pct/t/configure/025-options_test.t
   branches/ops_pct/t/configure/026-options_test.t
   branches/ops_pct/t/configure/034-step.t
   branches/ops_pct/t/distro/meta_yml.t
   branches/ops_pct/t/dynoplibs/math.t
   branches/ops_pct/t/dynoplibs/obscure.t
   branches/ops_pct/t/dynpmc/foo2.t
   branches/ops_pct/t/dynpmc/gdbmhash.t
   branches/ops_pct/t/dynpmc/rational.t
   branches/ops_pct/t/dynpmc/subproxy.t
   branches/ops_pct/t/examples/catchall.t
   branches/ops_pct/t/examples/pod.t
   branches/ops_pct/t/examples/tutorial.t
   branches/ops_pct/t/harness
   branches/ops_pct/t/library/cgi_query_hash.t
   branches/ops_pct/t/library/configure.t
   branches/ops_pct/t/library/coroutine.t
   branches/ops_pct/t/library/getopt_obj.t
   branches/ops_pct/t/library/md5.t
   branches/ops_pct/t/library/mime_base64.t
   branches/ops_pct/t/library/p6object.t
   branches/ops_pct/t/library/parrotlib.t
   branches/ops_pct/t/library/pg.t
   branches/ops_pct/t/library/protoobject.t
   branches/ops_pct/t/library/rand.t
   branches/ops_pct/t/library/tcl_glob.t
   branches/ops_pct/t/library/test_class.t
   branches/ops_pct/t/library/test_more.t
   branches/ops_pct/t/library/uuid.t
   branches/ops_pct/t/manifest/01-basic.t
   branches/ops_pct/t/manifest/02-regenerate_file.t
   branches/ops_pct/t/manifest/03-regenerate_skip.t
   branches/ops_pct/t/manifest/04-alt_file.t
   branches/ops_pct/t/manifest/05-alt_skip.t
   branches/ops_pct/t/native_pbc/annotations.pbc
   branches/ops_pct/t/native_pbc/header.t
   branches/ops_pct/t/native_pbc/integer.t
   branches/ops_pct/t/native_pbc/integer_1.pbc
   branches/ops_pct/t/native_pbc/number.t
   branches/ops_pct/t/native_pbc/number_1.pbc
   branches/ops_pct/t/native_pbc/string.t
   branches/ops_pct/t/native_pbc/string_1.pbc
   branches/ops_pct/t/oo/attributes.t
   branches/ops_pct/t/oo/composition.t
   branches/ops_pct/t/oo/inheritance.t
   branches/ops_pct/t/oo/metamodel.t
   branches/ops_pct/t/oo/methods.t
   branches/ops_pct/t/oo/mro-c3.t
   branches/ops_pct/t/oo/names.t
   branches/ops_pct/t/oo/new-old.t
   branches/ops_pct/t/oo/new.t
   branches/ops_pct/t/oo/ops.t
   branches/ops_pct/t/oo/root_new.t   (contents, props changed)
   branches/ops_pct/t/oo/subclass.t
   branches/ops_pct/t/op/00ff-dos.t
   branches/ops_pct/t/op/00ff-unix.t
   branches/ops_pct/t/op/64bit.t
   branches/ops_pct/t/op/annotate.t
   branches/ops_pct/t/op/arithmetics.t
   branches/ops_pct/t/op/arithmetics_pmc.t
   branches/ops_pct/t/op/box.t
   branches/ops_pct/t/op/calling.t
   branches/ops_pct/t/op/cc_params.t
   branches/ops_pct/t/op/comp.t
   branches/ops_pct/t/op/exit.t
   branches/ops_pct/t/op/fetch.t
   branches/ops_pct/t/op/gc.t
   branches/ops_pct/t/op/inf_nan.t
   branches/ops_pct/t/op/integer.t
   branches/ops_pct/t/op/literal.t
   branches/ops_pct/t/op/number.t
   branches/ops_pct/t/op/sprintf.t
   branches/ops_pct/t/op/sprintf2.t
   branches/ops_pct/t/op/string.t
   branches/ops_pct/t/op/string_cmp.t
   branches/ops_pct/t/op/string_mem.t
   branches/ops_pct/t/op/stringu.t
   branches/ops_pct/t/op/sysinfo.t
   branches/ops_pct/t/op/time.t
   branches/ops_pct/t/op/trans.t
   branches/ops_pct/t/op/trans_old.t
   branches/ops_pct/t/op/vivify.t
   branches/ops_pct/t/perl/Parrot_IO.t
   branches/ops_pct/t/perl/Parrot_Test.t
   branches/ops_pct/t/pir/macro.t
   branches/ops_pct/t/pmc/arrayiterator.t
   branches/ops_pct/t/pmc/bigint.t
   branches/ops_pct/t/pmc/capture.t
   branches/ops_pct/t/pmc/class.t
   branches/ops_pct/t/pmc/complex.t
   branches/ops_pct/t/pmc/continuation.t
   branches/ops_pct/t/pmc/default.t
   branches/ops_pct/t/pmc/env.t
   branches/ops_pct/t/pmc/eventhandler.t
   branches/ops_pct/t/pmc/exception.t
   branches/ops_pct/t/pmc/exporter.t
   branches/ops_pct/t/pmc/filehandle.t
   branches/ops_pct/t/pmc/fixedbooleanarray.t
   branches/ops_pct/t/pmc/fixedintegerarray.t
   branches/ops_pct/t/pmc/fixedpmcarray.t
   branches/ops_pct/t/pmc/fixedstringarray.t
   branches/ops_pct/t/pmc/handle.t
   branches/ops_pct/t/pmc/hash.t
   branches/ops_pct/t/pmc/hashiterator.t
   branches/ops_pct/t/pmc/hashiteratorkey.t
   branches/ops_pct/t/pmc/integer.t
   branches/ops_pct/t/pmc/iterator.t
   branches/ops_pct/t/pmc/lexinfo.t
   branches/ops_pct/t/pmc/lexpad.t
   branches/ops_pct/t/pmc/multidispatch.t
   branches/ops_pct/t/pmc/namespace-old.t   (props changed)
   branches/ops_pct/t/pmc/namespace.t
   branches/ops_pct/t/pmc/objects.t
   branches/ops_pct/t/pmc/orderedhashiterator.t
   branches/ops_pct/t/pmc/os.t
   branches/ops_pct/t/pmc/packfile.t
   branches/ops_pct/t/pmc/packfileannotation.t
   branches/ops_pct/t/pmc/packfileannotations.t
   branches/ops_pct/t/pmc/packfileconstanttable.t
   branches/ops_pct/t/pmc/packfiledirectory.t
   branches/ops_pct/t/pmc/packfilefixupentry.t
   branches/ops_pct/t/pmc/packfilefixuptable.t
   branches/ops_pct/t/pmc/packfilerawsegment.t
   branches/ops_pct/t/pmc/packfilesegment.t
   branches/ops_pct/t/pmc/parrotinterpreter.t
   branches/ops_pct/t/pmc/pmc.t
   branches/ops_pct/t/pmc/prop.t
   branches/ops_pct/t/pmc/ro.t
   branches/ops_pct/t/pmc/scalar.t
   branches/ops_pct/t/pmc/scheduler.t
   branches/ops_pct/t/pmc/signal.t
   branches/ops_pct/t/pmc/string.t
   branches/ops_pct/t/pmc/stringhandle.t
   branches/ops_pct/t/pmc/stringiterator.t
   branches/ops_pct/t/pmc/sub.t
   branches/ops_pct/t/run/options.t
   branches/ops_pct/t/src/embed.t   (contents, props changed)
   branches/ops_pct/t/src/extend.t
   branches/ops_pct/t/steps/auto/cgoto-01.t
   branches/ops_pct/t/steps/auto/snprintf-01.t
   branches/ops_pct/t/steps/auto/warnings-01.t
   branches/ops_pct/t/steps/gen/makefiles-01.t
   branches/ops_pct/t/steps/init/hints/darwin-01.t
   branches/ops_pct/t/steps/init/hints/linux-01.t   (props changed)
   branches/ops_pct/t/tools/dev/pmctree.t
   branches/ops_pct/t/tools/install/02-install_files.t
   branches/ops_pct/t/tools/install/03-lines_to_files.t
   branches/ops_pct/t/tools/ops2pm/05-renum_op_map_file.t
   branches/ops_pct/t/tools/ops2pm/08-sort_ops.t
   branches/ops_pct/t/tools/pbc_disassemble.t
   branches/ops_pct/t/tools/pmc2cutils/03-dump_vtable.t
   branches/ops_pct/t/tools/pmc2cutils/04-dump_pmc.t
   branches/ops_pct/t/tools/pmc2cutils/05-gen_c.t
   branches/ops_pct/tools/build/h2inc.pl   (props changed)
   branches/ops_pct/tools/dev/checkdepend.pl
   branches/ops_pct/tools/dev/fetch_languages.pl   (props changed)
   branches/ops_pct/tools/dev/mk_gitignore.pl   (props changed)
   branches/ops_pct/tools/dev/mk_language_shell.pl
   branches/ops_pct/tools/dev/vtablize.pl
   branches/ops_pct/tools/util/perlcritic-cage.conf   (props changed)
   branches/ops_pct/tools/util/release.json

Modified: branches/ops_pct/CREDITS
==============================================================================
--- branches/ops_pct/CREDITS	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/CREDITS	Sun Mar  7 19:33:20 2010	(r44743)
@@ -136,10 +136,12 @@
 
 N: Austin Hastings
 U: Austin
+U: Austin_Hastings
 A: austin_hastings at yahoo.com
 A: austin_h... at yahoo.com
 E: austin_hastings at yahoo.com
 D: Close
+D: Kakapo
 
 N: Benjamin Goldberg
 D: Numerous improvements and proposals.
@@ -328,6 +330,14 @@
 D: POD for the Undef PMC
 E: david.romano+p6i at gmail.com
 
+N: David E. Wheeler
+E: david at justatheory.com
+W: http://justatheory.com/
+U: theory
+A: theory
+A: David Wheeler
+S: Portland, OR
+
 N: Dennis Rieks
 D: Win32 config and build
 
@@ -692,7 +702,10 @@
 
 N: Michael H. Hind
 U: mikehh
-D: codingstd patches
+D: testing parrot and some HLL's
+D: fixing codetest failures
+D: adding function documentation
+D: tracwiki additions
 E: mike.hind at gmail.com
 
 N: Michael G. Schwern

Modified: branches/ops_pct/ChangeLog
==============================================================================
--- branches/ops_pct/ChangeLog	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/ChangeLog	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,9 @@
 #1 $Id$
 
+2010.02.16     darbelo
+	* Released 2.1.0
+	See NEWS for more.
+
 2010.01.19     chromatic
 	* Released 2.0.0
 	See NEWS for more.

Modified: branches/ops_pct/Configure.pl
==============================================================================
--- branches/ops_pct/Configure.pl	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/Configure.pl	Sun Mar  7 19:33:20 2010	(r44743)
@@ -646,7 +646,6 @@
     gen::core_pmcs
     gen::crypto
     gen::opengl
-    gen::call_list
     gen::makefiles
     gen::platform
     gen::config_pm

Modified: branches/ops_pct/DEPRECATED.pod
==============================================================================
--- branches/ops_pct/DEPRECATED.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/DEPRECATED.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -52,23 +52,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/264>
 
-=item various VTABLE functions [eligible in 1.5]
-
-The get_bigint, set_bigint_*, pow, i_pow and nextkey_keyed VTABLE functions are
-deprecated and will be removed.
-
-L<https://trac.parrot.org/parrot/ticket/866>
-
-=item Use of undocumented variables in class_init [eligible in 2.1]
-
-The current implementation allows the class_init vtable function body to
-use local symbols from the generated part. For example, some PMC used
-to use the pass counter. In the future, the class_init body from the PMC
-file may not be inserted directly in the body of the generated one,
-so this usage will not be allowed.
-
-L<https://trac.parrot.org/parrot/ticket/918>
-
 =item Overriding vtable invoke in PIR objects [experimental]
 
 The VTABLE invoke in object.pmc puts SELF at the start of the
@@ -77,20 +60,28 @@
 
 L<https://trac.parrot.org/parrot/ticket/103>
 
-=item All bitwise VTABLE functions [eligible in 2.1]
-
-All bitwise VTABLE functions (all VTABLE functions containing C<bitwise> in
-their names) will be removed.  Equivalent functionality will by supplied by
-bitwise dynops.
-
-L<https://trac.parrot.org/parrot/ticket/1260>
-
 =item CPointer PMC [eligible in 2.1]
 
 And all uses in the Parrot calling conventions.
 
 L<https://trac.parrot.org/parrot/ticket/1407>
 
+=item Digest dynpmcs [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.
+
+L<https://trac.parrot.org/parrot/ticket/1467>
+
+=item gdbmhash dynpmc [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.
+
+L<https://trac.parrot.org/parrot/ticket/1469>
+
 =back
 
 =head1 Opcodes
@@ -113,6 +104,13 @@
 for Sub, Exception, and related PMC types will instead be handled by
 get_label and set_label.
 
+=item sizeof [eligible in 2.4]
+
+This opcode uses the old integer ID for a PMC type; this opcode should be changed
+to use the current methods to lookup a PMC or removed entirely.
+
+L<https://trac.parrot.org/parrot/ticket/633>
+
 =item All bitwise ops [eligible in 2.1]
 
 All bitwise ops (all ops containing C<bitwise> in their names) will be provided
@@ -132,6 +130,11 @@
 
 L<https://trac.parrot.org/parrot/ticket/1406>
 
+=item GC_SYS_NAME option to interpinfo_s_i [experimental]
+
+Ability to get the string name of the current GC core from the interpinfo_s_i.
+See r43900 and r43904 for details.
+
 =back
 
 =head1 Bytecode
@@ -164,27 +167,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/906>
 
-=item named class/pmc lookup in pir syntax such as new, isa, subclass,
-    get_class, etc [eligible in 1.1]
-
-Class PMC name resolution will be the following.
-
-if the arg is a STRING
-  Relative to the current Namespace
-
-if the arg is a Array (of any sort) or Key
-  Relative to the current HLL Namespace
-
-if the arg is a Namespace or Class PMC
-  The passed in class or the class attached to the passed in namespace.
-
-L<https://trac.parrot.org/parrot/ticket/159>
-
-=item load or include paths prefixed with 'library/' or 'include/'
-[eligible in 1.5]
-
-L<https://trac.parrot.org/parrot/ticket/511>
-
 =item continuation-based ExceptionHandlers [eligible in 2.1]
 
 L<https://trac.parrot.org/parrot/ticket/1091>
@@ -214,44 +196,18 @@
 =item C API coding standards cleanup [eligible in 1.1]
 
 All C API functions that aren't currently named according to the
-'Parrot_<system>_*' scheme will be renamed. If you depend on these
-functions in an extending/embedding interface or C-level custom PMCs,
-check in 1.4 or 2.0 for the new names.
+'Parrot_<system>_*' scheme will be renamed. A list of renamed
+functions will be kept in the ticket at:
 
 L<https://trac.parrot.org/parrot/ticket/443>
 
-=item Sub/method invocation functions [eligible in 2.1]
-
-The old 'Parrot_call_*' functions for invoking a sub/method object from C are
-deprecated, replaced by 'Parrot_ext_call'.
-
-L<https://trac.parrot.org/parrot/ticket/1145>
-
 =item PMC Attributes Allocation Functions [experimental]
 
  Parrot_gc_allocate_pmc_attributes
  Parrot_gc_free_pmc_attributes
 
 These items and related helper functions are added as experimental support
-for TT #895
-
-=item PDB_compile and PDB_eval [eligible in 2.1]
-
-The function PDB_compile doesn't work since some time, and his implementation
-was a hack. His functionality may be reimplemented in another way. Until the
-end of deprecation cycle it just throws an exception.
-
-The PDB_eval function, that used in the debugger to support the eval
-command, was using PDB_compile. His functionality must be reimplemented
-in another way and with a name that follows current conventions, in the
-meantime and until the end of the deprecation cycle it just shows a
-diagnostic message.
-
-L<https://trac.parrot.org/parrot/ticket/872>
-
-=item Parrot_oo_get_namespace [eligible in 2.1]
-
-L<https://trac.parrot.org/parrot/ticket/1069>
+for L<https://trac.parrot.org/parrot/ticket/895>
 
 =item STRING Out parameters in Parrot_str_* functions [eligible in 2.1]
 
@@ -262,17 +218,6 @@
 
 =head1 Compiler tools
 
-=head2 PASM1 compiler
-
-=over 4
-
-=item C<PASM1 compiler> [eligible in 2.1]
-
-See PDB_compile. Note that the current version of the C<PASM1> compiler
-issues a warning and is not functional. (However, it used to segfault.)
-
-=back
-
 =head2 Parrot Grammar Engine (PGE)
 
 =over 4
@@ -321,35 +266,20 @@
 
 =back
 
-=head2 Not Quite Perl (NQP)
+=head1 Compilers
 
 =over 4
 
-=item C< $(...) > syntax  [eligible in 1.5]
-
-The C< $(...) > syntax for obtaining a result object from a Match
-object will no longer work.  The new syntax is to invoke the
-C<.ast> method on the Match object.
+=item json [eligible in 2.4]
 
-L<https://trac.parrot.org/parrot/ticket/459>
+The json compiler was dupicated into data_json some time ago. If you're
+using json, just use data_json instead, it's the same code. See TT #1461.
 
-=item Quoted items [eligible in 1.5]
+=item nqp [eligible in 2.4]
 
-Double-quoted strings will interpret unescaped $-names
-as interpolated variables in the string.  Bare slashes
-will introduce regular expressions.  The C<< <foo bar> >>
-syntax will produce an array of strings instead of a single
-string.
+Replaced by ext/nqp-rx and parrot-nqp.
 
-L<https://trac.parrot.org/parrot/ticket/837>
-
-=item C<< PIR q:to:<xyz> >> inline PIR [eligible in 1.5]
-
-The C<< PIR q:to:<xyz> >> form of inline PIR in NQP scripts is
-deprecated.  Use C< Q:PIR { ... } >  or C< Q:PIR {{ ... }} >
-instead.
-
-L<https://trac.parrot.org/parrot/ticket/842>
+L<http://trac.parrot.org/parrot/ticket/1462>
 
 =back
 
@@ -357,11 +287,12 @@
 
 =over 4
 
-=item MT19937 [eligible in 2.1]
+=item PARROT_LIBRARY and PARROT_INCLUDE environment variables [experimental]
 
-L<https://trac.parrot.org/parrot/ticket/1278> - latest version now hosted
-at L<http://github.com/fperrad/parrot-MT19937>. After 2.0, users will have
-to install via C<plumage>.
+L<https://trac.parrot.org/parrot/ticket/1429>
+
+A way to provide an equivalent of -L and -I parrot command line options
+to language that doesn't support it.
 
 =item JSON, JSON, and Config;JSON [eligible in 1.5]
 
@@ -375,14 +306,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/852>
 
-=item Library name changes [eligible in 2.1]
-
-The use of C<::> a namespace separator is deprecated.  Core libraries will
-change to use multi-level keys instead.  For example, C<Data::Dumper> will
-change to C<Data; Dumper>.  Affected libraries also include:
-C<Parrot::Coroutine>, C<SDL>, C<Test::Builder>, C<YAML::Dumper>, and
-C<PCRE::NCI>.
-
 =back
 
 =head1 Footnotes

Modified: branches/ops_pct/MANIFEST
==============================================================================
--- branches/ops_pct/MANIFEST	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/MANIFEST	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Sat Mar  6 12:29:40 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun Mar  7 19:24:21 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -34,7 +34,7 @@
 compilers/data_json/data_json/grammar.pg                    [data_json]
 compilers/data_json/data_json/pge2pir.tg                    [data_json]
 compilers/imcc/Defines.mak                                  [imcc]
-compilers/imcc/Rules.mak                                    [imcc]
+compilers/imcc/Rules.in                                     [imcc]
 compilers/imcc/cfg.c                                        [imcc]
 compilers/imcc/cfg.h                                        [imcc]
 compilers/imcc/debug.c                                      [imcc]
@@ -132,8 +132,10 @@
 compilers/nqp/t/harness                                     [test]
 compilers/opsc/Defines.mak                                  [opsc]
 compilers/opsc/Rules.mak                                    [opsc]
+compilers/opsc/TODO                                         [opsc]
 compilers/opsc/gen/Ops/Compiler/IGNOREME                    [opsc]
 compilers/opsc/ops/oplib.pm                                 [opsc]
+compilers/opsc/ops2c.nqp                                    [opsc]
 compilers/opsc/opsc.pir                                     [opsc]
 compilers/opsc/runcore/base.pm                              [opsc]
 compilers/opsc/runcore/c.pm                                 [opsc]
@@ -335,9 +337,6 @@
 config/auto/va_ptr/test_c.in                                []
 config/auto/warnings.pm                                     []
 config/auto/warnings/test_c.in                              []
-config/gen/call_list.pm                                     []
-config/gen/call_list/core.in                                []
-config/gen/call_list/misc.in                                []
 config/gen/config_h.pm                                      []
 config/gen/config_h/config_h.in                             []
 config/gen/config_h/feature_h.in                            []
@@ -352,7 +351,6 @@
 config/gen/crypto/digest_pmc.in                             []
 config/gen/crypto/digest_t.in                               []
 config/gen/makefiles.pm                                     []
-config/gen/makefiles/CFLAGS.in                              []
 config/gen/makefiles/docs.in                                []
 config/gen/makefiles/dynoplibs.in                           []
 config/gen/makefiles/dynpmc.in                              []
@@ -1055,7 +1053,6 @@
 include/parrot/embed.h                                      [main]include
 include/parrot/encoding.h                                   [main]include
 include/parrot/enums.h                                      [main]include
-include/parrot/events.h                                     [main]include
 include/parrot/exceptions.h                                 [main]include
 include/parrot/exit.h                                       [main]include
 include/parrot/extend.h                                     [main]include
@@ -1081,6 +1078,7 @@
 include/parrot/oo_private.h                                 [main]include
 include/parrot/op.h                                         [main]include
 include/parrot/oplib.h                                      [main]include
+include/parrot/oplib/core_ops.h                             [main]include
 include/parrot/packfile.h                                   [main]include
 include/parrot/parrot.h                                     [main]include
 include/parrot/pmc.h                                        [main]include
@@ -1100,7 +1098,6 @@
 include/parrot/thr_pthread.h                                [main]include
 include/parrot/thr_windows.h                                [main]include
 include/parrot/thread.h                                     [main]include
-include/parrot/tsq.h                                        [main]include
 include/parrot/vtables.h                                    [main]include
 include/parrot/warnings.h                                   [main]include
 include/pmc/dummy                                           [main]include
@@ -1265,7 +1262,6 @@
 runtime/parrot/library/JSON.pir                             [library]
 runtime/parrot/library/MIME/Base64.pir                      [library]
 runtime/parrot/library/Math/Rand.pir                        [library]
-runtime/parrot/library/Math/Random/mt19937ar.pir            [library]
 runtime/parrot/library/NCI/Utils.pir                        [library]
 runtime/parrot/library/OpenGL.pir                           [library]
 runtime/parrot/library/OpenGL/Math.pir                      [library]
@@ -1362,7 +1358,6 @@
 src/dynpmc/rotest.pmc                                       [devel]src
 src/dynpmc/subproxy.pmc                                     [devel]src
 src/embed.c                                                 []
-src/events.c                                                []
 src/exceptions.c                                            []
 src/exit.c                                                  []
 src/extend.c                                                []
@@ -1404,11 +1399,17 @@
 src/main.c                                                  []
 src/misc.c                                                  []
 src/multidispatch.c                                         []
+src/nci/api.c                                               []
+src/nci/core_thunks.c                                       []
+src/nci/core_thunks.nci                                     []
+src/nci/extra_thunks.c                                      []
+src/nci/extra_thunks.nci                                    []
 src/nci_test.c                                              []
 src/oo.c                                                    []
 src/ops/bit.ops                                             []
 src/ops/cmp.ops                                             []
 src/ops/core.ops                                            []
+src/ops/core_ops.c                                          []
 src/ops/debug.ops                                           []
 src/ops/experimental.ops                                    []
 src/ops/io.ops                                              []
@@ -1463,6 +1464,7 @@
 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
@@ -1474,6 +1476,8 @@
 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
@@ -1546,7 +1550,6 @@
 src/string/unicode.h                                        []
 src/sub.c                                                   []
 src/thread.c                                                []
-src/tsq.c                                                   []
 src/utils.c                                                 []
 src/vtable.tbl                                              [devel]src
 src/vtables.c                                               []
@@ -1594,6 +1597,7 @@
 t/compilers/imcc/imcpasm/pcc.t                              [test]
 t/compilers/imcc/reg/alloc.t                                [test]
 t/compilers/imcc/reg/spill.t                                [test]
+t/compilers/imcc/reg/spill_old.t                            [test]
 t/compilers/imcc/syn/clash.t                                [test]
 t/compilers/imcc/syn/const.t                                [test]
 t/compilers/imcc/syn/errors.t                               [test]
@@ -1756,8 +1760,6 @@
 t/library/iter.t                                            [test]
 t/library/md5.t                                             [test]
 t/library/mime_base64.t                                     [test]
-t/library/mt19937ar.t                                       [test]
-t/library/mt19937ar.txt                                     [test]
 t/library/p6object.t                                        [test]
 t/library/parrotlib.t                                       [test]
 t/library/pcre.t                                            [test]
@@ -1834,7 +1836,6 @@
 t/op/arithmetics.t                                          [test]
 t/op/arithmetics_pmc.t                                      [test]
 t/op/basic.t                                                [test]
-t/op/bitwise.t                                              [test]
 t/op/box.t                                                  [test]
 t/op/calling.t                                              [test]
 t/op/cc_params.t                                            [test]
@@ -1844,9 +1845,11 @@
 t/op/comp.t                                                 [test]
 t/op/copy.t                                                 [test]
 t/op/debuginfo.t                                            [test]
+t/op/errorson.t                                             [test]
 t/op/exceptions.t                                           [test]
 t/op/exit.t                                                 [test]
 t/op/fetch.t                                                [test]
+t/op/gc-leaky.t                                             [test]
 t/op/gc.t                                                   [test]
 t/op/globals.t                                              [test]
 t/op/ifunless.t                                             [test]
@@ -1930,6 +1933,8 @@
 t/pmc/hash.t                                                [test]
 t/pmc/hashiterator.t                                        [test]
 t/pmc/hashiteratorkey.t                                     [test]
+t/pmc/imageio.t                                             [test]
+t/pmc/imageiosize.t                                         [test]
 t/pmc/integer.t                                             [test]
 t/pmc/io.t                                                  [test]
 t/pmc/io_iterator.t                                         [test]
@@ -1949,6 +1954,8 @@
 t/pmc/object-mro.t                                          [test]
 t/pmc/object.t                                              [test]
 t/pmc/objects.t                                             [test]
+t/pmc/opcode.t                                              [test]
+t/pmc/oplib.t                                               [test]
 t/pmc/orderedhash.t                                         [test]
 t/pmc/orderedhashiterator.t                                 [test]
 t/pmc/os.t                                                  [test]
@@ -2052,7 +2059,6 @@
 t/steps/auto/thread-01.t                                    [test]
 t/steps/auto/va_ptr-01.t                                    [test]
 t/steps/auto/warnings-01.t                                  [test]
-t/steps/gen/call_list-01.t                                  [test]
 t/steps/gen/config_h-01.t                                   [test]
 t/steps/gen/config_pm-01.t                                  [test]
 t/steps/gen/core_pmcs-01.t                                  [test]
@@ -2162,12 +2168,9 @@
 t/tools/testdata                                            [test]
 tools/build/addopstags.pl                                   []
 tools/build/c2str.pl                                        []
-tools/build/cc_flags.pl                                     []
 tools/build/fixup_gen_file.pl                               []
 tools/build/h2inc.pl                                        []
 tools/build/headerizer.pl                                   []
-tools/build/nativecall.pir                                  []
-tools/build/nativecall.pl                                   []
 tools/build/ops2c.pl                                        [devel]
 tools/build/ops2pm.pl                                       []
 tools/build/parrot_config_c.pl                              []
@@ -2199,8 +2202,10 @@
 tools/dev/mk_language_shell.pl                              [devel]
 tools/dev/mk_manifest_and_skip.pl                           []
 tools/dev/mk_native_pbc                                     []
+tools/dev/mk_nci_thunks.pl                                  []
 tools/dev/mk_rpm_manifests.pl                               []
 tools/dev/nci_test_gen.pl                                   []
+tools/dev/nci_thunk_gen.pir                                 []
 tools/dev/nm.pl                                             []
 tools/dev/nopaste.pl                                        []
 tools/dev/ops_not_tested.pl                                 []

Modified: branches/ops_pct/MANIFEST.SKIP
==============================================================================
--- branches/ops_pct/MANIFEST.SKIP	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/MANIFEST.SKIP	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Mon Feb  8 05:37:36 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Fri Mar  5 16:49:09 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -105,6 +105,12 @@
 ^parrot_config\.pbc/
 ^parrot_debugger$
 ^parrot_debugger/
+^parrot_nci_thunk_gen$
+^parrot_nci_thunk_gen/
+^parrot_nci_thunk_gen\.c$
+^parrot_nci_thunk_gen\.c/
+^parrot_nci_thunk_gen\.pbc$
+^parrot_nci_thunk_gen\.pbc/
 ^parrot_test_run\.tar\.gz$
 ^parrot_test_run\.tar\.gz/
 ^pbc_disassemble$
@@ -166,8 +172,8 @@
 ^compilers/imcc/.*\.obj/
 ^compilers/imcc/.*\.tmp$
 ^compilers/imcc/.*\.tmp/
-^compilers/imcc/CFLAGS$
-^compilers/imcc/CFLAGS/
+^compilers/imcc/Rules\.mak$
+^compilers/imcc/Rules\.mak/
 ^compilers/imcc/imcc$
 ^compilers/imcc/imcc/
 ^compilers/imcc/imclexer\.c$
@@ -258,9 +264,6 @@
 # generated from svn:ignore of 'compilers/tge/TGE/'
 ^compilers/tge/TGE/Parser\.pir$
 ^compilers/tge/TGE/Parser\.pir/
-# generated from svn:ignore of 'config/gen/call_list/'
-^config/gen/call_list/opengl\.in$
-^config/gen/call_list/opengl\.in/
 # generated from svn:ignore of 'docs/'
 ^docs/.*\.tmp$
 ^docs/.*\.tmp/
@@ -581,9 +584,6 @@
 # generated from svn:ignore of 'runtime/parrot/library/Math/'
 ^runtime/parrot/library/Math/.*\.pbc$
 ^runtime/parrot/library/Math/.*\.pbc/
-# generated from svn:ignore of 'runtime/parrot/library/Math/Random/'
-^runtime/parrot/library/Math/Random/.*\.pbc$
-^runtime/parrot/library/Math/Random/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/NCI/'
 ^runtime/parrot/library/NCI/.*\.pbc$
 ^runtime/parrot/library/NCI/.*\.pbc/
@@ -632,8 +632,6 @@
 ^src/.*\.str/
 ^src/asmfun\..*$
 ^src/asmfun\..*/
-^src/call_list\.txt$
-^src/call_list\.txt/
 ^src/core_pmcs\.c$
 ^src/core_pmcs\.c/
 ^src/exec_cpu\.c$
@@ -644,10 +642,16 @@
 ^src/exec_dep\.h/
 ^src/extend_vtable\.c$
 ^src/extend_vtable\.c/
+^src/extra_nci_thunks\.c$
+^src/extra_nci_thunks\.c/
 ^src/fingerprint\.c$
 ^src/fingerprint\.c/
 ^src/glut_callbacks\.c$
 ^src/glut_callbacks\.c/
+^src/glut_nci_thunks\.c$
+^src/glut_nci_thunks\.c/
+^src/glut_nci_thunks\.nci$
+^src/glut_nci_thunks\.nci/
 ^src/install_config\.c$
 ^src/install_config\.c/
 ^src/jit_cpu\.c$
@@ -656,8 +660,6 @@
 ^src/jit_defs\.c/
 ^src/jit_emit\.h$
 ^src/jit_emit\.h/
-^src/nci\.c$
-^src/nci\.c/
 ^src/null_config\.c$
 ^src/null_config\.c/
 ^src/parrot_config\.c$
@@ -807,6 +809,13 @@
 ^src/io/.*\.obj/
 ^src/io/.*\.str$
 ^src/io/.*\.str/
+# generated from svn:ignore of 'src/nci/'
+^src/nci/.*\.o$
+^src/nci/.*\.o/
+^src/nci/.*\.obj$
+^src/nci/.*\.obj/
+^src/nci/.*\.str$
+^src/nci/.*\.str/
 # generated from svn:ignore of 'src/ops/'
 ^src/ops/.*\.c$
 ^src/ops/.*\.c/

Modified: branches/ops_pct/MANIFEST.generated
==============================================================================
--- branches/ops_pct/MANIFEST.generated	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/MANIFEST.generated	Sun Mar  7 19:33:20 2010	(r44743)
@@ -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.0.0.dylib                    [main]lib
+blib/lib/libparrot.2.1.0.dylib                    [main]lib
 blib/lib/libparrot.a                              [main]lib
 blib/lib/libparrot.dylib                          [main]lib
-blib/lib/libparrot.so.2.0.0                       [main]lib
+blib/lib/libparrot.so.2.1.0                       [main]lib
 blib/lib/libparrot.so                             [main]lib
 compilers/data_json/data_json.pbc                 [data_json]
 compilers/json/JSON.pbc                           [json]
@@ -56,6 +56,7 @@
 installable_parrot_debugger                       [main]bin
 installable_parrot.exe                            [main]bin
 installable_parrot                                [main]bin
+installable_parrot_nci_thunk_gen                  [main]bin
 installable_pbc_disassemble.exe                   [main]bin
 installable_pbc_disassemble                       [main]bin
 installable_pbc_dump.exe                          [main]bin
@@ -162,7 +163,6 @@
 runtime/parrot/library/Iter.pbc                   [main]
 runtime/parrot/library/JSON.pbc                   [main]
 runtime/parrot/library/libpcre.pbc                [main]
-runtime/parrot/library/Math/Random/mt19937ar.pbc  [main]
 runtime/parrot/library/Math/Rand.pbc              [main]
 runtime/parrot/library/MIME/Base64.pbc            [main]
 runtime/parrot/library/NCI/call_toolkit_init.pbc  [main]

Modified: branches/ops_pct/META.yml
==============================================================================
--- branches/ops_pct/META.yml	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/META.yml	Sun Mar  7 19:33:20 2010	(r44743)
@@ -4,7 +4,7 @@
 # See http://module-build.sourceforge.net/META-spec-current.html for details.
 ---
 name: parrot
-version: 2.0.0
+version: 2.1.0
 author: parrot-dev at lists.parrot.org
 abstract: a virtual machine designed for dynamic languages
 license: artistic2

Modified: branches/ops_pct/NEWS
==============================================================================
--- branches/ops_pct/NEWS	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/NEWS	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,21 @@
 # $Id$
 
+New in 2.1.0
+- Core changes
+  + GC performance and encapsulation were greatly improved.
+  + PMC freeze refactored.
+  + More Makefile and build improvements.
+- API Changes
+  + The Array PMC was removed.
+  + Several deprecated vtables were removed.
+  + The OrderedHash PMC was substantialy improved.
+- Platforms
+  + Packaging improvements on some operating systems.
+- Tools
+  + Some cases in pbc_merge are now handled.
+  + Improvements were made to the dependency checker.
+  + New tool nativecall.pir added.
+
 New in 2.0.0
 - Features
   + Context PMCs now support attribute-based introspection

Modified: branches/ops_pct/PBC_COMPAT
==============================================================================
--- branches/ops_pct/PBC_COMPAT	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/PBC_COMPAT	Sun Mar  7 19:33:20 2010	(r44743)
@@ -27,6 +27,8 @@
 
 # please insert tab separated entries at the top of the list
 
+6.4	2010.03.02	cotto	remove prederef__ and reserved
+6.3	2010.02.16	whiteknight	Add OpLib and Opcode PMCs
 6.2	2010.01.31	cotto	serialization-related changes to ParrotInterpreter
 6.1	2010.01.30	whiteknight	remove Array PMC
 6.0	2010.01.19	chromatic	released 2.0.0

Modified: branches/ops_pct/PLATFORMS
==============================================================================
--- branches/ops_pct/PLATFORMS	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/PLATFORMS	Sun Mar  7 19:33:20 2010	(r44743)
@@ -33,6 +33,7 @@
                                 CGoto EXEC   Thr Sig
 --------------------------------------------------------------------------------
 cygwin1.7.0-x86-gcc4.3.2      4   Y    -     -   -   Y    Y     Y  20090315
+darwin9.8.0-x86-gcc4.0.1          Y    ?     Y   ?   Y    Y     Y  20100215
 dragonfly2.2.0-i386-gcc-4.1.2 4   Y    -     Y   Y   Y    Y     ?  20090427
 freebsd-x86-gcc-4.2.1         4   Y    Y     ?   ?   Y    Y     Y  20090415
 freebsd-amd64-gcc-4.2.1       8   Y    -     ?   ?   Y    Y     Y  20090720
@@ -40,7 +41,7 @@
 linux-amd64-clang-r75433      8   Y    ?     ?   ?   Y    Y*2   ?  20090913
 linux-amd64-gcc4.3.2          8   Y    -     Y   Y   Y    Y/1   Y  20091020
 linux-amd64-gcc4.3.3          8   Y    ?     Y   Y   Y    Y     ?  20090712
-linux-amd64-gcc4.4.1          8   Y    ?     Y   Y   Y    Y     Y  20091020
+linux-amd64-gcc4.4.1          8   Y    ?     Y   ?   Y    Y     Y  20100215
 linux-amd64-g++4.4.1          8   Y    ?     Y   Y   Y    Y     Y  20091116
 linux-ppc-gcc_4.4.2               Y    Y     Y   Y   Y    Y     Y  20100118
 linux-ppc64-gcc_4.4.2             Y    Y     Y   Y   Y    Y     Y  20100118

Modified: branches/ops_pct/README
==============================================================================
--- branches/ops_pct/README	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/README	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.0.0
+This is Parrot, version 2.1.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.

Modified: branches/ops_pct/VERSION
==============================================================================
--- branches/ops_pct/VERSION	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/VERSION	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1 +1 @@
-2.0.0
+2.1.0

Modified: branches/ops_pct/compilers/data_json/Defines.mak
==============================================================================
--- branches/ops_pct/compilers/data_json/Defines.mak	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/data_json/Defines.mak	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1 +1,6 @@
-DATA_JSON_LIB_PBCS = compilers/data_json/data_json.pbc
+DATA_JSON_LIB_PBCS = $(LIBRARY_DIR)/data_json.pbc
+
+DATA_JSON_CLEANUPS = $(LIBRARY_DIR)/data_json.pbc \
+    compilers/data_json/data_json.pbc \
+    compilers/data_json/data_json/grammar.pir \
+    compilers/data_json/data_json/pge2pir.pir

Modified: branches/ops_pct/compilers/data_json/Rules.mak
==============================================================================
--- branches/ops_pct/compilers/data_json/Rules.mak	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/data_json/Rules.mak	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,10 +1,10 @@
 $(LIBRARY_DIR)/data_json.pbc: compilers/data_json/data_json.pbc
 	$(CP) compilers/data_json/data_json.pbc $@
-	
+
 compilers/data_json/data_json.pbc : \
-    runtime/parrot/library/PGE.pbc \
-    runtime/parrot/library/PGE/Util.pbc \
-    runtime/parrot/library/TGE.pbc \
+    $(LIBRARY_DIR)/PGE.pbc \
+    $(LIBRARY_DIR)/PGE/Util.pbc \
+    $(LIBRARY_DIR)/TGE.pbc \
     compilers/data_json/data_json/grammar.pir \
     compilers/data_json/data_json/pge2pir.pir
 

Copied: branches/ops_pct/compilers/imcc/Rules.in (from r44740, trunk/compilers/imcc/Rules.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/imcc/Rules.in	Sun Mar  7 19:33:20 2010	(r44743, copy of r44740, trunk/compilers/imcc/Rules.in)
@@ -0,0 +1,210 @@
+compilers/imcc/pcc$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/imcparser.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/parser.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+compilers/imcc/instructions$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/pbc.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+compilers/imcc/pbc$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/pbc.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_sub.h
+
+compilers/imcc/parser_util$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/imcparser.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/parser.h \
+    compilers/imcc/pbc.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/dynext.h \
+    $(INC_DIR)/embed.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_sub.h
+
+compilers/imcc/imc$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+compilers/imcc/cfg$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+compilers/imcc/debug$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+## SUFFIX OVERRIDE - Warnings (This is generated code)
+compilers/imcc/imclexer$(O) : \
+    compilers/imcc/imclexer.c \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/imcparser.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/parser.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/imclexer.c@ @ccwarn::compilers/imcc/imclexer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imclexer.c
+
+## SUFFIX OVERRIDE - Warnings (This is generated code)
+compilers/imcc/imcparser$(O) : \
+    compilers/imcc/imcparser.c \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/imcparser.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/parser.h \
+    compilers/imcc/pbc.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/dynext.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/imcparser.c@ @ccwarn::compilers/imcc/imcparser.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imcparser.c
+
+compilers/imcc/main$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/imcparser.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/parser.h \
+    compilers/imcc/pbc.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/embed.h \
+    $(INC_DIR)/imcc.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/runcore_api.h \
+    $(PARROT_H_HEADERS)
+
+## SUFFIX OVERRIDE - Warnings (This is generated code)
+compilers/imcc/optimizer$(O) : \
+    compilers/imcc/optimizer.c \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/pbc.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/optimizer.c@ @ccwarn::compilers/imcc/optimizer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/optimizer.c
+
+compilers/imcc/reg_alloc$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/optimizer.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+compilers/imcc/sets$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+compilers/imcc/symreg$(O) : \
+    compilers/imcc/cfg.h \
+    compilers/imcc/debug.h \
+    compilers/imcc/imc.h \
+    compilers/imcc/instructions.h \
+    compilers/imcc/sets.h \
+    compilers/imcc/symreg.h \
+    compilers/imcc/unit.h \
+    $(INC_DIR)/oplib/ops.h \
+    $(PARROT_H_HEADERS)
+
+# imcc file dependencies
+#
+# The .flag files are needed because we keep some derived files in SVN,
+# which does not keep accurate timestamps on the files, relative to each other.
+# Note that YACC or LEX may be null commands, so we must `touch` all the
+# target files, instead of just the .flag files.
+
+compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h : compilers/imcc/imcc.y
+	$(YACC) compilers/imcc/imcc.y -d -o compilers/imcc/imcparser.c
+	$(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.c compilers/imcc/imcc.y
+	$(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.h compilers/imcc/imcc.y
+	$(TOUCH) compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h
+
+compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c : compilers/imcc/imcc.l
+	$(LEX) -ocompilers/imcc/imclexer.c compilers/imcc/imcc.l
+	$(TOUCH) compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c

Deleted: branches/ops_pct/compilers/imcc/Rules.mak
==============================================================================
--- branches/ops_pct/compilers/imcc/Rules.mak	Sun Mar  7 19:33:20 2010	(r44742)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,201 +0,0 @@
-compilers/imcc/pcc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/instructions$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/pbc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS) \
-    include/pmc/pmc_sub.h
-
-compilers/imcc/parser_util$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/dynext.h \
-    $(INC_DIR)/embed.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS) \
-    include/pmc/pmc_sub.h
-
-compilers/imcc/imc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/cfg$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/debug$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/imclexer$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/imcparser$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/dynext.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/main$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/imcparser.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/parser.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/embed.h \
-    $(INC_DIR)/imcc.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(INC_DIR)/runcore_api.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/optimizer$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/pbc.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/reg_alloc$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/optimizer.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/sets$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-compilers/imcc/symreg$(O) : \
-    compilers/imcc/cfg.h \
-    compilers/imcc/debug.h \
-    compilers/imcc/imc.h \
-    compilers/imcc/instructions.h \
-    compilers/imcc/sets.h \
-    compilers/imcc/symreg.h \
-    compilers/imcc/unit.h \
-    $(INC_DIR)/oplib/ops.h \
-    $(PARROT_H_HEADERS)
-
-# imcc file dependencies
-#
-# The .flag files are needed because we keep some derived files in SVN,
-# which does not keep accurate timestamps on the files, relative to each other.
-# Note that YACC or LEX may be null commands, so we must `touch` all the
-# target files, instead of just the .flag files.
-
-compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h : compilers/imcc/imcc.y
-	$(YACC) compilers/imcc/imcc.y -d -o compilers/imcc/imcparser.c
-	$(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.c compilers/imcc/imcc.y
-	$(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.h compilers/imcc/imcc.y
-	$(TOUCH) compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h
-
-compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c : compilers/imcc/imcc.l
-	$(LEX) -ocompilers/imcc/imclexer.c compilers/imcc/imcc.l
-	$(TOUCH) compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c

Modified: branches/ops_pct/compilers/imcc/cfg.c
==============================================================================
--- branches/ops_pct/compilers/imcc/cfg.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/cfg.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -35,27 +35,30 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void analyse_life_block(
+static void analyse_life_block(PARROT_INTERP,
     ARGIN(const Basic_block* bb),
     ARGMOD(SymReg *r))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*r);
 
-static void analyse_life_symbol(
+static void analyse_life_symbol(PARROT_INTERP,
     ARGIN(const IMC_Unit *unit),
     ARGMOD(SymReg* r))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(* r);
 
-static void bb_add_edge(
+static void bb_add_edge(PARROT_INTERP,
     ARGMOD(IMC_Unit *unit),
     ARGIN(Basic_block *from),
     ARGMOD(Basic_block *to))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*to);
 
@@ -110,17 +113,19 @@
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*unit);
 
-static void init_basic_blocks(ARGMOD(IMC_Unit *unit))
+static void init_basic_blocks(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*unit);
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
-static Basic_block* make_basic_block(
+static Basic_block* make_basic_block(PARROT_INTERP,
     ARGMOD(IMC_Unit *unit),
     ARGMOD(Instruction *ins))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*ins);
 
@@ -145,13 +150,16 @@
         __attribute__nonnull__(2);
 
 #define ASSERT_ARGS_analyse_life_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(bb) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(bb) \
     , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_analyse_life_symbol __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_bb_add_edge __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(from) \
     , PARROT_ASSERT_ARG(to))
 #define ASSERT_ARGS_bb_check_set_addr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -180,9 +188,11 @@
 #define ASSERT_ARGS_free_loops __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_init_basic_blocks __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_make_basic_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(ins))
 #define ASSERT_ARGS_mark_loop __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -267,7 +277,7 @@
     unsigned int          i;
 
     IMCC_info(interp, 2, "find_basic_blocks\n");
-    init_basic_blocks(unit);
+    init_basic_blocks(interp, unit);
 
     for (i = 0; i < hsh->size; i++) {
         SymReg *r;
@@ -288,7 +298,7 @@
 
     ins->index = i = 0;
 
-    bb         = make_basic_block(unit, ins);
+    bb         = make_basic_block(interp, unit, ins);
 
     if (ins->type & ITBRANCH) {
         SymReg * const addr = get_branch_reg(bb->end);
@@ -326,7 +336,7 @@
             nu = 0;
         else if (ins->type & ITLABEL) {
             bb->end = ins->prev;
-            bb      = make_basic_block(unit, ins);
+            bb      = make_basic_block(interp, unit, ins);
         }
 
         /* a branch is the end of a basic block
@@ -342,7 +352,7 @@
                 continue;
 
             if (ins->next)
-                bb = make_basic_block(unit, ins->next);
+                bb = make_basic_block(interp, unit, ins->next);
 
             nu = 1;
         }
@@ -380,8 +390,8 @@
                     ins->symregs[1]->name);
 
             /* connect this block with first and last block */
-            bb_add_edge(unit, unit->bb_list[0], bb);
-            bb_add_edge(unit, unit->bb_list[unit->n_basic_blocks - 1], bb);
+            bb_add_edge(interp, unit, unit->bb_list[0], bb);
+            bb_add_edge(interp, unit, unit->bb_list[unit->n_basic_blocks - 1], bb);
 
             /* and mark the instruction as being kind of a branch */
             bb->start->type |= ITADDR;
@@ -419,7 +429,7 @@
 
         /* if the block can fall-through */
         if (i > 0 && ! (last->end->type & IF_goto))
-            bb_add_edge(unit, last, bb);
+            bb_add_edge(interp, unit, last, bb);
 
         /* check first ins, if label try to find a set_addr op */
         if (bb->start->type & ITLABEL)
@@ -433,7 +443,7 @@
         else if (STREQ(bb->start->opname, "invoke")
              ||  STREQ(bb->start->opname, "invokecc")) {
             if (check_invoke_type(interp, unit, bb->start) == INVOKE_SUB_LOOP)
-                bb_add_edge(unit, bb, unit->bb_list[0]);
+                bb_add_edge(interp, unit, bb, unit->bb_list[0]);
         }
 
         last = bb;
@@ -486,14 +496,14 @@
     const SymReg * const r = find_sym(interp, label->name);
 
     if (r && (r->type & VTADDRESS) && r->first_ins)
-        bb_add_edge(unit, from, unit->bb_list[r->first_ins->bbindex]);
+        bb_add_edge(interp, unit, from, unit->bb_list[r->first_ins->bbindex]);
     else {
         IMCC_debug(interp, DEBUG_CFG, "register branch %I ", from->end);
         for (ins = from->end; ins; ins = ins->prev) {
             if ((ins->type & ITBRANCH)
             &&   STREQ(ins->opname, "set_addr")
             &&   ins->symregs[1]->first_ins) {
-                bb_add_edge(unit, from,
+                bb_add_edge(interp, unit, from,
                     unit-> bb_list[ins->symregs[1]->first_ins->bbindex]);
                 IMCC_debug(interp, DEBUG_CFG, "(%s) ", ins->symregs[1]->name);
                 break;
@@ -538,8 +548,8 @@
 
 /*
 
-=item C<static void bb_add_edge(IMC_Unit *unit, Basic_block *from, Basic_block
-*to)>
+=item C<static void bb_add_edge(PARROT_INTERP, IMC_Unit *unit, Basic_block
+*from, Basic_block *to)>
 
 Adds an edge between the two given blocks.
 
@@ -548,8 +558,10 @@
 */
 
 static void
-bb_add_edge(ARGMOD(IMC_Unit *unit), ARGIN(Basic_block  *from),
-                                    ARGMOD(Basic_block *to))
+bb_add_edge(PARROT_INTERP,
+        ARGMOD(IMC_Unit *unit),
+        ARGIN(Basic_block  *from),
+        ARGMOD(Basic_block *to))
 {
     ASSERT_ARGS(bb_add_edge)
     Edge *e;
@@ -558,7 +570,7 @@
 
     /* we assume that the data is correct, and thus if the edge is not
      * on the predecessors of 'from', it won't be on the successors of 'to' */
-    e             = mem_allocate_typed(Edge);
+    e             = mem_gc_allocate_typed(interp, Edge);
 
     e->succ_next  = from->succ_list;
     e->from       = from;
@@ -708,13 +720,14 @@
     IMCC_info(interp, 2, "life_analysis\n");
 
     for (i = 0; i < unit->n_symbols; i++)
-        analyse_life_symbol(unit, reglist[i]);
+        analyse_life_symbol(interp, unit, reglist[i]);
 }
 
 
 /*
 
-=item C<static void analyse_life_symbol(const IMC_Unit *unit, SymReg* r)>
+=item C<static void analyse_life_symbol(PARROT_INTERP, const IMC_Unit *unit,
+SymReg* r)>
 
 Analyzes the lifetime for a given symbol.
 
@@ -723,7 +736,8 @@
 */
 
 static void
-analyse_life_symbol(ARGIN(const IMC_Unit *unit), ARGMOD(SymReg* r))
+analyse_life_symbol(PARROT_INTERP,
+        ARGIN(const IMC_Unit *unit), ARGMOD(SymReg* r))
 {
     ASSERT_ARGS(analyse_life_symbol)
     unsigned int i;
@@ -735,13 +749,13 @@
     if (r->life_info)
         free_life_info(unit, r);
 
-    r->life_info = mem_allocate_n_zeroed_typed(unit->n_basic_blocks,
+    r->life_info = mem_gc_allocate_n_zeroed_typed(interp, unit->n_basic_blocks,
                                                Life_range *);
 
     /* First we make a pass to each block to gather the information
      * that can be obtained locally */
     for (i = 0; i < unit->n_basic_blocks; i++) {
-        analyse_life_block(unit->bb_list[i], r);
+        analyse_life_block(interp, unit->bb_list[i], r);
     }
 
     /* Now we need to consider the relations between blocks */
@@ -807,7 +821,8 @@
 
 /*
 
-=item C<static void analyse_life_block(const Basic_block* bb, SymReg *r)>
+=item C<static void analyse_life_block(PARROT_INTERP, const Basic_block* bb,
+SymReg *r)>
 
 Studies the state of the var r in the block bb.
 
@@ -819,10 +834,10 @@
 */
 
 static void
-analyse_life_block(ARGIN(const Basic_block* bb), ARGMOD(SymReg *r))
+analyse_life_block(PARROT_INTERP, ARGIN(const Basic_block* bb), ARGMOD(SymReg *r))
 {
     ASSERT_ARGS(analyse_life_block)
-    Life_range  * const l        = make_life_range(r, bb->index);
+    Life_range  * const l        = make_life_range(interp, r, bb->index);
     Instruction         *special = NULL;
     Instruction         *ins;
 
@@ -985,19 +1000,19 @@
     const unsigned int n = unit->n_basic_blocks;
     IMCC_info(interp, 2, "compute_dominators\n");
 
-    unit->idoms          = mem_allocate_n_zeroed_typed(n, int);
-    dominators           = mem_allocate_n_zeroed_typed(n, Set *);
+    unit->idoms          = mem_gc_allocate_n_zeroed_typed(interp, n, int);
+    dominators           = mem_gc_allocate_n_zeroed_typed(interp, n, Set *);
     unit->dominators     = dominators;
 
-    dominators[0]        = set_make(n);
+    dominators[0]        = set_make(interp, n);
     set_add(dominators[0], 0);
 
     for (i = n - 1; i; --i) {
         if (unit->bb_list[i]->pred_list) {
-            dominators[i] = set_make_full(n);
+            dominators[i] = set_make_full(interp, n);
         }
         else {
-            dominators[i] = set_make(n);
+            dominators[i] = set_make(interp, n);
             set_add(dominators[i], i);
         }
     }
@@ -1034,7 +1049,7 @@
 
         /* TODO: This 'for' should be a breadth-first search for speed */
         for (i = 1; i < n; i++) {
-            Set  * const s = set_copy(dominators[i]);
+            Set  * const s = set_copy(interp, dominators[i]);
             Edge *edge;
 
             for (edge = unit->bb_list[i]->pred_list;
@@ -1113,12 +1128,12 @@
 
     const int    n                   = unit->n_basic_blocks;
     Set ** const dominance_frontiers = unit->dominance_frontiers =
-        mem_allocate_n_typed(n, Set *);
+            mem_gc_allocate_n_typed(interp, n, Set *);
 
     IMCC_info(interp, 2, "compute_dominance_frontiers\n");
 
     for (i = 0; i < n; i++) {
-        dominance_frontiers[i] = set_make(n);
+        dominance_frontiers[i] = set_make(interp, n);
     }
 
     /* for all nodes, b */
@@ -1416,7 +1431,7 @@
                 "\tcan't determine loop entry block (%d found)\n" , i);
     }
 
-    loop = set_make(unit->n_basic_blocks);
+    loop = set_make(interp, unit->n_basic_blocks);
     set_add(loop, footer->index);
     set_add(loop, header->index);
 
@@ -1427,7 +1442,7 @@
         search_predecessors_not_in(footer, loop);
     }
 
-    exits = set_make(unit->n_basic_blocks);
+    exits = set_make(interp, unit->n_basic_blocks);
 
     for (i = 1; i < unit->n_basic_blocks; i++) {
         if (set_contains(loop, i)) {
@@ -1443,9 +1458,10 @@
 
     /* now 'loop' contains the set of nodes inside the loop.  */
     n_loops                       = unit->n_loops;
-    loop_info                     = mem_realloc_n_typed(unit->loop_info,
-                                        n_loops + 1, Loop_info *);
-    loop_info[n_loops]            = mem_allocate_typed(Loop_info);
+    loop_info                     = mem_gc_realloc_n_typed(interp,
+                                            unit->loop_info,
+                                            n_loops + 1, Loop_info *);
+    loop_info[n_loops]            = mem_gc_allocate_typed(interp, Loop_info);
     loop_info[n_loops]->loop      = loop;
     loop_info[n_loops]->exits     = exits;
     loop_info[n_loops]->depth     = footer->loop_depth;
@@ -1453,6 +1469,8 @@
     loop_info[n_loops]->header    = header->index;
     loop_info[n_loops]->preheader = natural_preheader(unit, loop_info[n_loops]);
 
+    unit->loop_info = loop_info;
+
     unit->n_loops++;
 }
 
@@ -1518,7 +1536,7 @@
 
 /*
 
-=item C<static void init_basic_blocks(IMC_Unit *unit)>
+=item C<static void init_basic_blocks(PARROT_INTERP, IMC_Unit *unit)>
 
 Initializes the basic blocks memory for this unit.
 
@@ -1527,7 +1545,7 @@
 */
 
 static void
-init_basic_blocks(ARGMOD(IMC_Unit *unit))
+init_basic_blocks(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
 {
     ASSERT_ARGS(init_basic_blocks)
 
@@ -1537,8 +1555,8 @@
     unit->n_basic_blocks = 0;
     unit->edge_list      = NULL;
     unit->bb_list_size   = 256;
-    unit->bb_list        = mem_allocate_n_zeroed_typed(unit->bb_list_size,
-                                                     Basic_block *);
+    unit->bb_list        = mem_gc_allocate_n_zeroed_typed(interp,
+                                    unit->bb_list_size, Basic_block *);
 }
 
 
@@ -1576,7 +1594,8 @@
 
 /*
 
-=item C<static Basic_block* make_basic_block(IMC_Unit *unit, Instruction *ins)>
+=item C<static Basic_block* make_basic_block(PARROT_INTERP, IMC_Unit *unit,
+Instruction *ins)>
 
 Creates, initializes, and returns a new Basic_block.
 
@@ -1587,10 +1606,10 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static Basic_block*
-make_basic_block(ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins))
+make_basic_block(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGMOD(Instruction *ins))
 {
     ASSERT_ARGS(make_basic_block)
-    Basic_block * const bb = mem_allocate_typed(Basic_block);
+    Basic_block * const bb = mem_gc_allocate_typed(interp, Basic_block);
     int                 n  = unit->n_basic_blocks;
 
     bb->start      = ins;
@@ -1605,7 +1624,8 @@
 
     if (n == unit->bb_list_size) {
         unit->bb_list_size *= 2;
-        mem_realloc_n_typed(unit->bb_list, unit->bb_list_size, Basic_block *);
+        unit->bb_list = mem_gc_realloc_n_typed(interp, unit->bb_list,
+                    unit->bb_list_size, Basic_block *);
     }
 
     unit->bb_list[n] = bb;
@@ -1617,7 +1637,7 @@
 
 /*
 
-=item C<Life_range * make_life_range(SymReg *r, int idx)>
+=item C<Life_range * make_life_range(PARROT_INTERP, SymReg *r, int idx)>
 
 Creates and returns a Life_range for the given register at the specified index.
 
@@ -1628,10 +1648,10 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Life_range *
-make_life_range(ARGMOD(SymReg *r), int idx)
+make_life_range(PARROT_INTERP, ARGMOD(SymReg *r), int idx)
 {
     ASSERT_ARGS(make_life_range)
-    Life_range * const l = mem_allocate_zeroed_typed(Life_range);
+    Life_range * const l = mem_gc_allocate_zeroed_typed(interp, Life_range);
     r->life_info[idx]    = l;
 
     return l;

Modified: branches/ops_pct/compilers/imcc/cfg.h
==============================================================================
--- branches/ops_pct/compilers/imcc/cfg.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/cfg.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -100,8 +100,9 @@
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-Life_range * make_life_range(ARGMOD(SymReg *r), int idx)
+Life_range * make_life_range(PARROT_INTERP, ARGMOD(SymReg *r), int idx)
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*r);
 
 PARROT_WARN_UNUSED_RESULT
@@ -147,7 +148,8 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_make_life_range __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(r))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_natural_preheader __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(unit) \
     , PARROT_ASSERT_ARG(loop_info))

Modified: branches/ops_pct/compilers/imcc/imc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/imc.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/imc.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -39,12 +39,14 @@
 
 PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
-static IMC_Unit * imc_new_unit(IMC_Unit_Type t);
+static IMC_Unit * imc_new_unit(PARROT_INTERP, IMC_Unit_Type t)
+        __attribute__nonnull__(1);
 
 #define ASSERT_ARGS_imc_free_unit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit))
-#define ASSERT_ARGS_imc_new_unit __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_imc_new_unit __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 */
 
@@ -145,7 +147,7 @@
     IMCC_INFO(interp)->ghash.data = NULL;
 
     if (IMCC_INFO(interp)->state) {
-        free(IMCC_INFO(interp)->state->file);
+        mem_sys_free(IMCC_INFO(interp)->state->file);
         IMCC_INFO(interp)->state->file = NULL;
     }
 }
@@ -153,7 +155,7 @@
 
 /*
 
-=item C<static IMC_Unit * imc_new_unit(IMC_Unit_Type t)>
+=item C<static IMC_Unit * imc_new_unit(PARROT_INTERP, IMC_Unit_Type t)>
 
 Creates a new IMC_Unit of the given IMC_Unit_Type C<t>.
 
@@ -164,11 +166,11 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
 static IMC_Unit *
-imc_new_unit(IMC_Unit_Type t)
+imc_new_unit(PARROT_INTERP, IMC_Unit_Type t)
 {
     ASSERT_ARGS(imc_new_unit)
-    IMC_Unit * const unit = mem_allocate_zeroed_typed(IMC_Unit);
-    create_symhash(&unit->hash);
+    IMC_Unit * const unit = mem_gc_allocate_zeroed_typed(interp, IMC_Unit);
+    create_symhash(interp, &unit->hash);
     unit->type = t;
     return unit;
 }
@@ -191,14 +193,14 @@
 imc_open_unit(PARROT_INTERP, IMC_Unit_Type t)
 {
     ASSERT_ARGS(imc_open_unit)
-    IMC_Unit   * const unit     = imc_new_unit(t);
+    IMC_Unit   * const unit     = imc_new_unit(interp, t);
     imc_info_t * const imc_info = IMCC_INFO(interp);
 
     if (!imc_info->imc_units)
         imc_info->imc_units = unit;
 
     if (!imc_info->ghash.data)
-        create_symhash(&imc_info->ghash);
+        create_symhash(interp, &imc_info->ghash);
 
     unit->prev = imc_info->last_unit;
 
@@ -278,8 +280,8 @@
     if (unit->instance_of)
         mem_sys_free(unit->instance_of);
 
-    free(unit->hash.data);
-    free(unit);
+    mem_sys_free(unit->hash.data);
+    mem_sys_free(unit);
 }
 
 /*

Modified: branches/ops_pct/compilers/imcc/imcc.l
==============================================================================
--- branches/ops_pct/compilers/imcc/imcc.l	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/imcc.l	Sun Mar  7 19:33:20 2010	(r44743)
@@ -726,7 +726,7 @@
                 "Invalid LABEL outside of macro");
         }
         else {
-            char * const fmt    = "local__%s__%s__$";
+            const char * const fmt    = "local__%s__%s__$";
             const size_t fmtlen = strlen(fmt) - (2 * strlen("%s"));
             const size_t len    = strlen(IMCC_INFO(interp)->cur_macro_name)
                                 + yyleng + fmtlen;
@@ -787,7 +787,7 @@
 static macro_frame_t *
 new_frame(PARROT_INTERP) {
     static int label   = 0;
-    macro_frame_t * const tmp = mem_allocate_zeroed_typed(macro_frame_t);
+    macro_frame_t * const tmp = mem_gc_allocate_zeroed_typed(interp, macro_frame_t);
 
     tmp->label         = ++label;
     tmp->s.line        = IMCC_INFO(interp)->line;
@@ -895,7 +895,7 @@
                         macro_name);
 
         len     += strlen(val.s);
-        current  = (char *)realloc(current, len + 1);
+        current  = (char *)mem_sys_realloc(current, len + 1);
         strcat(current,val.s);
 
         mem_sys_free(val.s);
@@ -963,7 +963,7 @@
         else {
             if (!need_id || c != ' ') {
                 len     += strlen(val.s);
-                current  = (char *)realloc(current, len + 1);
+                current  = (char *)mem_sys_realloc(current, len + 1);
                 strcat(current, val.s);
             }
 
@@ -1019,7 +1019,6 @@
     }
 
     while (c != ENDM) {
-        char *old_s = valp->s;
         int   elem_len;
 
         if (c <= 0) {
@@ -1107,7 +1106,7 @@
         m->expansion = NULL;
     }
     else {
-        m = mem_allocate_zeroed_typed(macro_t);
+        m = mem_gc_allocate_zeroed_typed(interp, macro_t);
 
         if (!IMCC_INFO(interp)->macros)
             IMCC_INFO(interp)->macros = parrot_new_cstring_hash(interp);

Modified: branches/ops_pct/compilers/imcc/imcc.y
==============================================================================
--- branches/ops_pct/compilers/imcc/imcc.y	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/imcc.y	Sun Mar  7 19:33:20 2010	(r44743)
@@ -5,7 +5,7 @@
  * Intermediate Code Compiler for Parrot.
  *
  * Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  *
  * Grammar of the PIR language parser.
  *
@@ -28,7 +28,7 @@
 
 /* prevent declarations of malloc() and free() in the generated parser. */
 #define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
 
 #ifndef YYENABLE_NLS
 #  define YYENABLE_NLS 0
@@ -43,57 +43,62 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void add_pcc_named_arg(
+static void add_pcc_named_arg(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_arg_var(
+static void add_pcc_named_arg_var(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_param(
+static void add_pcc_named_param(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_result(
+static void add_pcc_named_result(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_return(
+static void add_pcc_named_return(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
@@ -177,7 +182,7 @@
 static const char * inv_op(ARGIN(const char *op))
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Instruction * iSUBROUTINE(PARROT_INTERP,
     ARGMOD_NULLOK(IMC_Unit *unit),
@@ -251,23 +256,28 @@
         FUNC_MODIFIES(*name);
 
 #define ASSERT_ARGS_add_pcc_named_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_arg_var __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_param __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_result __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_return __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_adv_named_set __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -532,7 +542,7 @@
     }
 
     r[1]          = rhs;
-    rhs->pmc_type = pmc_type(interp,
+    rhs->pmc_type = Parrot_pmc_get_type_str(interp,
         Parrot_str_new(interp, unquoted_name, name_length));
 
     mem_sys_free(unquoted_name);
@@ -639,7 +649,7 @@
 
 */
 
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Instruction *
 iSUBROUTINE(PARROT_INTERP, ARGMOD_NULLOK(IMC_Unit *unit), ARGMOD(SymReg *r))
@@ -648,7 +658,7 @@
     Instruction * const i = iLABEL(interp, unit, r);
 
     r->type    = (r->type & VT_ENCODED) ? VT_PCC_SUB|VT_ENCODED : VT_PCC_SUB;
-    r->pcc_sub = mem_allocate_zeroed_typed(pcc_sub_t);
+    r->pcc_sub = mem_gc_allocate_zeroed_typed(interp, pcc_sub_t);
 
     IMCC_INFO(interp)->cur_call = r;
     i->line                     = IMCC_INFO(interp)->line;
@@ -899,105 +909,111 @@
 
 /*
 
-=item C<static void add_pcc_named_arg(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_arg(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_arg(ARGMOD(SymReg *cur_call),
+add_pcc_named_arg(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_arg)
     name->type  |= VT_NAMED;
 
-    add_pcc_arg(cur_call, name);
-    add_pcc_arg(cur_call, value);
+    add_pcc_arg(interp, cur_call, name);
+    add_pcc_arg(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_arg_var(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_arg_var(PARROT_INTERP, SymReg *cur_call,
+SymReg *name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_arg_var(ARGMOD(SymReg *cur_call),
-    ARGMOD(SymReg *name), ARGMOD(SymReg *value))
+add_pcc_named_arg_var(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
+        ARGMOD(SymReg *name),
+        ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_arg_var)
     name->type |= VT_NAMED;
-    add_pcc_arg(cur_call, name);
-    add_pcc_arg(cur_call, value);
+    add_pcc_arg(interp, cur_call, name);
+    add_pcc_arg(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_result(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_result(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_result(ARGMOD(SymReg *cur_call),
+add_pcc_named_result(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_result)
     name->type         |= VT_NAMED;
 
-    add_pcc_result(cur_call, name);
-    add_pcc_result(cur_call, value);
+    add_pcc_result(interp, cur_call, name);
+    add_pcc_result(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_param(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_param(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_param(ARGMOD(SymReg *cur_call),
+add_pcc_named_param(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_param)
     name->type         |= VT_NAMED;
 
-    add_pcc_arg(cur_call, name);
-    add_pcc_arg(cur_call, value);
+    add_pcc_arg(interp, cur_call, name);
+    add_pcc_arg(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_return(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_return(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_return(ARGMOD(SymReg *cur_call),
+add_pcc_named_return(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_return)
     name->type         |= VT_NAMED;
 
-    add_pcc_result(cur_call, name);
-    add_pcc_result(cur_call, value);
+    add_pcc_result(interp, cur_call, name);
+    add_pcc_result(interp, cur_call, value);
 }
 
 /*
@@ -1387,12 +1403,12 @@
    | sub_params sub_param '\n'
          {
            if (IMCC_INFO(interp)->adv_named_id) {
-                 add_pcc_named_param(IMCC_INFO(interp)->cur_call,
+                 add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
                                      IMCC_INFO(interp)->adv_named_id, $2);
                  IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_arg(IMCC_INFO(interp)->cur_call, $2);
+               add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, $2);
          }
    ;
 
@@ -1406,7 +1422,7 @@
            if ($3 & VT_UNIQUE_REG)
                $$ = mk_ident_ur(interp, $2, $1);
            else if ($3 & VT_OPT_FLAG && $1 != 'I') {
-               char *type;
+               const char *type;
                switch ($1) {
                     case 'N': type = "num";     break;
                     case 'S': type = "string";  break;
@@ -1516,17 +1532,17 @@
 multi_types:
      /* empty */
          {
-           add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
+           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
          }
    | multi_types COMMA multi_type
          {
            $$ = 0;
-           add_pcc_multi(IMCC_INFO(interp)->cur_call, $3);
+           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, $3);
          }
    | multi_type
          {
            $$ = 0;
-           add_pcc_multi(IMCC_INFO(interp)->cur_call, $1);
+           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, $1);
          }
    ;
 
@@ -1673,7 +1689,7 @@
 
 pcc_args:
      /* empty */               { $$ = 0; }
-   | pcc_args pcc_arg '\n'     { add_pcc_arg(IMCC_INFO(interp)->cur_call, $2); }
+   | pcc_args pcc_arg '\n'     { add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, $2); }
    ;
 
 pcc_arg:
@@ -1686,7 +1702,7 @@
    | pcc_results pcc_result '\n'
          {
            if ($2)
-               add_pcc_result(IMCC_INFO(interp)->cur_call, $2);
+               add_pcc_result(interp, IMCC_INFO(interp)->cur_call, $2);
          }
    ;
 
@@ -1745,12 +1761,12 @@
    | pcc_returns '\n'
          {
            if ($1)
-               add_pcc_result(IMCC_INFO(interp)->sr_return, $1);
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, $1);
          }
    | pcc_returns pcc_return '\n'
          {
            if ($2)
-               add_pcc_result(IMCC_INFO(interp)->sr_return, $2);
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, $2);
          }
    ;
 
@@ -1759,12 +1775,12 @@
    | pcc_yields '\n'
          {
            if ($1)
-               add_pcc_result(IMCC_INFO(interp)->sr_return, $1);
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, $1);
          }
    | pcc_yields pcc_set_yield '\n'
          {
            if ($2)
-               add_pcc_result(IMCC_INFO(interp)->sr_return, $2);
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, $2);
          }
    ;
 
@@ -1799,32 +1815,32 @@
    | arg
          {
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_return(IMCC_INFO(interp)->sr_return,
+               add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
                                     IMCC_INFO(interp)->adv_named_id, $1);
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_result(IMCC_INFO(interp)->sr_return, $1);
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, $1);
          }
    | STRINGC ADV_ARROW var
          {
             SymReg * const name = mk_const(interp, $1, 'S');
-            add_pcc_named_return(IMCC_INFO(interp)->sr_return, name, $3);
+            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, $3);
          }
    | var_returns COMMA arg
          {
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_return(IMCC_INFO(interp)->sr_return,
+               add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
                                     IMCC_INFO(interp)->adv_named_id, $3);
                IMCC_INFO(interp)->adv_named_id = NULL;
              }
              else
-                 add_pcc_result(IMCC_INFO(interp)->sr_return, $3);
+                 add_pcc_result(interp, IMCC_INFO(interp)->sr_return, $3);
          }
    | var_returns COMMA STRINGC ADV_ARROW var
          {
            SymReg * const name = mk_const(interp, $3, 'S');
-           add_pcc_named_return(IMCC_INFO(interp)->sr_return, name, $5);
+           add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, $5);
          }
    ;
 
@@ -1908,7 +1924,7 @@
 id_list_id :
      IDENTIFIER opt_unique_reg
          {
-           IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
+           IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList);
            l->id           = $1;
            l->unique_reg   = $2;
            $$ = l;
@@ -2026,7 +2042,7 @@
          {
            /* there'd normally be a mem_sys_strdup() here, but the lexer already
             * copied the string, so it's safe to use directly */
-           if ((IMCC_INFO(interp)->cur_pmc_type = pmc_type(interp,
+           if ((IMCC_INFO(interp)->cur_pmc_type = Parrot_pmc_get_type_str(interp,
                Parrot_str_new(interp, $1, 0))) <= 0) {
                IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "Unknown PMC type '%s'\n", $1);
@@ -2053,7 +2069,7 @@
      /* Subroutine call the short way */
    | target  '=' sub_call
          {
-           add_pcc_result($3->symregs[0], $1);
+           add_pcc_result(interp, $3->symregs[0], $1);
            IMCC_INFO(interp)->cur_call = NULL;
            $$ = 0;
          }
@@ -2209,38 +2225,38 @@
          {
            $$ = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_arg(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $3);
+               add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $3);
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_arg(IMCC_INFO(interp)->cur_call, $3);
+               add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, $3);
          }
    | arg
          {
            $$ = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_arg(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $1);
+               add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $1);
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_arg(IMCC_INFO(interp)->cur_call, $1);
+               add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, $1);
          }
    | arglist COMMA STRINGC ADV_ARROW var
          {
            $$ = 0;
-           add_pcc_named_arg(IMCC_INFO(interp)->cur_call,
+           add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
                 mk_const(interp, $3, 'S'), $5);
            mem_sys_free($3);
          }
    | var ADV_ARROW var
          {
            $$ = 0;
-           add_pcc_named_arg_var(IMCC_INFO(interp)->cur_call, $1, $3);
+           add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, $1, $3);
          }
    | STRINGC ADV_ARROW var
          {
            $$ = 0;
-           add_pcc_named_arg(IMCC_INFO(interp)->cur_call,
+           add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
                 mk_const(interp, $1, 'S'), $3);
            mem_sys_free($1);
          }
@@ -2274,31 +2290,31 @@
          {
            $$ = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_result(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $3);
+               add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $3);
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_result(IMCC_INFO(interp)->cur_call, $3);
+               add_pcc_result(interp, IMCC_INFO(interp)->cur_call, $3);
          }
    | targetlist COMMA STRINGC ADV_ARROW target
          {
-            add_pcc_named_result(IMCC_INFO(interp)->cur_call,
-            mk_const(interp, $3, 'S'), $5);
+            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
+                    mk_const(interp, $3, 'S'), $5);
             mem_sys_free($3);
          }
    | result
          {
            $$ = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_result(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $1);
+               add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, $1);
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_result(IMCC_INFO(interp)->cur_call, $1);
+               add_pcc_result(interp, IMCC_INFO(interp)->cur_call, $1);
          }
    | STRINGC ADV_ARROW target
          {
-           add_pcc_named_result(IMCC_INFO(interp)->cur_call, mk_const(interp, $1, 'S'), $3);
+           add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, $1, 'S'), $3);
            mem_sys_free($1);
          }
    | /* empty */                { $$ = 0; }

Modified: branches/ops_pct/compilers/imcc/imclexer.c
==============================================================================
--- branches/ops_pct/compilers/imcc/imclexer.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/imclexer.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -3909,7 +3909,7 @@
                 "Invalid LABEL outside of macro");
         }
         else {
-            char * const fmt    = "local__%s__%s__$";
+            const char * const fmt    = "local__%s__%s__$";
             const size_t fmtlen = strlen(fmt) - (2 * strlen("%s"));
             const size_t len    = strlen(IMCC_INFO(interp)->cur_macro_name)
                                 + yyleng + fmtlen;
@@ -5209,7 +5209,7 @@
 static macro_frame_t *
 new_frame(PARROT_INTERP) {
     static int label   = 0;
-    macro_frame_t * const tmp = mem_allocate_zeroed_typed(macro_frame_t);
+    macro_frame_t * const tmp = mem_gc_allocate_zeroed_typed(interp, macro_frame_t);
 
     tmp->label         = ++label;
     tmp->s.line        = IMCC_INFO(interp)->line;
@@ -5317,7 +5317,7 @@
                         macro_name);
 
         len     += strlen(val.s);
-        current  = (char *)realloc(current, len + 1);
+        current  = (char *)mem_sys_realloc(current, len + 1);
         strcat(current,val.s);
 
         mem_sys_free(val.s);
@@ -5385,7 +5385,7 @@
         else {
             if (!need_id || c != ' ') {
                 len     += strlen(val.s);
-                current  = (char *)realloc(current, len + 1);
+                current  = (char *)mem_sys_realloc(current, len + 1);
                 strcat(current, val.s);
             }
 
@@ -5441,7 +5441,6 @@
     }
 
     while (c != ENDM) {
-        char *old_s = valp->s;
         int   elem_len;
 
         if (c <= 0) {
@@ -5529,7 +5528,7 @@
         m->expansion = NULL;
     }
     else {
-        m = mem_allocate_zeroed_typed(macro_t);
+        m = mem_gc_allocate_zeroed_typed(interp, macro_t);
 
         if (!IMCC_INFO(interp)->macros)
             IMCC_INFO(interp)->macros = parrot_new_cstring_hash(interp);

Modified: branches/ops_pct/compilers/imcc/imcparser.c
==============================================================================
--- branches/ops_pct/compilers/imcc/imcparser.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/imcparser.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -87,7 +87,7 @@
  * Intermediate Code Compiler for Parrot.
  *
  * Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  *
  * Grammar of the PIR language parser.
  *
@@ -110,7 +110,7 @@
 
 /* prevent declarations of malloc() and free() in the generated parser. */
 #define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
 
 #ifndef YYENABLE_NLS
 #  define YYENABLE_NLS 0
@@ -125,57 +125,62 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void add_pcc_named_arg(
+static void add_pcc_named_arg(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_arg_var(
+static void add_pcc_named_arg_var(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_param(
+static void add_pcc_named_param(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_result(
+static void add_pcc_named_result(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
 
-static void add_pcc_named_return(
+static void add_pcc_named_return(PARROT_INTERP,
     ARGMOD(SymReg *cur_call),
     ARGMOD(SymReg *name),
     ARGMOD(SymReg *value))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         __attribute__nonnull__(3)
+        __attribute__nonnull__(4)
         FUNC_MODIFIES(*cur_call)
         FUNC_MODIFIES(*name)
         FUNC_MODIFIES(*value);
@@ -259,7 +264,7 @@
 static const char * inv_op(ARGIN(const char *op))
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Instruction * iSUBROUTINE(PARROT_INTERP,
     ARGMOD_NULLOK(IMC_Unit *unit),
@@ -333,23 +338,28 @@
         FUNC_MODIFIES(*name);
 
 #define ASSERT_ARGS_add_pcc_named_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_arg_var __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_param __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_result __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_add_pcc_named_return __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(cur_call) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(cur_call) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(value))
 #define ASSERT_ARGS_adv_named_set __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -614,7 +624,7 @@
     }
 
     r[1]          = rhs;
-    rhs->pmc_type = pmc_type(interp,
+    rhs->pmc_type = Parrot_pmc_get_type_str(interp,
         Parrot_str_new(interp, unquoted_name, name_length));
 
     mem_sys_free(unquoted_name);
@@ -721,7 +731,7 @@
 
 */
 
-PARROT_WARN_UNUSED_RESULT
+PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 static Instruction *
 iSUBROUTINE(PARROT_INTERP, ARGMOD_NULLOK(IMC_Unit *unit), ARGMOD(SymReg *r))
@@ -730,7 +740,7 @@
     Instruction * const i = iLABEL(interp, unit, r);
 
     r->type    = (r->type & VT_ENCODED) ? VT_PCC_SUB|VT_ENCODED : VT_PCC_SUB;
-    r->pcc_sub = mem_allocate_zeroed_typed(pcc_sub_t);
+    r->pcc_sub = mem_gc_allocate_zeroed_typed(interp, pcc_sub_t);
 
     IMCC_INFO(interp)->cur_call = r;
     i->line                     = IMCC_INFO(interp)->line;
@@ -981,105 +991,111 @@
 
 /*
 
-=item C<static void add_pcc_named_arg(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_arg(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_arg(ARGMOD(SymReg *cur_call),
+add_pcc_named_arg(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_arg)
     name->type  |= VT_NAMED;
 
-    add_pcc_arg(cur_call, name);
-    add_pcc_arg(cur_call, value);
+    add_pcc_arg(interp, cur_call, name);
+    add_pcc_arg(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_arg_var(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_arg_var(PARROT_INTERP, SymReg *cur_call,
+SymReg *name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_arg_var(ARGMOD(SymReg *cur_call),
-    ARGMOD(SymReg *name), ARGMOD(SymReg *value))
+add_pcc_named_arg_var(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
+        ARGMOD(SymReg *name),
+        ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_arg_var)
     name->type |= VT_NAMED;
-    add_pcc_arg(cur_call, name);
-    add_pcc_arg(cur_call, value);
+    add_pcc_arg(interp, cur_call, name);
+    add_pcc_arg(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_result(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_result(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_result(ARGMOD(SymReg *cur_call),
+add_pcc_named_result(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_result)
     name->type         |= VT_NAMED;
 
-    add_pcc_result(cur_call, name);
-    add_pcc_result(cur_call, value);
+    add_pcc_result(interp, cur_call, name);
+    add_pcc_result(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_param(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_param(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_param(ARGMOD(SymReg *cur_call),
+add_pcc_named_param(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_param)
     name->type         |= VT_NAMED;
 
-    add_pcc_arg(cur_call, name);
-    add_pcc_arg(cur_call, value);
+    add_pcc_arg(interp, cur_call, name);
+    add_pcc_arg(interp, cur_call, value);
 }
 
 /*
 
-=item C<static void add_pcc_named_return(SymReg *cur_call, SymReg *name, SymReg
-*value)>
+=item C<static void add_pcc_named_return(PARROT_INTERP, SymReg *cur_call, SymReg
+*name, SymReg *value)>
 
 =cut
 
 */
 
 static void
-add_pcc_named_return(ARGMOD(SymReg *cur_call),
+add_pcc_named_return(PARROT_INTERP,
+        ARGMOD(SymReg *cur_call),
         ARGMOD(SymReg *name),
         ARGMOD(SymReg *value))
 {
     ASSERT_ARGS(add_pcc_named_return)
     name->type         |= VT_NAMED;
 
-    add_pcc_result(cur_call, name);
-    add_pcc_result(cur_call, value);
+    add_pcc_result(interp, cur_call, name);
+    add_pcc_result(interp, cur_call, value);
 }
 
 /*
@@ -1139,7 +1155,7 @@
 
 
 /* Line 189 of yacc.c  */
-#line 1132 "compilers/imcc/imcparser.c"
+#line 1148 "compilers/imcc/imcparser.c"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -1416,7 +1432,7 @@
 {
 
 /* Line 214 of yacc.c  */
-#line 1059 "compilers/imcc/imcc.y"
+#line 1075 "compilers/imcc/imcc.y"
 
     IdList * idlist;
     int t;
@@ -1427,7 +1443,7 @@
 
 
 /* Line 214 of yacc.c  */
-#line 1420 "compilers/imcc/imcparser.c"
+#line 1436 "compilers/imcc/imcparser.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -1439,7 +1455,7 @@
 
 
 /* Line 264 of yacc.c  */
-#line 1432 "compilers/imcc/imcparser.c"
+#line 1448 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1860,40 +1876,40 @@
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1154,  1154,  1158,  1159,  1163,  1164,  1165,  1171,  1177,
-    1178,  1179,  1180,  1184,  1185,  1194,  1200,  1208,  1220,  1233,
-    1233,  1242,  1242,  1249,  1249,  1258,  1259,  1263,  1264,  1268,
-    1269,  1270,  1271,  1272,  1273,  1274,  1277,  1277,  1286,  1285,
-    1298,  1302,  1315,  1319,  1323,  1323,  1335,  1337,  1341,  1356,
-    1360,  1365,  1369,  1373,  1364,  1385,  1386,  1387,  1400,  1400,
-    1404,  1430,  1434,  1440,  1449,  1455,  1464,  1470,  1479,  1485,
-    1494,  1502,  1507,  1518,  1521,  1526,  1534,  1535,  1536,  1537,
-    1538,  1549,  1560,  1563,  1565,  1570,  1569,  1602,  1603,  1607,
-    1608,  1612,  1613,  1617,  1618,  1622,  1623,  1624,  1625,  1626,
-    1627,  1628,  1629,  1630,  1631,  1632,  1633,  1634,  1635,  1639,
-    1644,  1648,  1653,  1657,  1661,  1666,  1675,  1676,  1680,  1685,
-    1686,  1694,  1695,  1695,  1710,  1711,  1715,  1716,  1717,  1718,
-    1719,  1720,  1721,  1722,  1727,  1727,  1730,  1738,  1738,  1744,
-    1745,  1750,  1758,  1759,  1764,  1772,  1776,  1781,  1780,  1793,
-    1794,  1798,  1799,  1809,  1814,  1824,  1833,  1834,  1846,  1850,
-    1852,  1853,  1854,  1855,  1856,  1860,  1861,  1865,  1866,  1870,
-    1881,  1882,  1893,  1900,  1909,  1919,  1920,  1925,  1926,  1927,
-    1927,  1943,  1960,  1973,  1973,  1980,  1981,  1981,  1987,  1993,
-    1997,  2009,  2010,  2011,  2012,  2013,  2014,  2018,  2019,  2020,
-    2021,  2025,  2038,  2040,  2042,  2044,  2046,  2051,  2054,  2061,
-    2060,  2069,  2070,  2071,  2072,  2080,  2081,  2082,  2086,  2087,
-    2088,  2089,  2090,  2091,  2092,  2093,  2094,  2095,  2096,  2097,
-    2098,  2099,  2100,  2101,  2102,  2103,  2104,  2105,  2106,  2107,
-    2108,  2114,  2113,  2125,  2130,  2131,  2132,  2133,  2134,  2135,
-    2136,  2137,  2138,  2139,  2140,  2141,  2142,  2147,  2158,  2159,
-    2160,  2161,  2167,  2181,  2187,  2193,  2199,  2198,  2207,  2208,
-    2218,  2228,  2235,  2240,  2250,  2254,  2255,  2259,  2260,  2261,
-    2264,  2265,  2269,  2273,  2283,  2289,  2299,  2304,  2308,  2309,
-    2313,  2317,  2321,  2328,  2332,  2336,  2343,  2344,  2348,  2349,
-    2350,  2351,  2352,  2353,  2357,  2358,  2362,  2363,  2367,  2368,
-    2372,  2373,  2380,  2387,  2388,  2389,  2393,  2394,  2398,  2399,
-    2403,  2404,  2408,  2409,  2413,  2413,  2425,  2425,  2437,  2438,
-    2446,  2453,  2454,  2455,  2456,  2457,  2461,  2462,  2463,  2464
+       0,  1170,  1170,  1174,  1175,  1179,  1180,  1181,  1187,  1193,
+    1194,  1195,  1196,  1200,  1201,  1210,  1216,  1224,  1236,  1249,
+    1249,  1258,  1258,  1265,  1265,  1274,  1275,  1279,  1280,  1284,
+    1285,  1286,  1287,  1288,  1289,  1290,  1293,  1293,  1302,  1301,
+    1314,  1318,  1331,  1335,  1339,  1339,  1351,  1353,  1357,  1372,
+    1376,  1381,  1385,  1389,  1380,  1401,  1402,  1403,  1416,  1416,
+    1420,  1446,  1450,  1456,  1465,  1471,  1480,  1486,  1495,  1501,
+    1510,  1518,  1523,  1534,  1537,  1542,  1550,  1551,  1552,  1553,
+    1554,  1565,  1576,  1579,  1581,  1586,  1585,  1618,  1619,  1623,
+    1624,  1628,  1629,  1633,  1634,  1638,  1639,  1640,  1641,  1642,
+    1643,  1644,  1645,  1646,  1647,  1648,  1649,  1650,  1651,  1655,
+    1660,  1664,  1669,  1673,  1677,  1682,  1691,  1692,  1696,  1701,
+    1702,  1710,  1711,  1711,  1726,  1727,  1731,  1732,  1733,  1734,
+    1735,  1736,  1737,  1738,  1743,  1743,  1746,  1754,  1754,  1760,
+    1761,  1766,  1774,  1775,  1780,  1788,  1792,  1797,  1796,  1809,
+    1810,  1814,  1815,  1825,  1830,  1840,  1849,  1850,  1862,  1866,
+    1868,  1869,  1870,  1871,  1872,  1876,  1877,  1881,  1882,  1886,
+    1897,  1898,  1909,  1916,  1925,  1935,  1936,  1941,  1942,  1943,
+    1943,  1959,  1976,  1989,  1989,  1996,  1997,  1997,  2003,  2009,
+    2013,  2025,  2026,  2027,  2028,  2029,  2030,  2034,  2035,  2036,
+    2037,  2041,  2054,  2056,  2058,  2060,  2062,  2067,  2070,  2077,
+    2076,  2085,  2086,  2087,  2088,  2096,  2097,  2098,  2102,  2103,
+    2104,  2105,  2106,  2107,  2108,  2109,  2110,  2111,  2112,  2113,
+    2114,  2115,  2116,  2117,  2118,  2119,  2120,  2121,  2122,  2123,
+    2124,  2130,  2129,  2141,  2146,  2147,  2148,  2149,  2150,  2151,
+    2152,  2153,  2154,  2155,  2156,  2157,  2158,  2163,  2174,  2175,
+    2176,  2177,  2183,  2197,  2203,  2209,  2215,  2214,  2223,  2224,
+    2234,  2244,  2251,  2256,  2266,  2270,  2271,  2275,  2276,  2277,
+    2280,  2281,  2285,  2289,  2299,  2305,  2315,  2320,  2324,  2325,
+    2329,  2333,  2337,  2344,  2348,  2352,  2359,  2360,  2364,  2365,
+    2366,  2367,  2368,  2369,  2373,  2374,  2378,  2379,  2383,  2384,
+    2388,  2389,  2396,  2403,  2404,  2405,  2409,  2410,  2414,  2415,
+    2419,  2420,  2424,  2425,  2429,  2429,  2441,  2441,  2453,  2454,
+    2462,  2469,  2470,  2471,  2472,  2473,  2477,  2478,  2479,  2480
 };
 #endif
 
@@ -3240,28 +3256,28 @@
         case 2:
 
 /* Line 1455 of yacc.c  */
-#line 1154 "compilers/imcc/imcc.y"
+#line 1170 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
 
 /* Line 1455 of yacc.c  */
-#line 1163 "compilers/imcc/imcc.y"
+#line 1179 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
 
 /* Line 1455 of yacc.c  */
-#line 1164 "compilers/imcc/imcc.y"
+#line 1180 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
 
 /* Line 1455 of yacc.c  */
-#line 1166 "compilers/imcc/imcc.y"
+#line 1182 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3272,7 +3288,7 @@
   case 8:
 
 /* Line 1455 of yacc.c  */
-#line 1172 "compilers/imcc/imcc.y"
+#line 1188 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3283,42 +3299,42 @@
   case 9:
 
 /* Line 1455 of yacc.c  */
-#line 1177 "compilers/imcc/imcc.y"
+#line 1193 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
 
 /* Line 1455 of yacc.c  */
-#line 1178 "compilers/imcc/imcc.y"
+#line 1194 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
 
 /* Line 1455 of yacc.c  */
-#line 1179 "compilers/imcc/imcc.y"
+#line 1195 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
 
 /* Line 1455 of yacc.c  */
-#line 1180 "compilers/imcc/imcc.y"
+#line 1196 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
 
 /* Line 1455 of yacc.c  */
-#line 1184 "compilers/imcc/imcc.y"
+#line 1200 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
 
 /* Line 1455 of yacc.c  */
-#line 1186 "compilers/imcc/imcc.y"
+#line 1202 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3329,7 +3345,7 @@
   case 15:
 
 /* Line 1455 of yacc.c  */
-#line 1195 "compilers/imcc/imcc.y"
+#line 1211 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
            /* set_filename() frees the STRINGC */
@@ -3340,7 +3356,7 @@
   case 16:
 
 /* Line 1455 of yacc.c  */
-#line 1201 "compilers/imcc/imcc.y"
+#line 1217 "compilers/imcc/imcc.y"
     {
            /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
@@ -3350,7 +3366,7 @@
   case 17:
 
 /* Line 1455 of yacc.c  */
-#line 1209 "compilers/imcc/imcc.y"
+#line 1225 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3363,7 +3379,7 @@
   case 18:
 
 /* Line 1455 of yacc.c  */
-#line 1221 "compilers/imcc/imcc.y"
+#line 1237 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             Parrot_pcc_set_HLL(interp, CURRENT_CONTEXT(interp),
@@ -3378,14 +3394,14 @@
   case 19:
 
 /* Line 1455 of yacc.c  */
-#line 1233 "compilers/imcc/imcc.y"
+#line 1249 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 20:
 
 /* Line 1455 of yacc.c  */
-#line 1234 "compilers/imcc/imcc.y"
+#line 1250 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3396,14 +3412,14 @@
   case 21:
 
 /* Line 1455 of yacc.c  */
-#line 1242 "compilers/imcc/imcc.y"
+#line 1258 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 22:
 
 /* Line 1455 of yacc.c  */
-#line 1243 "compilers/imcc/imcc.y"
+#line 1259 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(6) - (6)].s));
@@ -3414,14 +3430,14 @@
   case 23:
 
 /* Line 1455 of yacc.c  */
-#line 1249 "compilers/imcc/imcc.y"
+#line 1265 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 24:
 
 /* Line 1455 of yacc.c  */
-#line 1250 "compilers/imcc/imcc.y"
+#line 1266 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
            mem_sys_free((yyvsp[(3) - (6)].s));
@@ -3433,49 +3449,49 @@
   case 29:
 
 /* Line 1455 of yacc.c  */
-#line 1268 "compilers/imcc/imcc.y"
+#line 1284 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 30:
 
 /* Line 1455 of yacc.c  */
-#line 1269 "compilers/imcc/imcc.y"
+#line 1285 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
 
 /* Line 1455 of yacc.c  */
-#line 1270 "compilers/imcc/imcc.y"
+#line 1286 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
 
 /* Line 1455 of yacc.c  */
-#line 1271 "compilers/imcc/imcc.y"
+#line 1287 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
 
 /* Line 1455 of yacc.c  */
-#line 1272 "compilers/imcc/imcc.y"
+#line 1288 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
 
 /* Line 1455 of yacc.c  */
-#line 1277 "compilers/imcc/imcc.y"
+#line 1293 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 37:
 
 /* Line 1455 of yacc.c  */
-#line 1279 "compilers/imcc/imcc.y"
+#line 1295 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3487,7 +3503,7 @@
   case 38:
 
 /* Line 1455 of yacc.c  */
-#line 1286 "compilers/imcc/imcc.y"
+#line 1302 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3497,7 +3513,7 @@
   case 39:
 
 /* Line 1455 of yacc.c  */
-#line 1291 "compilers/imcc/imcc.y"
+#line 1307 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3510,7 +3526,7 @@
   case 40:
 
 /* Line 1455 of yacc.c  */
-#line 1299 "compilers/imcc/imcc.y"
+#line 1315 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
@@ -3519,7 +3535,7 @@
   case 41:
 
 /* Line 1455 of yacc.c  */
-#line 1303 "compilers/imcc/imcc.y"
+#line 1319 "compilers/imcc/imcc.y"
     {
            char   *name = mem_sys_strdup((yyvsp[(2) - (4)].s) + 1);
            SymReg *r    = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
@@ -3537,21 +3553,21 @@
   case 42:
 
 /* Line 1455 of yacc.c  */
-#line 1315 "compilers/imcc/imcc.y"
+#line 1331 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 44:
 
 /* Line 1455 of yacc.c  */
-#line 1323 "compilers/imcc/imcc.y"
+#line 1339 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
 
 /* Line 1455 of yacc.c  */
-#line 1326 "compilers/imcc/imcc.y"
+#line 1342 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3564,7 +3580,7 @@
   case 48:
 
 /* Line 1455 of yacc.c  */
-#line 1342 "compilers/imcc/imcc.y"
+#line 1358 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3581,7 +3597,7 @@
   case 49:
 
 /* Line 1455 of yacc.c  */
-#line 1357 "compilers/imcc/imcc.y"
+#line 1373 "compilers/imcc/imcc.y"
     {
             (yyval.sr) = (yyvsp[(2) - (3)].sr);
         }
@@ -3590,14 +3606,14 @@
   case 50:
 
 /* Line 1455 of yacc.c  */
-#line 1360 "compilers/imcc/imcc.y"
+#line 1376 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 51:
 
 /* Line 1455 of yacc.c  */
-#line 1365 "compilers/imcc/imcc.y"
+#line 1381 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
@@ -3606,7 +3622,7 @@
   case 52:
 
 /* Line 1455 of yacc.c  */
-#line 1369 "compilers/imcc/imcc.y"
+#line 1385 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
@@ -3615,7 +3631,7 @@
   case 53:
 
 /* Line 1455 of yacc.c  */
-#line 1373 "compilers/imcc/imcc.y"
+#line 1389 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
           if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3628,62 +3644,62 @@
   case 54:
 
 /* Line 1455 of yacc.c  */
-#line 1381 "compilers/imcc/imcc.y"
+#line 1397 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 55:
 
 /* Line 1455 of yacc.c  */
-#line 1385 "compilers/imcc/imcc.y"
+#line 1401 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 56:
 
 /* Line 1455 of yacc.c  */
-#line 1386 "compilers/imcc/imcc.y"
+#line 1402 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 57:
 
 /* Line 1455 of yacc.c  */
-#line 1388 "compilers/imcc/imcc.y"
+#line 1404 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
-                 add_pcc_named_param(IMCC_INFO(interp)->cur_call,
+                 add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
                                      IMCC_INFO(interp)->adv_named_id, (yyvsp[(2) - (3)].sr));
                  IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
+               add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 58:
 
 /* Line 1455 of yacc.c  */
-#line 1400 "compilers/imcc/imcc.y"
+#line 1416 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 59:
 
 /* Line 1455 of yacc.c  */
-#line 1400 "compilers/imcc/imcc.y"
+#line 1416 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; }
     break;
 
   case 60:
 
 /* Line 1455 of yacc.c  */
-#line 1405 "compilers/imcc/imcc.y"
+#line 1421 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_UNIQUE_REG)
                (yyval.sr) = mk_ident_ur(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
            else if ((yyvsp[(3) - (3)].t) & VT_OPT_FLAG && (yyvsp[(1) - (3)].t) != 'I') {
-               char *type;
+               const char *type;
                switch ((yyvsp[(1) - (3)].t)) {
                     case 'N': type = "num";     break;
                     case 'S': type = "string";  break;
@@ -3704,14 +3720,14 @@
   case 61:
 
 /* Line 1455 of yacc.c  */
-#line 1430 "compilers/imcc/imcc.y"
+#line 1446 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 62:
 
 /* Line 1455 of yacc.c  */
-#line 1435 "compilers/imcc/imcc.y"
+#line 1451 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3722,7 +3738,7 @@
   case 63:
 
 /* Line 1455 of yacc.c  */
-#line 1441 "compilers/imcc/imcc.y"
+#line 1457 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3733,7 +3749,7 @@
   case 64:
 
 /* Line 1455 of yacc.c  */
-#line 1450 "compilers/imcc/imcc.y"
+#line 1466 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
@@ -3744,7 +3760,7 @@
   case 65:
 
 /* Line 1455 of yacc.c  */
-#line 1456 "compilers/imcc/imcc.y"
+#line 1472 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
            IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
@@ -3755,7 +3771,7 @@
   case 66:
 
 /* Line 1455 of yacc.c  */
-#line 1465 "compilers/imcc/imcc.y"
+#line 1481 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
@@ -3766,7 +3782,7 @@
   case 67:
 
 /* Line 1455 of yacc.c  */
-#line 1471 "compilers/imcc/imcc.y"
+#line 1487 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
@@ -3777,7 +3793,7 @@
   case 68:
 
 /* Line 1455 of yacc.c  */
-#line 1480 "compilers/imcc/imcc.y"
+#line 1496 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
@@ -3788,7 +3804,7 @@
   case 69:
 
 /* Line 1455 of yacc.c  */
-#line 1486 "compilers/imcc/imcc.y"
+#line 1502 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3799,7 +3815,7 @@
   case 70:
 
 /* Line 1455 of yacc.c  */
-#line 1495 "compilers/imcc/imcc.y"
+#line 1511 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3809,7 +3825,7 @@
   case 71:
 
 /* Line 1455 of yacc.c  */
-#line 1503 "compilers/imcc/imcc.y"
+#line 1519 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3819,7 +3835,7 @@
   case 72:
 
 /* Line 1455 of yacc.c  */
-#line 1508 "compilers/imcc/imcc.y"
+#line 1524 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3831,64 +3847,64 @@
   case 73:
 
 /* Line 1455 of yacc.c  */
-#line 1518 "compilers/imcc/imcc.y"
+#line 1534 "compilers/imcc/imcc.y"
     {
-           add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
+           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
   case 74:
 
 /* Line 1455 of yacc.c  */
-#line 1522 "compilers/imcc/imcc.y"
+#line 1538 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
-           add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
+           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 75:
 
 /* Line 1455 of yacc.c  */
-#line 1527 "compilers/imcc/imcc.y"
+#line 1543 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
-           add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
+           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
          }
     break;
 
   case 76:
 
 /* Line 1455 of yacc.c  */
-#line 1534 "compilers/imcc/imcc.y"
+#line 1550 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 77:
 
 /* Line 1455 of yacc.c  */
-#line 1535 "compilers/imcc/imcc.y"
+#line 1551 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 78:
 
 /* Line 1455 of yacc.c  */
-#line 1536 "compilers/imcc/imcc.y"
+#line 1552 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 79:
 
 /* Line 1455 of yacc.c  */
-#line 1537 "compilers/imcc/imcc.y"
+#line 1553 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 80:
 
 /* Line 1455 of yacc.c  */
-#line 1539 "compilers/imcc/imcc.y"
+#line 1555 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3904,7 +3920,7 @@
   case 81:
 
 /* Line 1455 of yacc.c  */
-#line 1550 "compilers/imcc/imcc.y"
+#line 1566 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3920,14 +3936,14 @@
   case 82:
 
 /* Line 1455 of yacc.c  */
-#line 1560 "compilers/imcc/imcc.y"
+#line 1576 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 85:
 
 /* Line 1455 of yacc.c  */
-#line 1570 "compilers/imcc/imcc.y"
+#line 1586 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3956,112 +3972,112 @@
   case 86:
 
 /* Line 1455 of yacc.c  */
-#line 1598 "compilers/imcc/imcc.y"
+#line 1614 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 87:
 
 /* Line 1455 of yacc.c  */
-#line 1602 "compilers/imcc/imcc.y"
+#line 1618 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 88:
 
 /* Line 1455 of yacc.c  */
-#line 1603 "compilers/imcc/imcc.y"
+#line 1619 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 89:
 
 /* Line 1455 of yacc.c  */
-#line 1607 "compilers/imcc/imcc.y"
+#line 1623 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 90:
 
 /* Line 1455 of yacc.c  */
-#line 1608 "compilers/imcc/imcc.y"
+#line 1624 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 91:
 
 /* Line 1455 of yacc.c  */
-#line 1612 "compilers/imcc/imcc.y"
+#line 1628 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 93:
 
 /* Line 1455 of yacc.c  */
-#line 1617 "compilers/imcc/imcc.y"
+#line 1633 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 94:
 
 /* Line 1455 of yacc.c  */
-#line 1618 "compilers/imcc/imcc.y"
+#line 1634 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 95:
 
 /* Line 1455 of yacc.c  */
-#line 1622 "compilers/imcc/imcc.y"
+#line 1638 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 96:
 
 /* Line 1455 of yacc.c  */
-#line 1623 "compilers/imcc/imcc.y"
+#line 1639 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 97:
 
 /* Line 1455 of yacc.c  */
-#line 1624 "compilers/imcc/imcc.y"
+#line 1640 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 98:
 
 /* Line 1455 of yacc.c  */
-#line 1625 "compilers/imcc/imcc.y"
+#line 1641 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 99:
 
 /* Line 1455 of yacc.c  */
-#line 1626 "compilers/imcc/imcc.y"
+#line 1642 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 100:
 
 /* Line 1455 of yacc.c  */
-#line 1627 "compilers/imcc/imcc.y"
+#line 1643 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 101:
 
 /* Line 1455 of yacc.c  */
-#line 1628 "compilers/imcc/imcc.y"
+#line 1644 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 109:
 
 /* Line 1455 of yacc.c  */
-#line 1640 "compilers/imcc/imcc.y"
+#line 1656 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -4071,7 +4087,7 @@
   case 110:
 
 /* Line 1455 of yacc.c  */
-#line 1645 "compilers/imcc/imcc.y"
+#line 1661 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4080,7 +4096,7 @@
   case 111:
 
 /* Line 1455 of yacc.c  */
-#line 1649 "compilers/imcc/imcc.y"
+#line 1665 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
@@ -4090,7 +4106,7 @@
   case 112:
 
 /* Line 1455 of yacc.c  */
-#line 1654 "compilers/imcc/imcc.y"
+#line 1670 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
@@ -4099,7 +4115,7 @@
   case 113:
 
 /* Line 1455 of yacc.c  */
-#line 1658 "compilers/imcc/imcc.y"
+#line 1674 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
@@ -4108,7 +4124,7 @@
   case 114:
 
 /* Line 1455 of yacc.c  */
-#line 1662 "compilers/imcc/imcc.y"
+#line 1678 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -4118,7 +4134,7 @@
   case 115:
 
 /* Line 1455 of yacc.c  */
-#line 1667 "compilers/imcc/imcc.y"
+#line 1683 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -4128,59 +4144,59 @@
   case 116:
 
 /* Line 1455 of yacc.c  */
-#line 1675 "compilers/imcc/imcc.y"
+#line 1691 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 117:
 
 /* Line 1455 of yacc.c  */
-#line 1676 "compilers/imcc/imcc.y"
-    { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
+#line 1692 "compilers/imcc/imcc.y"
+    { add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
   case 118:
 
 /* Line 1455 of yacc.c  */
-#line 1680 "compilers/imcc/imcc.y"
+#line 1696 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 119:
 
 /* Line 1455 of yacc.c  */
-#line 1685 "compilers/imcc/imcc.y"
+#line 1701 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 120:
 
 /* Line 1455 of yacc.c  */
-#line 1687 "compilers/imcc/imcc.y"
+#line 1703 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
-               add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 121:
 
 /* Line 1455 of yacc.c  */
-#line 1694 "compilers/imcc/imcc.y"
+#line 1710 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 122:
 
 /* Line 1455 of yacc.c  */
-#line 1695 "compilers/imcc/imcc.y"
+#line 1711 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 123:
 
 /* Line 1455 of yacc.c  */
-#line 1696 "compilers/imcc/imcc.y"
+#line 1712 "compilers/imcc/imcc.y"
     {
            IdList * const l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -4197,91 +4213,91 @@
   case 124:
 
 /* Line 1455 of yacc.c  */
-#line 1710 "compilers/imcc/imcc.y"
+#line 1726 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 125:
 
 /* Line 1455 of yacc.c  */
-#line 1711 "compilers/imcc/imcc.y"
+#line 1727 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 126:
 
 /* Line 1455 of yacc.c  */
-#line 1715 "compilers/imcc/imcc.y"
+#line 1731 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 127:
 
 /* Line 1455 of yacc.c  */
-#line 1716 "compilers/imcc/imcc.y"
+#line 1732 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 128:
 
 /* Line 1455 of yacc.c  */
-#line 1717 "compilers/imcc/imcc.y"
+#line 1733 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 129:
 
 /* Line 1455 of yacc.c  */
-#line 1718 "compilers/imcc/imcc.y"
+#line 1734 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 130:
 
 /* Line 1455 of yacc.c  */
-#line 1719 "compilers/imcc/imcc.y"
+#line 1735 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 131:
 
 /* Line 1455 of yacc.c  */
-#line 1720 "compilers/imcc/imcc.y"
+#line 1736 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; mem_sys_free((yyvsp[(3) - (4)].s)); }
     break;
 
   case 132:
 
 /* Line 1455 of yacc.c  */
-#line 1721 "compilers/imcc/imcc.y"
+#line 1737 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
   case 133:
 
 /* Line 1455 of yacc.c  */
-#line 1722 "compilers/imcc/imcc.y"
+#line 1738 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 134:
 
 /* Line 1455 of yacc.c  */
-#line 1727 "compilers/imcc/imcc.y"
+#line 1743 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 135:
 
 /* Line 1455 of yacc.c  */
-#line 1729 "compilers/imcc/imcc.y"
+#line 1745 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 136:
 
 /* Line 1455 of yacc.c  */
-#line 1731 "compilers/imcc/imcc.y"
+#line 1747 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
@@ -4291,89 +4307,89 @@
   case 137:
 
 /* Line 1455 of yacc.c  */
-#line 1738 "compilers/imcc/imcc.y"
+#line 1754 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 138:
 
 /* Line 1455 of yacc.c  */
-#line 1740 "compilers/imcc/imcc.y"
+#line 1756 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 139:
 
 /* Line 1455 of yacc.c  */
-#line 1744 "compilers/imcc/imcc.y"
+#line 1760 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 140:
 
 /* Line 1455 of yacc.c  */
-#line 1746 "compilers/imcc/imcc.y"
+#line 1762 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
-               add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
   case 141:
 
 /* Line 1455 of yacc.c  */
-#line 1751 "compilers/imcc/imcc.y"
+#line 1767 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
-               add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 142:
 
 /* Line 1455 of yacc.c  */
-#line 1758 "compilers/imcc/imcc.y"
+#line 1774 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 143:
 
 /* Line 1455 of yacc.c  */
-#line 1760 "compilers/imcc/imcc.y"
+#line 1776 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
-               add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
          }
     break;
 
   case 144:
 
 /* Line 1455 of yacc.c  */
-#line 1765 "compilers/imcc/imcc.y"
+#line 1781 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
-               add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 145:
 
 /* Line 1455 of yacc.c  */
-#line 1772 "compilers/imcc/imcc.y"
+#line 1788 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 146:
 
 /* Line 1455 of yacc.c  */
-#line 1776 "compilers/imcc/imcc.y"
+#line 1792 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 147:
 
 /* Line 1455 of yacc.c  */
-#line 1781 "compilers/imcc/imcc.y"
+#line 1797 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -4383,7 +4399,7 @@
   case 148:
 
 /* Line 1455 of yacc.c  */
-#line 1786 "compilers/imcc/imcc.y"
+#line 1802 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
@@ -4393,134 +4409,134 @@
   case 149:
 
 /* Line 1455 of yacc.c  */
-#line 1793 "compilers/imcc/imcc.y"
+#line 1809 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 150:
 
 /* Line 1455 of yacc.c  */
-#line 1794 "compilers/imcc/imcc.y"
+#line 1810 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 151:
 
 /* Line 1455 of yacc.c  */
-#line 1798 "compilers/imcc/imcc.y"
+#line 1814 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 152:
 
 /* Line 1455 of yacc.c  */
-#line 1800 "compilers/imcc/imcc.y"
+#line 1816 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_return(IMCC_INFO(interp)->sr_return,
+               add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
                                     IMCC_INFO(interp)->adv_named_id, (yyvsp[(1) - (1)].sr));
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (1)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (1)].sr));
          }
     break;
 
   case 153:
 
 /* Line 1455 of yacc.c  */
-#line 1810 "compilers/imcc/imcc.y"
+#line 1826 "compilers/imcc/imcc.y"
     {
             SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
-            add_pcc_named_return(IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
+            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 154:
 
 /* Line 1455 of yacc.c  */
-#line 1815 "compilers/imcc/imcc.y"
+#line 1831 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_return(IMCC_INFO(interp)->sr_return,
+               add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
                                     IMCC_INFO(interp)->adv_named_id, (yyvsp[(3) - (3)].sr));
                IMCC_INFO(interp)->adv_named_id = NULL;
              }
              else
-                 add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (3)].sr));
+                 add_pcc_result(interp, IMCC_INFO(interp)->sr_return, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 155:
 
 /* Line 1455 of yacc.c  */
-#line 1825 "compilers/imcc/imcc.y"
+#line 1841 "compilers/imcc/imcc.y"
     {
            SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
-           add_pcc_named_return(IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
+           add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
          }
     break;
 
   case 158:
 
 /* Line 1455 of yacc.c  */
-#line 1846 "compilers/imcc/imcc.y"
+#line 1862 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 159:
 
 /* Line 1455 of yacc.c  */
-#line 1851 "compilers/imcc/imcc.y"
+#line 1867 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 160:
 
 /* Line 1455 of yacc.c  */
-#line 1852 "compilers/imcc/imcc.y"
+#line 1868 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
 
 /* Line 1455 of yacc.c  */
-#line 1853 "compilers/imcc/imcc.y"
+#line 1869 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 162:
 
 /* Line 1455 of yacc.c  */
-#line 1854 "compilers/imcc/imcc.y"
+#line 1870 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 163:
 
 /* Line 1455 of yacc.c  */
-#line 1855 "compilers/imcc/imcc.y"
+#line 1871 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 164:
 
 /* Line 1455 of yacc.c  */
-#line 1856 "compilers/imcc/imcc.y"
+#line 1872 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 165:
 
 /* Line 1455 of yacc.c  */
-#line 1860 "compilers/imcc/imcc.y"
+#line 1876 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 169:
 
 /* Line 1455 of yacc.c  */
-#line 1871 "compilers/imcc/imcc.y"
+#line 1887 "compilers/imcc/imcc.y"
     {
              Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
              mem_sys_free((yyvsp[(1) - (1)].s));
@@ -4531,14 +4547,14 @@
   case 170:
 
 /* Line 1455 of yacc.c  */
-#line 1881 "compilers/imcc/imcc.y"
+#line 1897 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 171:
 
 /* Line 1455 of yacc.c  */
-#line 1883 "compilers/imcc/imcc.y"
+#line 1899 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4551,7 +4567,7 @@
   case 172:
 
 /* Line 1455 of yacc.c  */
-#line 1894 "compilers/imcc/imcc.y"
+#line 1910 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -4562,7 +4578,7 @@
   case 173:
 
 /* Line 1455 of yacc.c  */
-#line 1901 "compilers/imcc/imcc.y"
+#line 1917 "compilers/imcc/imcc.y"
     {
            IdList* const l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -4573,9 +4589,9 @@
   case 174:
 
 /* Line 1455 of yacc.c  */
-#line 1910 "compilers/imcc/imcc.y"
+#line 1926 "compilers/imcc/imcc.y"
     {
-           IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
+           IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
            l->unique_reg   = (yyvsp[(2) - (2)].t);
            (yyval.idlist) = l;
@@ -4585,28 +4601,28 @@
   case 175:
 
 /* Line 1455 of yacc.c  */
-#line 1919 "compilers/imcc/imcc.y"
+#line 1935 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 176:
 
 /* Line 1455 of yacc.c  */
-#line 1920 "compilers/imcc/imcc.y"
+#line 1936 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 179:
 
 /* Line 1455 of yacc.c  */
-#line 1927 "compilers/imcc/imcc.y"
+#line 1943 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 180:
 
 /* Line 1455 of yacc.c  */
-#line 1928 "compilers/imcc/imcc.y"
+#line 1944 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4627,7 +4643,7 @@
   case 181:
 
 /* Line 1455 of yacc.c  */
-#line 1944 "compilers/imcc/imcc.y"
+#line 1960 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4649,7 +4665,7 @@
   case 182:
 
 /* Line 1455 of yacc.c  */
-#line 1961 "compilers/imcc/imcc.y"
+#line 1977 "compilers/imcc/imcc.y"
     {
             if ((yyvsp[(4) - (4)].sr)->set != 'P') {
                 mem_sys_free((yyvsp[(2) - (4)].s));
@@ -4667,14 +4683,14 @@
   case 183:
 
 /* Line 1455 of yacc.c  */
-#line 1973 "compilers/imcc/imcc.y"
+#line 1989 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 184:
 
 /* Line 1455 of yacc.c  */
-#line 1974 "compilers/imcc/imcc.y"
+#line 1990 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            IMCC_INFO(interp)->is_def = 0;
@@ -4685,14 +4701,14 @@
   case 186:
 
 /* Line 1455 of yacc.c  */
-#line 1981 "compilers/imcc/imcc.y"
+#line 1997 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->is_def = 1; }
     break;
 
   case 187:
 
 /* Line 1455 of yacc.c  */
-#line 1982 "compilers/imcc/imcc.y"
+#line 1998 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            IMCC_INFO(interp)->is_def = 0;
@@ -4703,7 +4719,7 @@
   case 188:
 
 /* Line 1455 of yacc.c  */
-#line 1988 "compilers/imcc/imcc.y"
+#line 2004 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4714,7 +4730,7 @@
   case 189:
 
 /* Line 1455 of yacc.c  */
-#line 1994 "compilers/imcc/imcc.y"
+#line 2010 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
          }
@@ -4723,7 +4739,7 @@
   case 190:
 
 /* Line 1455 of yacc.c  */
-#line 1998 "compilers/imcc/imcc.y"
+#line 2014 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4740,67 +4756,67 @@
   case 191:
 
 /* Line 1455 of yacc.c  */
-#line 2009 "compilers/imcc/imcc.y"
+#line 2025 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 192:
 
 /* Line 1455 of yacc.c  */
-#line 2010 "compilers/imcc/imcc.y"
+#line 2026 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 193:
 
 /* Line 1455 of yacc.c  */
-#line 2011 "compilers/imcc/imcc.y"
+#line 2027 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 196:
 
 /* Line 1455 of yacc.c  */
-#line 2014 "compilers/imcc/imcc.y"
+#line 2030 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 197:
 
 /* Line 1455 of yacc.c  */
-#line 2018 "compilers/imcc/imcc.y"
+#line 2034 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 198:
 
 /* Line 1455 of yacc.c  */
-#line 2019 "compilers/imcc/imcc.y"
+#line 2035 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 199:
 
 /* Line 1455 of yacc.c  */
-#line 2020 "compilers/imcc/imcc.y"
+#line 2036 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 200:
 
 /* Line 1455 of yacc.c  */
-#line 2021 "compilers/imcc/imcc.y"
+#line 2037 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 201:
 
 /* Line 1455 of yacc.c  */
-#line 2026 "compilers/imcc/imcc.y"
+#line 2042 "compilers/imcc/imcc.y"
     {
            /* there'd normally be a mem_sys_strdup() here, but the lexer already
             * copied the string, so it's safe to use directly */
-           if ((IMCC_INFO(interp)->cur_pmc_type = pmc_type(interp,
+           if ((IMCC_INFO(interp)->cur_pmc_type = Parrot_pmc_get_type_str(interp,
                Parrot_str_new(interp, (yyvsp[(1) - (1)].s), 0))) <= 0) {
                IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "Unknown PMC type '%s'\n", (yyvsp[(1) - (1)].s));
@@ -4811,51 +4827,51 @@
   case 202:
 
 /* Line 1455 of yacc.c  */
-#line 2039 "compilers/imcc/imcc.y"
+#line 2055 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
   case 203:
 
 /* Line 1455 of yacc.c  */
-#line 2041 "compilers/imcc/imcc.y"
+#line 2057 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
   case 204:
 
 /* Line 1455 of yacc.c  */
-#line 2043 "compilers/imcc/imcc.y"
+#line 2059 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); }
     break;
 
   case 205:
 
 /* Line 1455 of yacc.c  */
-#line 2045 "compilers/imcc/imcc.y"
+#line 2061 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
   case 206:
 
 /* Line 1455 of yacc.c  */
-#line 2047 "compilers/imcc/imcc.y"
+#line 2063 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 207:
 
 /* Line 1455 of yacc.c  */
-#line 2052 "compilers/imcc/imcc.y"
+#line 2068 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
     break;
 
   case 208:
 
 /* Line 1455 of yacc.c  */
-#line 2055 "compilers/imcc/imcc.y"
+#line 2071 "compilers/imcc/imcc.y"
     {
-           add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
+           add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
            (yyval.i) = 0;
          }
@@ -4864,7 +4880,7 @@
   case 209:
 
 /* Line 1455 of yacc.c  */
-#line 2061 "compilers/imcc/imcc.y"
+#line 2077 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
@@ -4873,7 +4889,7 @@
   case 210:
 
 /* Line 1455 of yacc.c  */
-#line 2065 "compilers/imcc/imcc.y"
+#line 2081 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4883,7 +4899,7 @@
   case 214:
 
 /* Line 1455 of yacc.c  */
-#line 2073 "compilers/imcc/imcc.y"
+#line 2089 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
@@ -4892,189 +4908,189 @@
   case 215:
 
 /* Line 1455 of yacc.c  */
-#line 2080 "compilers/imcc/imcc.y"
+#line 2096 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 216:
 
 /* Line 1455 of yacc.c  */
-#line 2081 "compilers/imcc/imcc.y"
+#line 2097 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 217:
 
 /* Line 1455 of yacc.c  */
-#line 2082 "compilers/imcc/imcc.y"
+#line 2098 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 218:
 
 /* Line 1455 of yacc.c  */
-#line 2086 "compilers/imcc/imcc.y"
+#line 2102 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 219:
 
 /* Line 1455 of yacc.c  */
-#line 2087 "compilers/imcc/imcc.y"
+#line 2103 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 220:
 
 /* Line 1455 of yacc.c  */
-#line 2088 "compilers/imcc/imcc.y"
+#line 2104 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 221:
 
 /* Line 1455 of yacc.c  */
-#line 2089 "compilers/imcc/imcc.y"
+#line 2105 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 222:
 
 /* Line 1455 of yacc.c  */
-#line 2090 "compilers/imcc/imcc.y"
+#line 2106 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 223:
 
 /* Line 1455 of yacc.c  */
-#line 2091 "compilers/imcc/imcc.y"
+#line 2107 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 224:
 
 /* Line 1455 of yacc.c  */
-#line 2092 "compilers/imcc/imcc.y"
+#line 2108 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 225:
 
 /* Line 1455 of yacc.c  */
-#line 2093 "compilers/imcc/imcc.y"
+#line 2109 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 226:
 
 /* Line 1455 of yacc.c  */
-#line 2094 "compilers/imcc/imcc.y"
+#line 2110 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 227:
 
 /* Line 1455 of yacc.c  */
-#line 2095 "compilers/imcc/imcc.y"
+#line 2111 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 228:
 
 /* Line 1455 of yacc.c  */
-#line 2096 "compilers/imcc/imcc.y"
+#line 2112 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 229:
 
 /* Line 1455 of yacc.c  */
-#line 2097 "compilers/imcc/imcc.y"
+#line 2113 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 230:
 
 /* Line 1455 of yacc.c  */
-#line 2098 "compilers/imcc/imcc.y"
+#line 2114 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 231:
 
 /* Line 1455 of yacc.c  */
-#line 2099 "compilers/imcc/imcc.y"
+#line 2115 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 232:
 
 /* Line 1455 of yacc.c  */
-#line 2100 "compilers/imcc/imcc.y"
+#line 2116 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 233:
 
 /* Line 1455 of yacc.c  */
-#line 2101 "compilers/imcc/imcc.y"
+#line 2117 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 234:
 
 /* Line 1455 of yacc.c  */
-#line 2102 "compilers/imcc/imcc.y"
+#line 2118 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 235:
 
 /* Line 1455 of yacc.c  */
-#line 2103 "compilers/imcc/imcc.y"
+#line 2119 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 236:
 
 /* Line 1455 of yacc.c  */
-#line 2104 "compilers/imcc/imcc.y"
+#line 2120 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 237:
 
 /* Line 1455 of yacc.c  */
-#line 2105 "compilers/imcc/imcc.y"
+#line 2121 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 238:
 
 /* Line 1455 of yacc.c  */
-#line 2106 "compilers/imcc/imcc.y"
+#line 2122 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 239:
 
 /* Line 1455 of yacc.c  */
-#line 2107 "compilers/imcc/imcc.y"
+#line 2123 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 240:
 
 /* Line 1455 of yacc.c  */
-#line 2108 "compilers/imcc/imcc.y"
+#line 2124 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 241:
 
 /* Line 1455 of yacc.c  */
-#line 2114 "compilers/imcc/imcc.y"
+#line 2130 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -5085,112 +5101,112 @@
   case 242:
 
 /* Line 1455 of yacc.c  */
-#line 2119 "compilers/imcc/imcc.y"
+#line 2135 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 243:
 
 /* Line 1455 of yacc.c  */
-#line 2126 "compilers/imcc/imcc.y"
+#line 2142 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); }
     break;
 
   case 244:
 
 /* Line 1455 of yacc.c  */
-#line 2130 "compilers/imcc/imcc.y"
+#line 2146 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 245:
 
 /* Line 1455 of yacc.c  */
-#line 2131 "compilers/imcc/imcc.y"
+#line 2147 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 246:
 
 /* Line 1455 of yacc.c  */
-#line 2132 "compilers/imcc/imcc.y"
+#line 2148 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 247:
 
 /* Line 1455 of yacc.c  */
-#line 2133 "compilers/imcc/imcc.y"
+#line 2149 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 248:
 
 /* Line 1455 of yacc.c  */
-#line 2134 "compilers/imcc/imcc.y"
+#line 2150 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 249:
 
 /* Line 1455 of yacc.c  */
-#line 2135 "compilers/imcc/imcc.y"
+#line 2151 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 250:
 
 /* Line 1455 of yacc.c  */
-#line 2136 "compilers/imcc/imcc.y"
+#line 2152 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 251:
 
 /* Line 1455 of yacc.c  */
-#line 2137 "compilers/imcc/imcc.y"
+#line 2153 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 252:
 
 /* Line 1455 of yacc.c  */
-#line 2138 "compilers/imcc/imcc.y"
+#line 2154 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 253:
 
 /* Line 1455 of yacc.c  */
-#line 2139 "compilers/imcc/imcc.y"
+#line 2155 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 254:
 
 /* Line 1455 of yacc.c  */
-#line 2140 "compilers/imcc/imcc.y"
+#line 2156 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 255:
 
 /* Line 1455 of yacc.c  */
-#line 2141 "compilers/imcc/imcc.y"
+#line 2157 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 256:
 
 /* Line 1455 of yacc.c  */
-#line 2142 "compilers/imcc/imcc.y"
+#line 2158 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 257:
 
 /* Line 1455 of yacc.c  */
-#line 2148 "compilers/imcc/imcc.y"
+#line 2164 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -5203,28 +5219,28 @@
   case 258:
 
 /* Line 1455 of yacc.c  */
-#line 2158 "compilers/imcc/imcc.y"
+#line 2174 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 259:
 
 /* Line 1455 of yacc.c  */
-#line 2159 "compilers/imcc/imcc.y"
+#line 2175 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 260:
 
 /* Line 1455 of yacc.c  */
-#line 2160 "compilers/imcc/imcc.y"
+#line 2176 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 261:
 
 /* Line 1455 of yacc.c  */
-#line 2162 "compilers/imcc/imcc.y"
+#line 2178 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -5235,7 +5251,7 @@
   case 262:
 
 /* Line 1455 of yacc.c  */
-#line 2168 "compilers/imcc/imcc.y"
+#line 2184 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             const char * const name = (yyvsp[(3) - (3)].sr)->name;
@@ -5254,7 +5270,7 @@
   case 263:
 
 /* Line 1455 of yacc.c  */
-#line 2182 "compilers/imcc/imcc.y"
+#line 2198 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
@@ -5265,7 +5281,7 @@
   case 264:
 
 /* Line 1455 of yacc.c  */
-#line 2188 "compilers/imcc/imcc.y"
+#line 2204 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
             (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
@@ -5276,14 +5292,14 @@
   case 265:
 
 /* Line 1455 of yacc.c  */
-#line 2193 "compilers/imcc/imcc.y"
+#line 2209 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
     break;
 
   case 266:
 
 /* Line 1455 of yacc.c  */
-#line 2199 "compilers/imcc/imcc.y"
+#line 2215 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
@@ -5293,54 +5309,54 @@
   case 267:
 
 /* Line 1455 of yacc.c  */
-#line 2203 "compilers/imcc/imcc.y"
+#line 2219 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
   case 268:
 
 /* Line 1455 of yacc.c  */
-#line 2207 "compilers/imcc/imcc.y"
+#line 2223 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 269:
 
 /* Line 1455 of yacc.c  */
-#line 2209 "compilers/imcc/imcc.y"
+#line 2225 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_arg(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(3) - (3)].sr));
+               add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(3) - (3)].sr));
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
+               add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 270:
 
 /* Line 1455 of yacc.c  */
-#line 2219 "compilers/imcc/imcc.y"
+#line 2235 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_arg(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(1) - (1)].sr));
+               add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(1) - (1)].sr));
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
+               add_pcc_arg(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
          }
     break;
 
   case 271:
 
 /* Line 1455 of yacc.c  */
-#line 2229 "compilers/imcc/imcc.y"
+#line 2245 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
-           add_pcc_named_arg(IMCC_INFO(interp)->cur_call,
+           add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
                 mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
            mem_sys_free((yyvsp[(3) - (5)].s));
          }
@@ -5349,20 +5365,20 @@
   case 272:
 
 /* Line 1455 of yacc.c  */
-#line 2236 "compilers/imcc/imcc.y"
+#line 2252 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
-           add_pcc_named_arg_var(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
+           add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 273:
 
 /* Line 1455 of yacc.c  */
-#line 2241 "compilers/imcc/imcc.y"
+#line 2257 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
-           add_pcc_named_arg(IMCC_INFO(interp)->cur_call,
+           add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
                 mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
@@ -5371,88 +5387,88 @@
   case 274:
 
 /* Line 1455 of yacc.c  */
-#line 2250 "compilers/imcc/imcc.y"
+#line 2266 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 275:
 
 /* Line 1455 of yacc.c  */
-#line 2254 "compilers/imcc/imcc.y"
+#line 2270 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 276:
 
 /* Line 1455 of yacc.c  */
-#line 2255 "compilers/imcc/imcc.y"
+#line 2271 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 277:
 
 /* Line 1455 of yacc.c  */
-#line 2259 "compilers/imcc/imcc.y"
+#line 2275 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;     }
     break;
 
   case 278:
 
 /* Line 1455 of yacc.c  */
-#line 2260 "compilers/imcc/imcc.y"
+#line 2276 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED;    }
     break;
 
   case 279:
 
 /* Line 1455 of yacc.c  */
-#line 2261 "compilers/imcc/imcc.y"
+#line 2277 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_CALL_SIG; }
     break;
 
   case 280:
 
 /* Line 1455 of yacc.c  */
-#line 2264 "compilers/imcc/imcc.y"
+#line 2280 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 281:
 
 /* Line 1455 of yacc.c  */
-#line 2265 "compilers/imcc/imcc.y"
+#line 2281 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 282:
 
 /* Line 1455 of yacc.c  */
-#line 2269 "compilers/imcc/imcc.y"
+#line 2285 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
   case 283:
 
 /* Line 1455 of yacc.c  */
-#line 2274 "compilers/imcc/imcc.y"
+#line 2290 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_result(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(3) - (3)].sr));
+               add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(3) - (3)].sr));
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 284:
 
 /* Line 1455 of yacc.c  */
-#line 2284 "compilers/imcc/imcc.y"
+#line 2300 "compilers/imcc/imcc.y"
     {
-            add_pcc_named_result(IMCC_INFO(interp)->cur_call,
-            mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
+            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
+                    mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
             mem_sys_free((yyvsp[(3) - (5)].s));
          }
     break;
@@ -5460,24 +5476,24 @@
   case 285:
 
 /* Line 1455 of yacc.c  */
-#line 2290 "compilers/imcc/imcc.y"
+#line 2306 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
-               add_pcc_named_result(IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(1) - (1)].sr));
+               add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, IMCC_INFO(interp)->adv_named_id, (yyvsp[(1) - (1)].sr));
                IMCC_INFO(interp)->adv_named_id = NULL;
            }
            else
-               add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
+               add_pcc_result(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
          }
     break;
 
   case 286:
 
 /* Line 1455 of yacc.c  */
-#line 2300 "compilers/imcc/imcc.y"
+#line 2316 "compilers/imcc/imcc.y"
     {
-           add_pcc_named_result(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
+           add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
@@ -5485,28 +5501,28 @@
   case 287:
 
 /* Line 1455 of yacc.c  */
-#line 2304 "compilers/imcc/imcc.y"
+#line 2320 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 288:
 
 /* Line 1455 of yacc.c  */
-#line 2308 "compilers/imcc/imcc.y"
+#line 2324 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 289:
 
 /* Line 1455 of yacc.c  */
-#line 2309 "compilers/imcc/imcc.y"
+#line 2325 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 290:
 
 /* Line 1455 of yacc.c  */
-#line 2314 "compilers/imcc/imcc.y"
+#line 2330 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
@@ -5515,7 +5531,7 @@
   case 291:
 
 /* Line 1455 of yacc.c  */
-#line 2318 "compilers/imcc/imcc.y"
+#line 2334 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
@@ -5524,7 +5540,7 @@
   case 292:
 
 /* Line 1455 of yacc.c  */
-#line 2322 "compilers/imcc/imcc.y"
+#line 2338 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
@@ -5533,7 +5549,7 @@
   case 293:
 
 /* Line 1455 of yacc.c  */
-#line 2329 "compilers/imcc/imcc.y"
+#line 2345 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
@@ -5542,7 +5558,7 @@
   case 294:
 
 /* Line 1455 of yacc.c  */
-#line 2333 "compilers/imcc/imcc.y"
+#line 2349 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
@@ -5551,7 +5567,7 @@
   case 295:
 
 /* Line 1455 of yacc.c  */
-#line 2337 "compilers/imcc/imcc.y"
+#line 2353 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
@@ -5560,91 +5576,91 @@
   case 296:
 
 /* Line 1455 of yacc.c  */
-#line 2343 "compilers/imcc/imcc.y"
+#line 2359 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 297:
 
 /* Line 1455 of yacc.c  */
-#line 2344 "compilers/imcc/imcc.y"
+#line 2360 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 298:
 
 /* Line 1455 of yacc.c  */
-#line 2348 "compilers/imcc/imcc.y"
+#line 2364 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
   case 299:
 
 /* Line 1455 of yacc.c  */
-#line 2349 "compilers/imcc/imcc.y"
+#line 2365 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
   case 300:
 
 /* Line 1455 of yacc.c  */
-#line 2350 "compilers/imcc/imcc.y"
+#line 2366 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
   case 301:
 
 /* Line 1455 of yacc.c  */
-#line 2351 "compilers/imcc/imcc.y"
+#line 2367 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
   case 302:
 
 /* Line 1455 of yacc.c  */
-#line 2352 "compilers/imcc/imcc.y"
+#line 2368 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
   case 303:
 
 /* Line 1455 of yacc.c  */
-#line 2353 "compilers/imcc/imcc.y"
+#line 2369 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
   case 306:
 
 /* Line 1455 of yacc.c  */
-#line 2362 "compilers/imcc/imcc.y"
+#line 2378 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 307:
 
 /* Line 1455 of yacc.c  */
-#line 2363 "compilers/imcc/imcc.y"
+#line 2379 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 308:
 
 /* Line 1455 of yacc.c  */
-#line 2367 "compilers/imcc/imcc.y"
+#line 2383 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
   case 310:
 
 /* Line 1455 of yacc.c  */
-#line 2372 "compilers/imcc/imcc.y"
+#line 2388 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 311:
 
 /* Line 1455 of yacc.c  */
-#line 2374 "compilers/imcc/imcc.y"
+#line 2390 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5656,7 +5672,7 @@
   case 312:
 
 /* Line 1455 of yacc.c  */
-#line 2381 "compilers/imcc/imcc.y"
+#line 2397 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
@@ -5666,49 +5682,49 @@
   case 314:
 
 /* Line 1455 of yacc.c  */
-#line 2388 "compilers/imcc/imcc.y"
+#line 2404 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 315:
 
 /* Line 1455 of yacc.c  */
-#line 2389 "compilers/imcc/imcc.y"
+#line 2405 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 316:
 
 /* Line 1455 of yacc.c  */
-#line 2393 "compilers/imcc/imcc.y"
+#line 2409 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 317:
 
 /* Line 1455 of yacc.c  */
-#line 2394 "compilers/imcc/imcc.y"
+#line 2410 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 318:
 
 /* Line 1455 of yacc.c  */
-#line 2398 "compilers/imcc/imcc.y"
+#line 2414 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 319:
 
 /* Line 1455 of yacc.c  */
-#line 2399 "compilers/imcc/imcc.y"
+#line 2415 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 324:
 
 /* Line 1455 of yacc.c  */
-#line 2413 "compilers/imcc/imcc.y"
+#line 2429 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
          }
@@ -5717,7 +5733,7 @@
   case 325:
 
 /* Line 1455 of yacc.c  */
-#line 2417 "compilers/imcc/imcc.y"
+#line 2433 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5728,7 +5744,7 @@
   case 326:
 
 /* Line 1455 of yacc.c  */
-#line 2425 "compilers/imcc/imcc.y"
+#line 2441 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
          }
@@ -5737,7 +5753,7 @@
   case 327:
 
 /* Line 1455 of yacc.c  */
-#line 2429 "compilers/imcc/imcc.y"
+#line 2445 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5748,14 +5764,14 @@
   case 328:
 
 /* Line 1455 of yacc.c  */
-#line 2437 "compilers/imcc/imcc.y"
+#line 2453 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
   case 329:
 
 /* Line 1455 of yacc.c  */
-#line 2439 "compilers/imcc/imcc.y"
+#line 2455 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
@@ -5765,7 +5781,7 @@
   case 330:
 
 /* Line 1455 of yacc.c  */
-#line 2447 "compilers/imcc/imcc.y"
+#line 2463 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
          }
@@ -5774,70 +5790,70 @@
   case 331:
 
 /* Line 1455 of yacc.c  */
-#line 2453 "compilers/imcc/imcc.y"
+#line 2469 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
   case 332:
 
 /* Line 1455 of yacc.c  */
-#line 2454 "compilers/imcc/imcc.y"
+#line 2470 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
   case 333:
 
 /* Line 1455 of yacc.c  */
-#line 2455 "compilers/imcc/imcc.y"
+#line 2471 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
   case 334:
 
 /* Line 1455 of yacc.c  */
-#line 2456 "compilers/imcc/imcc.y"
+#line 2472 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
   case 335:
 
 /* Line 1455 of yacc.c  */
-#line 2457 "compilers/imcc/imcc.y"
+#line 2473 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 336:
 
 /* Line 1455 of yacc.c  */
-#line 2461 "compilers/imcc/imcc.y"
+#line 2477 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 337:
 
 /* Line 1455 of yacc.c  */
-#line 2462 "compilers/imcc/imcc.y"
+#line 2478 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 338:
 
 /* Line 1455 of yacc.c  */
-#line 2463 "compilers/imcc/imcc.y"
+#line 2479 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 339:
 
 /* Line 1455 of yacc.c  */
-#line 2464 "compilers/imcc/imcc.y"
+#line 2480 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 
 /* Line 1455 of yacc.c  */
-#line 5830 "compilers/imcc/imcparser.c"
+#line 5846 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -6049,7 +6065,7 @@
 
 
 /* Line 1675 of yacc.c  */
-#line 2470 "compilers/imcc/imcc.y"
+#line 2486 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: branches/ops_pct/compilers/imcc/imcparser.h
==============================================================================
--- branches/ops_pct/compilers/imcc/imcparser.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/imcparser.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -300,7 +300,7 @@
 {
 
 /* Line 1676 of yacc.c  */
-#line 1059 "compilers/imcc/imcc.y"
+#line 1075 "compilers/imcc/imcc.y"
 
     IdList * idlist;
     int t;

Modified: branches/ops_pct/compilers/imcc/instructions.c
==============================================================================
--- branches/ops_pct/compilers/imcc/instructions.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/instructions.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  */
 
 #include <stdlib.h>
@@ -50,7 +50,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(4);
 
-static int e_file_open(PARROT_INTERP, ARGIN(void *param))
+static int e_file_open(PARROT_INTERP, ARGIN(const char *param))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -149,7 +149,7 @@
     if (!w_special[0]) {
         size_t i;
         for (i = 0; i < N_ELEMENTS(writes); i++) {
-            const int n = interp->op_lib->op_code(writes[i], 1);
+            const int n = interp->op_lib->op_code(interp, writes[i], 1);
             PARROT_ASSERT(n);
             w_special[i] = n;
         }
@@ -650,9 +650,9 @@
 free_ins(ARGMOD(Instruction *ins))
 {
     ASSERT_ARGS(free_ins)
-    free(ins->format);
-    free(ins->opname);
-    free(ins);
+    mem_sys_free(ins->format);
+    mem_sys_free(ins->opname);
+    mem_sys_free(ins);
 }
 
 /*
@@ -785,7 +785,7 @@
 
 /*
 
-=item C<static int e_file_open(PARROT_INTERP, void *param)>
+=item C<static int e_file_open(PARROT_INTERP, const char *param)>
 
 Prints a message to STDOUT.
 
@@ -794,19 +794,19 @@
 */
 
 static int
-e_file_open(PARROT_INTERP, ARGIN(void *param))
+e_file_open(PARROT_INTERP, ARGIN(const char *param))
 {
     ASSERT_ARGS(e_file_open)
-    char * const file = (char *) param;
+    DECL_CONST_CAST;
 
-    if (!STREQ(file, "-")) {
-        FILE *newfile = freopen(file, "w", stdout);
+    if (!STREQ(param, "-")) {
+        FILE *newfile = freopen(param, "w", stdout);
         if (!newfile)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 "Cannot reopen stdout: %s'\n", strerror(errno));
     }
 
-    output = file;
+    output = PARROT_const_cast(char *, param);
     Parrot_io_printf(interp, "# IMCC does produce b0rken PASM files\n");
     Parrot_io_printf(interp, "# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392\n");
     return 1;
@@ -862,7 +862,7 @@
 
 /*
 
-=item C<int emit_open(PARROT_INTERP, int type, void *param)>
+=item C<int emit_open(PARROT_INTERP, int type, const char *param)>
 
 Opens the emitter function C<open> of the given C<type>. Passes
 the C<param> to the open function.
@@ -873,7 +873,7 @@
 
 PARROT_EXPORT
 int
-emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
 {
     ASSERT_ARGS(emit_open)
     IMCC_INFO(interp)->emitter       = type;

Modified: branches/ops_pct/compilers/imcc/instructions.h
==============================================================================
--- branches/ops_pct/compilers/imcc/instructions.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/instructions.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  */
 
 #ifndef PARROT_IMCC_INSTRUCTIONS_H_GUARD
@@ -79,7 +79,7 @@
 /* Globals */
 
 typedef struct _emittert {
-    int (*open)(PARROT_INTERP, void *param);
+    int (*open)(PARROT_INTERP, const char *param);
     int (*emit)(PARROT_INTERP, void *param, const IMC_Unit *, const Instruction *ins);
     int (*new_sub)(PARROT_INTERP, void *param, IMC_Unit *);
     int (*end_sub)(PARROT_INTERP, void *param, IMC_Unit *);
@@ -103,7 +103,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT

Modified: branches/ops_pct/compilers/imcc/main.c
==============================================================================
--- branches/ops_pct/compilers/imcc/main.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/main.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -67,8 +67,6 @@
 static void do_pre_process(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-static void help(void);
-static void help_debug(void);
 static void imcc_get_optimization_description(
     const PARROT_INTERP,
     int opt_level,
@@ -93,13 +91,6 @@
 static int is_all_hex_digits(ARGIN(const char *s))
         __attribute__nonnull__(1);
 
-static void Parrot_version(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-static void usage(ARGMOD(FILE *fp))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*fp);
-
 #define ASSERT_ARGS_compile_to_bytecode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sourcefile))
@@ -112,8 +103,6 @@
     , PARROT_ASSERT_ARG(output_file))
 #define ASSERT_ARGS_do_pre_process __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_help __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_help_debug __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_imcc_get_optimization_description \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(opt_desc))
@@ -125,198 +114,16 @@
     , PARROT_ASSERT_ARG(output_file))
 #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_usage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(fp))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
 
-/*
-
-=item C<static void usage(FILE *fp)>
-
-Outputs usage error message.
-
-=cut
-
-*/
-
-static void
-usage(ARGMOD(FILE *fp))
-{
-    ASSERT_ARGS(usage)
-    fprintf(fp,
-            "parrot -[acEGhprtvVwy.] [-d [FLAGS]] [-D [FLAGS]]"
-            "[-O [level]] [-R runcore] [-o FILE] <file>\n");
-}
-
-/*
-
-=item C<static void help_debug(void)>
-
-Print out list of debugging flag values.
-
-=cut
-
-*/
-
-static void
-help_debug(void)
-{
-    ASSERT_ARGS(help_debug)
-    /* split printf for C89 compliance on string length */
-    printf(
-    "--imcc-debug -d [Flags] ...\n"
-    "    0002    lexer\n"
-    "    0004    parser\n"
-    "    0008    imc\n"
-    "    0010    CFG\n"
-    "    0020    optimization 1\n"
-    "    0040    optimization 2\n"
-    "    0100    AST\n"
-    "    1000    PBC\n"
-    "    2000    PBC constants\n"
-    "    4000    PBC fixups\n"
-    "\n");
-    printf(
-    "--parrot-debug -D [Flags] ...\n"
-    "    0001    memory statistics\n"
-    "    0002    print backtrace on exception\n"
-    "    0004    JIT debugging\n"
-    "    0008    interpreter startup\n"
-    "    0010    thread debugging\n"
-    "    0020    eval/compile\n"
-    "    0040    fill I, N registers with garbage\n"
-    "    0080    show when a context is destroyed\n"
-    "\n"
-    "--trace -t [Flags] ...\n"
-    "    0001    opcodes\n"
-    "    0002    find_method\n"
-    "    0004    function calls\n");
-}
-
-/*
-
-=item C<static void help(void)>
-
-Print out "help" list of options.
-
-=cut
-
-*/
-
-static void
-help(void)
-{
-    ASSERT_ARGS(help)
-    /* split printf for C89 compliance on string length */
-    printf(
-    "parrot [Options] <file>\n"
-    "  Options:\n"
-    "    -h --help\n"
-    "    -V --version\n"
-    "    -I --include add path to include search\n"
-    "    -L --library add path to library search\n"
-    "    -X --dynext add path to dynamic extension search\n"
-    "   <Run core options>\n"
-    "    -R --runcore slow|bounds|fast|cgoto|cgp\n"
-    "    -R --runcore switch|trace|profiling|gcdebug\n"
-    "    -t --trace [flags]\n"
-    "   <VM options>\n"
-    "    -D --parrot-debug[=HEXFLAGS]\n"
-    "       --help-debug\n");
-    printf(
-    "    -w --warnings\n"
-    "    -G --no-gc\n"
-    "       --gc-debug\n"
-    "       --leak-test|--destroy-at-end\n"
-    "    -. --wait    Read a keystroke before starting\n"
-    "       --runtime-prefix\n"
-    "   <Compiler options>\n"
-    "    -d --imcc-debug[=HEXFLAGS]\n"
-    "    -v --verbose\n"
-    "    -E --pre-process-only\n"
-    "    -o --output=FILE\n"
-    "       --output-pbc\n"
-    "    -O --optimize[=LEVEL]\n"
-    "    -a --pasm\n"
-    "    -c --pbc\n"
-    "    -r --run-pbc\n"
-    "    -y --yydebug\n"
-    "   <Language options>\n"
-    "see docs/running.pod for more\n");
-}
-
-
-/*
-
-=item C<static void Parrot_version(PARROT_INTERP)>
-
-Print out parrot version number.
-
-=cut
-
-*/
-
-static void
-Parrot_version(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_version)
-    printf("This is Parrot version " PARROT_VERSION);
-    printf(" built for " PARROT_ARCHNAME ".\n");
-    printf("Copyright (C) 2001-2010, Parrot Foundation.\n\
-\n\
-This code is distributed under the terms of the Artistic License 2.0.\
-\n\
-For more details, see the full text of the license in the LICENSE file\
-\n\
-included in the Parrot source tree.\n\n");
-
-    Parrot_exit(interp, 0);
-}
-
-#define SET_FLAG(flag)   Parrot_set_flag(interp, (flag))
-#define SET_DEBUG(flag)  Parrot_set_debug(interp, (flag))
-#define SET_TRACE(flag)  Parrot_set_trace(interp, (flag))
-
 #define OPT_GC_DEBUG       128
 #define OPT_DESTROY_FLAG   129
 #define OPT_HELP_DEBUG     130
 #define OPT_PBC_OUTPUT     131
 #define OPT_RUNTIME_PREFIX 132
 
-static struct longopt_opt_decl options[] = {
-    { '.', '.', (OPTION_flags)0, { "--wait" } },
-    { 'D', 'D', OPTION_optional_FLAG, { "--parrot-debug" } },
-    { 'E', 'E', (OPTION_flags)0, { "--pre-process-only" } },
-    { 'G', 'G', (OPTION_flags)0, { "--no-gc" } },
-    { 'I', 'I', OPTION_required_FLAG, { "--include" } },
-    { 'L', 'L', OPTION_required_FLAG, { "--library" } },
-    { 'O', 'O', OPTION_optional_FLAG, { "--optimize" } },
-    { 'R', 'R', OPTION_required_FLAG, { "--runcore" } },
-    { 'V', 'V', (OPTION_flags)0, { "--version" } },
-    { 'X', 'X', OPTION_required_FLAG, { "--dynext" } },
-    { '\0', OPT_DESTROY_FLAG, (OPTION_flags)0,
-                                 { "--leak-test", "--destroy-at-end" } },
-    { '\0', OPT_GC_DEBUG, (OPTION_flags)0, { "--gc-debug" } },
-    { 'a', 'a', (OPTION_flags)0, { "--pasm" } },
-    { 'c', 'c', (OPTION_flags)0, { "--pbc" } },
-    { 'd', 'd', OPTION_optional_FLAG, { "--imcc-debug" } },
-    { '\0', OPT_HELP_DEBUG, (OPTION_flags)0, { "--help-debug" } },
-    { 'h', 'h', (OPTION_flags)0, { "--help" } },
-    { 'o', 'o', OPTION_required_FLAG, { "--output" } },
-    { '\0', OPT_PBC_OUTPUT, (OPTION_flags)0, { "--output-pbc" } },
-    { 'r', 'r', (OPTION_flags)0, { "--run-pbc" } },
-    { '\0', OPT_RUNTIME_PREFIX, (OPTION_flags)0, { "--runtime-prefix" } },
-    { 't', 't', OPTION_optional_FLAG, { "--trace" } },
-    { 'v', 'v', (OPTION_flags)0, { "--verbose" } },
-    { 'w', 'w', (OPTION_flags)0, { "--warnings" } },
-    { 'y', 'y', (OPTION_flags)0, { "--yydebug" } },
-    { 0, 0, (OPTION_flags)0, { NULL } }
-};
-
 /*
 
 =item C<static int is_all_hex_digits(const char *s)>
@@ -342,223 +149,122 @@
 
 /*
 
-=item C<const char * parseflags(PARROT_INTERP, int *argc, char **argv[])>
+=item C<void imcc_start_handling_flags(PARROT_INTERP)>
 
-Parse Parrot's command line for options and set appropriate flags.
+Initialize handling of IMCC related command line flags.
 
 =cut
 
 */
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-const char *
-parseflags(PARROT_INTERP, int *argc, char **argv[])
+void
+imcc_start_handling_flags(PARROT_INTERP)
 {
-    struct longopt_opt_info opt  = LONGOPT_OPT_INFO_INIT;
-    INTVAL                  core = 0;
-    int                     status;
-
-    if (*argc == 1) {
-        usage(stderr);
-        exit(EXIT_SUCCESS);
-    }
-
     SET_STATE_RUN_PBC(interp);
+}
 
-    while ((status = longopt_get(interp, *argc, (const char **)*argv, options,
-            &opt)) > 0) {
-        switch (opt.opt_id) {
-          case 'R':
-            if (STREQ(opt.opt_arg, "slow") || STREQ(opt.opt_arg, "bounds"))
-                core = PARROT_SLOW_CORE;
-            else if (STREQ(opt.opt_arg, "fast") || STREQ(opt.opt_arg, "function"))
-                core = PARROT_FAST_CORE;
-            else if (STREQ(opt.opt_arg, "switch"))
-                core = PARROT_SWITCH_CORE;
-            else if (STREQ(opt.opt_arg, "cgp"))
-                core = PARROT_CGP_CORE;
-            else if (STREQ(opt.opt_arg, "cgoto"))
-                core = PARROT_CGOTO_CORE;
-            else if (STREQ(opt.opt_arg, "jit"))
-                core = PARROT_FAST_CORE;
-            else if (STREQ(opt.opt_arg, "cgp-jit"))
-                core = PARROT_CGP_CORE;
-            else if (STREQ(opt.opt_arg, "switch-jit"))
-                core = PARROT_SWITCH_CORE;
-            else if (STREQ(opt.opt_arg, "exec"))
-                core = PARROT_EXEC_CORE;
-            else if (STREQ(opt.opt_arg, "trace"))
-                core = PARROT_SLOW_CORE;
-            else if (STREQ(opt.opt_arg, "profiling"))
-                core = PARROT_PROFILING_CORE;
-            else if (STREQ(opt.opt_arg, "gcdebug"))
-                core = PARROT_GC_DEBUG_CORE;
-            else
-                Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                        "main: Unrecognized runcore '%s' specified."
-                        "\n\nhelp: parrot -h\n", opt.opt_arg);
-            break;
-          case 't':
-            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg))
-                SET_TRACE(strtoul(opt.opt_arg, NULL, 16));
-            else
-                SET_TRACE(PARROT_TRACE_OPS_FLAG);
-            break;
-          case 'd':
-            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
-                IMCC_INFO(interp)->debug = strtoul(opt.opt_arg, NULL, 16);
-            }
-            else {
-                IMCC_INFO(interp)->debug++;
-            }
-            break;
-          case 'D':
-            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
-                SET_DEBUG(strtoul(opt.opt_arg, NULL, 16));
-            }
-            else
-                SET_DEBUG(PARROT_MEM_STAT_DEBUG_FLAG);
-            break;
-          case 'w':
-            Parrot_setwarnings(interp, PARROT_WARNINGS_ALL_FLAG);
-            IMCC_INFO(interp)->imcc_warn = 1;
-            break;
-          case 'G':
-            IMCC_INFO(interp)->gc_off = 1;
-            break;
-          case '.':  /* Give Windows Parrot hackers an opportunity to
-                      * attach a debuggger. */
-            fgetc(stdin);
-            break;
-          case 'a':
-            SET_STATE_PASM_FILE(interp);
-            break;
-          case 'h':
-            help();
-            exit(EX_USAGE);
-            break;
-          case OPT_HELP_DEBUG:
-            help_debug();
-            exit(EX_USAGE);
-            break;
-          case OPT_RUNTIME_PREFIX:
-            Parrot_io_printf(interp, "%Ss\n",
-                    Parrot_get_runtime_path(interp));
-            exit(EXIT_SUCCESS);
-          case 'V':
-            Parrot_version(interp);
-            break;
-          case 'r':
-            if (STATE_RUN_PBC(interp))
-                SET_STATE_RUN_FROM_FILE(interp);
-            SET_STATE_RUN_PBC(interp);
-            break;
-          case 'c':
-            SET_STATE_LOAD_PBC(interp);
-            break;
-          case 'v':
-            IMCC_INFO(interp)->verbose++;
-            break;
-          case 'y':
-            yydebug = 1;
-            break;
-          case 'E':
-            SET_STATE_PRE_PROCESS(interp);
-            break;
-          case 'o':
-            UNSET_STATE_RUN_PBC(interp);
-            interp->output_file = opt.opt_arg;
-            break;
+/*
 
-          case OPT_PBC_OUTPUT:
-            UNSET_STATE_RUN_PBC(interp);
-            SET_STATE_WRITE_PBC(interp);
-            if (!interp->output_file)
-                interp->output_file = "-";
-            break;
+=item C<int imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt,
+Parrot_Run_core_t *core)>
 
-          case 'O':
-            if (!opt.opt_arg) {
-                IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
-                break;
-            }
-            if (strchr(opt.opt_arg, 'p'))
-                IMCC_INFO(interp)->optimizer_level |= OPT_PASM;
-            if (strchr(opt.opt_arg, 'c'))
-                IMCC_INFO(interp)->optimizer_level |= OPT_SUB;
-
-            IMCC_INFO(interp)->allocator = IMCC_GRAPH_ALLOCATOR;
-            /* currently not ok due to different register allocation */
-            if (strchr(opt.opt_arg, '1')) {
-                IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
-            }
-            if (strchr(opt.opt_arg, '2')) {
-                IMCC_INFO(interp)->optimizer_level |= (OPT_PRE | OPT_CFG);
-            }
-            if (strchr(opt.opt_arg, 't')) {
-#ifdef HAVE_COMPUTED_GOTO
-                core = PARROT_CGP_CORE;
-#else
-                core = PARROT_SWITCH_CORE;
-#endif
-            }
-            break;
+Handle Parrot's command line for IMCC related option and set appropriate flags.
 
-          case OPT_GC_DEBUG:
-#if DISABLE_GC_DEBUG
-            Parrot_warn(interp, PARROT_WARNINGS_ALL_FLAG,
-                        "PARROT_GC_DEBUG is set but the binary was "
-                        "compiled with DISABLE_GC_DEBUG.");
-#endif
-            SET_FLAG(PARROT_GC_DEBUG_FLAG);
-            break;
-          case OPT_DESTROY_FLAG:
-            SET_FLAG(PARROT_DESTROY_FLAG);
-            break;
-          case 'I':
-            Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
-                    PARROT_LIB_PATH_INCLUDE);
-            break;
-          case 'L':
-            Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
-                    PARROT_LIB_PATH_LIBRARY);
-            break;
-          case 'X':
-            Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
-                    PARROT_LIB_PATH_DYNEXT);
-            break;
-          default:
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                    "main: Invalid flag '%s' used.\n\nhelp: parrot -h\n",
-                    (*argv)[0]);
-        }
-    }
+Return 1 if flag handled, 0 if not.
 
-    if (status == -1) {
-        fprintf(stderr, "%s\n", opt.opt_error);
-        usage(stderr);
-        exit(EX_USAGE);
-    }
+=cut
 
-    /* reached the end of the option list and consumed all of argv */
-    if (*argc == opt.opt_index) {
-        if (interp->output_file) {
-            fprintf(stderr, "Missing program name or argument for -o\n");
+*/
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+int
+imcc_handle_flag(PARROT_INTERP, struct longopt_opt_info *opt,
+    Parrot_Run_core_t *core)
+{
+    PARROT_ASSERT(opt);
+    PARROT_ASSERT(core);
+
+    switch (opt->opt_id) {
+      case 'd':
+        if (opt->opt_arg && is_all_hex_digits(opt->opt_arg)) {
+            IMCC_INFO(interp)->debug = strtoul(opt->opt_arg, NULL, 16);
         }
         else {
-            /* We are not looking at an option, so it must be a program name */
-            fprintf(stderr, "Missing program name\n");
+            IMCC_INFO(interp)->debug++;
         }
-        usage(stderr);
-        exit(EX_USAGE);
-    }
+        break;
+      case 'w':
+        /* FIXME It's not best way to set warnings... */
+        Parrot_setwarnings(interp, PARROT_WARNINGS_ALL_FLAG);
+        IMCC_INFO(interp)->imcc_warn = 1;
+        break;
+      case 'G':
+        IMCC_INFO(interp)->gc_off = 1;
+        break;
+      case 'a':
+        SET_STATE_PASM_FILE(interp);
+        break;
+      case 'r':
+        if (STATE_RUN_PBC(interp))
+            SET_STATE_RUN_FROM_FILE(interp);
+        SET_STATE_RUN_PBC(interp);
+        break;
+      case 'c':
+        SET_STATE_LOAD_PBC(interp);
+        break;
+      case 'v':
+        IMCC_INFO(interp)->verbose++;
+        break;
+      case 'y':
+        yydebug = 1;
+        break;
+      case 'E':
+        SET_STATE_PRE_PROCESS(interp);
+        break;
+      case 'o':
+        UNSET_STATE_RUN_PBC(interp);
+        interp->output_file = opt->opt_arg;
+        break;
+
+      case OPT_PBC_OUTPUT:
+        UNSET_STATE_RUN_PBC(interp);
+        SET_STATE_WRITE_PBC(interp);
+        if (!interp->output_file)
+            interp->output_file = "-";
+        break;
+
+      case 'O':
+        if (!opt->opt_arg) {
+            IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
+            break;
+        }
+        if (strchr(opt->opt_arg, 'p'))
+            IMCC_INFO(interp)->optimizer_level |= OPT_PASM;
+        if (strchr(opt->opt_arg, 'c'))
+            IMCC_INFO(interp)->optimizer_level |= OPT_SUB;
+
+        IMCC_INFO(interp)->allocator = IMCC_GRAPH_ALLOCATOR;
+        /* currently not ok due to different register allocation */
+        if (strchr(opt->opt_arg, '1')) {
+            IMCC_INFO(interp)->optimizer_level |= OPT_PRE;
+        }
+        if (strchr(opt->opt_arg, '2')) {
+            IMCC_INFO(interp)->optimizer_level |= (OPT_PRE | OPT_CFG);
+        }
+        if (strchr(opt->opt_arg, 't')) {
+#ifdef HAVE_COMPUTED_GOTO
+            *core = PARROT_CGP_CORE;
+#else
+            *core = PARROT_SWITCH_CORE;
+#endif
+        }
+        break;
 
-    *argc -= opt.opt_index;
-    *argv += opt.opt_index;
+      default:
+        return 0;
+    }
 
-    Parrot_set_run_core(interp, (Parrot_Run_core_t) core);
-    return (*argv)[0];
+    return 1;
 }
 
 /*
@@ -828,7 +534,7 @@
             "Couldn't write %s\n", output_file);
     fclose(fp);
     IMCC_info(interp, 1, "%s written.\n", output_file);
-    free(packed);
+    mem_sys_free(packed);
 }
 
 /*
@@ -940,7 +646,7 @@
     IMCC_push_parser_state(interp);
     IMCC_INFO(interp)->state->file = mem_sys_strdup(sourcefile);
 
-    emit_open(interp, per_pbc, per_pbc ? NULL : (void*)output_file);
+    emit_open(interp, per_pbc, per_pbc ? NULL : output_file);
 
     IMCC_info(interp, 1, "Starting parse...\n");
 

Modified: branches/ops_pct/compilers/imcc/optimizer.c
==============================================================================
--- branches/ops_pct/compilers/imcc/optimizer.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/optimizer.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -366,7 +366,7 @@
                               last->symregs, args, 0, 0);
                     last->opnum = tmp->opnum;
                     last->opsize = tmp->opsize;
-                    free(last->opname);
+                    mem_sys_free(last->opname);
                     last->opname = mem_sys_strdup(tmp->opname);
                     free_ins(tmp);
 
@@ -802,7 +802,7 @@
     int i;
     op_info_t *op_info;
 
-    opnum = interp->op_lib->op_code(op, 1);
+    opnum = interp->op_lib->op_code(interp, op, 1);
     if (opnum < 0)
         IMCC_fatal(interp, 1, "eval_ins: op '%s' not found\n", op);
     op_info = interp->op_info_table + opnum;
@@ -1293,7 +1293,7 @@
             changed = 1;
         }
 
-        free(label);
+        mem_sys_free(label);
     }
 
     return changed;

Modified: branches/ops_pct/compilers/imcc/parser_util.c
==============================================================================
--- branches/ops_pct/compilers/imcc/parser_util.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/parser_util.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -154,7 +154,7 @@
     SymReg *regs[3];
     SymReg *pmc;
     int nargs;
-    const int pmc_num = pmc_type(interp,
+    const int pmc_num = Parrot_pmc_get_type_str(interp,
             Parrot_str_new(interp, *type == '.' ? type + 1 : type, 0));
 
     snprintf(fmt, sizeof (fmt), "%d", pmc_num);
@@ -285,7 +285,7 @@
     ASSERT_ARGS(check_op)
     op_fullname(fullname, name, r, narg, keyvec);
 
-    return interp->op_lib->op_code(fullname, 1);
+    return interp->op_lib->op_code(interp, fullname, 1);
 }
 
 /*
@@ -303,8 +303,8 @@
 is_op(PARROT_INTERP, ARGIN(const char *name))
 {
     ASSERT_ARGS(is_op)
-    return interp->op_lib->op_code(name, 0) >= 0
-        || interp->op_lib->op_code(name, 1) >= 0;
+    return interp->op_lib->op_code(interp, name, 0) >= 0
+        || interp->op_lib->op_code(interp, name, 1) >= 0;
 }
 
 /*
@@ -341,7 +341,7 @@
     r[0]->pmc_type = enum_class_FixedIntegerArray;
 
     op_fullname(fullname, name, r, 1, 0);
-    op = interp->op_lib->op_code(fullname, 1);
+    op = interp->op_lib->op_code(interp, fullname, 1);
 
     PARROT_ASSERT(op >= 0);
 
@@ -404,11 +404,11 @@
         return var_arg_ins(interp, unit, name, r, n, emit);
 
     op_fullname(fullname, name, r, n, keyvec);
-    op = interp->op_lib->op_code(fullname, 1);
+    op = interp->op_lib->op_code(interp, fullname, 1);
 
     /* maybe we have a fullname */
     if (op < 0)
-        op = interp->op_lib->op_code(name, 1);
+        op = interp->op_lib->op_code(interp, name, 1);
 
     /* still wrong, try reverse compare */
     if (op < 0) {
@@ -416,7 +416,7 @@
         if (n_name) {
             name = n_name;
             op_fullname(fullname, name, r, n, keyvec);
-            op   = interp->op_lib->op_code(fullname, 1);
+            op   = interp->op_lib->op_code(interp, fullname, 1);
         }
     }
 
@@ -548,7 +548,7 @@
         }
     }
 
-    if (op_info->jump && op_info->jump != PARROT_JUMP_ENEXT) {
+    if (op_info->jump) {
         ins->type |= ITBRANCH;
         /* TODO use opnum constants */
         if (STREQ(name, "branch")
@@ -638,7 +638,7 @@
 
     if (IMCC_INFO(interp)->last_unit) {
         /* a reentrant compile */
-        imc_info          = mem_allocate_zeroed_typed(imc_info_t);
+        imc_info          = mem_gc_allocate_zeroed_typed(interp, imc_info_t);
         imc_info->ghash   = IMCC_INFO(interp)->ghash;
         imc_info->prev    = IMCC_INFO(interp);
         IMCC_INFO(interp) = imc_info;
@@ -703,7 +703,7 @@
          *
          * TODO if a sub was denoted :main return that instead
          */
-        sub                  = pmc_new(interp, enum_class_Eval);
+        sub                  = Parrot_pmc_new(interp, enum_class_Eval);
         PMC_get_sub(interp, sub, sub_data);
         sub_data->seg        = new_cs;
         sub_data->start_offs = 0;
@@ -868,16 +868,7 @@
     STRING *error_message;
     PMC *sub;
 
-    /* We need to clear the current_results from the current context. This is
-     * in order to prevent any RetContinuations that get promoted to full
-     * Continuations (this happens when something is the target of a :outer)
-     * trying to return values using them when invoked. (See TT #500 for the
-     * report of the bug this fixes). */
-    opcode_t *save_results = Parrot_pcc_get_results(interp, CURRENT_CONTEXT(interp));
-    Parrot_pcc_set_results(interp, CURRENT_CONTEXT(interp), NULL);
     sub = imcc_compile(interp, s, 0, &error_message);
-    Parrot_pcc_set_results(interp, CURRENT_CONTEXT(interp), save_results);
-
     if (sub)
         return sub;
 
@@ -916,7 +907,7 @@
 
     if (IMCC_INFO(interp)->last_unit) {
         /* a reentrant compile */
-        imc_info          = mem_allocate_zeroed_typed(imc_info_t);
+        imc_info          = mem_gc_allocate_zeroed_typed(interp, imc_info_t);
         imc_info->prev    = IMCC_INFO(interp);
         imc_info->ghash   = IMCC_INFO(interp)->ghash;
         IMCC_INFO(interp) = imc_info;
@@ -1202,7 +1193,7 @@
 
     if (changed) {
         op_fullname(fullname, name, r, n, keyvec);
-        return interp->op_lib->op_code(fullname, 1);
+        return interp->op_lib->op_code(interp, fullname, 1);
     }
 
     return -1;
@@ -1290,9 +1281,8 @@
 imcc_init(PARROT_INTERP)
 {
     ASSERT_ARGS(imcc_init)
-    PARROT_ASSERT(IMCC_INFO(interp) == NULL);
+    PARROT_ASSERT(IMCC_INFO(interp) != NULL);
 
-    IMCC_INFO(interp) = mem_allocate_zeroed_typed(imc_info_t);
     /* register PASM and PIR compilers to parrot core */
     register_compilers(interp);
 }

Modified: branches/ops_pct/compilers/imcc/pbc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/pbc.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/pbc.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  * $Id$
  */
 
@@ -357,11 +357,11 @@
     /* Update the constant count and reallocate */
     if (interp->code->const_table->constants)
         interp->code->const_table->constants =
-            mem_realloc_n_typed(interp->code->const_table->constants,
-                newcount, PackFile_Constant *);
+            mem_gc_realloc_n_typed_zeroed(interp, interp->code->const_table->constants,
+                newcount, oldcount, PackFile_Constant *);
     else
         interp->code->const_table->constants =
-            mem_allocate_n_typed(newcount, PackFile_Constant *);
+            mem_gc_allocate_n_zeroed_typed(interp, newcount, PackFile_Constant *);
 
     interp->code->const_table->constants[oldcount] = new_constant;
     interp->code->const_table->const_count         = newcount;
@@ -420,7 +420,7 @@
 
 /*
 
-=item C<int e_pbc_open(PARROT_INTERP, void *param)>
+=item C<int e_pbc_open(PARROT_INTERP, const char *param)>
 
 Opens a compilation unit to emit PBC.
 
@@ -429,13 +429,13 @@
 */
 
 int
-e_pbc_open(PARROT_INTERP, SHIM(void *param))
+e_pbc_open(PARROT_INTERP, SHIM(const char *param))
 {
     ASSERT_ARGS(e_pbc_open)
-    code_segment_t * const cs = mem_allocate_zeroed_typed(code_segment_t);
+    code_segment_t * const cs = mem_gc_allocate_zeroed_typed(interp, code_segment_t);
 
     if (!IMCC_INFO(interp)->globals)
-        IMCC_INFO(interp)->globals = mem_allocate_zeroed_typed(imcc_globals);
+        IMCC_INFO(interp)->globals = mem_gc_allocate_zeroed_typed(interp, imcc_globals);
 
     if (IMCC_INFO(interp)->globals->cs)
         clear_sym_hash(&IMCC_INFO(interp)->globals->cs->key_consts);
@@ -445,7 +445,7 @@
     }
 
     /* free previous cached key constants if any */
-    create_symhash(&cs->key_consts);
+    create_symhash(interp, &cs->key_consts);
 
     cs->next     = NULL;
     cs->prev     = IMCC_INFO(interp)->globals->cs;
@@ -496,7 +496,7 @@
 make_new_sub(PARROT_INTERP, ARGIN(IMC_Unit *unit))
 {
     ASSERT_ARGS(make_new_sub)
-    subs_t * const s = mem_allocate_zeroed_typed(subs_t);
+    subs_t * const s = mem_gc_allocate_zeroed_typed(interp, subs_t);
 
     s->prev          = IMCC_INFO(interp)->globals->cs->subs;
     s->unit          = unit;
@@ -510,7 +510,7 @@
 
     IMCC_INFO(interp)->globals->cs->subs = s;
 
-    create_symhash(&s->fixup);
+    create_symhash(interp, &s->fixup);
 }
 
 
@@ -615,7 +615,7 @@
 {
     ASSERT_ARGS(store_key_const)
     SymReg * const c =
-        _mk_const(&IMCC_INFO(interp)->globals->cs->key_consts, str, 0);
+        _mk_const(interp, &IMCC_INFO(interp)->globals->cs->key_consts, str, 0);
     c->color = idx;
 }
 
@@ -826,7 +826,7 @@
                     SymReg * const nam = mk_const(interp, fixup->name,
                             fixup->type & VT_ENCODED ? 'U' : 'S');
 
-                    const int op = interp->op_lib->op_code("find_sub_not_null_p_sc", 1);
+                    const int op = interp->op_lib->op_code(interp, "find_sub_not_null_p_sc", 1);
                     PARROT_ASSERT(op);
 
                     interp->code->base.data[addr] = op;
@@ -981,14 +981,32 @@
 add_const_str(PARROT_INTERP, ARGIN(const SymReg *r))
 {
     ASSERT_ARGS(add_const_str)
-    const int      k = add_const_table(interp);
-    STRING * const s = IMCC_string_from_reg(interp, r);
-    PackFile_Constant * const constant = interp->code->const_table->constants[k];
-
-    constant->type     = PFC_STRING;
-    constant->u.string = s;
-
 
+    PackFile_ConstTable *table = interp->code->const_table;
+    STRING * const s = IMCC_string_from_reg(interp, r);
+    int k = -1;
+    int i;
+    for (i = 0; i < table->const_count; ++i) {
+        PackFile_Constant * const constant = table->constants[i];
+        if (constant->type == PFC_STRING) {
+            STRING * const sc = constant->u.string;
+            if (Parrot_charset_number_of_str(interp, s) ==
+                    Parrot_charset_number_of_str(interp, sc) &&
+                    Parrot_encoding_number_of_str(interp, s) ==
+                    Parrot_encoding_number_of_str(interp, sc) &&
+                    Parrot_str_equal(interp, s, sc)) {
+                k = i;
+                break;
+            }
+        }
+    }
+    if (k < 0) {
+        PackFile_Constant * constant;
+        k = add_const_table(interp);
+        constant = table->constants[k];
+        constant->type     = PFC_STRING;
+        constant->u.string = s;
+    }
     return k;
 }
 
@@ -1044,9 +1062,9 @@
 
     /* a :multi sub with no arguments */
     if (!pcc_sub->multi[0])
-        return pmc_new(interp, enum_class_FixedIntegerArray);
+        return Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
 
-    multi_sig = pmc_new(interp, enum_class_FixedPMCArray);
+    multi_sig = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
     VTABLE_set_integer_native(interp, multi_sig, n);
     ct        = interp->code->const_table;
 
@@ -1058,14 +1076,14 @@
 
         if (r->set == 'S') {
             STRING * const type_name = ct->constants[r->color]->u.string;
-            const INTVAL type_num    = pmc_type(interp, type_name);
+            const INTVAL type_num    = Parrot_pmc_get_type_str(interp, type_name);
 
             if (type_num == enum_type_undef) {
-                sig_pmc = pmc_new(interp, enum_class_String);
+                sig_pmc = Parrot_pmc_new(interp, enum_class_String);
                 VTABLE_set_string_native(interp, sig_pmc, type_name);
             }
             else {
-                sig_pmc = pmc_new(interp, enum_class_Integer);
+                sig_pmc = Parrot_pmc_new(interp, enum_class_Integer);
                 VTABLE_set_integer_native(interp, sig_pmc, type_num);
             }
         }
@@ -1116,7 +1134,7 @@
             if (r->set == 'P' && r->usage & U_LEXICAL) {
                 SymReg *n;
                 if (!lex_info) {
-                    lex_info = pmc_new_noinit(interp, lex_info_id);
+                    lex_info = Parrot_pmc_new_noinit(interp, lex_info_id);
                     VTABLE_init_pmc(interp, lex_info, sub_pmc);
                 }
 
@@ -1149,7 +1167,7 @@
     }
 
     if (!lex_info && (unit->outer || need_lex)) {
-        lex_info = pmc_new_noinit(interp, lex_info_id);
+        lex_info = Parrot_pmc_new_noinit(interp, lex_info_id);
         VTABLE_init_pmc(interp, lex_info, sub_pmc);
     }
 
@@ -1276,7 +1294,7 @@
 
         if (real_name) {
             char * const p = mem_sys_strdup(real_name + 1);
-            free(r->name);
+            mem_sys_free(r->name);
             r->name = p;
         }
     }
@@ -1292,12 +1310,12 @@
         if (!PMC_IS_NULL(classobj))
             sub_pmc = VTABLE_instantiate(interp, classobj, PMCNULL);
         else {
-            const INTVAL type = pmc_type(interp, classname);
+            const INTVAL type = Parrot_pmc_get_type_str(interp, classname);
             if (type <= 0)
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_NO_CLASS,
                     "Class '%Ss' specified in :instanceof(...) not found",
                     classname);
-            sub_pmc = pmc_new(interp, type);
+            sub_pmc = Parrot_pmc_new(interp, type);
         }
     }
     else {
@@ -1305,7 +1323,7 @@
         type = Parrot_get_ctx_HLL_type(interp, type);
 
         /* TODO create constant - see also src/packfile.c */
-        sub_pmc = pmc_new(interp, type);
+        sub_pmc = Parrot_pmc_new(interp, type);
     }
 
     /* Set flags and get the sub info. */
@@ -1348,7 +1366,7 @@
             ns_pmc = ct->constants[ns_const]->u.key;
             break;
           case PFC_STRING:
-            ns_pmc = constant_pmc_new(interp, enum_class_String);
+            ns_pmc = Parrot_pmc_new_constant(interp, enum_class_String);
             VTABLE_set_string_native(interp, ns_pmc, ct->constants[ns_const]->u.string);
             break;
           default:
@@ -1478,7 +1496,7 @@
     if (r)
         return r->color;
 
-    pfc = mem_allocate_typed(PackFile_Constant);
+    pfc = mem_gc_allocate_typed(interp, PackFile_Constant);
     rc  = PackFile_Constant_unpack_key(interp,
             interp->code->const_table, pfc, key);
 
@@ -1805,7 +1823,7 @@
     else
         s = Parrot_str_unescape(interp, r->name, 0, NULL);
 
-    p  = constant_pmc_new(interp, r->pmc_type);
+    p  = Parrot_pmc_new_constant(interp, r->pmc_type);
 
     switch (r->pmc_type) {
       case enum_class_Integer:
@@ -2188,7 +2206,7 @@
             /* need a dummy to hold register usage */
             SymReg * const r = mk_sub_label(interp, "(null)");
             r->type          = VT_PCC_SUB;
-            r->pcc_sub       = mem_allocate_zeroed_typed(pcc_sub_t);
+            r->pcc_sub       = mem_gc_allocate_zeroed_typed(interp, pcc_sub_t);
 
             add_const_pmc_sub(interp, r, oldsize, oldsize + code_size);
         }

Modified: branches/ops_pct/compilers/imcc/pbc.h
==============================================================================
--- branches/ops_pct/compilers/imcc/pbc.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/pbc.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -28,7 +28,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-int e_pbc_open(PARROT_INTERP, SHIM(void *param))
+int e_pbc_open(PARROT_INTERP, SHIM(const char *param))
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT

Modified: branches/ops_pct/compilers/imcc/pcc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/pcc.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/pcc.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -108,9 +108,12 @@
         __attribute__nonnull__(3)
         __attribute__nonnull__(4);
 
-static void unshift_self(ARGIN(SymReg *sub), ARGIN(SymReg *obj))
+static void unshift_self(PARROT_INTERP,
+    ARGIN(SymReg *sub),
+    ARGIN(SymReg *obj))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 #define ASSERT_ARGS_insert_tail_call __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -143,7 +146,8 @@
     , PARROT_ASSERT_ARG(ins) \
     , PARROT_ASSERT_ARG(sub))
 #define ASSERT_ARGS_unshift_self __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(sub) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(sub) \
     , PARROT_ASSERT_ARG(obj))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -267,15 +271,15 @@
     SymReg *regcache[PCC_GET_ARGS_LIMIT + 1];
     char bufcache[sizeof (pref) + sizeof (item) * PCC_GET_ARGS_LIMIT + sizeof (subf)];
 
-    SymReg ** const regs  = n < PCC_GET_ARGS_LIMIT ?
-        regcache :
-        mem_allocate_n_zeroed_typed(n + 1, SymReg *);
+    SymReg ** const regs  = n < PCC_GET_ARGS_LIMIT
+                                ? regcache
+                                : mem_gc_allocate_n_zeroed_typed(interp, n + 1, SymReg *);
 
     unsigned int  bufpos  = 0;
     unsigned int  bufsize = lenpref + lenitem * n + lensubf;
-    char         *buf     = n < PCC_GET_ARGS_LIMIT ?
-        bufcache :
-        mem_allocate_n_typed(bufsize, char);
+    char         *buf     = n < PCC_GET_ARGS_LIMIT
+                                ? bufcache
+                                : mem_gc_allocate_n_typed(interp, bufsize, char);
 
     memcpy(buf, pref, lenpref);
     bufpos += lenpref;
@@ -362,7 +366,7 @@
 
 /*
 
-=item C<static void unshift_self(SymReg *sub, SymReg *obj)>
+=item C<static void unshift_self(PARROT_INTERP, SymReg *sub, SymReg *obj)>
 
 prepend the object to args or self to params
 
@@ -371,15 +375,15 @@
 */
 
 static void
-unshift_self(ARGIN(SymReg *sub), ARGIN(SymReg *obj))
+unshift_self(PARROT_INTERP, ARGIN(SymReg *sub), ARGIN(SymReg *obj))
 {
     ASSERT_ARGS(unshift_self)
     struct pcc_sub_t * const pcc_sub = sub->pcc_sub;
     const int                n       = pcc_sub->nargs;
     int                      i;
 
-    mem_realloc_n_typed(pcc_sub->args,      n + 1, SymReg *);
-    mem_realloc_n_typed(pcc_sub->arg_flags, n + 1, int);
+    pcc_sub->args       = mem_gc_realloc_n_typed(interp, pcc_sub->args,      n + 1, SymReg *);
+    pcc_sub->arg_flags  = mem_gc_realloc_n_typed(interp, pcc_sub->arg_flags, n + 1, int);
 
     for (i = n; i; --i) {
         pcc_sub->args[i]      = pcc_sub->args[i - 1];
@@ -419,7 +423,7 @@
             self->type = VTIDENTIFIER;
         }
 
-        unshift_self(sub, self);
+        unshift_self(interp, sub, self);
     }
 
     /* Don't generate any parameter checking code if there
@@ -821,7 +825,7 @@
     }
 
     if (sub->pcc_sub->object)
-        unshift_self(sub, sub->pcc_sub->object);
+        unshift_self(interp, sub, sub->pcc_sub->object);
 
     /* insert arguments */
     n   = sub->pcc_sub->nargs;

Modified: branches/ops_pct/compilers/imcc/reg_alloc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/reg_alloc.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/reg_alloc.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -59,7 +59,8 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*unit);
 
-static void build_reglist(NULLOK_INTERP, ARGMOD(IMC_Unit *unit))
+static void build_reglist(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*unit);
 
@@ -73,11 +74,12 @@
         FUNC_MODIFIES(*r);
 
 PARROT_WARN_UNUSED_RESULT
-static unsigned int first_avail(
+static unsigned int first_avail(PARROT_INTERP,
     ARGIN(const IMC_Unit *unit),
     int reg_set,
     ARGOUT_NULLOK(Set **avail))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*avail);
 
 PARROT_WARN_UNUSED_RESULT
@@ -162,7 +164,8 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void vanilla_reg_alloc(SHIM_INTERP, ARGMOD(IMC_Unit *unit))
+static void vanilla_reg_alloc(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*unit);
 
@@ -179,14 +182,16 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_build_reglist __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_compute_du_chain __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_compute_one_du_chain __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(r) \
     , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_first_avail __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_ig_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_ig_find_color __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(unit) \
@@ -223,7 +228,8 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_vanilla_reg_alloc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(unit))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(unit))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -429,7 +435,7 @@
     fprintf(stderr, "reg_alloc.c: free_reglist\n");
 #endif
     if (unit->interference_graph) {
-        free(unit->interference_graph);
+        mem_sys_free(unit->interference_graph);
         unit->interference_graph = NULL;
     }
 
@@ -439,7 +445,7 @@
         for (i = 0; i < unit->n_symbols; i++)
             free_life_info(unit, unit->reglist[i]);
 
-        free(unit->reglist);
+        mem_sys_free(unit->reglist);
         unit->reglist   = NULL;
         unit->n_symbols = 0;
     }
@@ -607,8 +613,8 @@
 reg_sort_f(ARGIN(const void *a), ARGIN(const void *b))
 {
     ASSERT_ARGS(reg_sort_f)
-    const SymReg * const ra = *(SymReg**)a;
-    const SymReg * const rb = *(SymReg**)b;
+    const SymReg * const ra = *(const SymReg * const *)a;
+    const SymReg * const rb = *(const SymReg * const *)b;
 
     if (ra->first_ins->index < rb->first_ins->index)
         return -1;
@@ -636,7 +642,7 @@
 
 /*
 
-=item C<static void build_reglist(NULLOK_INTERP, IMC_Unit *unit)>
+=item C<static void build_reglist(PARROT_INTERP, IMC_Unit *unit)>
 
 make a linear list of IDENTs and VARs, set n_symbols
 TODO
@@ -654,7 +660,7 @@
 */
 
 static void
-build_reglist(NULLOK_INTERP, ARGMOD(IMC_Unit *unit))
+build_reglist(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
 {
     ASSERT_ARGS(build_reglist)
     SymHash  const *hsh = &unit->hash;
@@ -670,7 +676,7 @@
     if (count == 0)
         return;
 
-    unit->reglist = mem_allocate_n_typed(count, SymReg *);
+    unit->reglist = mem_gc_allocate_n_typed(interp, count, SymReg *);
 
     for (i = count = 0; i < hsh->size; i++) {
         SymReg *r;
@@ -1043,7 +1049,7 @@
     if (!n)
         return;
 
-    avail = mem_allocate_n_typed(n, char);
+    avail = mem_gc_allocate_n_typed(interp, n, char);
 
     for (i = 0; i < unit->n_symbols; ++i) {
         int     already_allocated, color;
@@ -1122,8 +1128,8 @@
 
 /*
 
-=item C<static unsigned int first_avail(const IMC_Unit *unit, int reg_set, Set
-**avail)>
+=item C<static unsigned int first_avail(PARROT_INTERP, const IMC_Unit *unit, int
+reg_set, Set **avail)>
 
 find first available register of the given reg_set
 
@@ -1133,13 +1139,15 @@
 
 PARROT_WARN_UNUSED_RESULT
 static unsigned int
-first_avail(ARGIN(const IMC_Unit *unit), int reg_set, ARGOUT_NULLOK(Set **avail))
+first_avail(PARROT_INTERP,
+        ARGIN(const IMC_Unit *unit), int reg_set,
+        ARGOUT_NULLOK(Set **avail))
 {
     ASSERT_ARGS(first_avail)
     int n                     = (int)unit->n_symbols > unit->max_color
                               ? (int)unit->n_symbols
                               : unit->max_color;
-    Set         *allocated    = set_make((unsigned int)n + 1);
+    Set         *allocated    = set_make(interp, (unsigned int)n + 1);
 
     const SymHash * const hsh = &unit->hash;
 
@@ -1205,7 +1213,7 @@
                 Set         *avail     = sets[j];
                 unsigned int first_reg = avail
                                        ? set_first_zero(avail)
-                                       : first_avail(unit, (int)r->set, &avail);
+                                       : first_avail(interp, unit, (int)r->set, &avail);
                 set_add(avail, first_reg);
                 r->color = first_reg++;
 
@@ -1244,7 +1252,7 @@
 */
 
 static void
-vanilla_reg_alloc(SHIM_INTERP, ARGMOD(IMC_Unit *unit))
+vanilla_reg_alloc(PARROT_INTERP, ARGMOD(IMC_Unit *unit))
 {
     ASSERT_ARGS(vanilla_reg_alloc)
     const char   type[] = "INSP";
@@ -1266,7 +1274,7 @@
     /* Assign new colors. */
     for (j = 0; j < 4; j++) {
         reg_set   = type[j];
-        first_reg = first_avail(unit, reg_set, &avail);
+        first_reg = first_avail(interp, unit, reg_set, &avail);
 
         /* XXX Use a different loop variable that doesn't shadow outer i */
         for (i = 0; i < hsh->size; i++) {
@@ -1276,7 +1284,7 @@
                     continue;
                 if (REG_NEEDS_ALLOC(r) && (r->color == -1) && r->use_count) {
                     if (set_contains(avail, first_reg))
-                        first_reg = first_avail(unit, reg_set, NULL);
+                        first_reg = first_avail(interp, unit, reg_set, NULL);
 
                     set_add(avail, first_reg);
                     r->color = first_reg++;

Modified: branches/ops_pct/compilers/imcc/sets.c
==============================================================================
--- branches/ops_pct/compilers/imcc/sets.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/sets.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -38,7 +38,7 @@
 
 /*
 
-=item C<Set* set_make(unsigned int length)>
+=item C<Set* set_make(PARROT_INTERP, unsigned int length)>
 
 Creates a new Set object.
 
@@ -49,13 +49,13 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Set*
-set_make(unsigned int length)
+set_make(PARROT_INTERP, unsigned int length)
 {
     ASSERT_ARGS(set_make)
-    Set * const s = mem_allocate_zeroed_typed(Set);
+    Set * const s = mem_gc_allocate_zeroed_typed(interp, Set);
     s->length     = length;
-    s->bmp        = mem_allocate_n_zeroed_typed(NUM_BYTES(length),
-                        unsigned char);
+    s->bmp        = mem_gc_allocate_n_zeroed_typed(interp,
+                            NUM_BYTES(length), unsigned char);
 
     return s;
 }
@@ -63,7 +63,7 @@
 
 /*
 
-=item C<Set* set_make_full(unsigned int length)>
+=item C<Set* set_make_full(PARROT_INTERP, unsigned int length)>
 
 Creates a new Set object of C<length> items, setting them all to full.
 
@@ -74,10 +74,10 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Set*
-set_make_full(unsigned int length)
+set_make_full(PARROT_INTERP, unsigned int length)
 {
     ASSERT_ARGS(set_make_full)
-    Set * const s      = set_make(length);
+    Set * const s      = set_make(interp, length);
     const size_t bytes = NUM_BYTES(length);
 
     if (bytes)
@@ -128,7 +128,7 @@
 
 /*
 
-=item C<Set* set_copy(const Set *s)>
+=item C<Set* set_copy(PARROT_INTERP, const Set *s)>
 
 Copies the set C<s>, returning a new set pointer.
 
@@ -139,10 +139,10 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Set*
-set_copy(ARGIN(const Set *s))
+set_copy(PARROT_INTERP, ARGIN(const Set *s))
 {
     ASSERT_ARGS(set_copy)
-    Set * const d = set_make(s->length);
+    Set * const d = set_make(interp, s->length);
 
     memcpy(d->bmp, s->bmp, NUM_BYTES(d->length));
     return d;
@@ -286,7 +286,7 @@
 
 /*
 
-=item C<Set * set_union(const Set *s1, const Set *s2)>
+=item C<Set * set_union(PARROT_INTERP, const Set *s1, const Set *s2)>
 
 Computes the union of the two Set arguments, returning it as a new Set.
 
@@ -299,11 +299,11 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Set *
-set_union(ARGIN(const Set *s1), ARGIN(const Set *s2))
+set_union(PARROT_INTERP, ARGIN(const Set *s1), ARGIN(const Set *s2))
 {
     ASSERT_ARGS(set_union)
     unsigned int i;
-    Set * const s = set_make(s1->length);
+    Set * const s = set_make(interp, s1->length);
 
     if (s1->length != s2->length)
         fatal(1, "set_union", "Sets don't have the same length\n");
@@ -318,7 +318,7 @@
 
 /*
 
-=item C<Set * set_intersec(const Set *s1, const Set *s2)>
+=item C<Set * set_intersec(PARROT_INTERP, const Set *s1, const Set *s2)>
 
 Creates a new Set object that is the intersection of the Set arguments (defined
 through the binary C<and> operator.)
@@ -332,11 +332,11 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 Set *
-set_intersec(ARGIN(const Set *s1), ARGIN(const Set *s2))
+set_intersec(PARROT_INTERP, ARGIN(const Set *s1), ARGIN(const Set *s2))
 {
     ASSERT_ARGS(set_intersec)
     unsigned int i;
-    Set * const  s = set_make(s1->length);
+    Set * const  s = set_make(interp, s1->length);
 
     if (s1->length != s2->length)
         fatal(1, "set_intersec", "Sets don't have the same length\n");

Modified: branches/ops_pct/compilers/imcc/sets.h
==============================================================================
--- branches/ops_pct/compilers/imcc/sets.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/sets.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -29,8 +29,9 @@
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-Set* set_copy(ARGIN(const Set *s))
-        __attribute__nonnull__(1);
+Set* set_copy(PARROT_INTERP, ARGIN(const Set *s))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
 int set_equal(ARGIN(const Set *s1), ARGIN(const Set *s2))
         __attribute__nonnull__(1)
@@ -47,9 +48,12 @@
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-Set * set_intersec(ARGIN(const Set *s1), ARGIN(const Set *s2))
+Set * set_intersec(PARROT_INTERP,
+    ARGIN(const Set *s1),
+    ARGIN(const Set *s2))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 void set_intersec_inplace(ARGMOD(Set *s1), ARGIN(const Set *s2))
         __attribute__nonnull__(1)
@@ -58,17 +62,20 @@
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-Set* set_make(unsigned int length);
+Set* set_make(PARROT_INTERP, unsigned int length)
+        __attribute__nonnull__(1);
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-Set* set_make_full(unsigned int length);
+Set* set_make_full(PARROT_INTERP, unsigned int length)
+        __attribute__nonnull__(1);
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-Set * set_union(ARGIN(const Set *s1), ARGIN(const Set *s2))
+Set * set_union(PARROT_INTERP, ARGIN(const Set *s1), ARGIN(const Set *s2))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
 
 #define ASSERT_ARGS_set_add __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
@@ -77,7 +84,8 @@
 #define ASSERT_ARGS_set_contains __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_set_copy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_set_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s1) \
     , PARROT_ASSERT_ARG(s2))
@@ -86,15 +94,19 @@
 #define ASSERT_ARGS_set_free __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_set_intersec __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s1) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s1) \
     , PARROT_ASSERT_ARG(s2))
 #define ASSERT_ARGS_set_intersec_inplace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s1) \
     , PARROT_ASSERT_ARG(s2))
-#define ASSERT_ARGS_set_make __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_set_make_full __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_set_make __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_set_make_full __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_set_union __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(s1) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(s1) \
     , PARROT_ASSERT_ARG(s2))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: compilers/imcc/sets.c */

Modified: branches/ops_pct/compilers/imcc/symreg.c
==============================================================================
--- branches/ops_pct/compilers/imcc/symreg.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/symreg.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  * $Id$
  */
 
@@ -48,19 +48,21 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
-static char * _mk_fullname(
+static char * _mk_fullname(PARROT_INTERP,
     ARGIN_NULLOK(const Namespace *ns),
     ARGIN(const char *name))
-        __attribute__nonnull__(2);
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-static SymReg * _mk_symreg(
+static SymReg * _mk_symreg(PARROT_INTERP,
     ARGMOD(SymHash *hsh),
     ARGIN(const char *name),
     int t)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*hsh);
 
 PARROT_WARN_UNUSED_RESULT
@@ -95,17 +97,20 @@
         FUNC_MODIFIES(*unit)
         FUNC_MODIFIES(*rhs);
 
-static void resize_symhash(ARGMOD(SymHash *hsh))
+static void resize_symhash(PARROT_INTERP, ARGMOD(SymHash *hsh))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*hsh);
 
 #define ASSERT_ARGS__get_sym_typed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(hsh) \
     , PARROT_ASSERT_ARG(name))
 #define ASSERT_ARGS__mk_fullname __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(name))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(name))
 #define ASSERT_ARGS__mk_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(hsh) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hsh) \
     , PARROT_ASSERT_ARG(name))
 #define ASSERT_ARGS_add_ns __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -121,7 +126,8 @@
     , PARROT_ASSERT_ARG(left) \
     , PARROT_ASSERT_ARG(rhs))
 #define ASSERT_ARGS_resize_symhash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(hsh))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hsh))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -139,7 +145,7 @@
 push_namespace(PARROT_INTERP, ARGIN(const char *name))
 {
     ASSERT_ARGS(push_namespace)
-    Namespace * const ns = mem_allocate_zeroed_typed(Namespace);
+    Namespace * const ns = mem_gc_allocate_zeroed_typed(interp, Namespace);
 
     ns->parent = IMCC_INFO(interp)->namespace_stack;
     ns->name   = mem_sys_strdup(name);
@@ -244,7 +250,8 @@
 
 /*
 
-=item C<static SymReg * _mk_symreg(SymHash *hsh, const char *name, int t)>
+=item C<static SymReg * _mk_symreg(PARROT_INTERP, SymHash *hsh, const char
+*name, int t)>
 
 Makes a new SymReg in the given SymHash from a varname and type.
 
@@ -255,20 +262,20 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static SymReg *
-_mk_symreg(ARGMOD(SymHash *hsh), ARGIN(const char *name), int t)
+_mk_symreg(PARROT_INTERP, ARGMOD(SymHash *hsh), ARGIN(const char *name), int t)
 {
     ASSERT_ARGS(_mk_symreg)
     SymReg * r = _get_sym_typed(hsh, name, t);
 
     if (!r) {
-        r             = mem_allocate_zeroed_typed(SymReg);
+        r             = mem_gc_allocate_zeroed_typed(interp, SymReg);
         r->set        = t;
         r->type       = VTREG;
         r->name       = mem_sys_strdup(name);
         r->color      = -1;
         r->want_regno = -1;
 
-        _store_symreg(hsh, r);
+        _store_symreg(interp, hsh, r);
     }
 
     return r;
@@ -296,7 +303,7 @@
     /* Check for the condition that fires up a segfault in TT #162 */
     PARROT_ASSERT(unit != NULL);
 
-    return _mk_symreg(&unit->hash, name, t);
+    return _mk_symreg(interp, &unit->hash, name, t);
 }
 
 
@@ -386,10 +393,10 @@
 {
     ASSERT_ARGS(mk_pcc_sub)
     IMC_Unit * const unit = IMCC_INFO(interp)->last_unit;
-    SymReg   * const r    = _mk_symreg(&unit->hash, name, proto);
+    SymReg   * const r    = _mk_symreg(interp, &unit->hash, name, proto);
 
     r->type    = VT_PCC_SUB;
-    r->pcc_sub = mem_allocate_zeroed_typed(pcc_sub_t);
+    r->pcc_sub = mem_gc_allocate_zeroed_typed(interp, pcc_sub_t);
 
     return r;
 }
@@ -420,7 +427,7 @@
     if (unit->prev && unit->prev->_namespace == ns)
         unit->_namespace = ns;
     else {
-        SymReg * const g = dup_sym(ns);
+        SymReg * const g = dup_sym(interp, ns);
         SymReg * const r = _get_sym(&IMCC_INFO(interp)->ghash, g->name);
 
         unit->_namespace     = g;
@@ -430,7 +437,7 @@
         /* this unit should free its namespace only if it's the only thing
          * holding onto it */
         if (!r || r->type != VT_CONSTP) {
-            _store_symreg(&IMCC_INFO(interp)->ghash, g);
+            _store_symreg(interp, &IMCC_INFO(interp)->ghash, g);
             unit->owns_namespace = 0;
         }
         else
@@ -441,7 +448,7 @@
 
 /*
 
-=item C<void add_pcc_arg(SymReg *r, SymReg *arg)>
+=item C<void add_pcc_arg(PARROT_INTERP, SymReg *r, SymReg *arg)>
 
 Adds a register or constant to the function arg list.
 
@@ -450,14 +457,14 @@
 */
 
 void
-add_pcc_arg(ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
+add_pcc_arg(PARROT_INTERP, ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
 {
     ASSERT_ARGS(add_pcc_arg)
     pcc_sub_t * const sub = r->pcc_sub;
     const int         n   = sub->nargs;
 
-    mem_realloc_n_typed(sub->args,      n + 1, SymReg *);
-    mem_realloc_n_typed(sub->arg_flags, n + 1, int);
+    sub->args       = mem_gc_realloc_n_typed(interp, sub->args,      n + 1, SymReg *);
+    sub->arg_flags  = mem_gc_realloc_n_typed(interp, sub->arg_flags, n + 1, int);
 
     sub->args[n]      = arg;
     sub->arg_flags[n] = arg->type;
@@ -470,7 +477,7 @@
 
 /*
 
-=item C<void add_pcc_result(SymReg *r, SymReg *arg)>
+=item C<void add_pcc_result(PARROT_INTERP, SymReg *r, SymReg *arg)>
 
 Adds a register or constant to the function's return list.
 
@@ -479,14 +486,14 @@
 */
 
 void
-add_pcc_result(ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
+add_pcc_result(PARROT_INTERP, ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
 {
     ASSERT_ARGS(add_pcc_result)
     pcc_sub_t * const sub = r->pcc_sub;
     const int         n   = sub->nret;
 
-    mem_realloc_n_typed(sub->ret,       n + 1, SymReg *);
-    mem_realloc_n_typed(sub->ret_flags, n + 1, int);
+    sub->ret        = mem_gc_realloc_n_typed(interp, sub->ret,       n + 1, SymReg *);
+    sub->ret_flags  = mem_gc_realloc_n_typed(interp, sub->ret_flags, n + 1, int);
 
     /* we can't keep the flags in the SymReg as the SymReg
      * maybe used with different flags for different calls */
@@ -501,7 +508,7 @@
 
 /*
 
-=item C<void add_pcc_multi(SymReg *r, SymReg *arg)>
+=item C<void add_pcc_multi(PARROT_INTERP, SymReg *r, SymReg *arg)>
 
 Adds a :multi signature to the sub.
 
@@ -510,13 +517,13 @@
 */
 
 void
-add_pcc_multi(ARGMOD(SymReg *r), ARGIN_NULLOK(SymReg *arg))
+add_pcc_multi(PARROT_INTERP, ARGMOD(SymReg *r), ARGIN_NULLOK(SymReg *arg))
 {
     ASSERT_ARGS(add_pcc_multi)
     pcc_sub_t * const sub = r->pcc_sub;
     const int n           = sub->nmulti;
 
-    mem_realloc_n_typed(sub->multi, n + 1, SymReg *);
+    sub->multi = mem_gc_realloc_n_typed(interp, sub->multi, n + 1, SymReg *);
     sub->multi[n] = arg;
     sub->nmulti++;
 }
@@ -592,7 +599,8 @@
 
 /*
 
-=item C<static char * _mk_fullname(const Namespace *ns, const char *name)>
+=item C<static char * _mk_fullname(PARROT_INTERP, const Namespace *ns, const
+char *name)>
 
 Combines the namespace and name together, separated by a C<::>.  If there's no
 namespace, the name is returned on its own.
@@ -607,12 +615,12 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
 static char *
-_mk_fullname(ARGIN_NULLOK(const Namespace *ns), ARGIN(const char *name))
+_mk_fullname(PARROT_INTERP, ARGIN_NULLOK(const Namespace *ns), ARGIN(const char *name))
 {
     ASSERT_ARGS(_mk_fullname)
     if (ns) {
         const size_t len = strlen(name) + strlen(ns->name) + 3;
-        char *result = (char *) mem_sys_allocate(len);
+        char *result = mem_gc_allocate_n_typed(interp, len, char);
         snprintf(result, len, "%s::%s", ns->name, name);
         return result;
     }
@@ -637,7 +645,7 @@
 mk_ident(PARROT_INTERP, ARGIN(const char *name), int t)
 {
     ASSERT_ARGS(mk_ident)
-    char   * const fullname = _mk_fullname(IMCC_INFO(interp)->namespace_stack, name);
+    char   * const fullname = _mk_fullname(interp, IMCC_INFO(interp)->namespace_stack, name);
     SymReg *r = get_sym_by_name(&(IMCC_INFO(interp)->last_unit->hash), name);
     if (r && r->set != t)
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -648,7 +656,7 @@
 
 
     if (IMCC_INFO(interp)->namespace_stack) {
-        Identifier * const ident = mem_allocate_zeroed_typed(Identifier);
+        Identifier * const ident = mem_gc_allocate_zeroed_typed(interp, Identifier);
 
         ident->name        = fullname;
         ident->next        = IMCC_INFO(interp)->namespace_stack->idents;
@@ -784,7 +792,7 @@
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
                     "global PMC constant not allowed");
 
-        r = _mk_symreg(&IMCC_INFO(interp)->ghash, name, t);
+        r = _mk_symreg(interp, &IMCC_INFO(interp)->ghash, name, t);
     }
     else {
         r = mk_ident(interp, name, t);
@@ -802,7 +810,8 @@
 
 /*
 
-=item C<SymReg * _mk_const(SymHash *hsh, const char *name, int t)>
+=item C<SymReg * _mk_const(PARROT_INTERP, SymHash *hsh, const char *name, int
+t)>
 
 Makes a new constant (internal use only).
 
@@ -813,10 +822,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 SymReg *
-_mk_const(ARGMOD(SymHash *hsh), ARGIN(const char *name), int t)
+_mk_const(PARROT_INTERP, ARGMOD(SymHash *hsh), ARGIN(const char *name), int t)
 {
     ASSERT_ARGS(_mk_const)
-    SymReg * const r = _mk_symreg(hsh, name, t);
+    SymReg * const r = _mk_symreg(interp, hsh, name, t);
     r->type          = VTCONST;
 
     if (t == 'U') {
@@ -902,9 +911,9 @@
     SymHash * const h = &IMCC_INFO(interp)->ghash;
 
     if (!h->data)
-        create_symhash(h);
+        create_symhash(interp, h);
 
-    return _mk_const(h, name, t);
+    return _mk_const(interp, h, name, t);
 }
 
 
@@ -981,10 +990,10 @@
         if (r && r->usage & U_LEXICAL)
             is_lexical = 1;
 
-        r       = mem_allocate_zeroed_typed(SymReg);
+        r       = mem_gc_allocate_zeroed_typed(interp, SymReg);
         r->type = VTADDRESS;
         r->name = mem_sys_strdup(name);
-        _store_symreg(hsh, r);
+        _store_symreg(interp, hsh, r);
 
         if (is_lexical)
             r->usage |= U_LEXICAL;
@@ -995,7 +1004,7 @@
         const char * const sub_name = (uniq == U_add_uniq_sub)
                        /* remember to free this name; add_ns malloc()s it */
                        ? (aux_name = add_ns(interp, name))
-                       : (char *)name;
+                       : name;
 
         r = _get_sym(hsh, sub_name);
 
@@ -1011,7 +1020,7 @@
             }
         }
 
-        r       = _mk_symreg(hsh, sub_name, 0);
+        r       = _mk_symreg(interp, hsh, sub_name, 0);
         r->type = VTADDRESS;
 
         if (uniq) {
@@ -1119,7 +1128,7 @@
 
 /*
 
-=item C<SymReg * dup_sym(const SymReg *r)>
+=item C<SymReg * dup_sym(PARROT_INTERP, const SymReg *r)>
 
 Links keys to a keys structure = SymReg
 
@@ -1164,15 +1173,15 @@
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
 SymReg *
-dup_sym(ARGIN(const SymReg *r))
+dup_sym(PARROT_INTERP, ARGIN(const SymReg *r))
 {
     ASSERT_ARGS(dup_sym)
-    SymReg * const new_sym = mem_allocate_zeroed_typed(SymReg);
+    SymReg * const new_sym = mem_gc_allocate_zeroed_typed(interp, SymReg);
     STRUCT_COPY(new_sym, r);
     new_sym->name = mem_sys_strdup(r->name);
 
     if (r->nextkey)
-        new_sym->nextkey = dup_sym(r->nextkey);
+        new_sym->nextkey = dup_sym(interp, r->nextkey);
 
     return new_sym;
 }
@@ -1236,7 +1245,7 @@
     }
 
     /* no, need a new one */
-    keychain       = mem_allocate_zeroed_typed(SymReg);
+    keychain       = mem_gc_allocate_zeroed_typed(interp, SymReg);
     keychain->type = VTCONST;
 
     ++keychain->use_count;
@@ -1249,7 +1258,7 @@
         if (REG_NEEDS_ALLOC(keys[i]))
             keychain->type |= VTREGKEY;
 
-        key->nextkey = dup_sym(keys[i]);
+        key->nextkey = dup_sym(interp, keys[i]);
         key          = key->nextkey;
 
         /* for registers, point ->reg to the original, needed by
@@ -1262,7 +1271,7 @@
     keychain->set   = 'K';
     keychain->color = -1;
 
-    _store_symreg(h, keychain);
+    _store_symreg(interp, h, keychain);
 
     return keychain;
 }
@@ -1316,7 +1325,7 @@
 
 /*
 
-=item C<void create_symhash(SymHash *hash)>
+=item C<void create_symhash(PARROT_INTERP, SymHash *hash)>
 
 Creates a symbol hash table with space for 16 entries.
 
@@ -1325,10 +1334,10 @@
 */
 
 void
-create_symhash(ARGOUT(SymHash *hash))
+create_symhash(PARROT_INTERP, ARGOUT(SymHash *hash))
 {
     ASSERT_ARGS(create_symhash)
-    hash->data    = mem_allocate_n_zeroed_typed(16, SymReg *);
+    hash->data    = mem_gc_allocate_n_zeroed_typed(interp, 16, SymReg *);
     hash->size    = 16;
     hash->entries = 0;
 }
@@ -1336,7 +1345,7 @@
 
 /*
 
-=item C<static void resize_symhash(SymHash *hsh)>
+=item C<static void resize_symhash(PARROT_INTERP, SymHash *hsh)>
 
 Resizes a symbol hash table.
 
@@ -1345,16 +1354,16 @@
 */
 
 static void
-resize_symhash(ARGMOD(SymHash *hsh))
+resize_symhash(PARROT_INTERP, ARGMOD(SymHash *hsh))
 {
     ASSERT_ARGS(resize_symhash)
     const int    new_size = hsh->size << 1; /* new size is twice as large */
     int          n_next   = 16;
-    SymReg     **next_r   = mem_allocate_n_zeroed_typed(n_next, SymReg *);
+    SymReg     **next_r   = mem_gc_allocate_n_zeroed_typed(interp, n_next, SymReg *);
     SymHash      nh;                        /* new symbol table */
     unsigned int i;
 
-    nh.data = mem_allocate_n_zeroed_typed(new_size, SymReg *);
+    nh.data = mem_gc_allocate_n_zeroed_typed(interp, new_size, SymReg *);
 
     for (i = 0; i < hsh->size; i++) {
         SymReg *r, *next;
@@ -1367,7 +1376,7 @@
             /* remember all the chained next pointers and clear r->next */
             if (j >= n_next) {
                 n_next <<= 1;
-                mem_realloc_n_typed(next_r, n_next, SymReg *);
+                next_r = mem_gc_realloc_n_typed(interp, next_r, n_next, SymReg *);
             }
 
             r->next     = NULL;
@@ -1396,7 +1405,7 @@
 
 /*
 
-=item C<void _store_symreg(SymHash *hsh, SymReg *r)>
+=item C<void _store_symreg(PARROT_INTERP, SymHash *hsh, SymReg *r)>
 
 Stores a symbol in the hash (internal use only).
 
@@ -1405,7 +1414,7 @@
 */
 
 void
-_store_symreg(ARGMOD(SymHash *hsh), ARGMOD(SymReg *r))
+_store_symreg(PARROT_INTERP, ARGMOD(SymHash *hsh), ARGMOD(SymReg *r))
 {
     ASSERT_ARGS(_store_symreg)
     const int i = hash_str(r->name) % hsh->size;
@@ -1418,7 +1427,7 @@
     hsh->entries++;
 
     if (hsh->entries >= hsh->size)
-        resize_symhash(hsh);
+        resize_symhash(interp, hsh);
 }
 
 
@@ -1436,7 +1445,7 @@
 store_symreg(PARROT_INTERP, ARGMOD(SymReg *r))
 {
     ASSERT_ARGS(store_symreg)
-    _store_symreg(&IMCC_INFO(interp)->cur_unit->hash, r);
+    _store_symreg(interp, &IMCC_INFO(interp)->cur_unit->hash, r);
 }
 
 
@@ -1512,7 +1521,7 @@
     SymReg          *p;
 
     for (ns = nspace; ns; ns = ns->parent) {
-        char * const fullname = _mk_fullname(ns, name);
+        char * const fullname = _mk_fullname(interp, ns, name);
         p                     = _get_sym(hsh, fullname);
 
         mem_sys_free(fullname);

Modified: branches/ops_pct/compilers/imcc/symreg.h
==============================================================================
--- branches/ops_pct/compilers/imcc/symreg.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/imcc/symreg.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -138,14 +138,19 @@
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-SymReg * _mk_const(ARGMOD(SymHash *hsh), ARGIN(const char *name), int t)
+SymReg * _mk_const(PARROT_INTERP,
+    ARGMOD(SymHash *hsh),
+    ARGIN(const char *name),
+    int t)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*hsh);
 
-void _store_symreg(ARGMOD(SymHash *hsh), ARGMOD(SymReg *r))
+void _store_symreg(PARROT_INTERP, ARGMOD(SymHash *hsh), ARGMOD(SymReg *r))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*hsh)
         FUNC_MODIFIES(*r);
 
@@ -154,9 +159,10 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*unit);
 
-void add_pcc_arg(ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
+void add_pcc_arg(PARROT_INTERP, ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*r)
         FUNC_MODIFIES(*arg);
 
@@ -165,13 +171,17 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*r);
 
-void add_pcc_multi(ARGMOD(SymReg *r), ARGIN_NULLOK(SymReg *arg))
+void add_pcc_multi(PARROT_INTERP,
+    ARGMOD(SymReg *r),
+    ARGIN_NULLOK(SymReg *arg))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*r);
 
-void add_pcc_result(ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
+void add_pcc_result(PARROT_INTERP, ARGMOD(SymReg *r), ARGMOD(SymReg *arg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
         FUNC_MODIFIES(*r)
         FUNC_MODIFIES(*arg);
 
@@ -188,8 +198,9 @@
         __attribute__nonnull__(1)
         FUNC_MODIFIES(*hsh);
 
-void create_symhash(ARGOUT(SymHash *hash))
+void create_symhash(PARROT_INTERP, ARGOUT(SymHash *hash))
         __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
         FUNC_MODIFIES(*hash);
 
 void debug_dump_sym_hash(ARGIN(const SymHash *hsh))
@@ -197,8 +208,9 @@
 
 PARROT_MALLOC
 PARROT_CANNOT_RETURN_NULL
-SymReg * dup_sym(ARGIN(const SymReg *r))
-        __attribute__nonnull__(1);
+SymReg * dup_sym(PARROT_INTERP, ARGIN(const SymReg *r))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
@@ -338,24 +350,29 @@
     , PARROT_ASSERT_ARG(hsh) \
     , PARROT_ASSERT_ARG(name))
 #define ASSERT_ARGS__mk_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(hsh) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hsh) \
     , PARROT_ASSERT_ARG(name))
 #define ASSERT_ARGS__store_symreg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(hsh) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hsh) \
     , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_add_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(unit))
 #define ASSERT_ARGS_add_pcc_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(r) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(r) \
     , PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_add_pcc_cc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(r) \
     , PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_add_pcc_multi __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(r))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_add_pcc_result __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(r) \
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(r) \
     , PARROT_ASSERT_ARG(arg))
 #define ASSERT_ARGS_add_pcc_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(r) \
@@ -366,11 +383,13 @@
 #define ASSERT_ARGS_clear_sym_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(hsh))
 #define ASSERT_ARGS_create_symhash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(hash))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(hash))
 #define ASSERT_ARGS_debug_dump_sym_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(hsh))
 #define ASSERT_ARGS_dup_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(r))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(r))
 #define ASSERT_ARGS_find_sym __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))

Modified: branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t
==============================================================================
--- branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,9 @@
-#!/usr/bin/perl
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
 
 use lib ('./lib', '../../lib');
 use Parrot::Test::NCIGENAST;
@@ -16,3 +21,10 @@
 CODE
 
 contains("<complex> => PMC 'NCIGENAST;Struct'");
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t
==============================================================================
--- branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,9 @@
-#!/usr/bin/perl
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
 
 use lib ('./lib', '../../lib');
 use Parrot::Test::NCIGENAST;
@@ -24,3 +29,10 @@
 
 parse('int a(), b(), c()');
 parse_failure;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/compilers/ncigen/t/parse_00.t
==============================================================================
--- branches/ops_pct/compilers/ncigen/t/parse_00.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/ncigen/t/parse_00.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,9 @@
-#!/usr/bin/perl
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
 
 use lib ('./lib', '../../lib');
 use Parrot::Test::NCIGENAST;
@@ -120,7 +125,7 @@
 int a = 10 * sizeof(int) * 13;
 CODE
 
-parse_success(<<'CODE', 'times_04.c').c;
+parse_success(<<'CODE', 'times_04.c');
 int a = 8 * 3;
 CODE
 
@@ -173,3 +178,10 @@
 parse_success(<<'CODE', 'void_star.c');
 __extension__ typedef void * __timer_t;
 CODE
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/compilers/ncigen/t/parse_01.t
==============================================================================
--- branches/ops_pct/compilers/ncigen/t/parse_01.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/ncigen/t/parse_01.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,9 @@
-#!/usr/bin/perl
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
 
 use lib ('./lib', '../../lib');
 use Parrot::Test::NCIGENAST;
@@ -26,3 +31,10 @@
 int sqlite3_open( const char *filename, sqlite3 **ppDb);
 CODE
 
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/compilers/ncigen/t/parse_02.t
==============================================================================
--- branches/ops_pct/compilers/ncigen/t/parse_02.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/ncigen/t/parse_02.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,9 @@
-#!/usr/bin/perl
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
 
 use lib ('./lib', '../../lib');
 use Parrot::Test::NCIGENAST;
@@ -70,3 +75,10 @@
 parse_success(<<'CODE', 'Xlib.h 2');
 extern int (*XSetAfterFunction( Display* , int (*) ( Display*)))( Display*);
 CODE
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/compilers/pirc/src/bcgen.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/bcgen.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/bcgen.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -798,10 +798,10 @@
     /* A type_count of 1 means there was a :multi flag, but no :multi types.
      * therefore, create a special signature and return that.  */
     if (type_count == 1)
-        return pmc_new(bc->interp, enum_class_FixedIntegerArray);
+        return Parrot_pmc_new(bc->interp, enum_class_FixedIntegerArray);
 
     /* create a FixedPMCArray to store all multi types */
-    multi_signature = pmc_new(bc->interp, enum_class_FixedPMCArray);
+    multi_signature = Parrot_pmc_new(bc->interp, enum_class_FixedPMCArray);
 
     /* set its size as specified in type_count */
     VTABLE_set_integer_native(bc->interp, multi_signature, type_count);
@@ -818,7 +818,7 @@
                 /* add the string to the constant table, retrieve a pointer to the STRING */
                 STRING * typestring = add_string_const_from_cstring(bc, types[i].entry.ident);
                 /* create a new String PMC. */
-                sig_pmc = pmc_new(bc->interp, enum_class_String);
+                sig_pmc = Parrot_pmc_new(bc->interp, enum_class_String);
                 /* set the STRING in the String PMC */
                 VTABLE_set_string_native(bc->interp, sig_pmc, typestring);
                 break;
@@ -977,7 +977,7 @@
     STRING * const method      = string_from_literal(bc->interp, "declare_lex_preg");
 
     /* create a lexinfo PMC */
-    PMC * lex_info             = pmc_new_noinit(bc->interp, lex_info_id);
+    PMC * lex_info             = Parrot_pmc_new_noinit(bc->interp, lex_info_id);
     VTABLE_init_pmc(bc->interp, lex_info, sub);
 
     /* walk through the list of lexicals and register them */
@@ -1001,7 +1001,7 @@
      * :lex flag, then create the lex_info anyway.
      */
     if (lex_info == NULL && needlex) {
-        lex_info = pmc_new_noinit(bc->interp, lex_info_id);
+        lex_info = Parrot_pmc_new_noinit(bc->interp, lex_info_id);
         VTABLE_init_pmc(bc->interp, lex_info, sub);
     }
 
@@ -1108,7 +1108,7 @@
 
     switch (ns->entry_type) {
         case MULTI_TYPE_IDENT: {
-            PMC *namespace_pmc = constant_pmc_new(bc->interp, enum_class_String);
+            PMC *namespace_pmc = Parrot_pmc_new_constant(bc->interp, enum_class_String);
             PARROT_NAMESPACE(namespace_pmc)->name =
                 add_string_const_from_cstring(bc, ns->entry.ident);
             break;
@@ -1161,7 +1161,7 @@
                 Parrot_ex_throw_from_c_args(bc->interp, NULL, EXCEPTION_NO_CLASS,
                     "Requested sub class '%Ss' in :instanceof() not found", classname);
 
-            return pmc_new(bc->interp, type);
+            return Parrot_pmc_new(bc->interp, type);
         }
 
     }
@@ -1175,7 +1175,7 @@
      * TODO create constant - see also src/packfile.c
      * XXX is this (still) necessary?
      */
-    return pmc_new(bc->interp, type);
+    return Parrot_pmc_new(bc->interp, type);
 }
 
 /*

Modified: branches/ops_pct/compilers/pirc/src/main.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/main.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/main.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -27,7 +27,7 @@
 
 #endif
 
-
+/* HEADERIZER HFILE: none */
 
 /* XXX use pthreads library to test thread safety.
    does not work currently on windows.
@@ -47,6 +47,26 @@
 
 void * process_file(void *a);
 
+/* HEADERIZER HFILE: none */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void print_help(ARGIN(char const * const program_name))
+        __attribute__nonnull__(1);
+
+static void runcode(PARROT_INTERP, int argc, ARGIN(char *argv[]))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+#define ASSERT_ARGS_print_help __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(program_name))
+#define ASSERT_ARGS_runcode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(argv))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 
 =head1 FUNCTIONS
@@ -54,8 +74,7 @@
 =over 4
 
 
-=item C<static void
-print_help(char const * const program_name)>
+=item C<static void print_help(char const * const program_name)>
 
 Routine to print usage of this program.
 
@@ -63,7 +82,7 @@
 
 */
 static void
-print_help(char const * const program_name)
+print_help(ARGIN(char const * const program_name))
 {
     fprintf(stderr, "Usage: %s [options] <file>\n", program_name);
     fprintf(stderr, "Options:\n\n"
@@ -116,8 +135,10 @@
 Unpack the arguments and invoke parse_file().
 
 */
+PARROT_CAN_RETURN_NULL
 void *
-process_file(void *a) {
+process_file(ARGIN(void *a))
+{
 
 
     /* unpack the arguments from the structure parser_args */
@@ -137,8 +158,7 @@
 
 /*
 
-=item C<static void
-runcode(PARROT_INTERP, int argc, char *argv[])>
+=item C<static void runcode(PARROT_INTERP, int argc, char *argv[])>
 
 This function runs the code in the interpreter's (in C<PARROT_INTERP>)
 code segment.
@@ -147,7 +167,8 @@
 
 */
 static void
-runcode(PARROT_INTERP, int argc, char *argv[]) {
+runcode(PARROT_INTERP, int argc, ARGIN(char *argv[]))
+{
 
     /* runs :init functions */
     PackFile_fixup_subs(interp, PBC_MAIN, NULL);
@@ -159,8 +180,7 @@
 
 /*
 
-=item C<int
-main(int argc, char *argv[])>
+=item C<int main(int argc, char *argv[])>
 
 Main compiler driver.
 

Modified: branches/ops_pct/compilers/pirc/src/pir.y
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pir.y	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pir.y	Sun Mar  7 19:33:20 2010	(r44743)
@@ -88,6 +88,14 @@
 
 #endif
 
+/* HEADERIZER HFILE: none */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 char *expand_macro(yyscan_t yyscanner, macro_def * const macro, macro_param * args);
 
 /* Enumeration of mathematical operator types; these are used to index the opnames array. */

Modified: branches/ops_pct/compilers/pirc/src/pircapi.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircapi.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pircapi.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -180,6 +180,7 @@
 parse_string(PARROT_INTERP, ARGIN(char *pirstring), int flags, int pasminput,
     unsigned macro_size)
 {
+    ASSERT_ARGS(parse_string)
     yyscan_t            yyscanner;
     lexer_state        *lexer = NULL;
     char                name[64];

Modified: branches/ops_pct/compilers/pirc/src/pircompiler.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompiler.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pircompiler.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -15,6 +15,47 @@
 #include "pirregalloc.h"
 #include "pirerr.h"
 
+/* HEADERIZER HFILE: compilers/pirc/src/pircompiler.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+static char const * find_string(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const str))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static allocated_mem_ptrs * new_mem_ptrs_block(void);
+
+static void register_ptr(ARGIN(lexer_state *lexer), ARGIN(void *ptr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void store_string(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const str))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_find_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_new_mem_ptrs_block __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_register_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(ptr))
+#define ASSERT_ARGS_store_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(str))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /* XXX count memory, so we can check out mem. savings of string reuse
  * Only temporarily used, so no need to "fix" this.
  */
@@ -26,8 +67,7 @@
 
 =over 4
 
-=item C<static allocated_mem_ptrs *
-new_mem_ptrs_block(void)>
+=item C<static allocated_mem_ptrs * new_mem_ptrs_block(void)>
 
 Create a new C<allocated_mem_ptrs> block; all pointers to allocated memory
 within pirc are stored in such blocks. One block has space for a number of
@@ -41,14 +81,15 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 static allocated_mem_ptrs *
-new_mem_ptrs_block(void) {
+new_mem_ptrs_block(void)
+{
+    ASSERT_ARGS(new_mem_ptrs_block)
     return mem_allocate_zeroed_typed(allocated_mem_ptrs);
 }
 
 /*
 
-=item C<static void
-register_ptr(lexer_state *lexer, void *ptr)>
+=item C<static void register_ptr(lexer_state *lexer, void *ptr)>
 
 Store the pointer C<ptr> in a datastructure; whenever C<release_resources()>
 is invoked, C<ptr> will be freed through C<mem_sys_free()>.
@@ -57,7 +98,9 @@
 
 */
 static void
-register_ptr(NOTNULL(lexer_state *lexer), ARGIN(void *ptr)) {
+register_ptr(ARGIN(lexer_state *lexer), ARGIN(void *ptr))
+{
+    ASSERT_ARGS(register_ptr)
     allocated_mem_ptrs *ptrs = lexer->mem_allocations;
 
     PARROT_ASSERT(ptrs);
@@ -75,8 +118,8 @@
 
 /*
 
-=item C<void *
-pir_mem_allocate_zeroed(lexer_state * const lexer, size_t numbytes)>
+=item C<void * pir_mem_allocate_zeroed(lexer_state * const 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
@@ -92,7 +135,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 void *
-pir_mem_allocate_zeroed(NOTNULL(lexer_state * const lexer), size_t numbytes) {
+pir_mem_allocate_zeroed(ARGIN(lexer_state * const lexer), size_t numbytes)
+{
     void *ptr = mem_sys_allocate_zeroed(numbytes);
 
     totalmem += numbytes;
@@ -103,8 +147,7 @@
 
 /*
 
-=item C<void *
-pir_mem_allocate(NOTNULL(lexer_state * const lexer), size_t numbytes)>
+=item C<void * pir_mem_allocate(lexer_state * const lexer, size_t numbytes)>
 
 See C<pir_mem_allocate_zeroed()>. Memory is C<not> guaranteed to be zeroed.
 (It might, it might not, depending on what your system finds appropriate.
@@ -117,7 +160,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 void *
-pir_mem_allocate(NOTNULL(lexer_state * const lexer), size_t numbytes) {
+pir_mem_allocate(ARGIN(lexer_state * const lexer), size_t numbytes)
+{
     void *ptr = mem_sys_allocate(numbytes);
 
     totalmem += numbytes;
@@ -129,8 +173,8 @@
 
 /*
 
-=item C<void
-init_hashtable(lexer_state * const lexer, hashtable * const table, unsigned size)>
+=item C<void init_hashtable(lexer_state * const lexer, hashtable * const table,
+unsigned size)>
 
 Initialize the hashtable C<table> with space for C<size> buckets.
 
@@ -138,7 +182,7 @@
 
 */
 void
-init_hashtable(NOTNULL(lexer_state * const lexer), NOTNULL(hashtable * const table),
+init_hashtable(ARGIN(lexer_state * const lexer), ARGIN(hashtable * const table),
                unsigned size)
 {
     table->contents  = (bucket **)pir_mem_allocate_zeroed(lexer, size * sizeof (bucket *));
@@ -148,8 +192,8 @@
 
 /*
 
-=item C<lexer_state *
-new_lexer(char * const filename, int flags)>
+=item C<lexer_state * new_lexer(PARROT_INTERP, char * const filename, int
+flags)>
 
 Constructor for a lexer structure. Initializes all fields, creates
 a Parrot interpreter structure.
@@ -161,7 +205,8 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 lexer_state *
-new_lexer(PARROT_INTERP, NULLOK(char * const filename), int flags) {
+new_lexer(PARROT_INTERP, ARGIN_NULLOK(char * const filename), int flags)
+{
     lexer_state *lexer       = mem_allocate_zeroed_typed(lexer_state);
     lexer->filename          = filename;
     lexer->interp            = interp;
@@ -207,8 +252,7 @@
 
 /*
 
-=item C<bucket *
-new_bucket(lexer_state * const lexer)>
+=item C<bucket * new_bucket(lexer_state * const lexer)>
 
 Constructor for a bucket object.
 
@@ -218,14 +262,15 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 bucket *
-new_bucket(NOTNULL(lexer_state * const lexer)) {
+new_bucket(ARGIN(lexer_state * const lexer))
+{
     return pir_mem_allocate_zeroed_typed(lexer, bucket);
 }
 
 /*
 
-=item C<static void
-store_string(lexer_state * const lexer, char const * const str)>
+=item C<static void store_string(lexer_state * const lexer, char const * const
+str)>
 
 Store the string C<str> in a hashtable; whenever this string is needed, a pointer
 to the same physical string is returned, preventing allocating different buffers
@@ -236,7 +281,9 @@
 
 */
 static void
-store_string(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const str)) {
+store_string(ARGIN(lexer_state * const lexer), ARGIN(char const * const str))
+{
+    ASSERT_ARGS(store_string)
     hashtable    *table = &lexer->strings;
     unsigned long hash  = get_hashcode(str, table->size);
     bucket *b           = new_bucket(lexer);
@@ -246,8 +293,8 @@
 
 /*
 
-=item C<static char const *
-find_string(lexer_state * const lexer, char const * const str)>
+=item C<static char const * find_string(lexer_state * const lexer, char const *
+const str)>
 
 Find the string C<str> in the lexer's string hashtable. If the string was found,
 then a pointer to that buffer is returned. So, whenever for instance the string
@@ -260,7 +307,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static char const *
-find_string(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const str)) {
+find_string(ARGIN(lexer_state * const lexer), ARGIN(char const * const str))
+{
+    ASSERT_ARGS(find_string)
     hashtable    *table = &lexer->strings;
     unsigned long hash  = get_hashcode(str, table->size);
     bucket *b           = get_bucket(table, hash);
@@ -278,8 +327,8 @@
 
 /*
 
-=item C<char *
-dupstrn(lexer_state * const lexer, char const * const source, size_t slen)>
+=item C<char const * dupstrn(lexer_state * const lexer, char * const source,
+size_t slen)>
 
 See dupstr, except that this version takes the number of characters to be
 copied. Easy for copying a string except the quotes, for instance.
@@ -293,7 +342,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 char const *
-dupstrn(NOTNULL(lexer_state * const lexer), NOTNULL(char * const source), size_t slen) {
+dupstrn(ARGIN(lexer_state * const lexer), ARGIN(char * const source), size_t slen)
+{
     char const * result = find_string(lexer, source);
     /* make sure the string is terminated in time */
     source[slen] = '\0';
@@ -313,8 +363,7 @@
 
 /*
 
-=item C<char *
-dupstr(lexer_state * const lexer, char const * const source)>
+=item C<char const * dupstr(lexer_state * const lexer, char * const source)>
 
 The C89 standard does not define a strdup() in the C library,
 so define our own strdup. Function names beginning with "str"
@@ -327,14 +376,14 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 char const *
-dupstr(NOTNULL(lexer_state * const lexer), NOTNULL(char * const source)) {
+dupstr(ARGIN(lexer_state * const lexer), ARGIN(char * const source))
+{
     return dupstrn(lexer, source, strlen(source));
 }
 
 /*
 
-=item C<void
-release_resources(lexer_state *lexer)>
+=item C<void release_resources(lexer_state *lexer)>
 
 Release all resources pointed to by C<lexer>.
 Free all memory that was allocated through C<pir_mem_allocate_zeroed()>.
@@ -344,7 +393,8 @@
 
 */
 void
-release_resources(NOTNULL(lexer_state *lexer)) {
+release_resources(ARGIN(lexer_state *lexer))
+{
     allocated_mem_ptrs *iter;
 
     if (TEST_FLAG(lexer->flags, LEXER_FLAG_VERBOSE))
@@ -375,8 +425,8 @@
 
 /*
 
-=item C<void
-pirwarning(lexer_state * const lexer, int lineno, char const * const message, ...)>
+=item C<void pirwarning(lexer_state * const lexer, int lineno, char const *
+const message, ...)>
 
 Emit a warning message to C<stderr>. The line number (passed in C<lineno>) is reported,
 together with the message. The message can be formatted, meaning it can contain
@@ -387,7 +437,11 @@
 
 */
 void
-pirwarning(lexer_state * const lexer, int lineno, char const * const message, ...) {
+pirwarning(ARGIN(lexer_state * const lexer),
+        int lineno,
+        ARGIN(char const * const message),
+        ...)
+{
     va_list arg_ptr;
     fprintf(stderr, "warning (line %d): ", lineno);
     va_start(arg_ptr, message);

Modified: branches/ops_pct/compilers/pirc/src/pircompiler.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompiler.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pircompiler.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -158,20 +158,6 @@
 /* accessor for current macro; always first on the list. */
 #define CURRENT_MACRO(X)    (X)->macros->definitions
 
-
-/* constructor for a lexer_state object */
-lexer_state *new_lexer(PARROT_INTERP, char * const filename, int flags);
-
-void release_resources(lexer_state *lexer);
-
-char const *dupstr(lexer_state * const lexer, char * const str);
-
-char const *dupstrn(lexer_state * const lexer, char * const str, size_t numchars);
-
-bucket *new_bucket(lexer_state * const lexer);
-
-void init_hashtable(lexer_state * const lexer, hashtable * const table, unsigned size);
-
 /* same trick as in parrot's memory system, for "automagic" casting */
 #define pir_mem_allocate_zeroed_typed(lxr, type) (type *)pir_mem_allocate_zeroed(lxr, sizeof (type))
 
@@ -179,11 +165,97 @@
  * allocated will be freed after the compilation. If you only need some memory temporarily
  * and freeing can be done soon after (manually), then use parrot's mem_sys_allocate().
  */
-void *pir_mem_allocate_zeroed(lexer_state * const lexer, size_t numbytes);
 
-void *pir_mem_allocate(lexer_state * const lexer, size_t numbytes);
+/* HEADERIZER BEGIN: compilers/pirc/src/pircompiler.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+char const * dupstr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char * const source))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+char const * dupstrn(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char * const source),
+    size_t slen)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void init_hashtable(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(hashtable * const table),
+    unsigned size)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+bucket * new_bucket(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+lexer_state * new_lexer(PARROT_INTERP,
+    ARGIN_NULLOK(char * const filename),
+    int flags)
+        __attribute__nonnull__(1);
+
+PARROT_MALLOC
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+void * pir_mem_allocate(ARGIN(lexer_state * const lexer), size_t numbytes)
+        __attribute__nonnull__(1);
+
+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 pirwarning(
+    ARGIN(lexer_state * const lexer),
+    int lineno,
+    ARGIN(char const * const message),
+    ...)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+void release_resources(ARGIN(lexer_state *lexer))
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_dupstr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(source))
+#define ASSERT_ARGS_dupstrn __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(source))
+#define ASSERT_ARGS_init_hashtable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(table))
+#define ASSERT_ARGS_new_bucket __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_new_lexer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pir_mem_allocate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_pir_mem_allocate_zeroed __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_pirwarning __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(message))
+#define ASSERT_ARGS_release_resources __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/pircompiler.c */
 
-void pirwarning(lexer_state * const lexer, int lineno, char const * const message, ...);
 
 #endif /* PARROT_PIR_PIRCOMPILER_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/src/pircompunit.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompunit.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pircompunit.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -44,6 +44,93 @@
 #include "parrot/dynext.h"
 #include "pmc/pmc_callcontext.h"
 
+/* HEADERIZER HFILE: compilers/pirc/src/pircompunit.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void add_self_parameter(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static constant * create_const(
+    ARGIN(lexer_state * const lexer),
+    value_type type,
+    va_list arg_ptr)
+        __attribute__nonnull__(1);
+
+static void fixup_local_labels(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static expression * new_expr(
+    ARGIN(lexer_state * const lexer),
+    expr_type type)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static instruction * new_instruction(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const opname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static invocation * new_invocation(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static key_entry * new_key_entry(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const expr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static label * new_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const labelid),
+    int offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void new_statement(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const opname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_add_self_parameter __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_create_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_fixup_local_labels __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_new_expr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_new_instruction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(opname))
+#define ASSERT_ARGS_new_invocation __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_new_key_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(expr))
+#define ASSERT_ARGS_new_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(labelid))
+#define ASSERT_ARGS_new_statement __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(opname))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
 
 static unsigned const prime_numbers[] = {113 /* XXX think of more primes */ };
 
@@ -53,8 +140,7 @@
 
 =over 4
 
-=item C<void
-reset_register_allocator(lexer_state * const lexer)>
+=item C<void reset_register_allocator(lexer_state * const lexer)>
 
 Reset the register numbers for all types. After this
 function has been invoked, the next request for a new
@@ -65,7 +151,8 @@
 
 */
 void
-reset_register_allocator(lexer_state * const lexer) {
+reset_register_allocator(ARGIN(lexer_state * const lexer))
+{
     /* set register allocator to 0 for all register types. */
     int i;
     for (i = 0; i < NUM_PARROT_TYPES; ++i)
@@ -75,8 +162,7 @@
 
 /*
 
-=item C<void
-set_namespace(lexer_state * const lexer, key * const ns)>
+=item C<void set_namespace(lexer_state * const lexer, key * const ns)>
 
 Set the current namespace in the lexer state, so that it is
 available when needed, i.e. when a new subroutine node is
@@ -86,14 +172,15 @@
 
 */
 void
-set_namespace(lexer_state * const lexer, key * const ns) {
+set_namespace(ARGIN(lexer_state * const lexer), ARGIN(key * const ns))
+{
     lexer->current_ns = ns;
 }
 
 /*
 
-=item C<void
-set_sub_outer(lexer_state * const lexer, char const * const outersub)>
+=item C<void set_sub_outer(lexer_state * const lexer, char const * const
+outersub)>
 
 Set the lexically enclosing sub for the current sub.
 Thus, set the :outer() argument to the current subroutine.
@@ -102,7 +189,9 @@
 
 */
 void
-set_sub_outer(lexer_state * const lexer, char const * const outersub) {
+set_sub_outer(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const outersub))
+{
     CURRENT_SUB(lexer)->info.outersub = outersub;
     SET_FLAG(lexer->subs->flags, PIRC_SUB_FLAG_HAS_OUTER);
 }
@@ -112,7 +201,7 @@
 /*
 
 =item C<void
-set_sub_multi_type(lexer_state * const lexer, expression * const multitype)>
+set_sub_multi_type(ARGIN(lexer_state * const lexer), expression * const multitype)>
 
 Add the multi-method signature type in C<multitype> to the current subroutine.
 
@@ -120,7 +209,9 @@
 
 */
 void
-set_sub_multi_types(lexer_state * const lexer, expression * const multitype) {
+set_sub_multi_types(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const multitype))
+{
     /* info.num_types is 1 higher than the actual number of types;
      * n=1 means :multi() without any types; therefore, subtract 1 for actual number.
      */
@@ -159,8 +250,7 @@
 
 /*
 
-=item C<static void
-add_self_parameter(lexer_state * const lexer)>
+=item C<static void add_self_parameter(lexer_state * const lexer)>
 
 Add a parameter named C<"self"> to the current subroutine, but only
 if both :vtable and :method flags have I<not> been set yet. If either
@@ -170,7 +260,8 @@
 
 */
 static void
-add_self_parameter(lexer_state * const lexer) {
+add_self_parameter(ARGIN(lexer_state * const lexer))
+{
     /* only add "self" parameter if :vtable and :method flags have not been set yet */
     if (!TEST_FLAG(CURRENT_SUB(lexer)->flags, (PIRC_SUB_FLAG_VTABLE | PIRC_SUB_FLAG_METHOD))) {
 
@@ -180,8 +271,7 @@
 
 /*
 
-=item C<void
-set_sub_vtable(lexer_state * const lexer, char const * vtablename)>
+=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.
@@ -192,7 +282,9 @@
 
 */
 void
-set_sub_vtable(lexer_state * const lexer, char const * vtablename) {
+set_sub_vtable(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * vtablename))
+{
     int vtable_index;
 
     if (vtablename == NULL)  /* the sub's name I<is> the vtablename */
@@ -226,8 +318,7 @@
 
 /*
 
-=item C<void
-set_sub_subid(lexer_state * const lexer, char const * const subid)>
+=item C<void set_sub_subid(lexer_state * const lexer, char const * const subid)>
 
 Set the name specified in the :subid flag on the sub.
 
@@ -235,15 +326,17 @@
 
 */
 void
-set_sub_subid(lexer_state * const lexer, char const * const subid) {
+set_sub_subid(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const subid))
+{
     CURRENT_SUB(lexer)->info.subid = subid;
     SET_FLAG(lexer->subs->flags, PIRC_SUB_FLAG_SUBID);
 }
 
 /*
 
-=item C<void
-set_sub_methodname(lexer_state * const lexer, char const * const methodname)>
+=item C<void set_sub_methodname(lexer_state * const lexer, char const * const
+methodname)>
 
 Set the :method flag on a sub; if C<methodname> is not NULL, then it contains
 the name by which the sub is stored as a method.
@@ -252,7 +345,9 @@
 
 */
 void
-set_sub_methodname(lexer_state * const lexer, char const * const methodname) {
+set_sub_methodname(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const methodname))
+{
     if (methodname) /* :method("foo") */
         CURRENT_SUB(lexer)->methodname = methodname;
     else /* :method without a value defaults to the subname. */
@@ -268,8 +363,8 @@
 
 /*
 
-=item C<void
-set_sub_instanceof(lexer_state * const lexer, char const * const classname)>
+=item C<void set_sub_instanceof(lexer_state * const lexer, char const * const
+classname)>
 
 Set the value of the C<:instanceof> flag on a sub. Note that this flag
 is experimental, and not actually used at this point.
@@ -278,14 +373,16 @@
 
 */
 void
-set_sub_instanceof(lexer_state * const lexer, char const * const classname) {
+set_sub_instanceof(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const classname))
+{
     CURRENT_SUB(lexer)->info.instanceof = classname;
 }
 
 /*
 
-=item C<void
-set_sub_nsentry(lexer_state * const lexer, char const * const nsentry)>
+=item C<void set_sub_nsentry(lexer_state * const lexer, char const * const
+nsentry)>
 
 Set the value of the C<:nsentry> flag on a sub. The value of C<nsentry> is the name
 by which the sub is stored in the namespace.
@@ -294,14 +391,15 @@
 
 */
 void
-set_sub_nsentry(lexer_state * const lexer, char const * const nsentry) {
+set_sub_nsentry(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const nsentry))
+{
     CURRENT_SUB(lexer)->info.nsentry = nsentry;
 }
 
 /*
 
-=item C<void
-set_sub_flag(lexer_state * const lexer, sub_flag flag)>
+=item C<void set_sub_flag(lexer_state * const lexer, sub_flag flag)>
 
 Set a subroutine flag on the current sub. The C<flag> parameter may encode
 multiple flags.
@@ -310,7 +408,8 @@
 
 */
 void
-set_sub_flag(lexer_state * const lexer, sub_flag flag) {
+set_sub_flag(ARGIN(lexer_state * const lexer), sub_flag flag)
+{
     /* set the specified flag in the current subroutine */
     SET_FLAG(CURRENT_SUB(lexer)->flags, flag);
 
@@ -318,8 +417,7 @@
 
 /*
 
-=item C<void
-new_subr(lexer_state * const lexer, char const * const subname)>
+=item C<void new_subr(lexer_state * const lexer, STRING *subname)>
 
 Create a new subroutine node, and set it as the "current"
 subroutine, on which all other sub-related operations do
@@ -329,7 +427,8 @@
 
 */
 void
-new_subr(lexer_state * const lexer, STRING *subname) {
+new_subr(ARGIN(lexer_state * const lexer), ARGIN(STRING *subname))
+{
     subroutine *newsub       = pir_mem_allocate_zeroed_typed(lexer, subroutine);
     int         index;
 
@@ -380,8 +479,8 @@
 
 /*
 
-=item C<void
-set_sub_name(lexer_state * const lexer, char const * const subname)>
+=item C<void set_sub_name(lexer_state * const lexer, char const * const
+subname)>
 
 Set the current subroutine's name to C<subname>.
 
@@ -389,23 +488,29 @@
 
 */
 void
-set_sub_name(lexer_state * const lexer, char const * const subname) {
+set_sub_name(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const subname))
+{
     CURRENT_SUB(lexer)->info.subname = subname;
 }
 
 
 /*
 
-=item C<static instruction *
-new_instruction(lexer_state * const lexer, char const * const opname)>
+=item C<static instruction * new_instruction(lexer_state * const lexer, char
+const * const opname)>
 
 Create a new instruction node and set C<opname> as the instruction.
 
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static instruction *
-new_instruction(lexer_state * const lexer, char const * const opname) {
+new_instruction(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const opname))
+{
     instruction *ins = pir_mem_allocate_zeroed_typed(lexer, instruction);
     ins->opname      = opname;
     ins->opcode      = -1; /* make sure this field is properly initialized;
@@ -416,8 +521,8 @@
 
 /*
 
-=item C<static void
-new_statement(lexer_state * const lexer, char const * const opname)>
+=item C<static void new_statement(lexer_state * const lexer, char const * const
+opname)>
 
 Constructor for a statement. The newly allocated statement will be inserted
 into the current subroutine's statements list.
@@ -426,7 +531,9 @@
 
 */
 static void
-new_statement(lexer_state * const lexer, char const * const opname) {
+new_statement(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const opname))
+{
     instruction *instr = new_instruction(lexer, opname);
 
     /* Each instruction has a sequence number to be able to
@@ -458,8 +565,7 @@
 
 /*
 
-=item C<void
-set_curtarget(lexer_state * const lexer, target * const t)>
+=item C<target * set_curtarget(lexer_state * const lexer, target * const t)>
 
 Sets the target C<t> as the current target in C<lexer> to
 make it accessible to other parse actions. C<t> is returned.
@@ -470,15 +576,15 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-set_curtarget(lexer_state * const lexer, target * const t) {
+set_curtarget(ARGIN(lexer_state * const lexer), ARGIN(target * const t))
+{
     lexer->curtarget = t;
     return t;
 }
 
 /*
 
-=item C<argument *
-set_curarg(lexer_state * const lexer, argument * const arg)>
+=item C<argument * set_curarg(lexer_state * const lexer, argument * const arg)>
 
 Sets the argument C<arg> as the current argument in C<lexer>
 to make it accessible to other parse actions. C<arg> is returned.
@@ -489,15 +595,17 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 argument *
-set_curarg(lexer_state * const lexer, argument * const arg) {
+set_curarg(ARGIN(lexer_state * const lexer),
+        ARGIN(argument * const arg))
+{
     lexer->curarg = arg;
     return arg;
 }
 
 /*
 
-=item C<int
-targets_equal(target const * const left, target const * const right)>
+=item C<int targets_equal(target const * const left, target const * const
+right)>
 
 Returns true if C<left> equals C<right>, false otherwise. C<left> is
 considered to be equal to C<right> if any of the following conditions
@@ -519,7 +627,9 @@
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 int
-targets_equal(target const * const left, target const * const right) {
+targets_equal(ARGIN(target const * const left),
+        ARGIN(target const * const right))
+{
 
 
     if (TEST_FLAG(left->flags, TARGET_FLAG_IS_REG)) {      /* if left is a reg */
@@ -550,8 +660,7 @@
 
 /*
 
-=item C<target *
-new_target(lexer_state * const lexer)>
+=item C<target * new_target(lexer_state * const lexer)>
 
 Create a new target node. The node's next pointer is initialized to itself.
 
@@ -561,7 +670,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-new_target(lexer_state * const lexer) {
+new_target(ARGIN(lexer_state * const lexer))
+{
     target *t       = pir_mem_allocate_zeroed_typed(lexer, target);
     t->key          = NULL;
     t->next         = t; /* circly linked list */
@@ -569,8 +679,7 @@
 }
 
 /*
-=item C<void
-set_target_key(target * const t, key * const k)>
+=item C<void set_target_key(target * const t, key * const k)>
 
 Set the key C<k> on target C<t>. For instance:
 
@@ -582,14 +691,15 @@
 
 */
 void
-set_target_key(target * const t, key * const k) {
+set_target_key(ARGIN(target * const t), ARGIN(key * const 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 * const lexer, symbol * const
+sym)>
 
 Convert symbol C<sym> into a target node. The resulting target has
 a pointer to C<sym>.
@@ -600,7 +710,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-target_from_symbol(lexer_state * const lexer, symbol * const sym) {
+target_from_symbol(ARGIN(lexer_state * const lexer),
+        ARGIN(symbol * const sym))
+{
     target *t  = new_target(lexer);
 
     t->flags   = sym->flags; /* copy the flags */
@@ -611,8 +723,8 @@
 
 /*
 
-=item C<target *
-add_target(lexer_state * const lexer, target *last, target * const t)>
+=item C<target * add_target(lexer_state * const lexer, target *last, target *
+const t)>
 
 Add a new target to the list pointed to by C<list>. C<list> points to
 the last element, C<<last->next>> points to the first. The list is
@@ -626,7 +738,9 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-add_target(lexer_state * const lexer, target *last, target * const t) {
+add_target(ARGIN(lexer_state * const lexer),
+        ARGMOD(target *last), ARGIN(target * const t))
+{
     PARROT_ASSERT(last);
     PARROT_ASSERT(t);
 
@@ -640,8 +754,8 @@
 
 /*
 
-=item C<target *
-add_param(lexer_state * const lexer, pir_type type, char const * const name)>
+=item C<target * add_param(lexer_state * const lexer, pir_type type, char const
+* const name)>
 
 Add a parameter of type C<type> and named C<name> to the current
 subroutine. The parameter will be declared as a local symbol in the
@@ -653,7 +767,9 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-add_param(lexer_state * const lexer, pir_type type, char const * const name) {
+add_param(ARGIN(lexer_state * const lexer), pir_type type,
+        ARGIN(char const * const name))
+{
     target *targ = new_target(lexer);
     symbol *sym  = new_symbol(lexer, name, type);
 
@@ -688,8 +804,8 @@
 
 /*
 
-=item C<void
-set_param_alias(lexer_state * const lexer, char const * const alias)>
+=item C<target * set_param_alias(lexer_state * const lexer, char const * const
+alias)>
 
 Set the argument of the :named flag for the current target
 (parameter). Returns the current target (parameter). This function assumes
@@ -702,7 +818,9 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-set_param_alias(lexer_state * const lexer, char const * const alias) {
+set_param_alias(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const alias))
+{
     PARROT_ASSERT(lexer->curtarget != NULL);
 
     /* if no alias was specified, default to the target's name, if it's not a register. */
@@ -722,8 +840,8 @@
 
 /*
 
-=item C<void
-set_param_flag(lexer_state * const lexer, target * const param, target_flag flag)>
+=item C<target * set_param_flag(lexer_state * const lexer, target * const param,
+target_flag flag)>
 
 Set the flag C<flag> on parameter C<param>. The actual value
 of C<flag> may encode several flags at a time. Returns C<param>.
@@ -734,7 +852,9 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-set_param_flag(lexer_state * const lexer, target * const param, target_flag flag) {
+set_param_flag(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const param), target_flag flag)
+{
     SET_FLAG(param->flags, flag);
 
     /* note that param is always an identifier; registers are not allowed as parameters.
@@ -757,8 +877,8 @@
 
 /*
 
-=item C<argument *
-new_argument(lexer_state * const lexer, expression * const expr)>
+=item C<argument * new_argument(lexer_state * const lexer, expression * const
+expr)>
 
 Create a new argument node which wraps C<expr>. The new argument node
 is circular linked, meaning its C<next> pointer points to itself.
@@ -769,7 +889,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 argument *
-new_argument(lexer_state * const lexer, expression * const expr) {
+new_argument(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const expr))
+{
     argument *arg = pir_mem_allocate_zeroed_typed(lexer, argument);
     arg->value    = expr;
     arg->next     = arg;
@@ -780,8 +902,7 @@
 
 /*
 
-=item C<argument *
-add_arg(argument *last, argument * const newarg)>
+=item C<argument * add_arg(argument *last, argument * const newarg)>
 
 Add argument C<newarg> at the end of the list pointed to by C<last>.
 The list is circular linked, and C<last> points to the last item.
@@ -796,7 +917,8 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 argument *
-add_arg(argument *last, argument * const newarg) {
+add_arg(ARGMOD(argument *last), ARGIN(argument * const newarg))
+{
     PARROT_ASSERT(last);
     PARROT_ASSERT(newarg);
 
@@ -809,8 +931,7 @@
 
 /*
 
-=item C<void
-unshift_arg(invocation * const inv, argument * const newarg)>
+=item C<argument * unshift_arg(invocation * const inv, argument * const newarg)>
 
 Unshift argument C<newarg> on an invocation object. The number
 of arguments in the list of C<inv> is incremented to reflect
@@ -839,7 +960,8 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 argument *
-unshift_arg(invocation * const inv, argument * const newarg) {
+unshift_arg(ARGIN(invocation * const inv), ARGIN(argument * const newarg))
+{
     ++inv->num_arguments;
 
     if (inv->arguments) {
@@ -854,8 +976,7 @@
 
 /*
 
-=item C<void
-set_arg_flag(argument * const arg, arg_flag flag)>
+=item C<argument * set_arg_flag(argument * const arg, arg_flag flag)>
 
 Set the flag C<flag> on argument C<arg>. Note the C<flag> may
 encode multiple flags. C<arg> is returned.
@@ -866,15 +987,16 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 argument *
-set_arg_flag(argument * const arg, arg_flag flag) {
+set_arg_flag(ARGIN(argument * const arg), arg_flag flag)
+{
     SET_FLAG(arg->flags, flag);
     return arg;
 }
 
 /*
 
-=item C<void
-set_arg_alias(lexer_state * const lexer, char const * const alias)>
+=item C<argument * set_arg_alias(lexer_state * const lexer, char const * const
+alias)>
 
 Set the alias specified in C<alias> on the current argument, accessible
 through C<lexer>. The alias is the name under which the argument is passed
@@ -887,7 +1009,9 @@
 PARROT_IGNORABLE_RESULT
 PARROT_CANNOT_RETURN_NULL
 argument *
-set_arg_alias(lexer_state * const lexer, char const * const alias) {
+set_arg_alias(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const alias))
+{
     PARROT_ASSERT(lexer->curarg != NULL);
     lexer->curarg->alias = alias;
     SET_FLAG(lexer->curarg->flags, ARG_FLAG_NAMED);
@@ -896,8 +1020,8 @@
 
 /*
 
-=item C<void
-load_library(lexer_state * const lexer, char const * const library)>
+=item C<void load_library(lexer_state * const lexer, char const * const
+library)>
 
 Load the library indicated by C<library>.
 
@@ -905,7 +1029,9 @@
 
 */
 void
-load_library(lexer_state * const lexer, char const * const library) {
+load_library(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const library))
+{
     /* see imcc.y:600 */
     STRING *libname       = Parrot_str_new(lexer->interp, library, strlen(library));
     PMC    *ignored_value = Parrot_load_lib(lexer->interp, libname, NULL);
@@ -916,8 +1042,7 @@
 
 /*
 
-=item C<void
-set_label(lexer_state * const lexer, char const * const label)>
+=item C<void set_label(lexer_state * const lexer, char const * const labelname)>
 
 Set the label C<label> on the current instruction.
 
@@ -925,7 +1050,9 @@
 
 */
 void
-set_label(lexer_state * const lexer, char const * const labelname) {
+set_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const labelname))
+{
     instruction *instr = CURRENT_INSTRUCTION(lexer);
 
     PARROT_ASSERT(instr);
@@ -954,8 +1081,7 @@
 
 /*
 
-=item C<void
-set_instr(lexer_state * const lexer, char const * const opname)>
+=item C<void set_instr(lexer_state * const lexer, char const * const opname)>
 
 Sets C<opname> to the current instruction, without operands. This is a
 wrapper function for C<set_instrf> to prevent calls with an empty format
@@ -965,14 +1091,15 @@
 
 */
 void
-set_instr(lexer_state * const lexer, char const * const opname) {
+set_instr(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const opname))
+{
     set_instrf(lexer, opname, "");
 }
 
 /*
 
-=item C<void
-update_instr(lexer_state * const lexer, char * const newop)>
+=item C<void update_instr(lexer_state * const lexer, char const * const newop)>
 
 Update the current instruction; the new opname is given by C<newop>.
 
@@ -980,7 +1107,9 @@
 
 */
 void
-update_instr(lexer_state * const lexer, char const * const newop) {
+update_instr(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const newop))
+{
     PARROT_ASSERT(CURRENT_INSTRUCTION(lexer));
     CURRENT_INSTRUCTION(lexer)->opname = newop;
 }
@@ -1023,8 +1152,8 @@
 
 /*
 
-=item C<void
-set_instrf(lexer_state *lexer, char *opname, char const * const format, ...)>
+=item C<void set_instrf(lexer_state * const lexer, char const * const opname,
+char const * const format, ...)>
 
 Set the specified instruction, using the operands from the vararg list. The
 number and types of operands is specified by C<format>. The type of the
@@ -1061,7 +1190,11 @@
 
 */
 void
-set_instrf(lexer_state * const lexer, char const * const opname, char const * const format, ...) {
+set_instrf(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const opname),
+        ARGIN(char const * const format),
+        ...)
+{
     va_list  arg_ptr;       /* for the var. args */
     unsigned i;             /* loop iterator */
     size_t   format_length; /* length of the format string. */
@@ -1092,8 +1225,8 @@
 
 /*
 
-=item C<void
-add_operands(lexer_state * const lexer, char const * const format, ...)>
+=item C<void add_operands(lexer_state * const lexer, char const * const format,
+...)>
 
 Add operands to the current instruction. This is a variable argument function;
 C<format> contains placeholders, see the macro C<get_instr_var_arg> above
@@ -1104,7 +1237,10 @@
 
 */
 void
-add_operands(lexer_state * const lexer, char const * const format, ...) {
+add_operands(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const format),
+        ...)
+{
     va_list  arg_ptr;       /* for the var. args */
     unsigned i;             /* loop iterator */
     size_t   format_length; /* length of the format string. */
@@ -1132,8 +1268,7 @@
 
 /*
 
-=item C<void
-set_op_labelflag(lexer_state * const lexer, int flag)>
+=item C<void set_op_labelflag(lexer_state * const lexer, int flag)>
 
 Set a flag on the current instruction that it contains labels as operands.
 The bit indicates which operand, count starting from bit 1.
@@ -1142,15 +1277,15 @@
 
 */
 void
-set_op_labelflag(lexer_state * const lexer, int flag) {
+set_op_labelflag(ARGIN(lexer_state * const lexer), int flag)
+{
     PARROT_ASSERT(CURRENT_INSTRUCTION(lexer));
     SET_FLAG(CURRENT_INSTRUCTION(lexer)->oplabelbits, flag);
 }
 
 /*
 
-=item C<char *
-get_inverse(char *instr)>
+=item C<char const * get_inverse(char const * const instr)>
 
 Returns the instruction with inversed semantics; for instance
 C<if> becomes C<unless>, C<greater-than> becomes C<less-or-equals>.
@@ -1159,8 +1294,10 @@
 
 */
 PARROT_CONST_FUNCTION
+PARROT_CANNOT_RETURN_NULL
 char const *
-get_inverse(char const * const instr) {
+get_inverse(ARGIN(char const * const instr))
+{
          if (STREQ(instr, "if")) return "unless";
     else if (STREQ(instr, "gt")) return "le";
     else if (STREQ(instr, "ge")) return "lt";
@@ -1175,8 +1312,7 @@
 
 /*
 
-=item C<void
-invert_instr(lexer_state *lexer)>
+=item C<void invert_instr(lexer_state * const lexer)>
 
 Invert the current instruction. This function assumes there is an instruction
 already in place.
@@ -1185,7 +1321,8 @@
 
 */
 void
-invert_instr(lexer_state * const lexer) {
+invert_instr(ARGIN(lexer_state * const lexer))
+{
     instruction * const  ins   = CURRENT_INSTRUCTION(lexer);
     char          const *instr;
     PARROT_ASSERT(ins);
@@ -1199,8 +1336,7 @@
 
 /*
 
-=item C<expression *
-get_operand(lexer_state * const lexer, short n)>
+=item C<expression * get_operand(lexer_state * const lexer, short n)>
 
 Get the C<n>th operand from the current instruction. If there are no
 operands, NULL is returned. Because the operands are stored in a
@@ -1216,7 +1352,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-get_operand(lexer_state * const lexer, short n) {
+get_operand(ARGIN(lexer_state * const lexer), short n)
+{
     expression *operand = CURRENT_INSTRUCTION(lexer)->operands;
 
     if (operand == NULL)
@@ -1241,8 +1378,7 @@
 
 /*
 
-=item C<void
-get_operands(lexer_state * const lexer, int bitmask, ...)>
+=item C<void get_operands(lexer_state * const lexer, int bitmask, ...)>
 
 Get operands from the current instruction. C<bitmask> indicates which operands
 are requested; if the C<i>th bit is set, the C<i>th operand is returned in a
@@ -1255,7 +1391,8 @@
 
 */
 void
-get_operands(lexer_state * const lexer, int bitmask, ...) {
+get_operands(ARGIN(lexer_state * const lexer), int bitmask, ...)
+{
     instruction *instr   = CURRENT_INSTRUCTION(lexer);
     expression  *iter    = instr->operands;
     int          numargs;
@@ -1292,8 +1429,7 @@
 
 /*
 
-=item C<int
-get_operand_count(lexer_state * const lexer)>
+=item C<unsigned get_operand_count(lexer_state * const lexer)>
 
 Returns the number of operands of the I<current> instruction.
 This function assumes there is an instruction in place
@@ -1304,7 +1440,8 @@
 */
 PARROT_WARN_UNUSED_RESULT
 unsigned
-get_operand_count(lexer_state * const lexer) {
+get_operand_count(ARGIN(lexer_state * const lexer))
+{
     unsigned count = 0;
     expression *first, *operand;
 
@@ -1329,8 +1466,8 @@
 
 /*
 
-=item C<static constant *
-create_const(lexer_state * const lexer, value_type type, char * const name, va_list arg_ptr)>
+=item C<static constant * create_const(lexer_state * const lexer, value_type
+type, va_list arg_ptr)>
 
 Constant constructor; based on C<type>, retrieve a value of the
 appropriate type from C<arg_ptr>.
@@ -1341,7 +1478,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static constant *
-create_const(lexer_state * const lexer, value_type type, va_list arg_ptr) {
+create_const(ARGIN(lexer_state * const lexer), value_type type, va_list arg_ptr)
+{
     constant *c = pir_mem_allocate_zeroed_typed(lexer, constant);
     c->type     = type;
     c->next     = NULL;
@@ -1371,8 +1509,7 @@
 
 /*
 
-=item C<constant *
-new_const(lexer_state * const lexer, value_type type, ...)>
+=item C<constant * new_const(lexer_state * const lexer, value_type type, ...)>
 
 Creates a new constant node of the given type.
 Wrapper function for C<create_const>
@@ -1383,7 +1520,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 constant *
-new_const(lexer_state * const lexer, value_type type, ...) {
+new_const(ARGIN(lexer_state * const lexer), value_type type, ...)
+{
     constant *c;
     va_list arg_ptr;
     va_start(arg_ptr, type);
@@ -1394,8 +1532,8 @@
 
 /*
 
-=item C<constdecl *
-new_named_const(lexer_state * const lexer, value_type type, char * const name, ...)>
+=item C<constdecl * new_named_const(lexer_state * const lexer, value_type type,
+char const * const name, ...)>
 
 Creates a new constdecl node of the given type, by the given name.
 
@@ -1405,7 +1543,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 constdecl *
-new_named_const(lexer_state * const lexer, value_type type, char const * const name, ...) {
+new_named_const(ARGIN(lexer_state * const lexer), value_type type,
+        ARGIN(char const * const name),
+        ...)
+{
     constdecl *c = (constdecl *)pir_mem_allocate(lexer, sizeof (constdecl));
     va_list arg_ptr;
     va_start(arg_ptr, name);
@@ -1440,8 +1581,8 @@
 
 /*
 
-=item C<constdecl *
-new_pmc_const(char const * const type, char const * const name, constant * const value)>
+=item C<constdecl * new_pmc_const(lexer_state * const lexer, char const * const
+type, char const * const name, constant * const value)>
 
 Create a new PMC constant declaration of type C<type>, name C<name> and having a value C<value>.
 The type must be a string indicating a valid type name (e.g. "Sub"). C<name> is the name
@@ -1450,9 +1591,13 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 constdecl *
-new_pmc_const(lexer_state * const lexer, char const * const type,
-              char const * const name, constant * const value)
+new_pmc_const(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const type),
+        ARGIN(char const * const name),
+        ARGIN(constant * const value))
 {
     /* get a STRING representation of the c-string type */
     STRING *classname    = Parrot_str_new(lexer->interp, type, strlen(type));
@@ -1508,7 +1653,7 @@
             symbol *constsym  = new_symbol(lexer, name, PMC_TYPE);
             target *consttarg = target_from_symbol(lexer, constsym);
 
-            PMC *intconst = pmc_new(lexer->interp,
+            PMC *intconst = Parrot_pmc_new(lexer->interp,
                                     Parrot_get_ctx_HLL_type(lexer->interp, enum_class_Integer));
             int index     = add_pmc_const(lexer->bc, intconst);
             VTABLE_set_integer_native(lexer->interp, intconst, value->val.ival);
@@ -1543,7 +1688,7 @@
             symbol *constsym  = new_symbol(lexer, name, PMC_TYPE);
             target *consttarg = target_from_symbol(lexer, constsym);
 
-            PMC *numconst     = pmc_new(lexer->interp,
+            PMC *numconst     = Parrot_pmc_new(lexer->interp,
                                         Parrot_get_ctx_HLL_type(lexer->interp, enum_class_Float));
             int index         = add_pmc_const(lexer->bc, numconst);
             VTABLE_set_number_native(lexer->interp, numconst, value->val.nval);
@@ -1573,7 +1718,7 @@
             symbol *constsym  = new_symbol(lexer, name, PMC_TYPE);
             target *consttarg = target_from_symbol(lexer, constsym);
 
-            PMC    *strconst  = pmc_new(lexer->interp,
+            PMC    *strconst  = Parrot_pmc_new(lexer->interp,
                                     Parrot_get_ctx_HLL_type(lexer->interp, enum_class_String));
 
             int     index     = add_pmc_const(lexer->bc, strconst);
@@ -1607,8 +1752,7 @@
 
 /*
 
-=item C<static invocation *
-new_invocation(lexer_state * const lexer)>
+=item C<static invocation * new_invocation(lexer_state * const lexer)>
 
 Returns a pointer to a new invocation object. In the current implementation,
 there can only be one invocation object at any time. For that reason, the
@@ -1624,7 +1768,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static invocation *
-new_invocation(lexer_state * const lexer) {
+new_invocation(ARGIN(lexer_state * const lexer))
+{
     /* optimization: return the address of the cached object */
     invocation *inv = &lexer->obj_cache.inv_cache;
     /* clear all fields */
@@ -1637,8 +1782,7 @@
 
 /*
 
-=item C<static expression *
-new_expr(expr_type type)>
+=item C<static expression * new_expr(lexer_state * const lexer, expr_type type)>
 
 Create a new C<expression> node of the specified C<type>. The new
 expression node is returned.
@@ -1649,7 +1793,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static expression *
-new_expr(lexer_state * const lexer, expr_type type) {
+new_expr(ARGIN(lexer_state * const lexer), expr_type type)
+{
     expression *expr = pir_mem_allocate_zeroed_typed(lexer, expression);
     expr->type       = type;
     expr->next       = expr;
@@ -1658,8 +1803,7 @@
 
 /*
 
-=item C<target *
-new_reg(lexer_state * const lexer, int type, int regno)>
+=item C<target * new_reg(lexer_state * const lexer, pir_type type, int regno)>
 
 Create a C<target> node from a register. A new C<pir_reg> object is
 created of type C<type> and PIR register number C<regno>. The target
@@ -1671,7 +1815,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 target *
-new_reg(lexer_state * const lexer, pir_type type, int regno) {
+new_reg(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+{
     target  *t = new_target(lexer);
     pir_reg *reg;
 
@@ -1687,8 +1832,8 @@
 
 /*
 
-=item C<expression *
-expr_from_target(target *t)>
+=item C<expression * expr_from_target(lexer_state * const lexer, target * const
+t)>
 
 Wrap a target in an expression node; the expression node is
 returned.
@@ -1699,7 +1844,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-expr_from_target(lexer_state * const lexer, target * const t) {
+expr_from_target(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const t))
+{
     expression *e = new_expr(lexer, EXPR_TARGET);
     e->expr.t     = t;
     return e;
@@ -1707,8 +1854,8 @@
 
 /*
 
-=item C<expression *
-expr_from_const(constant * const c)>
+=item C<expression * expr_from_const(lexer_state * const lexer, constant * const
+c)>
 
 Convert the constant C<c> to an expression node and returns the newly
 created expression node.
@@ -1719,7 +1866,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-expr_from_const(lexer_state * const lexer, constant * const c) {
+expr_from_const(ARGIN(lexer_state * const lexer),
+        ARGIN(constant * const c))
+{
     expression *e = new_expr(lexer, EXPR_CONSTANT);
     e->expr.c     = c;
     return e;
@@ -1727,8 +1876,7 @@
 
 /*
 
-=item C<expression *
-expr_from_int(lexer_state * const lexer, int ival)>
+=item C<expression * expr_from_int(lexer_state * const lexer, int ival)>
 
 Create an expression node from an integer constant. This is a wrapper
 function, which uses C<expr_from_const()> and C<new_const()>.
@@ -1741,14 +1889,14 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-expr_from_int(lexer_state * const lexer, int ival) {
+expr_from_int(ARGIN(lexer_state * const lexer), int ival)
+{
     return expr_from_const(lexer, new_const(lexer, INT_VAL, ival));
 }
 
 /*
 
-=item C<expression *
-expr_from_num(lexer_state * const lexer, double nval)>
+=item C<expression * expr_from_num(lexer_state * const lexer, double nval)>
 
 Same as C<expr_from_int()>, except it takes a C<double> parameter,
 not an C<int>.
@@ -1759,14 +1907,15 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-expr_from_num(lexer_state * const lexer, double nval) {
+expr_from_num(ARGIN(lexer_state * const lexer), double nval)
+{
     return expr_from_const(lexer, new_const(lexer, NUM_VAL, nval));
 }
 
 /*
 
-=item C<expression *
-expr_from_string(lexer_state * const lexer, char const * const sval)>
+=item C<expression * expr_from_string(lexer_state * const lexer, char const *
+const sval)>
 
 Same as C<expr_from_int()>, except it takes a C<string> parameter.
 
@@ -1776,15 +1925,17 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-expr_from_string(lexer_state * const lexer, char const * const sval) {
+expr_from_string(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const sval))
+{
     return expr_from_const(lexer, new_const(lexer, STRING_VAL, sval));
 }
 
 
 /*
 
-=item C<expression *
-expr_from_ident(char * const id)>
+=item C<expression * expr_from_ident(lexer_state * const lexer, char const *
+const id)>
 
 Convert a ident to an expression node and returns it.
 
@@ -1794,7 +1945,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 expression *
-expr_from_ident(lexer_state * const lexer, char const * const id) {
+expr_from_ident(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const id))
+{
     expression *e = new_expr(lexer, EXPR_IDENT);
     e->expr.id    = id;
     return e;
@@ -1802,8 +1955,8 @@
 
 /*
 
-=item C<void
-set_invocation_args(lexer_state * const lexer, invocation * const inv, argument * const args)>
+=item C<invocation * set_invocation_args(lexer_state * const lexer, invocation *
+const inv, argument * const args)>
 
 Set the args of an invocation onto the current invocation object.
 The number of arguments in the list is counted, and stored in the
@@ -1812,8 +1965,13 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 invocation *
-set_invocation_args(lexer_state * const lexer, invocation * const inv, argument * const args) {
+set_invocation_args(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv),
+        ARGIN(argument * const args))
+{
     argument *arg_iter;
     unsigned  arg_count = 0;
 
@@ -1852,8 +2010,8 @@
 
 /*
 
-=item C<void
-set_invocation_results(lexer_state * const lexer, invocation * const inv, target * const results)>
+=item C<invocation * set_invocation_results(lexer_state * const lexer,
+invocation * const inv, target * const results)>
 
 Set the invocation results on the invocation object C<inv>.
 The number of results is stored in the invocation object.
@@ -1862,8 +2020,13 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 invocation *
-set_invocation_results(lexer_state * const lexer, invocation * const inv, target * const results) {
+set_invocation_results(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv),
+        ARGIN(target * const results))
+{
     target  *result_iter;
     unsigned result_count = 0;
 
@@ -1897,24 +2060,26 @@
 
 /*
 
-=item C<void
-set_invocation_type(invocation * const inv, invoke_type type)>
+=item C<invocation * set_invocation_type(invocation * const inv, invoke_type
+type)>
 
 Set the invocation type on the invocation object C<inv>.
 
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 invocation *
-set_invocation_type(invocation * const inv, invoke_type type) {
+set_invocation_type(ARGIN(invocation * const inv), invoke_type type)
+{
     inv->type = type;
     return inv;
 }
 
 /*
 
-=item C<invocation *
-invoke(lexer_state * const lexer, invoke_type type, ...)>
+=item C<invocation * invoke(lexer_state * const lexer, invoke_type type, ...)>
 
 Create a new C<invocation> object of type C<type>. This can be one
 of the C<invoke_types> enumeration. Based on the type, this function
@@ -1929,7 +2094,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 invocation *
-invoke(lexer_state * const lexer, invoke_type type, ...) {
+invoke(ARGIN(lexer_state * const lexer), invoke_type type, ...)
+{
     va_list arg_ptr;
 
     invocation *inv = new_invocation(lexer);
@@ -1969,8 +2135,8 @@
 
 /*
 
-=item C<void
-set_lex_flag(lexer_state * const lexer, target * const t, char const * const name)>
+=item C<void set_lex_flag(lexer_state * const lexer, target * const t, char
+const * const name)>
 
 Store target C<t> as a lexical in the sub_info struct. The lexical node
 stores a pointer to the target's syminfo structure, so it can access
@@ -1980,7 +2146,10 @@
 
 */
 void
-set_lex_flag(lexer_state * const lexer, target * const t, char const * const name) {
+set_lex_flag(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const t),
+        ARGIN(char const * const name))
+{
     lexical *lex = CURRENT_SUB(lexer)->info.lexicals;
 
     /* check whether there is already a target marked as .lex with the specified name */
@@ -2008,8 +2177,7 @@
 
 /*
 
-=item C<void
-set_hll(lexer_state * const lexer, char * const hll)>
+=item C<void set_hll(lexer_state * const lexer, char const * const hll)>
 
 Set the current HLL as specified in C<hll>.
 
@@ -2019,7 +2187,9 @@
 
 */
 void
-set_hll(lexer_state * const lexer, char const * const hll) {
+set_hll(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const hll))
+{
     STRING * const hll_name             = Parrot_str_new(lexer->interp, hll, strlen(hll));
     CONTEXT(lexer->interp)->current_HLL = Parrot_register_HLL(lexer->interp, hll_name);
 }
@@ -2028,8 +2198,8 @@
 
 /*
 
-=item C<void
-unshift_operand(lexer_state *lexer, expression *operand)>
+=item C<void unshift_operand(lexer_state * const lexer, expression * const
+operand)>
 
 Add the specified expression as the first operand of the current
 instruction.
@@ -2038,7 +2208,9 @@
 
 */
 void
-unshift_operand(lexer_state * const lexer, expression * const operand) {
+unshift_operand(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const operand))
+{
     expression *last = CURRENT_INSTRUCTION(lexer)->operands;
     if (last) {
         /* get the head of the list */
@@ -2054,8 +2226,8 @@
 
 /*
 
-=item C<void
-push_operand(lexer_state * const lexer, expression * const operand)>
+=item C<void push_operand(lexer_state * const lexer, expression * const
+operand)>
 
 Add an operand at the end of the list of operands of the current instruction.
 
@@ -2063,7 +2235,9 @@
 
 */
 void
-push_operand(lexer_state * const lexer, NOTNULL(expression * const operand)) {
+push_operand(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const operand))
+{
     PARROT_ASSERT(CURRENT_INSTRUCTION(lexer));
 
     if (CURRENT_INSTRUCTION(lexer)->operands) {
@@ -2075,8 +2249,7 @@
 
 /*
 
-=item C<void
-remove_all_operands(lexer_state * const lexer)>
+=item C<void remove_all_operands(lexer_state * const lexer)>
 
 Remove all operands of the current instruction. This is done
 by simply setting the pointer to the operands to NULL; all
@@ -2087,15 +2260,15 @@
 
 */
 void
-remove_all_operands(NOTNULL(lexer_state * const lexer)) {
+remove_all_operands(ARGIN(lexer_state * const lexer))
+{
     CURRENT_INSTRUCTION(lexer)->operands = NULL;
 }
 
 
 /*
 
-=item C<expression *
-expr_from_key(lexer_state * const lexer, key * const k)>
+=item C<expression * expr_from_key(lexer_state * const lexer, key * const k)>
 
 Wraps the key C<k> in an C<expression> node and returns that.
 The returned expression node has type EXPR_KEY.
@@ -2103,8 +2276,11 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 expression *
-expr_from_key(NOTNULL(lexer_state * const lexer), NOTNULL(key * const k)) {
+expr_from_key(ARGIN(lexer_state * const lexer), ARGIN(key * const k))
+{
     expression *e = new_expr(lexer, EXPR_KEY);
     e->expr.k     = k;
     return e;
@@ -2113,7 +2289,8 @@
 
 /*
 
-=item C<static key_entry * new_key_entry>
+=item C<static key_entry * new_key_entry(lexer_state * const lexer, expression *
+const expr)>
 
 Constructor for a key_entry node. Memory is allocated for the node,
 and the C<expr> field is initialized to the passed in C<expr> value.
@@ -2122,8 +2299,11 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static key_entry *
-new_key_entry(lexer_state * const lexer, expression * const expr) {
+new_key_entry(ARGIN(lexer_state * const lexer), ARGIN(expression * const expr))
+{
     key_entry *entry = pir_mem_allocate_zeroed_typed(lexer, key_entry);
     entry->expr      = expr;
     entry->next      = NULL;
@@ -2131,8 +2311,7 @@
 }
 /*
 
-=item C<key *
-new_key(lexer_state * const lexer, expression * const expr)>
+=item C<key * new_key(lexer_state * const lexer, expression * const expr)>
 
 Wraps the expression C<expr> in a key node and returns that.
 
@@ -2142,7 +2321,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 key *
-new_key(NOTNULL(lexer_state * const lexer), NOTNULL(expression * const expr)) {
+new_key(ARGIN(lexer_state * const lexer), ARGIN(expression * const expr))
+{
     key *k       = pir_mem_allocate_zeroed_typed(lexer, key);
     k->head      = new_key_entry(lexer, expr);
     k->keylength = 1;
@@ -2152,8 +2332,8 @@
 
 /*
 
-=item C<key *
-add_key(lexer_state * const lexer, key * const keylist, expression * const exprkey)>
+=item C<key * add_key(lexer_state * const lexer, key * const keylist, expression
+* const exprkey)>
 
 Adds a new, nested key (in C<exprkey>) to the current key,
 pointed to by C<keylist>. C<keylist> is returned.
@@ -2164,8 +2344,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 key *
-add_key(NOTNULL(lexer_state * const lexer), NOTNULL(key * const keylist),
-        NOTNULL(expression * const exprkey))
+add_key(ARGIN(lexer_state * const lexer), ARGIN(key * const keylist),
+        ARGIN(expression * const exprkey))
 {
     key_entry *newkey = new_key_entry(lexer, exprkey);
     key_entry *iter   = keylist->head;
@@ -2186,8 +2366,7 @@
 
 /*
 
-=item C<symbol *
-add_local(symbol * const list, symbol * const local)>
+=item C<symbol * add_local(symbol * const list, symbol * const local)>
 
 Add local C<local> to the list pointed to by C<list>. The new object
 is inserted at the front of the list. C<list> is returned
@@ -2198,7 +2377,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 symbol *
-add_local(symbol * const list, symbol * const local) {
+add_local(ARGIN(symbol * const list), ARGIN(symbol * const local))
+{
     local->next = list->next;
     list->next  = local;
     return list;
@@ -2207,8 +2387,8 @@
 
 /*
 
-=item C<symbol *
-new_local(char * const name, int has_unique_reg)>
+=item C<symbol * new_local(lexer_state * const lexer, char const * const name,
+int has_unique_reg)>
 
 Create a new symbol node to represent the local C<name>.
 If C<has_unique_reg> is true, the C<:unique_reg> flag is set.
@@ -2220,7 +2400,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 symbol *
-new_local(lexer_state * const lexer, char const * const name, int has_unique_reg){
+new_local(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name), int has_unique_reg)
+{
     symbol *s = new_symbol(lexer, name, UNKNOWN_TYPE);
 
     if (has_unique_reg)
@@ -2232,8 +2414,7 @@
 
 /*
 
-=item C<int
-is_parrot_op(lexer_state * const lexer, char * const name)>
+=item C<int is_parrot_op(lexer_state * const lexer, char const * const name)>
 
 Check whether C<name> is a parrot opcode. C<name> can be either the short
 or fullname of the opcode; for instance, C<print> is the short name, which
@@ -2244,7 +2425,9 @@
 
 */
 int
-is_parrot_op(lexer_state * const lexer, char const * const name) {
+is_parrot_op(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
+{
     int opcode = lexer->interp->op_lib->op_code(name, 0); /* check short name, e.g. "set" */
 
     /* do *NOT* check for the "long" name variant, such as "set_i_ic";
@@ -2258,9 +2441,8 @@
 
 /*
 
-=item C<void
-new_sub_instr(lexer_state * const lexer, int opcode, char const * const opname,
-              unsigned num_var_args)>
+=item C<void new_sub_instr(lexer_state * const lexer, int opcode, char const *
+const opname, unsigned num_var_args)>
 
 Create a new instruction node, and initialize the opcode and opinfo on that
 node. This function can be used to create an instruction of which the signature
@@ -2275,9 +2457,8 @@
 
 */
 void
-new_sub_instr(lexer_state * const lexer, int opcode, char const * const opname,
-              unsigned num_var_args)
-
+new_sub_instr(ARGIN(lexer_state * const lexer), int opcode,
+        ARGIN(char const * const opname), unsigned num_var_args)
 {
     new_statement(lexer, opname);
     CURRENT_INSTRUCTION(lexer)->opinfo = &lexer->interp->op_info_table[opcode];
@@ -2298,8 +2479,8 @@
 
 /*
 
-=item C<void
-update_op(lexer_state * const lexer, instruction * const instr, int newop)>
+=item C<void update_op(lexer_state * const lexer, instruction * const instr, int
+newop)>
 
 Update the instruction C<instr>; it is replaced by the op with opcode C<newop>.
 The C<opinfo>, C<opname> and C<opcode> fields of C<instr> are updated.
@@ -2308,7 +2489,9 @@
 
 */
 void
-update_op(NOTNULL(lexer_state * const lexer), NOTNULL(instruction * const instr), int newop) {
+update_op(ARGIN(lexer_state * const lexer), ARGIN(instruction * const instr),
+        int newop)
+{
     /* Deduct number of ints needed for the old instruction, if there is one.
      * This is necessary during strength reduction and other optimizations, once
      * the opinfo is retrieved, we also update the codesize field in the lexer.
@@ -2333,8 +2516,8 @@
 
 /*
 
-=item C<static label *
-new_label(lexer_state * const lexer, char const * const labelid, int offset)>
+=item C<static label * new_label(lexer_state * const lexer, char const * const
+labelid, int offset)>
 
 Constructor for a label struct node. A new C<label> object is created,
 initialized with the label id specified in C<labelid>, and the bytecode
@@ -2344,8 +2527,12 @@
 
 */
 PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 static label *
-new_label(lexer_state * const lexer, char const * const labelid, int offset) {
+new_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const labelid), int offset)
+{
     label *l  = pir_mem_allocate_zeroed_typed(lexer, label);
     l->name   = labelid;
     l->offset = offset;
@@ -2354,8 +2541,7 @@
 
 /*
 
-=item C<static void
-fixup_local_labels(subroutine * const sub)>
+=item C<static void fixup_local_labels(lexer_state * const lexer)>
 
 Fix up all local labels in the subroutine C<sub>. Labels are stored as
 identifiers in an expression node (the C<id> field in the C<expr> union);
@@ -2367,7 +2553,8 @@
 
 */
 static void
-fixup_local_labels(lexer_state * const lexer) {
+fixup_local_labels(ARGIN(lexer_state * const lexer))
+{
     instruction *iter = CURRENT_SUB(lexer)->statements;
 
     /* if there's no instruction in the current sub, then do nothing. */
@@ -2425,8 +2612,7 @@
 
 /*
 
-=item C<void
-fixup_global_labels(lexer_state * const lexer)>
+=item C<void fixup_global_labels(lexer_state * const lexer)>
 
 Fix references to global labels. The lexer keeps a list of instructions that
 can be patched. These instructions currently look up the global label during
@@ -2439,7 +2625,8 @@
 
 */
 void
-fixup_global_labels(lexer_state * const lexer) {
+fixup_global_labels(ARGIN(lexer_state * const lexer))
+{
     global_fixup *iter = lexer->global_refs;
 
     while (iter) {
@@ -2479,8 +2666,7 @@
 
 /*
 
-=item C<void
-close_sub(lexer_state * const lexer)>
+=item C<void close_sub(lexer_state * const lexer)>
 
 Finalize the subroutine. Generate the final instructions in the current
 subroutine, if needed. Then, all local labels are fixed up; i.e., all
@@ -2492,7 +2678,8 @@
 
 */
 void
-close_sub(lexer_state * const lexer) {
+close_sub(ARGIN(lexer_state * const lexer))
+{
     int           need_epilogue = 1;
     int           sub_const_table_index;
     global_label *glob;
@@ -2551,8 +2738,8 @@
 
 /*
 
-=item C<void
-update_sub_register_usage(lexer_state * const lexer, unsigned reg_usage[NUM_PARROT_TYPES])>
+=item C<void update_sub_register_usage(lexer_state * const lexer, unsigned
+reg_usage[NUM_PARROT_TYPES])>
 
 Update register usage for the current subroutine with the register usage
 information in C<reg_usage>.
@@ -2561,7 +2748,9 @@
 
 */
 void
-update_sub_register_usage(lexer_state * const lexer, unsigned reg_usage[NUM_PARROT_TYPES]) {
+update_sub_register_usage(ARGIN(lexer_state * const lexer),
+        unsigned reg_usage[NUM_PARROT_TYPES])
+{
     int i;
     for (i = 0; i < NUM_PARROT_TYPES; ++i)
         CURRENT_SUB(lexer)->info.regs_used[i] = reg_usage[i];
@@ -2570,8 +2759,8 @@
 
 /*
 
-=item C<void
-annotate(lexer_state * const lexer, char const * const key, constant * const value)>
+=item C<void annotate(lexer_state * const lexer, char const * const key,
+constant * const value)>
 
 Add a new annotation with key C<key> and value C<value>.
 
@@ -2579,7 +2768,10 @@
 
 */
 void
-annotate(lexer_state * const lexer, char const * const key, constant * const value) {
+annotate(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const key),
+        ARGIN(constant * const value))
+{
     annotation *ann     = (annotation *)pir_mem_allocate(lexer, sizeof (annotation));
     ann->key            = key;
     ann->value          = value;

Modified: branches/ops_pct/compilers/pirc/src/pircompunit.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompunit.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pircompunit.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -394,135 +394,665 @@
 /* forward declaration */
 struct lexer_state;
 
-/* set the namespace that was just parsed */
-void set_namespace(struct lexer_state * const lexer, key * const ns);
+/* HEADERIZER BEGIN: compilers/pirc/src/pircompunit.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-/* various set functions to set the value of a subroutine flag */
-void set_sub_outer(struct lexer_state * const lexer, char const * const outersub);
-void set_sub_vtable(struct lexer_state * const lexer, char const * vtablename);
-void set_sub_subid(struct lexer_state * const lexer, char const * const subid);
-void set_sub_instanceof(struct lexer_state * const lexer, char const * const classname);
-void set_sub_nsentry(struct lexer_state * const lexer, char const * const nsentry);
-void set_sub_methodname(struct lexer_state * const lexer, char const * const methodname);
-
-void set_sub_multi_types(struct lexer_state * const lexer, expression * const multitype);
-
-/* install a new subroutine node */
-void new_subr(struct lexer_state * const lexer, STRING *subname);
-
-void set_sub_name(struct lexer_state * const lexer, char const * const subname);
-
-/* functions for setting argument flags or argument alias */
-argument *set_arg_flag(argument * const arg, arg_flag flag);
-argument *set_arg_alias(struct lexer_state * const lexer, char const * const alias);
-
-/* constructors for constant nodes */
-constdecl *new_named_const(struct lexer_state * const lexer, value_type type,
-                          char const * const name, ...);
-
-constant *new_const(struct lexer_state * const lexer, value_type type, ...);
-
-constdecl *new_pmc_const(struct lexer_state * const lexer, char const * const type,
-                        char const * const name, constant * const value);
-
-/* conversion functions, each wrapping its argument in an expression node */
-expression *expr_from_const(struct lexer_state * const lexer, constant * const c);
-expression *expr_from_target(struct lexer_state * const lexer, target * const t);
-expression *expr_from_ident(struct lexer_state * const lexer, char const * const name);
-expression *expr_from_key(struct lexer_state * const lexer, key * const k);
-expression *expr_from_string(struct lexer_state * const lexer, char const * const sval);
-expression *expr_from_int(struct lexer_state * const lexer, int ival);
-expression *expr_from_num(struct lexer_state * const lexer, double nval);
-
-/* functions for argument node creation and storing */
-argument *new_argument(struct lexer_state * const lexer, expression * const expr);
-argument *add_arg(argument *arg1, argument * const arg2);
-argument *unshift_arg(invocation * const inv, argument * const newarg);
-
-target *add_param(struct lexer_state * const lexer, pir_type type, char const * const name);
-target *set_param_alias(struct lexer_state * const lexer, char const * const alias);
-target *set_param_flag(struct lexer_state * const lexer, target * const t, target_flag flag);
-
-target *set_curtarget(struct lexer_state * const lexer, target * const t);
-argument *set_curarg(struct lexer_state * const lexer, argument * const arg);
-
-/* target constructors */
-target *add_target(struct lexer_state * const lexer, target *t1, target * const t);
-target *new_reg(struct lexer_state * const lexer, pir_type type, int regno);
-target *new_target(struct lexer_state * const lexer);
-
-/* set a key on a target node */
-void set_target_key(target * const t, key * const k);
-
-/* functions for creating an invocation node and setting various fields */
-invocation *invoke(struct lexer_state * const lexer, invoke_type, ...);
-invocation *set_invocation_type(invocation * const inv, invoke_type type);
-invocation *set_invocation_args(struct lexer_state * const lexer, invocation * const inv,
-                                argument * const args);
-
-invocation *set_invocation_results(struct lexer_state * const lexer, invocation * const inv,
-                                   target * const results);
-
-/* conversion functions that wrap their arguments into a target node */
-target *target_from_symbol(struct lexer_state * const lexer, struct symbol * const sym);
-
-/* management functions for key nodes */
-key *new_key(struct lexer_state * const lexer, expression * const expr);
-key *add_key(struct lexer_state * const lexer, key * const keylist, expression * const newkey);
-
-void load_library(struct lexer_state * const lexer, char const * const library);
-void set_hll(struct lexer_state * const lexer, char const * const hll);
-
-void set_sub_flag(struct lexer_state * const lexer, sub_flag flag);
-
-/* constructor and functions for setting instruction fields */
-void set_label(struct lexer_state * const lexer, char const * const label);
-void set_instr(struct lexer_state * const lexer, char const * const opname);
-void set_instrf(struct lexer_state * const lxr, char const * const op, char const * const fmt, ...);
-void unshift_operand(struct lexer_state * const lexer, expression * const operand);
-void push_operand(struct lexer_state * const lexer, expression * const operand);
-void add_operands(struct lexer_state * const lexer, char const * const format, ...);
-
-void get_operands(struct lexer_state * const lexer, int bitmask, ...);
-expression *get_operand(struct lexer_state * const lexer, short n);
-unsigned get_operand_count(struct lexer_state * const lexer);
-
-void update_instr(struct lexer_state * const lexer, char const * const newop);
-void update_op(struct lexer_state * const lexer, instruction * const instr, int newop);
-
-void remove_operand(struct lexer_state * const lexer, unsigned index);
-void remove_all_operands(struct lexer_state * const lexer);
-
-
-void set_lex_flag(struct lexer_state * const lexer, target * const t, char const * const lexname);
-char const *get_inverse(char const * const instr);
-void invert_instr(struct lexer_state * const lexer);
-
-/* local declaration functions */
-struct symbol *add_local(struct symbol * const list, struct symbol * const local);
-struct symbol *new_local(struct lexer_state * const lexer, char const * const name, int unique);
-
-/* compare two target nodes */
-int targets_equal(target const * const t1, target const * const t2);
-
-/* funtion to reset the register allocator */
-void reset_register_allocator(struct lexer_state * const lexer);
-
-/* to check whether given name is a parrot opcode */
-int is_parrot_op(struct lexer_state * const lexer, char const * const name);
-
-void close_sub(struct lexer_state * const lexer);
-void fixup_global_labels(struct lexer_state * const lexer);
-void set_op_labelflag(struct lexer_state * const lexer, int flag);
-void convert_inv_to_instr(struct lexer_state * const lexer, invocation * const inv);
-
-void update_sub_register_usage(struct lexer_state * const lexer,
-                               unsigned reg_usage[NUM_PARROT_TYPES]);
-
-void new_sub_instr(struct lexer_state * const lexer, int opcode, char const * const opname,
-              unsigned num_var_args);
-
-void annotate(struct lexer_state * const lexer, char const * const key, constant * const value);
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+argument * add_arg(ARGMOD(argument *last), ARGIN(argument * const newarg))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*last);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+key * add_key(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(key * const keylist),
+    ARGIN(expression * const exprkey))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+symbol * add_local(ARGIN(symbol * const list), ARGIN(symbol * const local))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void add_operands(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const format),
+    ...)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * add_param(
+    ARGIN(lexer_state * const lexer),
+    pir_type type,
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * add_target(
+    ARGIN(lexer_state * const lexer),
+    ARGMOD(target *last),
+    ARGIN(target * const t))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*last);
+
+void annotate(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const key),
+    ARGIN(constant * const value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+void close_sub(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * expr_from_const(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(constant * const c))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * expr_from_ident(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const id))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * expr_from_int(ARGIN(lexer_state * const lexer), int ival)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+expression * expr_from_key(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(key * const k))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * expr_from_num(ARGIN(lexer_state * const lexer), double nval)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * expr_from_string(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const sval))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * expr_from_target(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const t))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void fixup_global_labels(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_CONST_FUNCTION
+PARROT_CANNOT_RETURN_NULL
+char const * get_inverse(ARGIN(char const * const instr))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+expression * get_operand(ARGIN(lexer_state * const lexer), short n)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+unsigned get_operand_count(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+void get_operands(ARGIN(lexer_state * const lexer), int bitmask, ...)
+        __attribute__nonnull__(1);
+
+void invert_instr(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+invocation * invoke(ARGIN(lexer_state * const lexer), invoke_type type, ...)
+        __attribute__nonnull__(1);
+
+int is_parrot_op(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void load_library(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const library))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+argument * new_argument(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const expr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+constant * new_const(ARGIN(lexer_state * const lexer), value_type type, ...)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+key * new_key(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const expr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+symbol * new_local(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name),
+    int has_unique_reg)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+constdecl * new_named_const(
+    ARGIN(lexer_state * const lexer),
+    value_type type,
+    ARGIN(char const * const name),
+    ...)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+constdecl * new_pmc_const(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const type),
+    ARGIN(char const * const name),
+    ARGIN(constant * const value))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        __attribute__nonnull__(4);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * new_reg(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+        __attribute__nonnull__(1);
+
+void new_sub_instr(
+    ARGIN(lexer_state * const lexer),
+    int opcode,
+    ARGIN(char const * const opname),
+    unsigned num_var_args)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+void new_subr(ARGIN(lexer_state * const lexer), ARGIN(STRING *subname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * new_target(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+void push_operand(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const operand))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void remove_all_operands(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+void reset_register_allocator(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+argument * set_arg_alias(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const alias))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+argument * set_arg_flag(ARGIN(argument * const arg), arg_flag flag)
+        __attribute__nonnull__(1);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+argument * set_curarg(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(argument * const arg))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * set_curtarget(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const t))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_hll(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const hll))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_instr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const opname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_instrf(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const opname),
+    ARGIN(char const * const format),
+    ...)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+invocation * set_invocation_args(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv),
+    ARGIN(argument * const args))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+invocation * set_invocation_results(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv),
+    ARGIN(target * const results))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+invocation * set_invocation_type(
+    ARGIN(invocation * const inv),
+    invoke_type type)
+        __attribute__nonnull__(1);
+
+void set_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const labelname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_lex_flag(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const t),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+void set_namespace(ARGIN(lexer_state * const lexer), ARGIN(key * const ns))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_op_labelflag(ARGIN(lexer_state * const lexer), int flag)
+        __attribute__nonnull__(1);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * set_param_alias(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const alias))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * set_param_flag(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const param),
+    target_flag flag)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_flag(ARGIN(lexer_state * const lexer), sub_flag flag)
+        __attribute__nonnull__(1);
+
+void set_sub_instanceof(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const classname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_methodname(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const methodname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_multi_types(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const multitype))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_name(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const subname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_nsentry(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const nsentry))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_outer(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const outersub))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_subid(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const subid))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_sub_vtable(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * vtablename))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void set_target_key(ARGIN(target * const t), ARGIN(key * const k))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+target * target_from_symbol(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(symbol * const sym))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_PURE_FUNCTION
+PARROT_WARN_UNUSED_RESULT
+int targets_equal(
+    ARGIN(target const * const left),
+    ARGIN(target const * const right))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_IGNORABLE_RESULT
+PARROT_CANNOT_RETURN_NULL
+argument * unshift_arg(
+    ARGIN(invocation * const inv),
+    ARGIN(argument * const newarg))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void unshift_operand(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const operand))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void update_instr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const newop))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void update_op(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(instruction * const instr),
+    int newop)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void update_sub_register_usage(
+    ARGIN(lexer_state * const lexer),
+    unsigned reg_usage[NUM_PARROT_TYPES])
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_add_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(last) \
+    , PARROT_ASSERT_ARG(newarg))
+#define ASSERT_ARGS_add_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(keylist) \
+    , PARROT_ASSERT_ARG(exprkey))
+#define ASSERT_ARGS_add_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(list) \
+    , PARROT_ASSERT_ARG(local))
+#define ASSERT_ARGS_add_operands __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(format))
+#define ASSERT_ARGS_add_param __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       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(t))
+#define ASSERT_ARGS_annotate __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(key) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_close_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_expr_from_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(c))
+#define ASSERT_ARGS_expr_from_ident __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(id))
+#define ASSERT_ARGS_expr_from_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_expr_from_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(k))
+#define ASSERT_ARGS_expr_from_num __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_expr_from_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sval))
+#define ASSERT_ARGS_expr_from_target __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(t))
+#define ASSERT_ARGS_fixup_global_labels __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_get_inverse __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(instr))
+#define ASSERT_ARGS_get_operand __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_get_operand_count __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_get_operands __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_invert_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_invoke __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_is_parrot_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_load_library __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(library))
+#define ASSERT_ARGS_new_argument __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(expr))
+#define ASSERT_ARGS_new_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_new_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(expr))
+#define ASSERT_ARGS_new_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_new_named_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_new_pmc_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(type) \
+    , PARROT_ASSERT_ARG(name) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_new_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_new_sub_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(opname))
+#define ASSERT_ARGS_new_subr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(subname))
+#define ASSERT_ARGS_new_target __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_push_operand __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(operand))
+#define ASSERT_ARGS_remove_all_operands __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_reset_register_allocator __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_set_arg_alias __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(alias))
+#define ASSERT_ARGS_set_arg_flag __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(arg))
+#define ASSERT_ARGS_set_curarg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(arg))
+#define ASSERT_ARGS_set_curtarget __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(t))
+#define ASSERT_ARGS_set_hll __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(hll))
+#define ASSERT_ARGS_set_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(opname))
+#define ASSERT_ARGS_set_instrf __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(opname) \
+    , PARROT_ASSERT_ARG(format))
+#define ASSERT_ARGS_set_invocation_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv) \
+    , PARROT_ASSERT_ARG(args))
+#define ASSERT_ARGS_set_invocation_results __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv) \
+    , PARROT_ASSERT_ARG(results))
+#define ASSERT_ARGS_set_invocation_type __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_set_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(labelname))
+#define ASSERT_ARGS_set_lex_flag __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(t) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_set_namespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(ns))
+#define ASSERT_ARGS_set_op_labelflag __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_set_param_alias __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(alias))
+#define ASSERT_ARGS_set_param_flag __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(param))
+#define ASSERT_ARGS_set_sub_flag __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_set_sub_instanceof __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(classname))
+#define ASSERT_ARGS_set_sub_methodname __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(methodname))
+#define ASSERT_ARGS_set_sub_multi_types __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(multitype))
+#define ASSERT_ARGS_set_sub_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(subname))
+#define ASSERT_ARGS_set_sub_nsentry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(nsentry))
+#define ASSERT_ARGS_set_sub_outer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(outersub))
+#define ASSERT_ARGS_set_sub_subid __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(subid))
+#define ASSERT_ARGS_set_sub_vtable __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(vtablename))
+#define ASSERT_ARGS_set_target_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(t) \
+    , PARROT_ASSERT_ARG(k))
+#define ASSERT_ARGS_target_from_symbol __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sym))
+#define ASSERT_ARGS_targets_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(left) \
+    , PARROT_ASSERT_ARG(right))
+#define ASSERT_ARGS_unshift_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(inv) \
+    , PARROT_ASSERT_ARG(newarg))
+#define ASSERT_ARGS_unshift_operand __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(operand))
+#define ASSERT_ARGS_update_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(newop))
+#define ASSERT_ARGS_update_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(instr))
+#define ASSERT_ARGS_update_sub_register_usage __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/pircompunit.c */
 
 #endif /* PARROT_PIR_PIRCOMPUNIT_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/src/piremit.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/piremit.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/piremit.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -14,6 +14,109 @@
 
 #include "parrot/oplib/ops.h"
 
+/* HEADERIZER HFILE: compilers/pirc/src/piremit.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void emit_pbc_annotations(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+static void emit_pbc_const_arg(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(constant * const c))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pbc_expr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const operand))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pbc_instr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(instruction * const instr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pbc_label_arg(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(label * const l))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pbc_sub(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(subroutine * const sub))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pbc_target_arg(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const t))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pir_instruction(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(instruction * const instr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void emit_pir_statement(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(subroutine * const sub))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void optimize_instr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(instruction * const instr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void print_sub_flags(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(subroutine * const subiter))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_emit_pbc_annotations __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_emit_pbc_const_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(c))
+#define ASSERT_ARGS_emit_pbc_expr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(operand))
+#define ASSERT_ARGS_emit_pbc_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(instr))
+#define ASSERT_ARGS_emit_pbc_label_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(l))
+#define ASSERT_ARGS_emit_pbc_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sub))
+#define ASSERT_ARGS_emit_pbc_target_arg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(t))
+#define ASSERT_ARGS_emit_pir_instruction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(instr))
+#define ASSERT_ARGS_emit_pir_statement __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sub))
+#define ASSERT_ARGS_optimize_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(instr))
+#define ASSERT_ARGS_print_sub_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(subiter))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 
 =head1 DESCRIPTION
@@ -44,25 +147,24 @@
  */
 char const pir_register_types[5] = {'I', 'S', 'P', 'N', '?'};
 
-static void emit_pir_statement(lexer_state * const lexer, subroutine * const sub);
-static void emit_pir_instruction(lexer_state * const lexer, instruction * const instr);
-static void emit_pbc_expr(lexer_state * const lexer, expression * const operand);
+static void emit_pir_statement(ARGIN(lexer_state * const lexer), subroutine * const sub);
+static void emit_pir_instruction(ARGIN(lexer_state * const lexer), instruction * const instr);
+static void emit_pbc_expr(ARGIN(lexer_state * const lexer), expression * const operand);
 
-static void print_sub_flags(lexer_state * const lexer, subroutine * const subiter);
+static void print_sub_flags(ARGIN(lexer_state * const lexer), subroutine * const subiter);
 
 /* prototype declaration */
-void print_expr(lexer_state * const lexer, expression * const expr);
-void print_key(lexer_state * const lexer, key * const k);
-void print_target(lexer_state * const lexer, target * const t);
-void print_constant(lexer_state * const lexer, constant * const c);
-void print_expressions(lexer_state * const lexer, expression * const expr);
-void print_instruction(lexer_state * const lexer, instruction * const ins);
-void print_statement(lexer_state * const lexer, subroutine * const sub);
+void print_expr(ARGIN(lexer_state * const lexer), expression * const expr);
+void print_key(ARGIN(lexer_state * const lexer), key * const k);
+void print_target(ARGIN(lexer_state * const lexer), target * const t);
+void print_constant(ARGIN(lexer_state * const lexer), constant * const c);
+void print_expressions(ARGIN(lexer_state * const lexer), expression * const expr);
+void print_instruction(ARGIN(lexer_state * const lexer), instruction * const ins);
+void print_statement(ARGIN(lexer_state * const lexer), subroutine * const sub);
 
 /*
 
-=item C<void
-print_key(lexer_state * const lexer, key * const k)>
+=item C<void print_key(lexer_state * const lexer, key * const k)>
 
 Print the key C<k>. The total key is enclosed in square brackets,
 and different key elements are separated by semicolons. Example:
@@ -75,7 +177,9 @@
 
 */
 void
-print_key(lexer_state * const lexer, key * const k) {
+print_key(ARGIN(lexer_state * const lexer), ARGIN(key * const k))
+{
+    ASSERT_ARGS(print_key)
     key_entry *iter;
 
     fprintf(out, "[");
@@ -95,8 +199,7 @@
 
 /*
 
-=item C<void
-print_target(lexer_state * const lexer, target * const t)>
+=item C<void print_target(lexer_state * const lexer, target * const t)>
 
 Print the target C<t>; if C<t> has a key, that key is
 printed as well. Examples:
@@ -107,7 +210,9 @@
 
 */
 void
-print_target(lexer_state * const lexer, target * const t) {
+print_target(ARGIN(lexer_state * const lexer),  ARGIN(target * const t))
+{
+    ASSERT_ARGS(print_target)
     PARROT_ASSERT(t->info);
     fprintf(out, "%c%d", pir_register_types[t->info->type], t->info->color);
 
@@ -118,8 +223,7 @@
 
 /*
 
-=item C<void
-print_constant(lexer_state * const lexer, constant * const c)>
+=item C<void print_constant(lexer_state * const lexer, constant * const c)>
 
 Print the value of constant C<c>. Based on C<c>'s type, the appropriate
 value is printed.
@@ -128,7 +232,10 @@
 
 */
 void
-print_constant(lexer_state * const lexer, constant * const c) {
+print_constant(ARGIN(lexer_state * const lexer),
+        ARGIN(constant * const c))
+{
+    ASSERT_ARGS(print_constant)
     switch (c->type) {
       case INT_VAL:
         fprintf(out, "%d", c->val.ival);
@@ -153,8 +260,7 @@
 
 /*
 
-=item C<void
-print_expr(lexer_state * const lexer, expression * const expr)>
+=item C<void print_expr(lexer_state * const lexer, expression * const expr)>
 
 Print the expression C<expr>. This is a dispatch function, calling
 a specialized function based on C<expr>'s type.
@@ -163,7 +269,10 @@
 
 */
 void
-print_expr(lexer_state * const lexer, expression * const expr) {
+print_expr(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const expr))
+{
+    ASSERT_ARGS(print_expr)
     switch (expr->type) {
       case EXPR_TARGET:
         print_target(lexer, expr->expr.t);
@@ -187,8 +296,8 @@
 
 /*
 
-=item C<void
-print_expressions(expression * const expr)>
+=item C<void print_expressions(lexer_state * const lexer, expression * const
+expr)>
 
 Print the list of expressions pointed to by C<expr>,
 if C<expr> is not NULL. If C<expr> is NULL, the
@@ -199,7 +308,10 @@
 
 */
 void
-print_expressions(lexer_state * const lexer, expression * const expr) {
+print_expressions(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const expr))
+{
+    ASSERT_ARGS(print_expressions)
     expression *iter;
 
     if (expr == NULL)
@@ -218,8 +330,8 @@
 
 /*
 
-=item C<void
-print_instruction(lexer_state * const lexer, instruction * const ins)>
+=item C<void print_instruction(lexer_state * const lexer, instruction * const
+ins)>
 
 Print the instruction C<ins>.
 
@@ -227,8 +339,10 @@
 
 */
 void
-print_instruction(lexer_state * const lexer, instruction * const ins) {
-    PARROT_ASSERT(ins != NULL);
+print_instruction(ARGIN(lexer_state * const lexer),
+        ARGIN(instruction * const ins))
+{
+    ASSERT_ARGS(print_instruction)
 
     if (ins->label) {
         if (TEST_FLAG(lexer->flags, LEXER_FLAG_EMIT_PASM))
@@ -254,8 +368,7 @@
 
 /*
 
-=item C<void
-print_statement(lexer_state * const lexer, subroutine * const sub)>
+=item C<void print_statement(lexer_state * const lexer, subroutine * const sub)>
 
 XXX
 
@@ -263,7 +376,10 @@
 
 */
 void
-print_statement(lexer_state * const lexer, subroutine * const sub) {
+print_statement(ARGIN(lexer_state * const lexer),
+        ARGIN(subroutine * const sub))
+{
+    ASSERT_ARGS(print_statement)
     instruction *statiter;
 
     if (sub->statements == NULL)
@@ -280,8 +396,8 @@
 
 /*
 
-=item C<static void
-print_sub_flags(lexer_state * const lexer, subroutine * const subiter)>
+=item C<static void print_sub_flags(lexer_state * const lexer, subroutine *
+const subiter)>
 
 Print the appropriate subflags.
 
@@ -289,7 +405,11 @@
 
 */
 static void
-print_sub_flags(lexer_state * const lexer, subroutine * const subiter) {
+print_sub_flags(ARGIN(lexer_state * const lexer),
+        ARGIN(subroutine * const subiter))
+{
+    ASSERT_ARGS(print_sub_flags)
+
     if (TEST_FLAG(subiter->flags, PIRC_SUB_FLAG_INIT))
         fprintf(out, ":init ");
     if (TEST_FLAG(subiter->flags, PIRC_SUB_FLAG_LOAD))
@@ -320,8 +440,7 @@
 
 /*
 
-=item C<void
-print_subs(struct lexer_state * const lexer)>
+=item C<void print_subs(struct lexer_state * const lexer)>
 
 Top-level function to print all generated code. This function
 iterates over all subs and prints their instructions.
@@ -330,7 +449,9 @@
 
 */
 void
-print_subs(struct lexer_state * const lexer) {
+print_subs(struct ARGIN(lexer_state * const lexer))
+{
+    ASSERT_ARGS(print_subs)
     subroutine *subiter;
 
     if (lexer->subs == NULL)
@@ -371,8 +492,8 @@
 
 /*
 
-=item C<static void
-emit_pir_instruction(lexer_state * const lexer, instruction * const instr)>
+=item C<static void emit_pir_instruction(lexer_state * const lexer, instruction
+* const instr)>
 
 Print the PIR representation of C<instr>. If C<instr> has a label, that
 is printed first.
@@ -381,7 +502,10 @@
 
 */
 static void
-emit_pir_instruction(lexer_state * const lexer, instruction * const instr) {
+emit_pir_instruction(ARGIN(lexer_state * const lexer),
+        ARGIN(instruction * const instr))
+{
+    ASSERT_ARGS(emit_pir_instruction)
 
     if (instr->label)
         fprintf(out, "  %s:\n", instr->label);
@@ -395,8 +519,8 @@
 
 /*
 
-=item C<static void
-emit_pir_statement(lexer_state * const lexer, subroutine * const sub)>
+=item C<static void emit_pir_statement(lexer_state * const lexer, subroutine *
+const sub)>
 
 Emit all statements of the subroutine C<sub>. The statements
 are emitted in PIR format. If there are no statements in C<sub>,
@@ -406,7 +530,11 @@
 
 */
 static void
-emit_pir_statement(lexer_state * const lexer, subroutine * const sub) {
+emit_pir_statement(ARGIN(lexer_state * const lexer),
+        ARGIN(subroutine * const sub))
+{
+    ASSERT_ARGS(emit_pir_statement)
+
     instruction *statiter;
 
     if (sub->statements == NULL)
@@ -424,8 +552,8 @@
 
 /*
 
-=item C<void
-emit_pir_subs(lexer_state * const lexer)>
+=item C<void emit_pir_subs(lexer_state * const lexer, char const * const
+outfile)>
 
 Print the PIR representation of all subroutines stored
 in the C<lexer>. If there are no subroutines, thre function
@@ -435,7 +563,10 @@
 
 */
 void
-emit_pir_subs(lexer_state * const lexer, char const * const outfile) {
+emit_pir_subs(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const outfile))
+{
+    ASSERT_ARGS(emit_pir_subs)
     subroutine *subiter;
 
     if (lexer->subs == NULL)
@@ -474,8 +605,8 @@
 
 /*
 
-=item C<static void
-emit_pbc_const_arg(lexer_state * const lexer, constant * const c)>
+=item C<static void emit_pbc_const_arg(lexer_state * const lexer, constant *
+const c)>
 
 Emit a constant argument into the bytecode. An integer is emitted
 inline in the bytecode; other types are stored in the constant table,
@@ -485,7 +616,10 @@
 
 */
 static void
-emit_pbc_const_arg(lexer_state * const lexer, constant * const c) {
+emit_pbc_const_arg(ARGIN(lexer_state * const lexer),
+        ARGIN(constant * const c))
+{
+    ASSERT_ARGS(emit_pbc_const_arg)
 
     switch (c->type) {
         case INT_VAL:
@@ -538,8 +672,8 @@
 
 /*
 
-=item C<static void
-emit_pbc_label_arg(lexer_state * const lexer, label * const l)>
+=item C<static void emit_pbc_label_arg(lexer_state * const lexer, label * const
+l)>
 
 Emit the value of the label offset of label C<l>.
 
@@ -547,7 +681,11 @@
 
 */
 static void
-emit_pbc_label_arg(lexer_state * const lexer, label * const l) {
+emit_pbc_label_arg(ARGIN(lexer_state * const lexer),
+        ARGIN(label * const l))
+{
+    ASSERT_ARGS(emit_pbc_label_arg)
+
     emit_int_arg(lexer->bc, l->offset);
 }
 
@@ -558,8 +696,8 @@
 
 /*
 
-=item C<static void
-emit_pbc_target_arg(lexer_state * const lexer, target * const t)>
+=item C<static void emit_pbc_target_arg(lexer_state * const lexer, target *
+const t)>
 
 Emit the assigned register of target C<t>. The assigned register is
 stored in the C<color> field, of either the C<pir_reg> or C<symbol>
@@ -570,7 +708,11 @@
 
 */
 static void
-emit_pbc_target_arg(lexer_state * const lexer, target * const t) {
+emit_pbc_target_arg(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const t))
+{
+    ASSERT_ARGS(emit_pbc_target_arg)
+
     emit_int_arg(lexer->bc, t->info->color);
 
     /* if t has a key, emit that as well */
@@ -581,8 +723,8 @@
 
 /*
 
-=item C<static void
-emit_pbc_expr(lexer_state * const lexer, expression * const operand)>
+=item C<static void emit_pbc_expr(lexer_state * const lexer, expression * const
+operand)>
 
 Emit bytecode for the expression C<operand>. This is a dispatch
 function, invoking the appropriate function depending on C<operand>'s
@@ -592,7 +734,11 @@
 
 */
 static void
-emit_pbc_expr(lexer_state * const lexer, expression * const operand) {
+emit_pbc_expr(ARGIN(lexer_state * const lexer),
+        ARGIN(expression * const operand))
+{
+    ASSERT_ARGS(emit_pbc_expr)
+
     switch (operand->type) {
       case EXPR_CONSTANT:
         emit_pbc_const_arg(lexer, operand->expr.c);
@@ -620,8 +766,8 @@
 
 /*
 
-=item C<static void
-optimize_instr(lexer_state * const lexer, instruction * const instr)>
+=item C<static void optimize_instr(lexer_state * const lexer, instruction *
+const instr)>
 
 Optimize the instruction C<instr>. Currently, these instructions are optimized:
 
@@ -633,7 +779,10 @@
 
 */
 static void
-optimize_instr(lexer_state * const lexer, instruction * const instr) {
+optimize_instr(ARGIN(lexer_state * const lexer),
+        ARGIN(instruction * const instr))
+{
+    ASSERT_ARGS(optimize_instr)
 
     switch (instr->opcode) {
         case PARROT_OP_box_p_ic: {
@@ -641,7 +790,7 @@
 
             /* the last operand, which is the second in this case */
             expression *second_operand = instr->operands;
-            PMC *intconst = pmc_new(lexer->interp,
+            PMC *intconst = Parrot_pmc_new(lexer->interp,
                                     Parrot_get_ctx_HLL_type(lexer->interp, enum_class_Integer));
             int index     = add_pmc_const(lexer->bc, intconst);
             VTABLE_set_integer_native(lexer->interp, intconst, second_operand->expr.c->val.ival);
@@ -658,7 +807,7 @@
 
             /* the last operand, which is the second in this case */
             expression *second_operand = instr->operands;
-            PMC *numconst = pmc_new(lexer->interp,
+            PMC *numconst = Parrot_pmc_new(lexer->interp,
                                     Parrot_get_ctx_HLL_type(lexer->interp, enum_class_Float));
             int index     = add_pmc_const(lexer->bc, numconst);
             VTABLE_set_number_native(lexer->interp, numconst, second_operand->expr.c->val.nval);
@@ -676,7 +825,7 @@
 
             /* the last operand, which is the second in this case */
             expression *second_operand = instr->operands;
-            PMC *strconst = pmc_new(lexer->interp,
+            PMC *strconst = Parrot_pmc_new(lexer->interp,
                                     Parrot_get_ctx_HLL_type(lexer->interp, enum_class_String));
             int index     = add_pmc_const(lexer->bc, strconst);
 
@@ -700,8 +849,8 @@
 
 /*
 
-=item C<static void
-emit_pbc_instr(lexer_state * const lexer, instruction * const instr)>
+=item C<static void emit_pbc_instr(lexer_state * const lexer, instruction *
+const instr)>
 
 Emit PBC for one instruction. If the C<opinfo> attribute of C<instr>
 is NULL, the function does nothing and returns.
@@ -710,7 +859,11 @@
 
 */
 static void
-emit_pbc_instr(lexer_state * const lexer, instruction * const instr) {
+emit_pbc_instr(ARGIN(lexer_state * const lexer),
+        ARGIN(instruction * const instr))
+{
+    ASSERT_ARGS(emit_pbc_instr)
+
     int         i;
     expression *operand;
     opcode_t offset;
@@ -766,8 +919,8 @@
 
 /*
 
-=item C<static void
-emit_pbc_sub(lexer_state * const lexer, subroutine * const sub)>
+=item C<static void emit_pbc_sub(lexer_state * const lexer, subroutine * const
+sub)>
 
 Emit bytecode for the subroutine C<sub>.
 
@@ -775,7 +928,11 @@
 
 */
 static void
-emit_pbc_sub(lexer_state * const lexer, subroutine * const sub) {
+emit_pbc_sub(ARGIN(lexer_state * const lexer),
+        ARGIN(subroutine * const sub))
+{
+    ASSERT_ARGS(emit_pbc_sub)
+
     instruction *iter;
 
     if (sub->statements == NULL)
@@ -803,8 +960,7 @@
 
 /*
 
-=item C<static void
-emit_pbc_annotations(lexer_state * const lexer)>
+=item C<static void emit_pbc_annotations(lexer_state * const lexer)>
 
 Emit all annotations into the PackFile. First a new annotations
 segment is created. Then, for each annotation, its value is stored
@@ -814,7 +970,10 @@
 
 */
 static void
-emit_pbc_annotations(lexer_state * const lexer) {
+emit_pbc_annotations(ARGIN(lexer_state * const lexer))
+{
+    ASSERT_ARGS(emit_pbc_annotations)
+
     annotation *iter;
 
     if (lexer->annotations == NULL)
@@ -866,8 +1025,7 @@
 
 /*
 
-=item C<void
-emit_pbc(lexer_state * const lexer, const char *outfile)>
+=item C<void emit_pbc(lexer_state * const lexer, const char *outfile)>
 
 Generate Parrot Byte Code from the abstract syntax tree.
 This is the top-level function. After all instructions
@@ -878,7 +1036,10 @@
 
 */
 void
-emit_pbc(lexer_state * const lexer, const char *outfile) {
+emit_pbc(ARGIN(lexer_state * const lexer),
+        ARGIN(const char *outfile))
+{
+    ASSERT_ARGS(emit_pbc)
     subroutine *subiter;
 
     if (!outfile)

Modified: branches/ops_pct/compilers/pirc/src/piremit.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/piremit.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/piremit.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -10,12 +10,91 @@
 struct lexer_state;
 struct constant;
 
-void print_subs(struct lexer_state * const lexer);
-void emit_pir_subs(struct lexer_state * const lexer, char const * const outfile);
-void emit_pbc(struct lexer_state * const lexer, const char *outfile);
+/* HEADERIZER BEGIN: compilers/pirc/src/piremit.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
+void emit_pbc(ARGIN(lexer_state * const lexer), ARGIN(const char *outfile))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
-int emit_pbc_const(struct lexer_state * const lexer, struct constant * const pirconst);
+void emit_pir_subs(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const outfile))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_constant(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(constant * const c))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_expr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const expr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_expressions(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(expression * const expr))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_instruction(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(instruction * const ins))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_key(ARGIN(lexer_state * const lexer), ARGIN(key * const k))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_statement(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(subroutine * const sub))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void print_subs(struct ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+void print_target(ARGIN(lexer_state * const lexer), ARGIN(target * const t))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_emit_pbc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(outfile))
+#define ASSERT_ARGS_emit_pir_subs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(outfile))
+#define ASSERT_ARGS_print_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(c))
+#define ASSERT_ARGS_print_expr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(expr))
+#define ASSERT_ARGS_print_expressions __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(expr))
+#define ASSERT_ARGS_print_instruction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(ins))
+#define ASSERT_ARGS_print_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(k))
+#define ASSERT_ARGS_print_statement __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sub))
+#define ASSERT_ARGS_print_subs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_print_target __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(t))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/piremit.c */
 
 #endif /* PARROT_PIR_PIREMIT_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/src/pirmacro.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirmacro.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirmacro.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -9,7 +9,18 @@
 #include "pircompiler.h"
 #include "parrot/parrot.h"
 
+/* HEADERIZER HFILE: compilers/pirc/src/pirmacro.h */
 
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void check_size(ARGIN(macro_def * const macro), unsigned length)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_check_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(macro))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
 
 /*
 
@@ -24,15 +35,11 @@
 
 */
 
-static void check_size(macro_def * const macro, unsigned length);
-
-
-
 
 /*
 
-=item C<macro_def *
-new_macro(macro_table * const table, char * const name, int lineno)>
+=item C<macro_def * new_macro(macro_table * const table, char const * const
+name, int lineno, int takes_args, unsigned initsize)>
 
 Create a new macro definition node and store it in the macro_table C<table>
 
@@ -41,10 +48,13 @@
 */
 PARROT_MALLOC
 PARROT_IGNORABLE_RESULT
+PARROT_CAN_RETURN_NULL
 macro_def *
-new_macro(macro_table * const table, char const * const name, int lineno, int takes_args,
-          unsigned initsize)
+new_macro(ARGIN(macro_table * const table),
+        ARGIN(char const * const name), int lineno, int takes_args,
+        unsigned initsize)
 {
+    ASSERT_ARGS(new_macro)
     macro_def *macro   = (macro_def *)mem_sys_allocate(sizeof (macro_def));
 
     macro->name        = name;
@@ -65,8 +75,7 @@
 
 /*
 
-=item C<macro_param *
-new_macro_param(char const * const value)>
+=item C<macro_param * new_macro_param(char const * const value)>
 
 Constructor for a C<macro_param> struct object. Initializes
 the C<name> attribute of the C<macro_param> object to C<value>.
@@ -79,7 +88,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 macro_param *
-new_macro_param(char const * const value) {
+new_macro_param(ARGIN(char const * const value))
+{
+    ASSERT_ARGS(new_macro_param)
     macro_param *param = (macro_param *)mem_sys_allocate(sizeof (macro_param));
     param->name        = value;
     param->next        = NULL;
@@ -88,8 +99,8 @@
 
 /*
 
-=item C<void
-add_macro_param(macro_def * const macro, char * const name)>
+=item C<void add_macro_param(ARGIN*macro_def * const macro), char const * const
+name)>
 
 Add a macro parameter by name of C<name> to the macro definition C<macro>.
 
@@ -97,7 +108,10 @@
 
 */
 void
-add_macro_param(macro_def * const macro, char const * const name) {
+add_macro_param(ARGIN*macro_def * const macro),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(add_macro_param)
     macro_param *param = new_macro_param(name);
     param->next        = macro->parameters;
     macro->parameters  = param;
@@ -106,8 +120,8 @@
 
 /*
 
-=item C<void
-new_macro_const(macro_table * const table, char const * const name, char const * const value)>
+=item C<void new_macro_const(macro_table * const table, char const * const name,
+char const * const value, int lineno)>
 
 Define a new C<.macro_const>, by name of C<name> as an alias for C<value> The new macro
 const is entered in the macro_table C<table>
@@ -116,9 +130,11 @@
 
 */
 void
-new_macro_const(macro_table * const table, char const * const name, char const * const value,
-                      int lineno)
+new_macro_const(ARGIN(macro_table * const table),
+        ARGIN(char const * const name),
+        ARGIN(char const * const value), int lineno)
 {
+    ASSERT_ARGS(new_macro_const)
     /* macro constants are just macros, but they have no body; the value is already
      * parsed and allocated in memory.
      */
@@ -130,8 +146,7 @@
 
 /*
 
-=item C<void
-check_size(macro_def * const macro, unsigned length)>
+=item C<static void check_size(macro_def * const macro, unsigned length)>
 
 Check C<macro>'s buffer size whether C<length> bytes can be added;
 if not, then the buffer is doubled in size.
@@ -140,7 +155,9 @@
 
 */
 static void
-check_size(macro_def * const macro, unsigned length) {
+check_size(ARGIN(macro_def * const macro), unsigned length)
+{
+    ASSERT_ARGS(check_size)
     unsigned used = macro->cursor - macro->body;
     if (used + length >= macro->buffersize) {
         unsigned  newsize = macro->buffersize << 1;
@@ -159,8 +176,7 @@
 
 /*
 
-=item C<void
-store_macro_char(macro_def * const macro, char c)>
+=item C<void store_macro_char(macro_def * const macro, char c)>
 
 Store the character C<c> in C<macro>'s body buffer.
 
@@ -168,7 +184,9 @@
 
 */
 void
-store_macro_char(macro_def * const macro, char c) {
+store_macro_char(ARGIN(macro_def * const macro), char c)
+{
+    ASSERT_ARGS(store_macro_char)
     /* if buffer is full, resize it. */
     check_size(macro, 1);
     *(macro->cursor)++ = c;
@@ -179,8 +197,8 @@
 
 /*
 
-=item C<void
-store_macro_string(macro_def * const macro, char * const str, ...)>
+=item C<void store_macro_string(macro_def * const macro, char const * const str,
+...)>
 
 Store the string C<str> in C<macro>'s body buffer. The total number
 of characters to be written should not exceed MAX_NUM_CHARS. It's not known
@@ -190,7 +208,11 @@
 
 */
 void
-store_macro_string(macro_def * const macro, char const * const str, ...) {
+store_macro_string(ARGIN(macro_def * const macro),
+        ARGIN(char const * const str),
+        ...)
+{
+    ASSERT_ARGS(store_macro_string)
     va_list arg_ptr;
 
 #define MAX_NUM_CHARS_IN_STRING   256
@@ -206,8 +228,8 @@
 
 /*
 
-=item C<macro_def *
-find_macro(constant_table * const table, char * const name)>
+=item C<macro_def * find_macro(macro_table * const table, char const * const
+name)>
 
 Find the specified macro. If the specified macro does not exist,
 NULL is returned.
@@ -218,7 +240,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 macro_def *
-find_macro(macro_table * const table, char const * const name) {
+find_macro(ARGIN(macro_table * const table),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(find_macro)
     macro_def *iter = table->definitions;
 
     PARROT_ASSERT(name != NULL);
@@ -243,8 +268,7 @@
 
 /*
 
-=item C<macro_table *
-new_macro_table(macro_table * const current)>
+=item C<macro_table * new_macro_table(macro_table * const current)>
 
 Create a new macro_table structure; set C<current> as its previous.
 The newly created table is returned.
@@ -256,7 +280,9 @@
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 macro_table *
-new_macro_table(macro_table * const current) {
+new_macro_table(ARGIN(macro_table * const current))
+{
+    ASSERT_ARGS(new_macro_table)
     macro_table *table       = (macro_table *)mem_sys_allocate_zeroed(sizeof (macro_table));
     table->definitions       = NULL;
     table->prev = NULL;
@@ -270,8 +296,7 @@
 
 /*
 
-=item C<void
-delete_macro_table(macro_table * table)>
+=item C<void delete_macro_table(macro_table * table)>
 
 Free resources allocated for the macro_table C<table>.
 
@@ -279,14 +304,16 @@
 
 */
 void
-delete_macro_table(macro_table * table) {
+delete_macro_table(ARGMOD(macro_table * table))
+{
+    ASSERT_ARGS(delete_macro_table)
     mem_sys_free(table);
 }
 
 /*
 
-=item C<void
-declare_macro_local(macro_def * const macro, char * const name)>
+=item C<void declare_macro_local(macro_def * const macro, char const * const
+name)>
 
 Declare C<name> as a C<.macro_local> for the macro definition C<macro>.
 
@@ -294,7 +321,10 @@
 
 */
 void
-declare_macro_local(macro_def * const macro, char const * const name) {
+declare_macro_local(ARGIN(macro_def * const macro),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(declare_macro_local)
     macro_param * param = new_macro_param(name);
     param->next         = macro->macrolocals;
     macro->macrolocals  = param;
@@ -303,8 +333,7 @@
 
 /*
 
-=item C<int
-is_macro_local(macro_def * const macro, char * const name)>
+=item C<int is_macro_local(macro_def * const macro, char const * const name)>
 
 Check whether C<name> was declared as a C<.macro_local> in the macro
 definition C<macro>.
@@ -314,7 +343,10 @@
 */
 PARROT_WARN_UNUSED_RESULT
 int
-is_macro_local(macro_def * const macro, char const * const name) {
+is_macro_local(ARGIN(macro_def * const macro),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(is_macro_local)
     macro_param *iter = macro->macrolocals;
 
     while (iter) {

Modified: branches/ops_pct/compilers/pirc/src/pirmacro.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirmacro.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirmacro.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -80,33 +80,113 @@
 } macro_table;
 
 
+/* HEADERIZER BEGIN: compilers/pirc/src/pirmacro.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-
-
-macro_def *new_macro(macro_table * const table, char const * const name, int lineno,
-                     int takes_args, unsigned initsize);
-
-void add_macro_param(macro_def * const macro, char const * const name);
-
-void new_macro_const(macro_table * const table, char const * const name,
-                     char const * const value, int lineno);
-
-
-macro_def *find_macro(macro_table * const table, char const * const name);
-
-macro_table * new_macro_table(macro_table * const current);
-
-void store_macro_char(macro_def * const macro, char c) ;
-
-void store_macro_string(macro_def * const macro, char const * const str, ...);
-
-macro_param * new_macro_param(char const * const value);
-
-void declare_macro_local(macro_def * const macro, char const * const name);
-
-int is_macro_local(macro_def * const macro, char const * const name);
-
-void delete_macro_table(macro_table * table);
+void add_macro_param(
+    ARGIN*macro_def * const macro),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(2);
+
+void declare_macro_local(
+    ARGIN(macro_def * const macro),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void delete_macro_table(ARGMOD(macro_table * table))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(* table);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+macro_def * find_macro(
+    ARGIN(macro_table * const table),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+int is_macro_local(
+    ARGIN(macro_def * const macro),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_MALLOC
+PARROT_IGNORABLE_RESULT
+PARROT_CAN_RETURN_NULL
+macro_def * new_macro(
+    ARGIN(macro_table * const table),
+    ARGIN(char const * const name),
+    int lineno,
+    int takes_args,
+    unsigned initsize)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void new_macro_const(
+    ARGIN(macro_table * const table),
+    ARGIN(char const * const name),
+    ARGIN(char const * const value),
+    int lineno)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_MALLOC
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+macro_param * new_macro_param(ARGIN(char const * const value))
+        __attribute__nonnull__(1);
+
+PARROT_MALLOC
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+macro_table * new_macro_table(ARGIN(macro_table * const current))
+        __attribute__nonnull__(1);
+
+void store_macro_char(ARGIN(macro_def * const macro), char c)
+        __attribute__nonnull__(1);
+
+void store_macro_string(
+    ARGIN(macro_def * const macro),
+    ARGIN(char const * const str),
+    ...)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_add_macro_param __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_declare_macro_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(macro) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_delete_macro_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(table))
+#define ASSERT_ARGS_find_macro __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(table) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_is_macro_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(macro) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_new_macro __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(table) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_new_macro_const __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(table) \
+    , PARROT_ASSERT_ARG(name) \
+    , PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_new_macro_param __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(value))
+#define ASSERT_ARGS_new_macro_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(current))
+#define ASSERT_ARGS_store_macro_char __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(macro))
+#define ASSERT_ARGS_store_macro_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(macro) \
+    , PARROT_ASSERT_ARG(str))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/pirmacro.c */
 
 #endif /* PARROT_PIR_PIRMACRO_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/src/pirparser.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirparser.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirparser.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -405,6 +405,111 @@
 
 #endif
 
+/* HEADERIZER HFILE: none */
+
+/* HEADERIZER BEGIN: static */
+/* 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);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static char * concat_strings(
+    NOTNULL(lexer_state * const lexer),
+    NOTNULL(char const * a),
+    NOTNULL(char const * b))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void create_if_instr(
+    NOTNULL(lexer_state * const lexer),
+    int invert,
+    int hasnull,
+    NOTNULL(char const * const name),
+    NOTNULL(char const * const label))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(4)
+        __attribute__nonnull__(5);
+
+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);
+
+PARROT_WARN_UNUSED_RESULT
+static int evaluate_i_n(int a, pir_rel_operator op, double b);
+
+PARROT_WARN_UNUSED_RESULT
+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);
+
+static void yy_reduce_print (
+    YYSTYPE *yyvsp,
+    int yyrule,
+    yyscan_t yyscanner,
+    struct lexer_state * const lexer);
+
+static void yy_stack_print (yytype_int16 *bottom, yytype_int16 *top);
+static void yy_symbol_print (
+    FILE *yyoutput,
+    int yytype,
+    YYSTYPE const * const yyvaluep,
+    yyscan_t yyscanner,
+    struct lexer_state * const lexer);
+
+static void yy_symbol_value_print (
+    FILE *yyoutput,
+    int yytype,
+    YYSTYPE const * const yyvaluep,
+    yyscan_t yyscanner,
+    struct lexer_state * const lexer);
+
+static void yydestruct (
+    const char *yymsg,
+    int yytype,
+    YYSTYPE *yyvaluep,
+    yyscan_t yyscanner,
+    struct lexer_state * const lexer);
+
+static int YYID (int i);
+static char * yystpcpy (char *yydest, const char *yysrc);
+static YYSIZE_T yystrlen (const char *yystr);
+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))
+#define ASSERT_ARGS_concat_strings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(a) \
+    , PARROT_ASSERT_ARG(b))
+#define ASSERT_ARGS_create_if_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       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_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_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)
+#define ASSERT_ARGS_yy_symbol_value_print  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_yydestruct  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_YYID  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_yystpcpy  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_yystrlen  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_yysyntax_error  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_yytnamerr  __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 char *expand_macro(yyscan_t yyscanner, macro_def * const macro, macro_param * args);
 
 /* Enumeration of mathematical operator types; these are used to index the opnames array. */
@@ -5450,8 +5555,7 @@
 
 /*
 
-=item C<static int
-evaluate_i_i(int a, pir_rel_operator op, double b)>
+=item C<static int evaluate_i_i(int a, pir_rel_operator op, int b)>
 
 Compare C<a> with C<b> according to the relational operator C<op>.
 Wrapper for C<evaluate_n_n>, which takes arguments of type double.
@@ -5467,8 +5571,7 @@
 
 /*
 
-=item C<static int
-evaluate_n_i(int a, pir_rel_operator op, double b)>
+=item C<static int evaluate_n_i(double a, pir_rel_operator op, int b)>
 
 Compare C<a> with C<b> according to the relational operator C<op>.
 Wrapper for C<evaluate_n_n>, which takes arguments of type double.
@@ -5484,8 +5587,7 @@
 
 /*
 
-=item C<static int
-evaluate_i_n(int a, pir_rel_operator op, double b)>
+=item C<static int evaluate_i_n(int a, pir_rel_operator op, double b)>
 
 Compare C<a> with C<b> according to the relational operator C<op>.
 Wrapper for C<evaluate_n_n>, which takes arguments of type double.
@@ -5633,8 +5735,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 * const lexer, char const * a,
+char const * b)>
 
 Concatenates two strings into a new buffer. The new string is returned.
 
@@ -5659,9 +5761,8 @@
 
 /*
 
-=item C<static void
-create_if_instr(lexer_state *lexer, int invert, int hasnull,
-                char * const name, char * const label)>
+=item C<static void create_if_instr(lexer_state * const lexer, int invert, int
+hasnull, char const * const name, char const * const 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>.
@@ -5908,8 +6009,7 @@
 
 /*
 
-=item C<static void
-do_strength_reduction(lexer_state * const lexer)>
+=item C<static void do_strength_reduction(lexer_state * const 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
@@ -6043,8 +6143,8 @@
 
 /*
 
-=item C<static void
-check_first_arg_direction(lexer_state * const lexer, char * const opname)>
+=item C<static void check_first_arg_direction(lexer_state * const lexer, char
+const * 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
@@ -6217,8 +6317,8 @@
 
 /*
 
-=item C<static void
-undeclared_symbol(lexer_state * const lexer, char * const symbol)>
+=item C<static void undeclared_symbol(lexer_state * const lexer, char const *
+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

Modified: branches/ops_pct/compilers/pirc/src/pirpcc.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirpcc.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirpcc.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -25,14 +25,163 @@
 
 #include "parrot/oplib/ops.h"
 
+/* HEADERIZER HFILE: compilers/pirc/src/pirpcc.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void add_alias_operand(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(PMC *array),
+    int index,
+    ARGIN(char const * const alias))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(4);
+
+static void arguments_to_operands(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(argument * const args),
+    unsigned num_arguments)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static int calculate_pcc_argument_flags(ARGIN(argument * const arg))
+        __attribute__nonnull__(1);
+
+static int calculate_pcc_target_flags(ARGIN(target * const result))
+        __attribute__nonnull__(1);
+
+static void convert_nci_call(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void convert_pcc_call(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void convert_pcc_methodcall(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void convert_pcc_methodtailcall(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void convert_pcc_return(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void convert_pcc_tailcall(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void convert_pcc_yield(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static int generate_signature_pmc(
+    ARGIN(lexer_state * const lexer),
+    unsigned size)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+static target * generate_unique_pir_reg(
+    ARGIN(lexer_state * const lexer),
+    pir_type type)
+        __attribute__nonnull__(1);
+
+PARROT_CANNOT_RETURN_NULL
+static target * get_invoked_sub(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const sub))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void save_global_reference(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(instruction * const instr),
+    ARGIN(char const * const label))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+static void targets_to_operands(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const targets),
+    unsigned num_targets)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_add_alias_operand __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(array) \
+    , PARROT_ASSERT_ARG(alias))
+#define ASSERT_ARGS_arguments_to_operands __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(args))
+#define ASSERT_ARGS_calculate_pcc_argument_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(arg))
+#define ASSERT_ARGS_calculate_pcc_target_flags __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(result))
+#define ASSERT_ARGS_convert_nci_call __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_convert_pcc_call __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_convert_pcc_methodcall __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_convert_pcc_methodtailcall __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_convert_pcc_return __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_convert_pcc_tailcall __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_convert_pcc_yield __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_generate_signature_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_generate_unique_pir_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_get_invoked_sub __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sub))
+#define ASSERT_ARGS_save_global_reference __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(instr) \
+    , PARROT_ASSERT_ARG(label))
+#define ASSERT_ARGS_targets_to_operands __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(targets))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
 
 
 /*
 
 =over 4
 
-=item C<static int
-calculate_pcc_target_flags(target * const result)>
+=item C<static int calculate_pcc_target_flags(target * const result)>
 
 Calculate Parrot Calling Conventions flags for the target node
 C<result>.
@@ -41,7 +190,9 @@
 
 */
 static int
-calculate_pcc_target_flags(target * const result) {
+calculate_pcc_target_flags(ARGIN(target * const result))
+{
+    ASSERT_ARGS(calculate_pcc_target_flags)
     int flag = 0;
 
 
@@ -66,8 +217,7 @@
 
 /*
 
-=item C<static int
-calculate_pcc_argument_flags(argument * const arg)>
+=item C<static int calculate_pcc_argument_flags(argument * const arg)>
 
 Calculate the Parrot Calling Conventions flags for the
 argument C<arg>. An int encoding the flags is returned.
@@ -76,7 +226,9 @@
 
 */
 static int
-calculate_pcc_argument_flags(argument * const arg) {
+calculate_pcc_argument_flags(ARGIN(argument * const arg))
+{
+    ASSERT_ARGS(calculate_pcc_argument_flags)
     int flag = 0;
 
     switch (arg->value->type) {
@@ -110,8 +262,8 @@
 
 /*
 
-=item C<static target *
-generate_unique_pir_reg(lexer_state * const lexer, pir_type type)>
+=item C<static target * generate_unique_pir_reg(lexer_state * const lexer,
+pir_type type)>
 
 Generate a unique, temporary PIR register of type C<type>. It uses the C<reg>
 constructor to create a target node, and using C<pir_reg_generator>
@@ -123,16 +275,20 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
 static target *
-generate_unique_pir_reg(lexer_state * const lexer, pir_type type) {
+generate_unique_pir_reg(ARGIN(lexer_state * const lexer), pir_type type)
+{
+    ASSERT_ARGS(generate_unique_pir_reg)
+
     return new_reg(lexer, type, --lexer->pir_reg_generator);
 }
 
 
 /*
 
-=item C<static int
-generate_signature_pmc(lexer_state * const lexer, unsigned size)>
+=item C<static int generate_signature_pmc(lexer_state * const lexer, unsigned
+size)>
 
 Create a FixedIntegerArray PMC object that encodes the types and flags
 of parameters and add it to the PBC constant table. The index in that
@@ -142,12 +298,15 @@
 
 */
 static int
-generate_signature_pmc(lexer_state * const lexer, unsigned size) {
+generate_signature_pmc(ARGIN(lexer_state * const lexer), unsigned size)
+{
+    ASSERT_ARGS(generate_signature_pmc)
+
     PMC *fixed_int_array;
     int  array_index;
 
     /* flags and types are encoded in a FixedIntegerArray PMC */
-    fixed_int_array = pmc_new(lexer->interp, enum_class_FixedIntegerArray);
+    fixed_int_array = Parrot_pmc_new(lexer->interp, enum_class_FixedIntegerArray);
 
     if (size > 0) /* can't resize a fixed integer array to 0 elements, default size is 0. */
         VTABLE_set_integer_native(lexer->interp, fixed_int_array, size);
@@ -161,8 +320,7 @@
 
 /*
 
-=item C<void
-emit_sub_epilogue(lexer_state * const lexer)>
+=item C<void emit_sub_epilogue(lexer_state * const lexer)>
 
 Emit final instructions for the current subroutine. In case
 this is a C<:main> sub, the "end" instruction is emitted,
@@ -172,7 +330,9 @@
 
 */
 void
-emit_sub_epilogue(lexer_state * const lexer) {
+emit_sub_epilogue(ARGIN(lexer_state * const lexer))
+{
+    ASSERT_ARGS(emit_sub_epilogue)
 
     if (TEST_FLAG(lexer->subs->flags, PIRC_SUB_FLAG_MAIN))
         new_sub_instr(lexer, PARROT_OP_end, "end", 0);
@@ -188,8 +348,8 @@
 
 /*
 
-=item C<static void
-add_alias_operand(lexer_state * const lexer, PMC *array, int index, char const * const alias)>
+=item C<static void add_alias_operand(lexer_state * const lexer, PMC *array, int
+index, char const * const alias)>
 
 Add an alias operand to current instruction; C<array> is the signature
 array, which must hold the right flags for this new operand (at position C<index>).
@@ -199,8 +359,11 @@
 
 */
 static void
-add_alias_operand(lexer_state * const lexer, PMC *array, int index, char const * const alias) {
-    PARROT_ASSERT(alias);
+add_alias_operand(ARGIN(lexer_state * const lexer),
+        ARGIN(PMC *array), int index,
+        ARGIN(char const * const alias))
+{
+    ASSERT_ARGS(add_alias_operand)
     /* set flags for being a string constant, and being a :named operand. */
     VTABLE_set_integer_keyed_int(lexer->interp, array, index, PARROT_ARG_NAME | PARROT_ARG_SC);
     push_operand(lexer, expr_from_string(lexer, alias));
@@ -209,8 +372,8 @@
 
 /*
 
-=item C<static void
-targets_to_operands(lexer_state * const lexer, target * const targets)>
+=item C<static void targets_to_operands(lexer_state * const lexer, target *
+const targets, unsigned num_targets)>
 
 Convert a list of C<target> nodes into operands. Before the operands
 are added to the I<current> instruction, a FixedIntegerArray is created,
@@ -231,7 +394,11 @@
 
 */
 static void
-targets_to_operands(lexer_state * const lexer, target * const targets, unsigned num_targets) {
+targets_to_operands(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const targets), unsigned num_targets)
+{
+    ASSERT_ARGS(targets_to_operands)
+
     target  *iter;
     int      array_index;
     PMC     *signature_array;
@@ -291,8 +458,8 @@
 
 /*
 
-=item C<static void
-arguments_to_operands(lexer_state * const lexer, argument * const args)>
+=item C<static void arguments_to_operands(lexer_state * const lexer, argument *
+const args, unsigned num_arguments)>
 
 Convert a list of C<argument> nodes into operands. Before the operands are
 added to the I<current> instruction, a FixedIntegerArray PMC is created
@@ -303,7 +470,11 @@
 
 */
 static void
-arguments_to_operands(lexer_state * const lexer, argument * const args, unsigned num_arguments) {
+arguments_to_operands(ARGIN(lexer_state * const lexer),
+        ARGIN(argument * const args), unsigned num_arguments)
+{
+    ASSERT_ARGS(arguments_to_operands)
+
     argument *argiter;
     int       array_index;
     unsigned  i;
@@ -347,8 +518,8 @@
 
 /*
 
-=item C<void
-generate_parameters_instr(lexer_state * const lexer, unsigned num_parameters)>
+=item C<void generate_parameters_instr(lexer_state * const lexer, unsigned
+num_parameters)>
 
 Generate the "get_params" instruction, taking <num_parameters> variable arguments;
 this is the number of parameters of this function.
@@ -357,7 +528,9 @@
 
 */
 void
-generate_parameters_instr(lexer_state * const lexer, unsigned num_parameters) {
+generate_parameters_instr(ARGIN(lexer_state * const lexer), unsigned num_parameters)
+{
+    ASSERT_ARGS(generate_parameters_instr)
     if (TEST_FLAG(CURRENT_SUB(lexer)->flags , (PIRC_SUB_FLAG_METHOD | PIRC_SUB_FLAG_VTABLE))) {
         ++num_parameters; /* didn't count implicit "self" parameter yet. */
     }
@@ -372,8 +545,8 @@
 
 /*
 
-=item C<void
-generate_getresults_instr(lexer_state * const lexer, target * const targetlist)>
+=item C<void generate_getresults_instr(lexer_state * const lexer, target * const
+targetlist)>
 
 Generate instruction for the C<.get_results> statement.
 
@@ -381,7 +554,10 @@
 
 */
 void
-generate_getresults_instr(lexer_state * const lexer, target * const targetlist) {
+generate_getresults_instr(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const targetlist))
+{
+    ASSERT_ARGS(generate_getresults_instr)
     /* add this point we know that there's only 1 target, as that's the convention for
      * exception handlers:
      *
@@ -397,9 +573,8 @@
 
 /*
 
-=item C<static void
-save_global_reference(lexer_state * const lexer, instruction * const instr,
-                      char const * const label)>
+=item C<static void save_global_reference(lexer_state * const lexer, instruction
+* const instr, char const * const label)>
 
 Store the instruction C<instr>, which references the global label C<label> in a list.
 After the parse phase, this instruction can be patched, if C<label> can be resolved
@@ -409,10 +584,12 @@
 
 */
 static void
-save_global_reference(lexer_state * const lexer, instruction * const instr,
-                      char const * const label)
-
+save_global_reference(ARGIN(lexer_state * const lexer),
+        ARGIN(instruction * const instr),
+        ARGIN(char const * const label))
 {
+    ASSERT_ARGS(save_global_reference)
+
     global_fixup *ref = pir_mem_allocate_zeroed_typed(lexer, global_fixup);
 
     ref->instr = instr;
@@ -425,8 +602,8 @@
 
 /*
 
-=item C<static target *
-get_invoked_sub(lexer_state * const lexer, target * const sub)>
+=item C<static target * get_invoked_sub(lexer_state * const lexer, target *
+const sub)>
 
 Return a C<target> node that represents the sub to invoke.
 If C<sub> is a register, that is returned. If it's a declared C<.local>,
@@ -439,8 +616,12 @@
 =cut
 
 */
+PARROT_CANNOT_RETURN_NULL
 static target *
-get_invoked_sub(lexer_state * const lexer, target * const sub) {
+get_invoked_sub(ARGIN(lexer_state * const lexer),
+        ARGIN(target * const sub))
+{
+    ASSERT_ARGS(get_invoked_sub)
     target       *subreg = NULL;
     symbol       *sym    = NULL;
     global_label *glob   = NULL;
@@ -494,8 +675,8 @@
 
 /*
 
-=item C<static void
-convert_pcc_call(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_pcc_call(lexer_state * const lexer, invocation *
+const inv)>
 
 Generate instructions for a normal invocation using the Parrot Calling
 Conventions (PCC). This is the sequence of the following instructions:
@@ -517,7 +698,11 @@
 
 */
 static void
-convert_pcc_call(lexer_state * const lexer, invocation * const inv) {
+convert_pcc_call(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_pcc_call)
+
     target *sub;
 
     new_sub_instr(lexer, PARROT_OP_set_args_pc, "set_args_pc", inv->num_arguments);
@@ -541,8 +726,8 @@
 
 /*
 
-=item C<static void
-convert_pcc_tailcall(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_pcc_tailcall(lexer_state * const lexer, invocation *
+const inv)>
 
 Generate instructions for a tailcall using the Parrot Calling Conventions (PCC).
 The sequence of instructions is:
@@ -554,7 +739,11 @@
 
 */
 static void
-convert_pcc_tailcall(lexer_state * const lexer, invocation * const inv) {
+convert_pcc_tailcall(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_pcc_tailcall)
+
     target *sub;
 
     new_sub_instr(lexer, PARROT_OP_set_args_pc, "set_args_pc", inv->num_arguments);
@@ -568,8 +757,8 @@
 
 /*
 
-=item C<static void
-convert_pcc_return(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_pcc_return(lexer_state * const lexer, invocation *
+const inv)>
 
 Generate instructions for a normal return statement using the Parrot Calling
 Conventions (PCC). The sequence of instructions is:
@@ -581,7 +770,11 @@
 
 */
 static void
-convert_pcc_return(lexer_state * const lexer, invocation * const inv) {
+convert_pcc_return(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_pcc_return)
+
     new_sub_instr(lexer, PARROT_OP_set_returns_pc, "set_returns_pc", inv->num_arguments);
     arguments_to_operands(lexer, inv->arguments, inv->num_arguments);
     new_sub_instr(lexer, PARROT_OP_returncc, "returncc", 0);
@@ -589,8 +782,8 @@
 
 /*
 
-=item C<static void
-convert_nci_call(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_nci_call(lexer_state * const lexer, invocation *
+const inv)>
 
 Generate instructions for a function invocation using the Native Call
 Interface (NCI). The sequence of instructions is:
@@ -603,7 +796,11 @@
 
 */
 static void
-convert_nci_call(lexer_state * const lexer, invocation * const inv) {
+convert_nci_call(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_nci_call)
+
     target *sub;
 
     new_sub_instr(lexer, PARROT_OP_set_args_pc, "set_args_pc", inv->num_arguments);
@@ -620,8 +817,8 @@
 
 /*
 
-=item C<static void
-convert_pcc_yield(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_pcc_yield(lexer_state * const lexer, invocation *
+const inv)>
 
 Generate instructions for a yield statement using the Parrot Calling Conventions.
 The sequence of instructions is:
@@ -633,7 +830,11 @@
 
 */
 static void
-convert_pcc_yield(lexer_state * const lexer, invocation * const inv) {
+convert_pcc_yield(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_pcc_yield)
+
     new_sub_instr(lexer, PARROT_OP_set_returns_pc, "set_returns_pc", inv->num_arguments);
     arguments_to_operands(lexer, inv->arguments, inv->num_arguments);
     new_sub_instr(lexer, PARROT_OP_yield, "yield", 0);
@@ -642,8 +843,8 @@
 
 /*
 
-=item C<static void
-convert_pcc_methodcall(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_pcc_methodcall(lexer_state * const lexer, invocation
+* const inv)>
 
 Generate instructions for a method call using the Parrot Calling Conventions (PCC).
 The sequence of instructions is:
@@ -656,7 +857,11 @@
 
 */
 static void
-convert_pcc_methodcall(lexer_state * const lexer, invocation * const inv) {
+convert_pcc_methodcall(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_pcc_methodcall)
+
     /* in a methodcall, the invocant object is passed as the first argument */
     unshift_arg(inv, new_argument(lexer, expr_from_target(lexer, inv->sub)));
     new_sub_instr(lexer, PARROT_OP_set_args_pc, "set_args_pc", inv->num_arguments);
@@ -673,8 +878,8 @@
 
 /*
 
-=item C<static void
-convert_pcc_methodtailcall(lexer_state * const lexer, invocation * const inv)>
+=item C<static void convert_pcc_methodtailcall(lexer_state * const lexer,
+invocation * const inv)>
 
 Generate instructions for a method tailcall, using the Parrot Calling Conventions (PCC).
 The sequence of instructions is:
@@ -686,7 +891,11 @@
 
 */
 static void
-convert_pcc_methodtailcall(lexer_state * const lexer, invocation * const inv) {
+convert_pcc_methodtailcall(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_pcc_methodtailcall)
+
     unshift_arg(inv, new_argument(lexer, expr_from_target(lexer, inv->sub)));
     new_sub_instr(lexer, PARROT_OP_set_args_pc, "set_args_pc", inv->num_arguments);
 
@@ -712,8 +921,8 @@
 
 /*
 
-=item C<void
-convert_inv_to_instr(lexer_state * const lexer, invocation * const inv)>
+=item C<void convert_inv_to_instr(lexer_state * const lexer, invocation * const
+inv)>
 
 Convert an C<invocation> structure into a series of instructions. This is the
 dispatch function, which calls the appropriate conversion function, based
@@ -723,7 +932,10 @@
 
 */
 void
-convert_inv_to_instr(lexer_state * const lexer, invocation * const inv) {
+convert_inv_to_instr(ARGIN(lexer_state * const lexer),
+        ARGIN(invocation * const inv))
+{
+    ASSERT_ARGS(convert_inv_to_instr)
     switch (inv->type) {
       case CALL_PCC:
         convert_pcc_call(lexer, inv);

Modified: branches/ops_pct/compilers/pirc/src/pirpcc.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirpcc.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirpcc.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -9,10 +9,41 @@
 #include "pircompunit.h"
 #include "pircompiler.h"
 
-void convert_inv_to_instr(struct lexer_state * const lexer, invocation * const inv);
-void generate_parameters_instr(struct lexer_state * const lexer, unsigned num_parameters);
-void generate_getresults_instr(struct lexer_state * const lexer, target * const targetlist);
-void emit_sub_epilogue(struct lexer_state * const lexer);
+/* HEADERIZER BEGIN: compilers/pirc/src/pirpcc.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+void convert_inv_to_instr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(invocation * const inv))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void emit_sub_epilogue(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+void generate_getresults_instr(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(target * const targetlist))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void generate_parameters_instr(
+    ARGIN(lexer_state * const lexer),
+    unsigned num_parameters)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_convert_inv_to_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(inv))
+#define ASSERT_ARGS_emit_sub_epilogue __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_generate_getresults_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(targetlist))
+#define ASSERT_ARGS_generate_parameters_instr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/pirpcc.c */
 
 #endif /* PARROT_PIR_PIRPCC_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/src/pirregalloc.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirregalloc.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirregalloc.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -47,8 +47,7 @@
 
 /*
 
-=item C<static void
-reset_register_count(lsr_allocator * const lsr)>
+=item C<static void reset_register_count(lsr_allocator * const lsr)>
 
 Reset the register counters; there's one counter for each register
 type (string, num, int, pmc).
@@ -57,7 +56,9 @@
 
 */
 static void
-reset_register_count(lsr_allocator * const lsr) {
+reset_register_count(ARGIN(lsr_allocator * const lsr))
+{
+    ASSERT_ARGS(reset_register_count)
     int i;
     /* the "r" field keeps track of the number of registers that must be allocated by
      * parrot. In the original implementation, "r" is constant, and indicates the number
@@ -70,10 +71,85 @@
         lsr->r[i] = 1;
 }
 
+/* HEADERIZER HFILE: compilers/pirc/src/pirregalloc.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+static void add_free_reg(
+    ARGIN(lsr_allocator * const lsr),
+    unsigned regno,
+    pir_type type)
+        __attribute__nonnull__(1);
+
+static void add_interval_to_active(
+    ARGIN(lsr_allocator *lsr),
+    ARGIN(live_interval * const i),
+    pir_type type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void add_live_interval(
+    ARGIN(lsr_allocator * const lsr),
+    ARGIN(live_interval * const i),
+    pir_type type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void cache_interval_object(
+    ARGIN(lsr_allocator * const lsr),
+    ARGIN(live_interval * interval))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static void expire_old_intervals(
+    ARGIN(lsr_allocator * const lsr),
+    ARGIN(live_interval * const i),
+    pir_type type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+static unsigned get_free_reg(
+    ARGIN(lsr_allocator * const lsr),
+    pir_type type)
+        __attribute__nonnull__(1);
+
+static unsigned lengthi(ARGIN_NULLOK(live_interval *list));
+static void remove_from_active(ARGMOD(live_interval *i))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*i);
+
+static void reset_register_count(ARGIN(lsr_allocator * const lsr))
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_add_free_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr))
+#define ASSERT_ARGS_add_interval_to_active __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_add_live_interval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_cache_interval_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr) \
+    , PARROT_ASSERT_ARG(interval))
+#define ASSERT_ARGS_expire_old_intervals __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr) \
+    , PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_get_free_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr))
+#define ASSERT_ARGS_lengthi __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_remove_from_active __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(i))
+#define ASSERT_ARGS_reset_register_count __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 /*
 
-=item C<lsr_allocator *
-new_linear_scan_register_allocator(struct lexer_state * lexer)>
+=item C<lsr_allocator * new_linear_scan_register_allocator(struct lexer_state
+*lexer)>
 
 Constructor for a linear scan register allocator.
 Initializes the allocator, and returns it.
@@ -81,8 +157,11 @@
 =cut
 
 */
+PARROT_CAN_RETURN_NULL
 lsr_allocator *
-new_linear_scan_register_allocator(struct lexer_state *lexer) {
+new_linear_scan_register_allocator(ARGIN_NULLOK(struct lexer_state *lexer))
+{
+    ASSERT_ARGS(new_linear_scan_register_allocator)
     lsr_allocator *lsr = (lsr_allocator *)mem_sys_allocate_zeroed(sizeof (lsr_allocator));
 
     lsr->lexer = lexer;
@@ -97,7 +176,8 @@
 */
 void print_list(char *msg, live_interval *i);
 void
-print_list(char *msg, live_interval *i) {
+print_list(ARGIN(char *msg), ARGIN(live_interval *i))
+{
     fprintf(stderr, "%s: ", msg);
     while (i) {
         fprintf(stderr, "[%d] ", i->endpoint);
@@ -108,8 +188,7 @@
 
 /*
 
-=item C<void
-destroy_linear_scan_register_allocator(lsr_allocator *lsr)>
+=item C<void destroy_linear_scan_register_allocator(lsr_allocator *lsr)>
 
 Destructor for linear scan register allocator. All live_interval
 objects are destroyed as well.
@@ -118,7 +197,9 @@
 
 */
 void
-destroy_linear_scan_register_allocator(lsr_allocator *lsr) {
+destroy_linear_scan_register_allocator(ARGMOD(lsr_allocator *lsr))
+{
+    ASSERT_ARGS(destroy_linear_scan_register_allocator)
     pir_type type;
     live_interval *i;
 
@@ -143,12 +224,18 @@
 
 /*
 
+=item C<static unsigned lengthi(live_interval *list)>
+
 XXX debug function only.
 Return length of list C<list>
 
+=cut
+
 */
 static unsigned
-lengthi(live_interval *list) {
+lengthi(ARGIN_NULLOK(live_interval *list))
+{
+    ASSERT_ARGS(lengthi)
     unsigned len = 0;
 
     while (list) {
@@ -160,8 +247,8 @@
 
 /*
 
-=item C<static void
-add_live_interval(lsr_allocator * const lsr, live_interval * const i, pir_type type)>
+=item C<static void add_live_interval(lsr_allocator * const lsr, live_interval *
+const i, pir_type type)>
 
 Add live_interval C<i> to the list; this list is sorted on increasing
 start point.
@@ -170,7 +257,10 @@
 
 */
 static void
-add_live_interval(lsr_allocator * const lsr, live_interval * const i, pir_type type) {
+add_live_interval(ARGIN(lsr_allocator * const lsr),
+    ARGIN(live_interval * const i), pir_type type)
+{
+    ASSERT_ARGS(add_live_interval)
     live_interval *iter = lsr->intervals[type];
 
     /* if there's no interval for the specified type, insert i as the first one and return */
@@ -234,8 +324,8 @@
 
 /*
 
-=item C<live_interval *
-new_live_interval(lsr_allocator * const lsr, unsigned firstuse_location, pir_type type)>
+=item C<live_interval * new_live_interval(lsr_allocator * const lsr, unsigned
+firstuse_location, pir_type type)>
 
 Constructor for a live_interval struct object. After creating the new interval object,
 its startpoint and endpoint are initialized to the value in C<firstuse_location>. Note
@@ -247,10 +337,14 @@
 =cut
 
 */
+PARROT_CAN_RETURN_NULL
 PARROT_MALLOC
 PARROT_WARN_UNUSED_RESULT
 live_interval *
-new_live_interval(lsr_allocator * const lsr, unsigned firstuse_location, pir_type type) {
+new_live_interval(ARGIN(lsr_allocator * const lsr),
+        unsigned firstuse_location, pir_type type)
+{
+    ASSERT_ARGS(new_live_interval)
     live_interval *i;
     /* check whether there's an interval object that we can re-use, to prevent
      * memory malloc() and free()s.
@@ -283,8 +377,8 @@
 
 /*
 
-=item C<static void
-add_interval_to_active(lsr_allocator *lsr, live_interval * i, pir_type type)>
+=item C<static void add_interval_to_active(lsr_allocator *lsr, live_interval *
+const i, pir_type type)>
 
 Add interval C<i> to the list of active intervals; the list is sorted
 on increasing endpoint.
@@ -293,7 +387,10 @@
 
 */
 static void
-add_interval_to_active(lsr_allocator *lsr, live_interval * const i, pir_type type) {
+add_interval_to_active(ARGIN(lsr_allocator *lsr),
+        ARGIN(live_interval * const i), pir_type type)
+{
+    ASSERT_ARGS(add_interval_to_active)
     live_interval *iter = lsr->active[type];
 
     /* if there's no active intervals, set i as first */
@@ -351,8 +448,7 @@
 
 /*
 
-=item C<static unsigned
-get_free_reg(lsr_allocator * const lsr, pir_type type)>
+=item C<static unsigned get_free_reg(lsr_allocator * const lsr, pir_type type)>
 
 Allocate a new register; if there's any old registers to be reused, return
 such a second-hand register; otherwise, allocate a brand new one.
@@ -361,7 +457,9 @@
 
 */
 static unsigned
-get_free_reg(lsr_allocator * const lsr, pir_type type) {
+get_free_reg(ARGIN(lsr_allocator * const lsr), pir_type type)
+{
+    ASSERT_ARGS(get_free_reg)
     /* if there's any second hand register for the requested type, return that. */
     if (lsr->free_regs[type]) {
         free_reg *available  = lsr->free_regs[type];
@@ -388,8 +486,8 @@
 
 /*
 
-=item C<static void
-add_free_reg(lsr_allocator * const lsr, unsigned regno, pir_type type)>
+=item C<static void add_free_reg(lsr_allocator * const lsr, unsigned regno,
+pir_type type)>
 
 Add register C<regno> to the list of free regs that can be reuse.
 
@@ -397,7 +495,10 @@
 
 */
 static void
-add_free_reg(lsr_allocator * const lsr, unsigned regno, pir_type type) {
+add_free_reg(ARGIN(lsr_allocator * const lsr), unsigned regno, pir_type type)
+{
+    ASSERT_ARGS(add_free_reg)
+
     free_reg *reg;
 
     /* fprintf(stderr, "add_free_reg(): %u\n", regno); */
@@ -422,8 +523,7 @@
 
 /*
 
-=item C<static void
-remove_from_active(live_interval *i)>
+=item C<static void remove_from_active(live_interval *i)>
 
 Remove interval C<i> from the list of active intervals.
 
@@ -431,7 +531,9 @@
 
 */
 static void
-remove_from_active(live_interval *i) {
+remove_from_active(ARGMOD(live_interval *i))
+{
+    ASSERT_ARGS(remove_from_active)
     /* if it has a previous node, that previous node's next is set
      * to i's next.
      */
@@ -448,8 +550,8 @@
 
 /*
 
-=item C<static void
-expire_old_intervals(lsr_allocator * const lsr, live_interval * i, pir_type type)>
+=item C<static void expire_old_intervals(lsr_allocator * const lsr,
+live_interval * const i, pir_type type)>
 
 Go over all active intervals; if the endpoint of one of them is >= than
 C<i>'s start point, the action is aborted. This is why the C<active> list must be
@@ -460,7 +562,11 @@
 
 */
 static void
-expire_old_intervals(lsr_allocator * const lsr, live_interval * const i, pir_type type) {
+expire_old_intervals(ARGIN(lsr_allocator * const lsr),
+        ARGIN(live_interval * const i), pir_type type)
+{
+    ASSERT_ARGS(expire_old_intervals)
+
     live_interval *j;
 
     for (j = lsr->active[type]; j != NULL; j = j->nexta) {
@@ -479,8 +585,8 @@
 
 /*
 
-=item C<static void
-cache_interval_objects(lsr_allocator * const lsr, live_interval * interval)>
+=item C<static void cache_interval_object(lsr_allocator * const lsr,
+live_interval * interval)>
 
 Store the interval C<interval> on a caching list; whenever a new C<live_interval>
 object is requested, these interval objects can be re-used, instead of malloc()ing
@@ -490,15 +596,17 @@
 
 */
 static void
-cache_interval_object(lsr_allocator * const lsr, live_interval * interval) {
+cache_interval_object(ARGIN(lsr_allocator * const lsr),
+        ARGIN(live_interval * interval))
+{
+    ASSERT_ARGS(cache_interval_object)
     interval->nextc = lsr->cached_intervals;
     lsr->cached_intervals = interval;
 }
 
 /*
 
-=item C<void
-linear_scan_register_allocation(lsr_allocator * const lsr)>
+=item C<void linear_scan_register_allocation(lsr_allocator * const lsr)>
 
 Go over all live intervals; before handling any interval, expire all old ones;
 they might have expired (see expire_old_intervals()). Then, allocate a new
@@ -508,7 +616,9 @@
 
 */
 void
-linear_scan_register_allocation(lsr_allocator * const lsr) {
+linear_scan_register_allocation(ARGIN(lsr_allocator * const lsr))
+{
+    ASSERT_ARGS(linear_scan_register_allocation)
     live_interval * i;
     pir_type type = 0; /* types run from 0 to 4; see pircompunit.h */
 

Modified: branches/ops_pct/compilers/pirc/src/pirregalloc.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirregalloc.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirregalloc.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -84,13 +84,41 @@
 
 } lsr_allocator;
 
-lsr_allocator *new_linear_scan_register_allocator(struct lexer_state *lexer);
+/* HEADERIZER BEGIN: compilers/pirc/src/pirregalloc.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-void destroy_linear_scan_register_allocator(lsr_allocator *lsr);
-
-live_interval * new_live_interval(lsr_allocator * const lsr, unsigned firstuse, pir_type type);
-
-void linear_scan_register_allocation(lsr_allocator * const lsr);
+void destroy_linear_scan_register_allocator(ARGMOD(lsr_allocator *lsr))
+        __attribute__nonnull__(1)
+        FUNC_MODIFIES(*lsr);
+
+void linear_scan_register_allocation(ARGIN(lsr_allocator * const lsr))
+        __attribute__nonnull__(1);
+
+PARROT_CAN_RETURN_NULL
+lsr_allocator * new_linear_scan_register_allocator(
+    ARGIN_NULLOK(struct lexer_state *lexer));
+
+PARROT_CAN_RETURN_NULL
+PARROT_MALLOC
+PARROT_WARN_UNUSED_RESULT
+live_interval * new_live_interval(
+    ARGIN(lsr_allocator * const lsr),
+    unsigned firstuse_location,
+    pir_type type)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_destroy_linear_scan_register_allocator \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr))
+#define ASSERT_ARGS_linear_scan_register_allocation \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr))
+#define ASSERT_ARGS_new_linear_scan_register_allocator \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+#define ASSERT_ARGS_new_live_interval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lsr))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/pirregalloc.c */
 
 #endif /* PARROT_PIR_PIRREGALLOC_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/src/pirsymbol.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirsymbol.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirsymbol.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -11,7 +11,6 @@
 #include <string.h>
 #include <stdio.h>
 
-
 /*
 
 =head1 NAME
@@ -49,6 +48,61 @@
 */
 
 
+/* HEADERIZER HFILE: compilers/pirc/src/pirsymbol.h */
+
+/* HEADERIZER BEGIN: static */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static global_label * new_global_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static local_label * new_local_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name),
+    unsigned offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+static pir_reg * new_pir_reg(
+    ARGIN(lexer_state * const lexer),
+    pir_type type,
+    int regno)
+        __attribute__nonnull__(1);
+
+static int next_register(ARGIN(lexer_state * const lexer), pir_type type)
+        __attribute__nonnull__(1);
+
+static int use_register(
+    ARGIN(lexer_state * const lexer),
+    pir_type type,
+    int regno,
+    int pasmregno)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_new_global_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_new_local_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_new_pir_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_next_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_use_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: static */
+
 
 
 /* Conversion Look-Up Table (CLUT) for pir_type and value_type enums.
@@ -83,8 +137,7 @@
 
 /*
 
-=item C<static int
-next_register(lexer_state * const lexer, pir_type type)>
+=item C<static int next_register(lexer_state * const lexer, pir_type type)>
 
 Returns a new register of the specified type.
 This is the vanilla register allocator.
@@ -93,7 +146,10 @@
 
 */
 static int
-next_register(NOTNULL(lexer_state * const lexer), pir_type type) {
+next_register(ARGIN(lexer_state * const lexer), pir_type type)
+{
+    ASSERT_ARGS(next_register)
+
     CURRENT_SUB(lexer)->info.regs_used[type]++; /* count number of registers used */
     /* fprintf(stderr, "vanilla reg: %d of type %d\n", lexer->curregister[type], type); */
     return lexer->curregister[type]++;
@@ -102,8 +158,8 @@
 
 /*
 
-=item C<void
-assign_vanilla_register(lexer_state * const lexer, symbol * const sym)>
+=item C<void assign_vanilla_register(lexer_state * const lexer, symbol * const
+sym)>
 
 Assign a new register to symbol C<sym>, and create a new live interval for C<sym>.
 
@@ -111,7 +167,10 @@
 
 */
 void
-assign_vanilla_register(NOTNULL(lexer_state * const lexer), symbol * const sym) {
+assign_vanilla_register(ARGIN(lexer_state * const lexer),
+        ARGIN(symbol * const sym))
+{
+    ASSERT_ARGS(assign_vanilla_register)
     sym->info.color    = next_register(lexer, sym->info.type);
     /* fprintf(stderr, "assigning vanilla reg %d to symbol %s\n", sym->info.color,
                     sym->info.id.name);
@@ -135,8 +194,7 @@
 
 /*
 
-=item C<static unsigned
-get_hashcode(char const * const str, unsigned num_buckets)>
+=item C<unsigned get_hashcode(char const * const str, unsigned num_buckets)>
 
 Calculate the hash code for the string C<str>.
 This code is taken from IMCC.
@@ -147,7 +205,9 @@
 PARROT_PURE_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 unsigned
-get_hashcode(NOTNULL(char const * const str), unsigned num_buckets) {
+get_hashcode(ARGIN(char const * const str), unsigned num_buckets)
+{
+    ASSERT_ARGS(get_hashcode)
     unsigned long  key = 0;
     char const    *s;
 
@@ -159,8 +219,8 @@
 
 /*
 
-=item C<void
-store_bucket(hashtable * const table, bucket * const buck, unsigned long hash)>
+=item C<void store_bucket(hashtable * const table, bucket * const buck, unsigned
+long hash)>
 
 Store the bucket C<buck> in the hashtable C<table> at index C<hash>.
 
@@ -168,15 +228,17 @@
 
 */
 void
-store_bucket(NOTNULL(hashtable * const table), NOTNULL(bucket * const buck), unsigned long hash) {
+store_bucket(ARGIN(hashtable * const table),
+        ARGIN(bucket * const buck), unsigned long hash)
+{
+    ASSERT_ARGS(store_bucket)
     buck->next = table->contents[hash];
     table->contents[hash] = buck;
 }
 
 /*
 
-=item C<bucket *
-get_bucket(hashtable * const table, unsigned long hash)>
+=item C<bucket * get_bucket(hashtable * const table, unsigned long hash)>
 
 Return the bucket at hash index C<hash> from the hashtable C<table>.
 
@@ -186,14 +248,16 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 bucket *
-get_bucket(NOTNULL(hashtable * const table), unsigned long hash) {
+get_bucket(ARGIN(hashtable * const table), unsigned long hash)
+{
+    ASSERT_ARGS(get_bucket)
     return table->contents[hash];
 }
 
 /*
 
-=item C<symbol *
-new_symbol(lexer_state * const lexer, char const * const name, pir_type type)>
+=item C<symbol * new_symbol(lexer_state * const lexer, char const * const name,
+pir_type type)>
 
 Create a new symbol node, returns it after initialization.
 
@@ -203,7 +267,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 symbol *
-new_symbol(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name), pir_type type) {
+new_symbol(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name), pir_type type)
+{
+    ASSERT_ARGS(new_symbol)
     symbol *sym = pir_mem_allocate_zeroed_typed(lexer, symbol);
 
     sym->info.id.name = name;
@@ -216,8 +283,8 @@
 
 /*
 
-=item C<void
-declare_local(lexer_state * const lexer, pir_type type, symbol * const list)>
+=item C<void declare_local(lexer_state * const lexer, pir_type type, symbol *
+const list)>
 
 Declare the local variables in the list pointed to by C<list>, all of which
 are of the type C<type>. The variables are entered into the symbol table for
@@ -228,9 +295,10 @@
 
 */
 void
-declare_local(NOTNULL(lexer_state * const lexer), pir_type type,
-              NOTNULL(symbol * const list))
+declare_local(ARGIN(lexer_state * const lexer), pir_type type,
+              ARGIN(symbol * const list))
 {
+    ASSERT_ARGS(declare_local)
     symbol    *iter  = list;
     hashtable *table = &CURRENT_SUB(lexer)->symbols;
 
@@ -272,8 +340,7 @@
 
 /*
 
-=item C<void
-check_unused_symbols(lexer_state * const lexer)>
+=item C<void check_unused_symbols(lexer_state * const lexer)>
 
 Check all subroutines for unused symbols. If a symbol is declared but
 never used, a warning message is printed to C<stderr>. If there's
@@ -283,7 +350,9 @@
 
 */
 void
-check_unused_symbols(NOTNULL(lexer_state * const lexer)) {
+check_unused_symbols(ARGIN(lexer_state * const lexer))
+{
+    ASSERT_ARGS(check_unused_symbols)
     subroutine *subiter;
 
     /* if there's no subs, just return. */
@@ -317,8 +386,8 @@
 
 /*
 
-=item C<symbol *
-find_symbol(lexer_state * const lexer, char const * const name)>
+=item C<symbol * find_symbol(lexer_state * const lexer, char const * const
+name)>
 
 Return the node for the symbol or NULL if the symbol
 is not defined. If an attempt is made to find a symbol,
@@ -331,7 +400,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 symbol *
-find_symbol(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name)) {
+find_symbol(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(find_symbol)
     hashtable    *table    = &CURRENT_SUB(lexer)->symbols;
     unsigned long hashcode = get_hashcode(name, table->size);
     bucket       *buck     = get_bucket(table, hashcode);
@@ -369,8 +441,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 * const 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>.
@@ -381,7 +453,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static pir_reg *
-new_pir_reg(NOTNULL(lexer_state * const lexer), pir_type type, int regno) {
+new_pir_reg(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+{
+    ASSERT_ARGS(new_pir_reg)
     pir_reg *r = pir_mem_allocate_zeroed_typed(lexer, pir_reg);
 
     r->info.type     = type;
@@ -395,8 +469,8 @@
 
 /*
 
-=item C<pir_reg *
-find_register(lexer_state * const lexer, pir_type type, int regno)>
+=item C<pir_reg * find_register(lexer_state * const lexer, pir_type type, int
+regno)>
 
 Find (symbolic) register no. C<regno> of type C<type>. If it's found,
 a pointer to it is returned, if not, NULL is returned.
@@ -407,7 +481,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 pir_reg *
-find_register(NOTNULL(lexer_state * const lexer), pir_type type, int regno) {
+find_register(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+{
+    ASSERT_ARGS(find_register)
     /* should do a binary search. fix later.
      */
     pir_reg *iter = CURRENT_SUB(lexer)->registers[type];
@@ -439,8 +515,8 @@
 
 /*
 
-=item C<static int
-use_register(lexer_state * const lexer, pir_type type, int regno, int pasmregno)>
+=item C<static int use_register(lexer_state * const lexer, pir_type type, int
+regno, int pasmregno)>
 
 This function registers (no pun intended) register C<regno> of type
 C<type>; it uses register C<pasmregno>; each subsequent
@@ -454,7 +530,11 @@
 
 */
 static int
-use_register(NOTNULL(lexer_state * const lexer), pir_type type, int regno, int pasmregno) {
+use_register(ARGIN(lexer_state * const lexer), pir_type type,
+        int regno, int pasmregno)
+{
+    ASSERT_ARGS(use_register)
+
     pir_reg *reg;
 
     /* create a new node representing this PIR register */
@@ -505,8 +585,7 @@
 
 /*
 
-=item C<int
-color_reg(struct lexer_state * const lexer, pir_type type, int regno)>
+=item C<int color_reg(lexer_state * const lexer, pir_type type, int regno)>
 
 Find register C<regno> of type C<type>; if it was used before in the
 current subroutine, a (pasm) register was already assigned to it, which
@@ -519,7 +598,9 @@
 
 */
 int
-color_reg(NOTNULL(lexer_state * const lexer), pir_type type, int regno) {
+color_reg(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+{
+    ASSERT_ARGS(color_reg)
     pir_reg *reg = find_register(lexer, type, regno);
 
     /* was the register already used, then it was already colored by
@@ -555,8 +636,8 @@
 
 /*
 
-=item C<static global_label *
-new_global_label(char * const name)>
+=item C<static global_label * new_global_label(lexer_state * const lexer, char
+const * const name)>
 
 Constructor to create a new global_label object.
 
@@ -566,7 +647,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static global_label *
-new_global_label(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name)) {
+new_global_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(new_global_label)
     global_label *glob = pir_mem_allocate_zeroed_typed(lexer, global_label);
     glob->name         = name;
     glob->const_table_index = 0;
@@ -575,8 +659,8 @@
 
 /*
 
-=item C<void
-store_global_label(struct lexer_state * const lexer, char * const name)>
+=item C<void store_global_label(lexer_state * const lexer, char const * const
+name)>
 
 Store the global identifier C<name> in C<lexer>'s global label table.
 
@@ -584,7 +668,10 @@
 
 */
 void
-store_global_label(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name)) {
+store_global_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(store_global_label)
     hashtable    *table = &lexer->globals;
     unsigned long hash  = get_hashcode(name, table->size);
     bucket *b           = new_bucket(lexer);
@@ -595,8 +682,8 @@
 
 /*
 
-=item C<global_label *
-find_global_label(struct lexer_state * const lexer, char const * const name)>
+=item C<global_label * find_global_label(lexer_state * const lexer, char const *
+const name)>
 
 Find the global identifier C<name>. If no such identifier was found,
 then NULL is returned.
@@ -607,7 +694,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 global_label *
-find_global_label(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name)) {
+find_global_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(find_global_label)
     hashtable    *table    = &lexer->globals;
     unsigned long hashcode = get_hashcode(name, table->size);
     bucket *b              = get_bucket(table, hashcode);
@@ -623,8 +713,8 @@
 
 /*
 
-=item C<void
-store_global_constant(lexer_state *lexer, constant * const c)>
+=item C<void store_global_constant(lexer_state * const lexer, constdecl * const
+c)>
 
 Store the globally defined constant C<c> in the constant table.
 
@@ -632,7 +722,10 @@
 
 */
 void
-store_global_constant(NOTNULL(lexer_state * const lexer), NOTNULL(constdecl * const c)) {
+store_global_constant(ARGIN(lexer_state * const lexer),
+        ARGIN(constdecl * const c))
+{
+    ASSERT_ARGS(store_global_constant)
     hashtable    *table  = &lexer->constants;
     unsigned long hash   = get_hashcode(c->name, table->size);
     bucket *b            = new_bucket(lexer);
@@ -642,8 +735,8 @@
 
 /*
 
-=item C<constant *
-find_global_constant(lexer_state *lexer, char * const name)>
+=item C<constdecl * find_global_constant(lexer_state * const lexer, char const *
+const name)>
 
 Find a constant defined as C<name>. If no constant was defined by
 that name, then NULL is returned.
@@ -654,7 +747,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 constdecl *
-find_global_constant(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name)) {
+find_global_constant(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
+{
+    ASSERT_ARGS(find_global_constant)
     hashtable    *table    = &lexer->constants;
     unsigned long hashcode = get_hashcode(name, table->size);
     bucket *b              = get_bucket(table, hashcode);
@@ -675,9 +771,8 @@
 
 /*
 
-=item C<static local_label *
-new_local_label(lexer_state * const lexer, char const * const name,
-unsigned offset)>
+=item C<static local_label * new_local_label(lexer_state * const lexer, char
+const * const name, unsigned offset)>
 
 Constructor for a label. Create a new label structure, fill out the details
 and return it. C<name> is the name of the label; C<offset> is its current
@@ -689,9 +784,12 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static local_label *
-new_local_label(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const name),
-                unsigned offset)
+new_local_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name),
+        unsigned offset)
 {
+    ASSERT_ARGS(new_local_label)
+
     local_label *l = pir_mem_allocate_zeroed_typed(lexer, local_label);
     l->name        = name;
     l->offset      = offset;
@@ -700,8 +798,8 @@
 
 /*
 
-=item C<void
-store_local_label(lexer_state * const lexer, char const * const labelname, unsigned offset)>
+=item C<void store_local_label(lexer_state * const lexer, char const * const
+labelname, unsigned offset)>
 
 Store the (sub-)local label C<labelname>, having I<address> C<offset> in the current
 subroutine structure.
@@ -710,9 +808,11 @@
 
 */
 void
-store_local_label(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const labelname),
-                  unsigned offset)
+store_local_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const labelname),
+        unsigned offset)
 {
+    ASSERT_ARGS(store_local_label)
     local_label  *l     = new_local_label(lexer, labelname, offset);
     hashtable    *table = &CURRENT_SUB(lexer)->labels;
     unsigned long hash  = get_hashcode(labelname, table->size);
@@ -723,8 +823,8 @@
 
 /*
 
-=item C<unsigned
-find_local_label(lexer_state * const lexer, char const * const labelname)>
+=item C<unsigned find_local_label(lexer_state * const lexer, char const * const
+labelname)>
 
 Find the offset for label C<labelname>. If C<labelname> was not defined as
 a label, an error is emitted, otherwise, the offset of that label is returned.
@@ -734,7 +834,10 @@
 */
 PARROT_WARN_UNUSED_RESULT
 unsigned
-find_local_label(NOTNULL(lexer_state * const lexer), NOTNULL(char const * const labelname)) {
+find_local_label(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const labelname))
+{
+    ASSERT_ARGS(find_local_label)
     hashtable    *table    = &CURRENT_SUB(lexer)->labels;
     unsigned long hashcode = get_hashcode(labelname, table->size);
     bucket *b              = get_bucket(table, hashcode);

Modified: branches/ops_pct/compilers/pirc/src/pirsymbol.h
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirsymbol.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/src/pirsymbol.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -75,49 +75,157 @@
 /* lookup table to convert value_type and pir_type values into one another. */
 extern const int valuetype_pirtype_clut[10];
 
+/* HEADERIZER BEGIN: compilers/pirc/src/pirsymbol.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-/* symbol constructor */
-symbol *new_symbol(struct lexer_state * const lexer, char const * const name, pir_type type);
-
-/* to enter a symbol in the symbol table */
-void declare_local(struct lexer_state * const lexer, pir_type type, symbol * const list);
-
-/* to find a symbol in the symbol table */
-symbol *find_symbol(struct lexer_state * const lexer, char const * const name);
-
-
-pir_reg *find_register(struct lexer_state * const lexer, pir_type type, int regno);
-
-
-/* to find declared symbols that are never referenced */
-void check_unused_symbols(struct lexer_state * const lexer);
-
-/* find specified register; if it was not used yet, assign a PASM register to it */
-int color_reg(struct lexer_state * const lexer, pir_type type, int regno);
-
-/* store a global identifier (label) */
-void store_global_label(struct lexer_state * const lexer, char const * const name);
-
-/* find a global identifier */
-global_label *find_global_label(struct lexer_state * const lexer, char const * const name);
-
-/* store a global .const symbol */
-void store_global_constant(struct lexer_state * const lexer, constdecl * const c);
-
-/* find a global .const symbol */
-constdecl *find_global_constant(struct lexer_state * const lexer, char const * const name);
-
-void assign_vanilla_register(struct lexer_state * const lexer, symbol * const sym);
-
-void store_local_label(struct lexer_state * const lexer, char const * const label, unsigned offset);
-
-unsigned find_local_label(struct lexer_state * const lexer, char const * const label);
-
-unsigned get_hashcode(char const * const str, unsigned num_buckets);
-
-bucket *get_bucket(hashtable * const table, unsigned long hash);
-
-void store_bucket(hashtable * const table, bucket * const buck, unsigned long hash);
+void assign_vanilla_register(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(symbol * const sym))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void check_unused_symbols(ARGIN(lexer_state * const lexer))
+        __attribute__nonnull__(1);
+
+int color_reg(ARGIN(lexer_state * const lexer), pir_type type, int regno)
+        __attribute__nonnull__(1);
+
+void declare_local(
+    ARGIN(lexer_state * const lexer),
+    pir_type type,
+    ARGIN(symbol * const list))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(3);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+constdecl * find_global_constant(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+global_label * find_global_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+unsigned find_local_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const labelname))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+pir_reg * find_register(
+    ARGIN(lexer_state * const lexer),
+    pir_type type,
+    int regno)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+symbol * find_symbol(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+bucket * get_bucket(ARGIN(hashtable * const table), unsigned long hash)
+        __attribute__nonnull__(1);
+
+PARROT_PURE_FUNCTION
+PARROT_WARN_UNUSED_RESULT
+unsigned get_hashcode(ARGIN(char const * const str), unsigned num_buckets)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+symbol * new_symbol(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name),
+    pir_type type)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void store_bucket(
+    ARGIN(hashtable * const table),
+    ARGIN(bucket * const buck),
+    unsigned long hash)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void store_global_constant(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(constdecl * const c))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void store_global_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const name))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+void store_local_label(
+    ARGIN(lexer_state * const lexer),
+    ARGIN(char const * const labelname),
+    unsigned offset)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+#define ASSERT_ARGS_assign_vanilla_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(sym))
+#define ASSERT_ARGS_check_unused_symbols __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_color_reg __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_declare_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(list))
+#define ASSERT_ARGS_find_global_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_find_global_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_find_local_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(labelname))
+#define ASSERT_ARGS_find_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer))
+#define ASSERT_ARGS_find_symbol __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_get_bucket __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(table))
+#define ASSERT_ARGS_get_hashcode __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str))
+#define ASSERT_ARGS_new_symbol __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_store_bucket __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(table) \
+    , PARROT_ASSERT_ARG(buck))
+#define ASSERT_ARGS_store_global_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(c))
+#define ASSERT_ARGS_store_global_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(name))
+#define ASSERT_ARGS_store_local_label __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(lexer) \
+    , PARROT_ASSERT_ARG(labelname))
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: compilers/pirc/src/pirsymbol.c */
 
 #endif /* PARROT_PIR_PIRSYMBOL_H_GUARD */
 

Modified: branches/ops_pct/compilers/pirc/t/basic.t
==============================================================================
--- branches/ops_pct/compilers/pirc/t/basic.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/t/basic.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -2,6 +2,9 @@
 # Copyright (C) 2008-2009, Parrot Foundation.
 # $Id$
 
+use strict;
+use warnings;
+
 use lib qw(lib);
 use Parrot::Test tests => 6;
 

Modified: branches/ops_pct/compilers/pirc/t/heredoc.t
==============================================================================
--- branches/ops_pct/compilers/pirc/t/heredoc.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/t/heredoc.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -2,6 +2,9 @@
 # Copyright (C) 2008-2009, Parrot Foundation.
 # $Id$
 
+use strict;
+use warnings;
+
 use lib qw(lib);
 use Parrot::Test tests => 1;
 

Modified: branches/ops_pct/compilers/pirc/t/macro.t
==============================================================================
--- branches/ops_pct/compilers/pirc/t/macro.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/t/macro.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -2,6 +2,9 @@
 # Copyright (C) 2008-2009, Parrot Foundation.
 # $Id$
 
+use strict;
+use warnings;
+
 use lib qw(lib);
 use Parrot::Test tests => 1;
 

Modified: branches/ops_pct/compilers/pirc/t/stmts.t
==============================================================================
--- branches/ops_pct/compilers/pirc/t/stmts.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/t/stmts.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -2,6 +2,9 @@
 # Copyright (C) 2008-2009, Parrot Foundation.
 # $Id$
 
+use strict;
+use warnings;
+
 use lib qw(lib);
 use Parrot::Test tests => 5;
 

Modified: branches/ops_pct/compilers/pirc/t/subflags.t
==============================================================================
--- branches/ops_pct/compilers/pirc/t/subflags.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/compilers/pirc/t/subflags.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -2,6 +2,9 @@
 # Copyright (C) 2008-2009, Parrot Foundation.
 # $Id$
 
+use strict;
+use warnings;
+
 use lib qw(lib);
 use Parrot::Test tests => 1;
 

Modified: branches/ops_pct/config/auto/cgoto.pm
==============================================================================
--- branches/ops_pct/config/auto/cgoto.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/cgoto.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -22,10 +22,10 @@
 
 sub _init {
     my $self = shift;
-    my %data;
-    $data{description} = q{Does your compiler support computed goto};
-    $data{result}      = q{};
-    return \%data;
+    return {
+        'description' => 'Does your compiler support computed goto',
+        'result'      => '',
+    };
 }
 
 sub runstep {
@@ -58,29 +58,6 @@
     my $verbose = $conf->options->get('verbose');
     if ($test) {
         $conf->data->set(
-            TEMP_cg_h => '$(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h',
-            TEMP_cg_c => <<'EOF',
-# generated by config/auto/cgoto.pm
-
-src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
-	include/pmc/pmc_parrotlibrary.h
-src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
-	include/pmc/pmc_parrotlibrary.h
-src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
-
-$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
-
-src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
-
-$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
-
-src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
-	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
-EOF
-            TEMP_cg_o => 'src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O)',
-            TEMP_cg_r => '$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
-                    $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c',
             cg_flag => '-DHAVE_COMPUTED_GOTO'
         );
         print " (yes) " if $verbose;
@@ -88,10 +65,6 @@
     }
     else {
         $conf->data->set(
-            TEMP_cg_h => '',
-            TEMP_cg_c => '',
-            TEMP_cg_o => '',
-            TEMP_cg_r => '',
             cg_flag   => ''
         );
         print " (no) " if $verbose;

Modified: branches/ops_pct/config/auto/gcc.pm
==============================================================================
--- branches/ops_pct/config/auto/gcc.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/gcc.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -85,14 +85,15 @@
     $gccversion .= ".$minor" if defined $minor;
     $self->set_result("yes, $gccversion");
 
-    my $ccwarn = $conf->data->get('ccwarn');
-
     $conf->data->set( sym_export => '__attribute__ ((visibility("default")))' )
         if $gccversion >= 4.0 && !$conf->data->get('sym_export');
 
+    # sneaky check for g++
+    my $gpp = (index($conf->data->get('cc'), '++') > 0) ? 1 : 0;
+
     $conf->data->set(
-        ccwarn              => "$ccwarn",
-        gccversion          => $gccversion,
+        gccversion => $gccversion,
+        'g++'      => $gpp,
     );
     return 1;
 }

Modified: branches/ops_pct/config/auto/icu.pm
==============================================================================
--- branches/ops_pct/config/auto/icu.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/icu.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -339,8 +339,7 @@
         if (! -d $icuheaders) {
             $without = 1;
         }
-        my $slash = $conf->data->get('slash');
-        $icuheaders .= "${slash}include";
+        $icuheaders .= "/include";
         if (! -d $icuheaders) {
             $without = 1;
         }

Modified: branches/ops_pct/config/auto/perldoc.pm
==============================================================================
--- branches/ops_pct/config/auto/perldoc.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/perldoc.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -36,7 +36,8 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $cmd = $conf->data->get('scriptdirexp_provisional') . q{/perldoc};
+    my $slash = $conf->data->get('slash');
+    my $cmd = $conf->data->get('scriptdirexp_provisional') . $slash . q{perldoc};
     my ( $fh, $filename ) = tempfile( UNLINK => 1 );
     my $content = capture_output("$cmd -ud $filename perldoc") || undef;
 
@@ -59,7 +60,6 @@
     my $TEMP_pod = join q{ } =>
         map { my $t = $_; $t =~ s/\.ops$/.pod/; "ops/$t" } @ops;
 
-    my $slash       = $conf->data->get('slash');
     my $new_perldoc = $conf->data->get('new_perldoc');
 
     foreach my $ops (@ops) {
@@ -67,17 +67,17 @@
         $pod =~ s/\.ops$/.pod/;
         if ( $new_perldoc ) {
             $TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC) -ud ops${slash}$pod ..${slash}src${slash}ops${slash}$ops
-\t\$(CHMOD) 0644 ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -ud ops/$pod ../src/ops/$ops
+\t\$(CHMOD) 0644 ops/$pod
 
 END
         }
         else {
             $TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC) -u ..${slash}ops${slash}$ops > ops${slash}$pod
-\t\$(CHMOD) 0644 ..${slash}ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -u ../ops/$ops > ops/$pod
+\t\$(CHMOD) 0644 ../ops/$pod
 
 END
         }

Modified: branches/ops_pct/config/auto/pmc.pm
==============================================================================
--- branches/ops_pct/config/auto/pmc.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/pmc.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -90,6 +90,10 @@
             }
         }
         my $include_headers = get_includes($pmc_fname);
+        my $cc_shared = $conf->data->get('cc_shared');
+        my $cc_o_out  = $conf->data->get('cc_o_out');
+        my $warnings  = $conf->data->get('ccwarn');
+        my $optimize  = $conf->data->get('optimize');
 
         $TEMP_pmc_build .= <<END
 src/pmc/$pmc.c : src/pmc/$pmc.dump
@@ -100,20 +104,21 @@
 
 include/pmc/pmc_$pmc.h: src/pmc/$pmc.c
 
-src/pmc/$pmc\$(O): include/pmc/pmc_${pmc}.h src/pmc/$pmc.str \$(NONGEN_HEADERS) \\
+## SUFFIX OVERRIDE -Warnings
+src/pmc/$pmc\$(O): include/pmc/pmc_$pmc.h src/pmc/$pmc.str \$(NONGEN_HEADERS) \\
     $parent_headers $include_headers include/pmc/pmc_continuation.h \\
-    include/pmc/pmc_callcontext.h include/pmc/pmc_fixedintegerarray.h
+    include/pmc/pmc_callcontext.h include/pmc/pmc_fixedintegerarray.h \\
+    src/pmc/$pmc.c
+\t\$(CC) \$(CFLAGS) $optimize $cc_shared $warnings -I\$(\@D) $cc_o_out\$@ -c src/pmc/$pmc.c
 
 END
     }
 
-    # src/pmc/$pmc\$(O): \$(NONGEN_HEADERS) $parent_headers include/pmc/pmc_$pmc.h
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    ( my $TEMP_pmc_classes_o   = $TEMP_pmc_o )   =~ s/^| / src${slash}pmc${slash}/g;
-    ( my $TEMP_pmc_classes_str = $TEMP_pmc_str ) =~ s/^| / src${slash}pmc${slash}/g;
-    ( my $TEMP_pmc_classes_pmc = $pmc_list )     =~ s/^| / src${slash}pmc${slash}/g;
+    ( my $TEMP_pmc_classes_o   = $TEMP_pmc_o )   =~ s{^| }{ src/pmc/}g;
+    ( my $TEMP_pmc_classes_str = $TEMP_pmc_str ) =~ s{^| }{ src/pmc/}g;
+    ( my $TEMP_pmc_classes_pmc = $pmc_list )     =~ s{^| }{ src/pmc/}g;
 
     # Gather the actual names (with MixedCase) of all of the non-abstract
     # built-in PMCs in rough hierarchical order.

Modified: branches/ops_pct/config/auto/warnings.pm
==============================================================================
--- branches/ops_pct/config/auto/warnings.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/warnings.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,17 +1,14 @@
-# Copyright (C) 2007-2008, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
 
-config/auto/warnings.pm - Warning flags detection
+config/auto/warnings.pm - Warning flags probing.
 
 =head1 DESCRIPTION
 
-Automagically detect what warning flags, like -Wall, -Wextra,
--Wchar-subscripts, etc., that the compiler can support.  Directly hacked
-from F<config/auto/attributes.pm>.
-
-=head1 SUBROUTINES
+Given a list of potential warnings available for a certain type of
+compiler, probe to see which of those are valid for this particular version.
 
 =over 4
 
@@ -22,21 +19,86 @@
 use strict;
 use warnings;
 
-
 use base qw(Parrot::Configure::Step);
 
 use Parrot::Configure::Utils ();
 use Parrot::BuildUtil;
 
+=item C<_init>
+
+Declare potential warnings for various compilers.  Note that the compiler
+key used here doesn't really exist in a unified way in Configure - would
+be nice if it did so we could simplify our checks in runstep().
+
+We create a data structure here that breaks out the warnings by compiler,
+using this structure:
+
+warnings:
+  gcc:
+    basic:
+      - -Warning1
+      - -Warning2
+    cage:
+      - -Warning3
+      - -Warning4
+    only:
+      - -Warning5:
+        - foo.c
+        - bar.c
+    never:
+      - -Warning6:
+        - baz.c
+        - frob.c
+    todo:
+      - -Warning7:
+        - cow.c
+        - pig.c
+  g++:
+    ...
+
+'basic' warnings are always used.
+
+'cage' warnings are added only if --cage is specified during
+Configure. This can be used to hold warnings that aren't ready to be
+added to the default run yet.
+
+'only' should be used as we add new warnings to the build, it will let
+us insure that files we know are clean for a new warning stay clean.
+
+'never' should be used when a particular file contains generated code
+(e.g. imcc) and we cannot update it to conform to the standards.
+
+'todo' functions just like never does, but it indicates that these
+files are expected to eventually be free of this warning.
+
+Note that there is no actual requirement that the 'file' be a full path
+to a .c file; the file could be "PMCS" or "OPS" or some other identifier;
+whatever the value, it will generate a Config entry prefixed with
+C<ccwarn::>, which will probably be used via @@ expansion in a makefile.
+
+It is tempting to put this into a config file, but having it in
+perl gives us the ability to dynamically setup certain warnings based
+on any criteria already discovered via Config.
+
+Order is important - some warnings are invalid unless they are specified
+after other warnings.
+
+=cut
+
 sub _init {
     my $self = shift;
-    my %data;
-    $data{description} = q{Detect supported compiler warnings};
-    $data{result}      = q{};
-
-    # Please keep these sorted by flag name, such that "-Wno-foo" is
-    # sorted as "-Wfoo", so we can turn off/on as needed.
-    my @potential_warnings = qw(
+
+    my $data = {
+        description => 'Detect supported compiler warnings',
+        result      => '',
+        validated   => [],
+    };
+
+    # begin gcc/g++
+    my $gcc = {};
+    my $gpp = {};
+
+    my @gcc_or_gpp = qw(
         -falign-functions=16
         -fvisibility=hidden
         -funit-at-a-time
@@ -49,6 +111,7 @@
         -Wchar-subscripts
         -Wcomment
         -Wdisabled-optimization
+        -Wdiv-by-zero
         -Wendif-labels
         -Wextra
         -Wformat
@@ -66,9 +129,11 @@
         -Wmissing-field-initializers
         -Wno-missing-format-attribute
         -Wmissing-include-dirs
+        -Wmultichar
         -Wpacked
         -Wparentheses
         -Wpointer-arith
+        -Wpointer-sign
         -Wreturn-type
         -Wsequence-point
         -Wno-shadow
@@ -79,13 +144,17 @@
         -Wswitch-default
         -Wtrigraphs
         -Wundef
-        -Wunknown-pragmas
         -Wno-unused
+        -Wunknown-pragmas
         -Wvariadic-macros
         -Wwrite-strings
-        -Wnot-a-real-warning
     );
-    my @potential_warnings_no_cpp = qw(
+
+    $gcc->{'basic'} = [ @gcc_or_gpp ];
+    $gpp->{'basic'} = [ @gcc_or_gpp ];
+
+    # Add some gcc only warnings that would break g++
+    push @{$gcc->{'basic'}}, qw(
         -Wbad-function-cast
         -Wc++-compat
         -Wdeclaration-after-statement
@@ -101,7 +170,7 @@
         -Wstrict-prototypes
     );
 
-    my @cage_warnings = qw(
+    my $gcc_or_gpp_cage = [ qw(
         -std=c89
         -Werror-implicit-function-declaration
         -Wformat=2
@@ -109,41 +178,51 @@
         -Wlong-long
         -Wmissing-format-attribute
         -Wdeprecated-declarations
-        -Wdiv-by-zero
         -Wno-format-extra-args
         -Wno-import
-        -Wno-multichar
-        -Wno-pointer-sign
-        -Wold-style-definition
         -Wunreachable-code
+        -Wunused
         -Wunused-function
         -Wunused-label
         -Wunused-value
         -Wunused-variable
-    );
+    ) ];
 
-    my @may_not_even_be_interesting = qw(
-        -Wpadded
-        -Wredundant-decls
-        -Wswitch-enum
-        -Wsystem-headers
-    );
+    $gcc->{'cage'} = $gcc_or_gpp_cage;
+    $gpp->{'cage'} = $gcc_or_gpp_cage;
 
-    my @nice_to_have_but_too_noisy_for_now = qw(
-        -pedantic
-        -Wconversion
-        -Wint-to-pointer-cast
-        -Wmissing-noreturn
-        -Wshadow
-        -Wunused-macros
-        -Wunused-parameter
-    );
+    $gcc->{'todo'} = $gpp->{'todo'} = {
+        '-Wformat-nonliteral' => [
+            'src/spf_render.c',
+            'compilers/imcc/optimizer.c',
+        ],
+        '-Wstrict-prototypes' => [
+            'src/nci/extra_thunks.c',
+            'src/extra_nci_thunks.c',
+        ],
+    };
+
+    $gcc->{'never'} = $gpp->{'never'} = {
+        '-Wformat-nonliteral' => [
+            'compilers/imcc/imclexer.c',
+        ],
+        '-Wswitch-default' => [
+            'compilers/imcc/imclexer.c',
+        ],
+        '-Wcast-qual' => [
+            'compilers/imcc/imcparser.c',
+        ],
+        '-Wlogical-op' => [
+            'compilers/imcc/imcparser.c',
+        ],
+    };
+
+    $data->{'warnings'}{'gcc'} = $gcc;
+    $data->{'warnings'}{'g++'} = $gpp;
 
-    $data{potential_warnings}        = \@potential_warnings;
-    $data{potential_warnings_no_cpp} = \@potential_warnings_no_cpp;
-    $data{cage_warnings}             = \@cage_warnings;
+    ## end gcc/g++
 
-    return \%data;
+    return $data;
 }
 
 sub runstep {
@@ -151,53 +230,64 @@
 
     my $verbose = $conf->options->get('verbose');
     print "\n" if $verbose;
+
+    my $compiler = '';
     if ( defined $conf->data->get('gccversion') ) {
+        $compiler = $conf->data->get('g++') ? 'g++' : 'gcc';
+    }
 
-        # Dirty way of checking if compiling with c++
-        my $nocpp = index($conf->data->get('cc'), '++') < 0;
+    if ($compiler eq '') {
+        print "We do not (yet) probe for warnings for your compiler\n"
+            if $verbose;
+        $self->set_result('skipped');
+        return 1;
+    }
 
-        # add on some extra warnings if requested
-        $self->_add_cage_warnings($conf);
-        $self->_add_maintainer_warnings($conf);
-
-        # now try out our warnings
-        for my $maybe_warning (@{ $self->{potential_warnings} }) {
-            $self->try_warning( $conf, $maybe_warning, $verbose );
-        }
-        if ($nocpp) {
-            for my $maybe_warning (@{ $self->{potential_warnings_no_cpp} }) {
-                $self->try_warning( $conf, $maybe_warning, $verbose );
+    # standard warnings.
+    my @warnings = grep {$self->valid_warning($conf, $_)}
+        @{$self->{'warnings'}{$compiler}{'basic'}};
+
+    # --cage?
+    if ($conf->options->get('cage')) {
+        push @warnings, grep {$self->valid_warning($conf, $_)}
+            @{$self->{'warnings'}{$compiler}{'cage'}}
+    }
+
+    # -- only?
+    my %per_file;
+    if (exists $self->{'warnings'}{$compiler}{'only'}) {
+        my %only = %{$self->{'warnings'}{$compiler}{'only'}};
+        foreach my $warning (keys %only) {
+            next unless $self->valid_warning($conf, $warning);
+            foreach my $file (@{$only{$warning}}) {
+                $per_file{$file} = [ @warnings ] unless exists $per_file{$file};
+                push @{$per_file{$file}}, $warning;
             }
         }
+    }
 
-        if ($nocpp) {
-           $self->set_result("set for gcc");
-        }
-        else {
-           $self->set_result("set for g++");
+    foreach my $key (qw/todo never/) {
+        if (exists $self->{'warnings'}{$compiler}{$key}) {
+            my %dont = %{$self->{'warnings'}{$compiler}{$key}};
+            foreach my $warning (keys %dont) {
+                foreach my $file (@{$dont{$warning}}) {
+                    $per_file{$file} = [ @warnings ] unless exists $per_file{$file};
+                    @{$per_file{$file}} = grep {$warning ne $_} @{$per_file{$file}};
+                }
+            }
         }
     }
-    else {
-        print "Currently we only set warnings if using gcc as C compiler\n"
-            if $verbose;
-        $self->set_result("skipped");
-    }
-    return 1;
-}
 
-sub _add_cage_warnings {
-    my ($self, $conf) = @_;
-    push @{ $self->{potential_warnings} }, @{ $self->{cage_warnings} }
-        if $conf->options->get('cage');
-}
+    $conf->data->set('ccwarn', join(' ', @warnings));
+    foreach my $file (keys %per_file) {
+        $conf->data->set("ccwarn::$file", join(' ', @{$per_file{$file}}));
+    }
 
-sub _add_maintainer_warnings {
-    my ($self, $conf) = @_;
-    push @{ $self->{potential_warnings} }, '-Wlarger-than-4096'
-        if $conf->options->get('maintainer');
+    $self->set_result('done');
+    return 1;
 }
 
-=item C<try_warning>
+=item C<valid_warning>
 
 Try a given warning to see if it is supported by the compiler.  The compiler
 is determined by the C<cc> value of the C<Parrot::Configure> object passed
@@ -207,11 +297,17 @@
 Returns true if the warning flag is recognized by the compiler and undef
 otherwise.
 
+Use the running set of known valid options, since some options may depend
+on previous options.
+
 =cut
 
-sub try_warning {
-    my ( $self, $conf, $warning, $verbose ) = @_;
+sub valid_warning {
+    my ( $self, $conf, $warning ) = @_;
+
+    my $verbose = $conf->options->get('verbose');
 
+    # This should be using a temp file name.
     my $output_file = 'test.cco';
 
     $verbose and print "trying attribute '$warning'\n";
@@ -220,17 +316,18 @@
     $conf->cc_gen('config/auto/warnings/test_c.in');
 
     my $ccflags  = $conf->data->get('ccflags');
-    my $tryflags = "$ccflags $warning";
+    my $warnings = join(' ', @{$self->{'validated'}});
+    my $tryflags = "$ccflags $warnings $warning";
 
     my $command_line = Parrot::Configure::Utils::_build_compile_command( $cc, $tryflags );
-    $verbose and print "  ", $command_line, "\n";
+    $verbose and print '  ', $command_line, "\n";
 
     # Don't use cc_build, because failure is expected.
     my $exit_code = Parrot::Configure::Utils::_run_command(
         $command_line, $output_file, $output_file
     );
-    _set_warning($conf, $warning, $exit_code, $verbose);
 
+    # Cleanup any remnants of the test compilation
     $conf->cc_clean();
 
     if ($exit_code) {
@@ -240,35 +337,22 @@
 
     my $output = Parrot::BuildUtil::slurp_file($output_file);
     unlink $output_file or die "Unable to unlink $output_file: $!";
-    return _set_ccflags($conf, $output, $tryflags, $verbose);
-}
-
-sub _set_warning {
-    my ($conf, $warning, $exit_code, $verbose) = @_;
-    $verbose and print "  exit code: $exit_code\n";
-    $conf->data->set( $warning => !$exit_code || 0 );
-}
 
-sub _set_ccflags {
-    my ($conf, $output, $tryflags, $verbose) = @_;
     $verbose and print "  output: $output\n";
 
     if ( $output !~ /error|warning|not supported/i ) {
-        $conf->data->set( ccflags => $tryflags );
-        $verbose and print "  ccflags: ", $conf->data->get("ccflags"), "\n";
+        push @{$self->{'validated'}}, $warning;
+        $verbose and print "    valid warning: '$warning'\n";
         return 1;
     }
     else {
+        $verbose and print "  invalid warning: '$warning'\n";
         return 0;
     }
 }
 
 =back
 
-=head1 AUTHOR
-
-Paul Cochrane <paultcochrane at gmail dot com>
-
 =cut
 
 1;

Modified: branches/ops_pct/config/auto/warnings/test_c.in
==============================================================================
--- branches/ops_pct/config/auto/warnings/test_c.in	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/auto/warnings/test_c.in	Sun Mar  7 19:33:20 2010	(r44743)
@@ -6,11 +6,10 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include "parrot/compiler.h"
 
 /* as long as the file compiles, everything is okay */
 int
-main()
+main(void)
 {
     return EXIT_SUCCESS;
 }

Deleted: branches/ops_pct/config/gen/call_list.pm
==============================================================================
--- branches/ops_pct/config/gen/call_list.pm	Sun Mar  7 19:33:20 2010	(r44742)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,81 +0,0 @@
-# Copyright (C) 2008, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-config/gen/call_list.pm - Concatenate call_list.txt (NCI signatures) fragments
-
-=head1 DESCRIPTION
-
-Some portions of F<src/call_list.txt> (the NCI signature list) are generated,
-and others should only appear when certain features/libraries are enabled by
-Configure in previous steps.  This step simply combines all fragments that
-appear in F<config/gen/call_list/> into the single C<src/call_list.txt> used
-by the main build.
-
-If a config step wishes to make its fragment optional, that step should only
-generate or copy its fragment to F<config/gen/call_list/> when the library is
-enabled.
-
-=cut
-
-package gen::call_list;
-
-use strict;
-use warnings;
-
-use base qw(Parrot::Configure::Step);
-
-use Parrot::Configure::Utils '_slurp';
-
-
-sub _init {
-    my $self = shift;
-    my %data;
-    $data{description} = q{Generate NCI signature list};
-    $data{result} = q{};
-    $data{fragment_files} = [ sort glob 'config/gen/call_list/*.in' ];
-    return \%data;
-}
-
-my $text_file_coda = <<'CODA';
-# Local variables:
-#   mode: text
-#   buffer-read-only: t
-# End:
-CODA
-
-sub runstep {
-    my ( $self, $conf ) = @_;
-
-    my $combined_file  = 'src/call_list.txt';
-
-    open my $combined, '>', $combined_file
-        or die "Could not open '$combined_file' for write: $!";
-
-    # add read-only metadata for the generated file
-    print {$combined} "# ex: set ro:\n";
-
-    foreach my $fragment_file ( @{ $self->{fragment_files} } ) {
-        my $fragment =  _slurp($fragment_file);
-           $fragment =~ s/^\s*\n//;
-           $fragment =~ s/\s*$/\n\n/;
-
-        print {$combined} $fragment;
-    }
-    print {$combined} $text_file_coda;
-
-    $conf->append_configure_log($combined_file);
-
-    return 1;
-}
-
-1;
-
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/config/gen/crypto/digest_pmc.in
==============================================================================
--- branches/ops_pct/config/gen/crypto/digest_pmc.in	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/crypto/digest_pmc.in	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2008, Parrot Foundation.
+Copyright (C) 2008-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -34,7 +34,7 @@
 */
     VTABLE void init() {
 @TEMP_md_guard@
-        @TEMP_md_ctx@ *c    = mem_allocate_zeroed_typed(@TEMP_md_ctx@);
+        @TEMP_md_ctx@ *c    = mem_gc_allocate_zeroed_typed(INTERP, @TEMP_md_ctx@);
         PMC_data(SELF) = c;
         PObj_custom_destroy_SET(SELF);
 #else
@@ -54,7 +54,7 @@
 @TEMP_md_guard@
         @TEMP_md_ctx@ *c = PMC_data_typed(SELF, @TEMP_md_ctx@ *);
         if (c) {
-            mem_sys_free(c);
+            mem_gc_free(INTERP, c);
             PMC_data(SELF) = NULL;
         }
 #endif
@@ -69,7 +69,7 @@
 */
     VTABLE PMC* clone() {
 @TEMP_md_guard@
-        PMC     *retval  = pmc_new_noinit(INTERP, SELF->vtable->base_type);
+        PMC     *retval  = Parrot_pmc_new_noinit(INTERP, SELF->vtable->base_type);
         @TEMP_md_ctx@ *c       = mem_allocate_zeroed_typed(@TEMP_md_ctx@);
 
         memcpy(c, PMC_data(SELF), sizeof (@TEMP_md_ctx@));

Modified: branches/ops_pct/config/gen/makefiles.pm
==============================================================================
--- branches/ops_pct/config/gen/makefiles.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/makefiles.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -27,12 +27,18 @@
     $data{description} = q{Generate makefiles and other build files};
     $data{result}      = q{};
     $data{makefiles}   = {
-        'Makefile' => { SOURCE => 'config/gen/makefiles/root.in' },
-        'ext/Makefile' => { SOURCE => 'config/gen/makefiles/ext.in', },
+        'Makefile' => {
+            SOURCE => 'config/gen/makefiles/root.in',
+        },
+        'ext/Makefile' => {
+            SOURCE => 'config/gen/makefiles/ext.in',
+        },
+        'compilers/imcc/Rules.mak' => {
+             SOURCE => 'compilers/imcc/Rules.in',
+        },
 
         'ext/Parrot-Embed/Makefile.PL' => {
             SOURCE            => 'config/gen/makefiles/parrot_embed_pl.in',
-            replace_slashes   => 0,
             conditioned_lines => 1,
         },
 
@@ -48,7 +54,6 @@
         'parrot.pc'     => { SOURCE => 'config/gen/makefiles/parrot_pc.in' },
         'docs/Makefile' => { SOURCE => 'config/gen/makefiles/docs.in' },
     };
-    $data{CFLAGS_source} = 'config/gen/makefiles/CFLAGS.in';
     return \%data;
 }
 
@@ -56,36 +61,10 @@
     my ( $self, $conf ) = @_;
 
     $self->makefiles($conf);
-    $self->cflags($conf);
 
     return 1;
 }
 
-sub cflags {
-    my ( $self, $conf ) = @_;
-
-    $conf->genfile( $self->{CFLAGS_source} => 'CFLAGS',
-        comment_type                     => '#'
-    );
-
-    open( my $CFLAGS, ">>", "CFLAGS" ) or die "open >> CFLAGS: $!";
-
-    # Why is this here?  I'd think this information belongs
-    # in the CFLAGS.in file. -- A.D.  March 12, 2004
-    if ( $conf->data->get('cpuarch') =~ /sun4|sparc64/ ) {
-
-        # CFLAGS entries must be left-aligned.
-        print {$CFLAGS} <<"EOF";
-src/jit_cpu.c -{-Wcast-align}        # lots of noise!
-src/nci.c     -{-Wstrict-prototypes} # lots of noise!
-EOF
-    }
-
-    close $CFLAGS;
-
-    return;
-}
-
 sub makefiles {
     my ( $self, $conf ) = @_;
 
@@ -96,7 +75,6 @@
         : keys %{ $self->{makefiles} };
 
     foreach my $target (@targets) {
-        $target =~ s/\\/\//g if $^O eq 'MSWin32';
         my $args   = $self->{makefiles}->{$target};
         my $source = delete $args->{SOURCE};
 

Deleted: branches/ops_pct/config/gen/makefiles/CFLAGS.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/CFLAGS.in	Sun Mar  7 19:33:20 2010	(r44742)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,37 +0,0 @@
-# [ filename | {regex} ] -{removed options} +{added options} s/// ...
-#
-# Avoid using non-configure controlled +{} directly in this file, as
-# it'll most likely break on other platforms.
-#
-# Note, empty regex/options are just ignored.
-#
-src/platform.c      -{-Wcast-qual}          # noisy
-src/spf_render.c    -{-Wformat-nonliteral}  # noisy
-src/tsq.c           -{@optimize@}           # never optimize tsq.c!
-
-# The src/ops/core_ops*.c files are challenging to optimize.
-# gcc can usually handle it, but don't assume any other compilers can,
-# until there is specific evidence otherwise.
-#UNLESS(gccversion):src/ops/core_ops_cg.c      -{@optimize@}
-#UNLESS(gccversion):src/ops/core_ops_cgp.c     -{@optimize@}
-#UNLESS(gccversion):src/ops/core_ops_switch.c  -{@optimize@}
-
-#IF(cpuarch==amd64):src/gc/system.c  -{@optimize@}              # TT #405 amd64 --optimize problem
-
-# io should be -Wunused clean
-{^src/io/}              s/-Wno-unused/-Wunused/
-
-# files which make their way into dynamically loaded files should be compiled
-# with shared library options
-src/extend.c        +{@cc_shared@}
-src/nci_test.c      +{@cc_shared@}
-
-# imcc file settings
-{^compilers/imcc/}            -{-Wwrite-strings -Wcast-qual}
-{^compilers/imcc/(?!imclexer)}      s/-Wno-unused/-Wunused/
-compilers/imcc/instructions.c -{-Wformat-nonliteral} # noisy
-compilers/imcc/debug.c        -{-Wformat-nonliteral} # noisy
-compilers/imcc/optimizer.c    -{-Wformat-nonliteral} # noisy
-compilers/imcc/parser_util.c  -{-Wformat-nonliteral} # noisy
-compilers/imcc/imclexer.c     -{-Wunused}  # noisy
-compilers/imcc/imclexer.c     -{-Wswitch-default}  # occurs in generated code

Modified: branches/ops_pct/config/gen/makefiles/docs.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/docs.in	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/makefiles/docs.in	Sun Mar  7 19:33:20 2010	(r44743)
@@ -8,7 +8,7 @@
 TOUCH   = @touch@
 RM_F    = @rm_f@
 RM_RF   = @rm_rf@
-PERLDOC = @perldoc@
+PERLDOC_BIN = @perldoc@
 VERSION = @VERSION@@DEVEL@
 
 # long list of .pod files
@@ -41,8 +41,8 @@
 	$(TOUCH) doc-prep
 
 packfile-c.pod: ../src/packfile.c
-#IF(new_perldoc):	$(PERLDOC) -ud packfile-c.pod ../src/packfile.c
-#ELSE:	$(PERLDOC) -u ../src/packfile.c > packfile-c.pod
+#IF(new_perldoc):	$(PERLDOC_BIN) -ud packfile-c.pod ../src/packfile.c
+#ELSE:	$(PERLDOC_BIN) -u ../src/packfile.c > packfile-c.pod
 
 clean:
 	$(RM_F) packfile-c.pod $(POD) doc-prep

Modified: branches/ops_pct/config/gen/makefiles/dynoplibs.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/dynoplibs.in	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/makefiles/dynoplibs.in	Sun Mar  7 19:33:20 2010	(r44743)
@@ -14,12 +14,12 @@
 LD            = @ld@
 LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@ @linkflags@
 LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
+CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
 LIBPARROT     = @libparrot_ldflags@
 
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-OPS2C           = $(PERL) -I$(BUILD_DIR)@slash at lib $(BUILD_TOOLS_DIR)@slash at ops2c.pl
-INCLUDES        = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at src@slash at pmc
+BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
+OPS2C           = $(PERL) -I$(BUILD_DIR)/lib $(BUILD_TOOLS_DIR)/ops2c.pl
+INCLUDES        = -I$(BUILD_DIR)/include -I at build_dir@/src/pmc
 LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
 
 OPS_TARGETS = \

Modified: branches/ops_pct/config/gen/makefiles/dynpmc.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/dynpmc.in	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/makefiles/dynpmc.in	Sun Mar  7 19:33:20 2010	(r44743)
@@ -8,19 +8,19 @@
 LOAD_EXT      = @load_ext@
 BUILD_DIR     = @build_dir@
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR   = $(BUILD_DIR)@slash at runtime@slash at parrot@slash at dynext
+INSTALL_DIR   = $(BUILD_DIR)/runtime/parrot/dynext
 O             = @o@
 CC            = @cc@
 LD            = @ld@
 LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@
 LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
+CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
 LIBPARROT     = @libparrot_ldflags@
 
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-BUILD_LIB_DIR   = $(BUILD_DIR)@slash at blib@slash at lib
-PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)@slash at pmc2c.pl
-INCLUDES        = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at include@slash at pmc
+BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
+BUILD_LIB_DIR   = $(BUILD_DIR)/blib/lib
+PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl
+INCLUDES        = -I$(BUILD_DIR)/include -I at build_dir@/include/pmc
 LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
 
 PMC2CD = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --dump

Modified: branches/ops_pct/config/gen/makefiles/root.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/root.in	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/makefiles/root.in	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 ###############################################################################
@@ -82,7 +82,9 @@
 CC_INC           = @cc_inc@
 C_LIBS           = @libs@
 CC_SHARED        = @cc_shared@
-CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @ccwarn@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
+CC_O_OUT         = @cc_o_out@
+CC_WARN          = @ccwarn@
+CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
 LINK_DYNAMIC     = @link_dynamic@
 LINK             = @link@
 LINKFLAGS        = @linkflags@ @link_debug@ @ld_debug@
@@ -141,7 +143,8 @@
     editor/Makefile \
     ext/Makefile \
     src/dynoplibs/Makefile \
-    src/dynpmc/Makefile
+    src/dynpmc/Makefile \
+    compilers/imcc/Rules.mak
 
 GEN_CONFIGS = \
     $(INC_DIR)/config.h \
@@ -159,7 +162,7 @@
     $(LIBRARY_DIR)/config.pir \
     src/platform.c \
 #IF(platform_asm):    src/platform_asm.s \
-#IF(has_opengl):    config/gen/call_list/opengl.in \
+#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 \
@@ -178,8 +181,6 @@
 #IF(has_crypto):    t/dynpmc/sha1.t \
 #IF(has_crypto):    t/dynpmc/sha256.t \
 #IF(has_crypto):    t/dynpmc/sha512.t \
-    CFLAGS \
-    compilers/imcc/CFLAGS \
     config_lib.pasm \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
@@ -192,7 +193,6 @@
 	runtime/parrot/include/datatypes.pasm \
 	runtime/parrot/include/iterator.pasm \
 	runtime/parrot/include/call_bits.pasm \
-	runtime/parrot/include/io_thr_msg.pasm \
 	runtime/parrot/include/timer.pasm \
 	runtime/parrot/include/except_types.pasm \
 	runtime/parrot/include/except_severity.pasm \
@@ -227,10 +227,11 @@
     $(GEN_MAKEFILES) \
     ext/Parrot-Embed/Makefile.PL \
     myconfig  \
-    src/call_list.txt \
     MANIFEST.configure.generated \
     .configure_trace.sto \
     .parrot_current_rev \
+#IF(has_opengl):    runtime/parrot/include/opengl_defines.pasm \
+#IF(has_opengl):    runtime/parrot/library/OpenGL_funcs.pir \
     runtime/parrot/include/signal.pasm
 
 
@@ -257,6 +258,7 @@
 GEN_SOURCES = \
     src/core_ops.c \
     src/nci.c \
+    src/glut_nci_thunks.c \
     src/core_ops_switch.c \
     src/parrot_config.c \
     src/null_config.c \
@@ -282,8 +284,6 @@
     $(LIBRARY_DIR)/Getopt/Obj.pbc \
     $(LIBRARY_DIR)/Iter.pbc \
     $(LIBRARY_DIR)/JSON.pbc \
-    $(LIBRARY_DIR)/data_json.pbc \
-    $(LIBRARY_DIR)/Math/Random/mt19937ar.pbc \
     $(LIBRARY_DIR)/Math/Rand.pbc \
     $(LIBRARY_DIR)/MIME/Base64.pbc \
     $(LIBRARY_DIR)/NCI/Utils.pbc \
@@ -376,7 +376,6 @@
         $(INC_DIR)/io.h \
         $(INC_DIR)/op.h \
         $(INC_DIR)/pmc.h \
-        $(INC_DIR)/events.h \
         $(INC_DIR)/gc_api.h \
         $(INC_DIR)/string_funcs.h \
         $(INC_DIR)/misc.h \
@@ -387,7 +386,6 @@
         $(INC_DIR)/nci.h \
         $(INC_DIR)/thread.h \
         $(INC_DIR)/scheduler.h \
-        $(INC_DIR)/tsq.h \
         $(INC_DIR)/longopt.h \
         $(INC_DIR)/oo.h \
         $(INC_DIR)/vtables.h \
@@ -407,10 +405,13 @@
         $(INC_DIR)/core_pmcs.h \
         $(INC_DIR)/compiler.h \
         $(INC_DIR)/cclass.h \
-        include/pmc/pmc_callcontext.h
+        include/pmc/pmc_callcontext.h \
+        include/pmc/pmc_parrotinterpreter.h
 
 # generated list of header files
-GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) @TEMP_cg_h@
+GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) \
+#IF(cg_flag): $(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h
+
 
 CHARSET_O_FILES   = @TEMP_charset_o@
 CLASS_PMC_FILES   = @TEMP_pmc_classes_pmc@
@@ -446,7 +447,6 @@
     src/dynext$(O) \
     src/embed$(O) \
     src/string/encoding$(O) \
-    src/events$(O) \
     src/exceptions$(O) \
     src/exit$(O) \
     src/extend$(O) \
@@ -475,7 +475,9 @@
     src/misc$(O) \
     src/multidispatch$(O) \
     src/frame_builder$(O) \
-    src/nci$(O) \
+    src/nci/api$(O) \
+    src/nci/core_thunks$(O) \
+    src/nci/extra_thunks$(O) \
     src/oo$(O) \
     src/packfile$(O) \
     src/packout$(O) \
@@ -492,17 +494,15 @@
     src/sub$(O) \
     src/thread$(O) \
     src/runcore/trace$(O) \
-    src/tsq$(O) \
     src/utils$(O) \
     src/vtables$(O) \
     src/warnings$(O) \
-    \
     src/packfile/pf_items$(O) \
-    \
-    @TEMP_cg_o@ \
     @TEMP_atomic_o@ \
     @TEMP_gc_o@ \
 #IF(platform_asm):    src/platform_asm$(O) \
+#IF(cg_flag):     src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O) \
+
 
 OPS_FILES = @ops@ $(GEN_OPSFILES)
 
@@ -513,26 +513,28 @@
 ###############################################################################
 
 # Executables
-PARROT              = ./@test_prog@$(EXE)
-MINIPARROT          = ./miniparrot$(EXE)
-DIS                 = ./pbc_disassemble$(EXE)
-PDUMP               = ./pbc_dump$(EXE)
-PBC_MERGE           = ./pbc_merge$(EXE)
-PDB                 = ./parrot_debugger$(EXE)
-PBC_TO_EXE          = ./pbc_to_exe$(EXE)
-PARROT_CONFIG       = ./parrot_config$(EXE)
-PIRC                = ./pirc$(EXE)
-NQP_RX              = ./parrot-nqp$(EXE)
+PARROT              = . at slash@@test_prog@$(EXE)
+MINIPARROT          = . at slash@miniparrot$(EXE)
+DIS                 = . at slash@pbc_disassemble$(EXE)
+PDUMP               = . at slash@pbc_dump$(EXE)
+PBC_MERGE           = . at slash@pbc_merge$(EXE)
+PDB                 = . at slash@parrot_debugger$(EXE)
+PBC_TO_EXE          = . at slash@pbc_to_exe$(EXE)
+PARROT_CONFIG       = . at slash@parrot_config$(EXE)
+PIRC                = . at slash@pirc$(EXE)
+NQP_RX              = . at slash@parrot-nqp$(EXE)
+NCI_THUNK_GEN       = . at slash@parrot_nci_thunk_gen$(EXE)
 
 # Installable executables
-INSTALLABLEPARROT    = ./installable_parrot$(EXE)
-INSTALLABLEDIS       = ./installable_pbc_disassemble$(EXE)
-INSTALLABLEPDUMP     = ./installable_pbc_dump$(EXE)
-INSTALLABLEPBC_MERGE = ./installable_pbc_merge$(EXE)
-INSTALLABLEPBCTOEXE  = ./installable_pbc_to_exe$(EXE)
-INSTALLABLEPDB       = ./installable_parrot_debugger$(EXE)
-INSTALLABLECONFIG    = ./installable_parrot_config$(EXE)
-INSTALLABLENQP       = ./installable_parrot-nqp$(EXE)
+INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
+INSTALLABLEDIS       = . at slash@installable_pbc_disassemble$(EXE)
+INSTALLABLEPDUMP     = . at slash@installable_pbc_dump$(EXE)
+INSTALLABLEPBC_MERGE = . at slash@installable_pbc_merge$(EXE)
+INSTALLABLEPBCTOEXE  = . at slash@installable_pbc_to_exe$(EXE)
+INSTALLABLEPDB       = . at slash@installable_parrot_debugger$(EXE)
+INSTALLABLECONFIG    = . at slash@installable_parrot_config$(EXE)
+INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
+INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
 
 # Libraries
 LIBPARROT_STATIC    = @blib_dir@/@libparrot_static@
@@ -552,6 +554,7 @@
 DYNEXT_DIR          = runtime/parrot/dynext
 LIBNCI_TEST_SO      = $(DYNEXT_DIR)/libnci_test$(LOAD_EXT)
 LIBGLUTCB_SO        = $(DYNEXT_DIR)/libglutcb$(LOAD_EXT)
+EXTRANCITHUNKS_SO   = $(DYNEXT_DIR)/extra_nci_thunks$(LOAD_EXT)
 
 ###############################################################################
 #
@@ -569,24 +572,27 @@
 
 .SUFFIXES : .c .S .s .pmc .dump $(O) .str .pir .pbc
 
-# Passing an empty argument in @ARGV to cc_flags.pl to indicate where extra -Is
-# (etc) should go. Otherwise it will insert them after the first space, which
-# makes life go horribly wrong if $(CC) contains spaces but can't have -I
-# arguments (etc) injected in the middle.
-# There is probably a better way to do this, but I can't work it out right now.
 .c$(O) : # suffix rule (limited support)
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
-
-# XXX probably should detect assembler, but right now this is only used on Sparc
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .s$(O) : # suffix rule (limited support)
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 #UNLESS(win32).S$(O) : # suffix rule (limited support)
-#UNLESS(win32)	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32)	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .pir.pbc : # suffix rule (limited support)
 	$(PARROT) -o $@ $<
 
+# Note: Several rules in this makefile are tagged with a "SUFFIX OVERRIDE"
+# comment; this indicates that we have an explicit compilation rule for
+# that particular C file; this is done so that we override various
+# options for that file - to change optimization levels, or twiddle
+# warnings. Each of those overrides should use the most specific settings
+# possible for that file. When file-specific overrides are added during
+# Configure, the override must be allowed for in this file.
+# These will eventually be automatically generated.
+
+
 ###############################################################################
 #
 # USER TARGETS:
@@ -599,6 +605,7 @@
     corevm \
     docs \
 #IF(has_glut):    $(LIBGLUTCB_SO) \
+    $(EXTRANCITHUNKS_SO) \
     $(DIS) \
     $(PARROT_CONFIG) \
     $(PBC_TO_EXE) \
@@ -610,10 +617,10 @@
     $(PGE_LIB_PBCS) \
     $(PCT_LIB_PBCS) \
     $(JSON_LIB_PBCS) \
+    $(DATA_JSON_LIB_PBCS) \
     $(NQP_LIB_PBCS)
 
 corevm : \
-    flags_dummy \
 	$(GEN_PM_INCLUDES) \
     PARROT_LIBS \
     $(PARROT) \
@@ -633,7 +640,6 @@
 STR_FILES = \
     src/debug.str \
     src/dynext.str \
-    src/events.str \
     src/exceptions.str \
     src/global.str \
     src/global_setup.str \
@@ -648,7 +654,9 @@
     src/library.str \
     src/multidispatch.str \
     src/frame_builder.str \
-    src/nci.str \
+    src/nci/api.str \
+    src/nci/core_thunks.str \
+    src/nci/extra_thunks.str \
     src/packfile.str \
     src/pmc.str \
     src/pmc_freeze.str \
@@ -799,12 +807,8 @@
 
 parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O)
 
-installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP)
-
+installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
 
-flags_dummy :
-	@echo "Compiling with:"
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS echo $(CC) $(CFLAGS) -I$(@D) @cc_o_out@ xx$(O) -c xx.c
 
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
@@ -812,7 +816,7 @@
 runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
 	$(MINIPARROT) config_lib.pasm > $@
 
-$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) CFLAGS \
+$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
     $(MINIPARROT)
 	$(LINK) @ld_out@$@ \
@@ -824,6 +828,12 @@
 	$(PARROT) -o pbc_to_exe.pbc tools/dev/pbc_to_exe.pir
 	$(PARROT) pbc_to_exe.pbc pbc_to_exe.pbc
 
+parrot_nci_thunk_gen.pbc : tools/dev/nci_thunk_gen.pir $(DATA_JSON_LIB_PBCS) $(PARROT)
+	$(PARROT) -o parrot_nci_thunk_gen.pbc tools/dev/nci_thunk_gen.pir
+
+$(NCI_THUNK_GEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE)
+	$(PBC_TO_EXE) parrot_nci_thunk_gen.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
@@ -936,6 +946,9 @@
 $(INSTALLABLEPBCTOEXE) : $(PBC_TO_EXE) src/install_config$(O)
 	$(PBC_TO_EXE) pbc_to_exe.pbc --install
 
+$(INSTALLABLENCITHUNKGEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE) src/install_config$(O)
+	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc --install
+
 #
 # Parrot Debugger
 #
@@ -1064,9 +1077,6 @@
 runtime/parrot/include/socket.pasm : $(INC_DIR)/io.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/io.h $@
 
-runtime/parrot/include/io_thr_msg.pasm : $(INC_DIR)/events.h $(H2INC)
-	$(PERL) $(H2INC) $(INC_DIR)/events.h $@
-
 runtime/parrot/include/hash_key_type.pasm : $(INC_DIR)/hash.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/hash.h $@
 
@@ -1139,16 +1149,21 @@
 
 # hello
 hello: test_prep examples/pasm/hello$(EXE)
-	./examples/pasm/hello$(EXE) "from your friendly makefile"
+	. at slash@examples at slash@pasm at slash@hello$(EXE) "from your friendly makefile"
 
 examples/pasm/hello.pbc: examples/pasm/hello.pasm
 	$(PARROT) -o examples/pasm/hello.pbc examples/pasm/hello.pasm
 
-examples/pasm/hello$(O): examples/pasm/hello.pbc
-	$(PARROT) -o examples/pasm/hello$(O) examples/pasm/hello.pbc
-
-examples/pasm/hello$(EXE): examples/pasm/hello$(O)
-	$(MAKE) . EXEC=examples/pasm/hello exec
+# The -o option of parrot did not work with the object file extension ".o"
+# so as work around pbc_to_exe is used and the original commands are only
+# commented out so it can easily switched back.
+#examples/pasm/hello$(O): examples/pasm/hello.pbc
+#	$(PARROT) -o examples/pasm/hello$(O) examples/pasm/hello.pbc
+#
+#examples/pasm/hello$(EXE): examples/pasm/hello$(O)
+#	$(MAKE) . EXEC=examples/pasm/hello exec
+examples/pasm/hello$(EXE): examples/pasm/hello.pbc $(PBC_TO_EXE)
+	$(PBC_TO_EXE) examples/pasm/hello.pbc
 
 
 
@@ -1235,14 +1250,14 @@
         src/exceptions.str \
 	include/pmc/pmc_continuation.h
 
-src/events$(O) : $(PARROT_H_HEADERS) src/events.str
-
 src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h \
         include/pmc/pmc_sub.h \
 	include/pmc/pmc_parrotinterpreter.h
 
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
 src/extend$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
-	include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h
+    include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h src/extend.c
+	$(CC) $(CFLAGS) @optimize::src/extend.c@ @ccwarn::src/extend.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extend.c
 
 src/runcore/main$(O) : \
 	src/runcore/main.str \
@@ -1357,8 +1372,6 @@
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
-src/tsq$(O) : $(PARROT_H_HEADERS)
-
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h \
@@ -1374,12 +1387,23 @@
 
 src/exit$(O) : $(PARROT_H_HEADERS)
 
-src/nci$(O) : src/nci.str \
-        $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS) \
-        src/frame_builder.h \
-        include/pmc/pmc_managedstruct.h \
-        include/pmc/pmc_nci.h \
-        include/pmc/pmc_pointer.h
+src/nci/api$(O) : src/nci/api.str \
+        $(PARROT_H_HEADERS) \
+        include/pmc/pmc_unmanagedstruct.h \
+        include/pmc/pmc_nci.h
+
+src/nci/core_thunks$(O) : src/nci/core_thunks.str \
+        $(PARROT_H_HEADERS) \
+        include/pmc/pmc_unmanagedstruct.h \
+        include/pmc/pmc_nci.h
+
+## SUFFIX OVERRIDE
+src/nci/extra_thunks$(O) : src/nci/extra_thunks.str \
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_unmanagedstruct.h \
+    include/pmc/pmc_nci.h \
+    src/nci/extra_thunks.c
+	$(CC) $(CFLAGS) @optimize::src/nci/extra_thunks.c@ @ccwarn::src/nci/extra_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci/extra_thunks.c
 
 src/frame_builder$(O) : $(PARROT_H_HEADERS) src/frame_builder.h \
         include/pmc/pmc_fixedintegerarray.h \
@@ -1389,12 +1413,11 @@
 
 src/vtables$(O) : $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE
 src/gc/system$(O) : $(PARROT_H_HEADERS)  src/gc/gc_private.h
-src/gc/gc_private.h : $(INC_DIR)/settings.h
+	$(CC) $(CFLAGS) @optimize::src/gc/system.c@ @ccwarn::src/gc/system.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/gc/system.c
 
-src/nci.c : src/call_list.txt $(BUILD_TOOLS_DIR)/nativecall.pl \
-	include/pmc/pmc_nci.h
-	$(PERL) $(BUILD_TOOLS_DIR)/nativecall.pl src/call_list.txt
+src/gc/gc_private.h : $(INC_DIR)/settings.h
 
 src/warnings$(O) : $(PARROT_H_HEADERS)
 
@@ -1402,7 +1425,9 @@
 
 src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h
 
+## SUFFIX OVERRIDE
 src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str
+	$(CC) $(CFLAGS) @optimize::src/spf_render.c@ @ccwarn::src/spf_render.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/spf_render.c
 
 src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str
 
@@ -1435,15 +1460,14 @@
 
 src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h
 
-src/ops/core_ops$(O) : src/ops/core_ops.c \
-	include/pmc/pmc_callcontext.h \
-	include/pmc/pmc_continuation.h \
-        include/pmc/pmc_parrotlibrary.h \
-        src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
-        $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
-
 # core_ops depends upon config.h so that it gets updated along with
 # updates to config.h's version numbers
+src/ops/core_ops$(O) : src/ops/core_ops.c \
+    include/pmc/pmc_callcontext.h \
+    include/pmc/pmc_continuation.h \
+    include/pmc/pmc_parrotlibrary.h \
+    src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
+    $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
 
 # .h files are built along with .c
 $(INC_DIR)/oplib/core_ops.h: src/ops/core_ops.c
@@ -1454,8 +1478,10 @@
 	include/pmc/pmc_continuation.h
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
 
+## SUFFIX OVERRIDE
 src/ops/core_ops_switch$(O) : $(GENERAL_H_FILES) src/ops/core_ops_switch.c \
 	include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_switch.c@ @ccwarn::src/ops/core_ops_switch.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_switch.c
 
 $(INC_DIR)/oplib/core_ops_switch.h : src/ops/core_ops_switch.c
 
@@ -1465,7 +1491,27 @@
 	lib/Parrot/OpTrans/CPrederef.pm
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --core @no_lines_flag@
 
- at TEMP_cg_c@
+## SUFFIX OVERRIDE
+src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cg.c@ @ccwarn::src/ops/core_ops_cg.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cg.c
+
+## SUFFIX OVERRIDE
+src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cgp.c@ @ccwarn::src/ops/core_ops_cgp.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cgp.c
+
+src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
+
+$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
+
+src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
+
+$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
+
+src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
 
 @TEMP_gc_c@
 
@@ -1796,13 +1842,14 @@
     ext-clean \
 #UNLESS(win32):    cover-clean \
     editor-clean
-	@TEMP_cg_r@
+	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
+    $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c
 	$(RM_F) chartypes "*.s" "*~"
 	$(RM_F) $(FLUID_FILES_1)
 	$(RM_F) $(FLUID_FILES_2)
 	$(RM_RF) lib/Parrot/OpLib
 	$(RM_F) $(NQP_CLEANUPS) $(PGE_CLEANUPS) $(TGE_CLEANUPS) $(JSON_CLEANUPS)
-	$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS)
+	$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS) $(DATA_JSON_CLEANUPS)
 	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES)
 
 prog-clean :
@@ -1819,7 +1866,9 @@
     $(INSTALLABLEPDB) \
     $(INSTALLABLECONFIG) \
     $(INSTALLABLENQP) \
+    $(INSTALLABLENCITHUNKGEN) \
     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 \
     parrot_config$(EXE) parrot_config.c parrot_config$(O) parrot_config.pbc \
     compilers/imcc/main$(O) \
     $(PDUMP) src/pbc_dump$(O) src/packdump$(O) \
@@ -1834,7 +1883,10 @@
     src/nci_test$(O) \
     $(LIBNCI_TEST_SO) \
     src/glut_callbacks$(O) \
+    src/glut_nci_thunks$(O) \
     $(LIBGLUTCB_SO) \
+    src/extra_nci_thunks$(O) \
+    $(EXTRANCITHUNKS_SO) \
     install_config.fpmc
 	$(PERL) $(BUILD_TOOLS_DIR)/c2str.pl --init
 	$(RM_F) \
@@ -1872,6 +1924,8 @@
     $(LIBNCI_TEST_SO) \
     src/glut_callbacks$(O) \
     $(LIBGLUTCB_SO) \
+    src/extra_nci_thunks$(O) \
+    $(EXTRANCITHUNKS_SO) \
     $(LIBPARROT_STATIC) \
     $(LIBPARROT_SHARED)
 
@@ -2390,7 +2444,9 @@
 ###### OS depend targets ##########
 
 # for use by t/pmc/nci.t
-src/nci_test$(O): $(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
+src/nci_test$(O): $(PARROT_H_HEADERS) src/nci_test.c
+	$(CC) $(CFLAGS) @optimize::src/nci_test.c@ @ccwarn::src/nci_test.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci_test.c
 
 $(LIBNCI_TEST_SO): src/nci_test$(O) $(LIBPARROT)
 	$(LD) $(LD_LOAD_FLAGS) @ncilib_link_extra@ $(LDFLAGS) \
@@ -2399,11 +2455,33 @@
 # for use by runtime/parrot/library/OpenGL.pir
 src/glut_callbacks$(O): $(GENERAL_H_FILES)
 
-$(LIBGLUTCB_SO): $(LIBPARROT) src/glut_callbacks$(O)
+src/glut_nci_thunks.c: $(NCI_THUNK_GEN)
+	$(NCI_THUNK_GEN) \
+	    --loader-name=Parrot_glut_nci_loader \
+	    --loader-storage-class=PARROT_DYNEXT_EXPORT \
+	    --output=src/glut_nci_thunks.c \
+	    <src/glut_nci_thunks.nci
+
+src/glut_nci_thunks$(O): $(GENERAL_H_FILES)
+
+$(LIBGLUTCB_SO): $(LIBPARROT) src/glut_callbacks$(O) src/glut_nci_thunks$(O)
 	$(LD) $(LD_LOAD_FLAGS) $(LDFLAGS) \
-    @ld_out@$@ src/glut_callbacks$(O) \
+    @ld_out@$@ src/glut_callbacks$(O) src/glut_nci_thunks$(O) \
     $(ALL_PARROT_LIBS) @opengl_lib@
 
+src/extra_nci_thunks.c : src/nci/extra_thunks.nci $(NCI_THUNK_GEN)
+	$(NCI_THUNK_GEN) --dynext --no-warn-dups \
+	    --output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
+
+## SUFFIX OVERRIDE
+src/extra_nci_thunks$(O) : $(GENERAL_H_FILES) src/extra_nci_thunks.c
+	$(CC) $(CFLAGS) @optimize::src/extra_nci_thunks.c@ @ccwarn::src/extra_nci_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extra_nci_thunks.c
+
+$(EXTRANCITHUNKS_SO) : $(LIBPARROT) src/extra_nci_thunks$(O)
+	$(LD) $(LD_LOAD_FLAGS) $(LDFLAGS) \
+    @ld_out@$@ src/extra_nci_thunks$(O) \
+    $(ALL_PARROT_LIBS)
+
 # emacs etags
 # this needs exuberant-ctags
 

Modified: branches/ops_pct/config/gen/opengl.pm
==============================================================================
--- branches/ops_pct/config/gen/opengl.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/opengl.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -15,7 +15,7 @@
 
 =item F<runtime/parrot/library/OpenGL_funcs.pir>
 
-=item F<config/gen/call_list/opengl.in>
+=item F<src/glut_nci_thunks.nci>
 
 =item F<src/glut_callbacks.c>
 
@@ -436,7 +436,7 @@
 
 my $MACRO_FILE = 'runtime/parrot/include/opengl_defines.pasm';
 my $FUNCS_FILE = 'runtime/parrot/library/OpenGL_funcs.pir';
-my $SIGS_FILE  = 'config/gen/call_list/opengl.in';
+my $SIGS_FILE  = 'src/glut_nci_thunks.nci';
 my $C_FILE     = 'src/glut_callbacks.c';
 
 
@@ -812,6 +812,8 @@
 .sub _glutcb_func_list
     .local pmc glutcb_funcs
     glutcb_funcs = new 'ResizableStringArray'
+    push glutcb_funcs, 'Parrot_glut_nci_loader'
+    push glutcb_funcs, 'vJ'
     push glutcb_funcs, 'glutcbCloseFunc'
     push glutcb_funcs, 'vJP'
     push glutcb_funcs, 'glutcbDisplayFunc'

Modified: branches/ops_pct/config/gen/platform/generic/env.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/env.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/platform/generic/env.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2004-2006, Parrot Foundation.
+ * Copyright (C) 2004-2010, Parrot Foundation.
  */
 
 /*
@@ -26,7 +26,9 @@
 
 /*
 
-=item C<void Parrot_setenv(const char *name, const char *value)>
+=item C<void Parrot_setenv(PARROT_INTERP, STRING *str_name, STRING *str_value)>
+
+Set up Environment vars
 
 =cut
 
@@ -61,7 +63,9 @@
 
 /*
 
-=item C<void Parrot_unsetenv(const char *name)>
+=item C<void Parrot_unsetenv(PARROT_INTERP, STRING *str_name)>
+
+UnSet Environment vars
 
 =cut
 
@@ -81,7 +85,9 @@
 
 /*
 
-=item C<char * Parrot_getenv(const char *name, int *free_it)>
+=item C<char * Parrot_getenv(PARROT_INTERP, STRING *str_name)>
+
+Get Environment vars
 
 =cut
 

Modified: branches/ops_pct/config/gen/platform/generic/exec.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/exec.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/platform/generic/exec.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -106,7 +106,7 @@
         int status, i;
         STRING *s;
         char   *cmd;
-        char  **argv = mem_allocate_n_typed((len+1), char*);
+        char  **argv = mem_gc_allocate_n_typed(interp, (len+1), char*);
 
         for (i = 0; i < len; ++i) {
             s = VTABLE_get_string_keyed_int(interp, cmdargs, i);

Modified: branches/ops_pct/config/gen/platform/generic/memexec.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/memexec.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/platform/generic/memexec.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2004-2006, Parrot Foundation.
+ * Copyright (C) 2004-2010, Parrot Foundation.
  */
 
 /*
@@ -59,7 +59,7 @@
 
 /*
 
-=item C<void mem_free_executable(void *p, size_t)>
+=item C<void mem_free_executable(void *p, size_t size)>
 
 Free a buffer allocated with mem_alloc_executable().
 
@@ -81,7 +81,8 @@
 
 /*
 
-=item C<void * mem_realloc_executable(void* oldp, size_t oldsize, size_t newsize)>
+=item C<void * mem_realloc_executable(void* oldp, size_t oldsize, size_t
+newsize)>
 
 Reallocate executable memory.
 Rounds up to page size because the whole page will be marked as executable.

Modified: branches/ops_pct/config/gen/platform/openbsd/memexec.c
==============================================================================
--- branches/ops_pct/config/gen/platform/openbsd/memexec.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/platform/openbsd/memexec.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2004-2006, Parrot Foundation.
+ * Copyright (C) 2004-2010, Parrot Foundation.
  */
 
 /*
@@ -65,7 +65,8 @@
 
 /*
 
-=item C<void * mem_realloc_executable(void* oldp, size_t oldsize, size_t newsize)>
+=item C<void * mem_realloc_executable(void* oldp, size_t oldsize, size_t
+newsize)>
 
 Reallocate executable memory
 Round up to page size because the whole page will be marked as executable

Modified: branches/ops_pct/config/gen/platform/platform_interface.h
==============================================================================
--- branches/ops_pct/config/gen/platform/platform_interface.h	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/gen/platform/platform_interface.h	Sun Mar  7 19:33:20 2010	(r44743)
@@ -44,9 +44,9 @@
 void mem_free_executable(void *, size_t);
 void *mem_realloc_executable(void *, size_t, size_t);
 #else
-#  define mem_alloc_executable mem_sys_allocate
-#  define mem_free_executable(a, b) mem_sys_free(a)
-#  define mem_realloc_executable(a, b, c) mem_sys_realloc((a), (c))
+#  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
 
 /*

Modified: branches/ops_pct/config/init/hints/darwin.pm
==============================================================================
--- branches/ops_pct/config/init/hints/darwin.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/init/hints/darwin.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -90,8 +90,7 @@
         rpath                  => "-L",
         libparrot_soname       => "-install_name "
             . $lib_dir
-            . $conf->data->get('slash')
-            . "libparrot"
+            . '/libparrot'
             . $conf->data->get('share_ext')
     );
 }

Modified: branches/ops_pct/config/init/hints/mswin32.pm
==============================================================================
--- branches/ops_pct/config/init/hints/mswin32.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/init/hints/mswin32.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -101,7 +101,6 @@
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
             ccflags             => $ccflags,
             ccwarn              => $ccwarn,
             has_dynamic_linking => 1,
@@ -153,7 +152,6 @@
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
             ccflags             => $ccflags,
             ccwarn              => '',
             has_dynamic_linking => 1
@@ -200,7 +198,6 @@
             ar_out   => '',
             ar_extra => '',
             slash    => '\\',
-            blib_dir => 'blib\\lib',
             make_and => "\n\t",
         );
     }
@@ -261,7 +258,6 @@
             sym_export          => '__declspec(dllexport)',
             sym_import          => '__declspec(dllimport)',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
         );
     }
 }

Modified: branches/ops_pct/config/init/hints/openbsd.pm
==============================================================================
--- branches/ops_pct/config/init/hints/openbsd.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/init/hints/openbsd.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -21,10 +21,17 @@
     if ( $libs !~ /-lpthread\b/ ) {
         $libs .= ' -lpthread';
     }
+
+    my $ldflags = $conf->data->get('ldflags');
+    if ( $ldflags !~ m|-L/usr/local/lib\b| ) {
+        $ldflags .= ' -L/usr/local/lib';
+    }
+
     $conf->data->set(
-        libs  => $libs,
-        link  => 'g++',
-        rpath => '-Wl,-R',
+        ldflags => $ldflags,
+        libs    => $libs,
+        link    => 'g++',
+        rpath   => '-Wl,-R',
 
         has_dynamic_linking    => 1,
         parrot_is_shared       => 1,

Modified: branches/ops_pct/config/init/optimize.pm
==============================================================================
--- branches/ops_pct/config/init/optimize.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/init/optimize.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -21,10 +21,10 @@
 
 sub _init {
     my $self = shift;
-    my %data;
-    $data{description} = q{Enable optimization};
-    $data{result}      = q{};
-    return \%data;
+    return {
+        'description', 'Enable optimization',
+        'result',      '',
+    };
 }
 
 our $verbose;
@@ -41,41 +41,53 @@
     # A plain --optimize means use perl5's $Config{optimize}.  If an argument
     # is given, however, use that instead.
     my $optimize = $conf->options->get('optimize');
-    if ( defined $optimize ) {
-        $self->set_result('yes');
 
-        # disable debug flags
-        $conf->data->set( cc_debug => '' );
-        $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
-        if ( $optimize eq "1" ) {
-
-            # use perl5's value
-            # gcc 4.1 doesn't like -mcpu=xx, i.e. it's deprecated
-            my $opts = $conf->data->get('optimize_provisional');
-            my $gccversion = $conf->data->get( 'gccversion' );
-            my $arch_opt = 'cpu';
-            if ( defined $gccversion and $gccversion > 3.3 ) {
-                $arch_opt = 'arch';
-            }
-            $opts =~ s/-mcpu=/-m$arch_opt=/;
-            $conf->data->add( ' ', ccflags => $opts );
-            print "opts: ", $opts, "\n" if $verbose;
-
-            # record what optimization was enabled
-            $conf->data->set( optimize => $opts );
-        }
-        else {
+    if (! defined $optimize) {
+        $self->set_result('no');
+        print "(none requested) " if $conf->options->get('verbose');
+        return 1;
+    }
 
-            # use what was passed to --optimize on the CLI
-            $conf->data->add( ' ', ccflags => $optimize );
+    $self->set_result('yes');
+    my $gccversion = $conf->data->get( 'gccversion' );
 
-            # record what optimization was enabled
-            $conf->data->set( optimize => $optimize );
+    my $options;
+    if ( $optimize eq "1" ) {
+        # start with perl5's flags ...
+        $options = $conf->data->get('optimize_provisional');
+
+        # ... but gcc 4.1 doesn't like -mcpu=xx, i.e. it's deprecated
+        if ( defined $gccversion and $gccversion > 3.3 ) {
+            $options =~ s/-mcpu=/-march=/;
         }
     }
     else {
-        $self->set_result('no');
-        print "(none requested) " if $conf->options->get('verbose');
+        # use the command line verbatim
+        $options = $optimize;
+    }
+
+    # save the options, however we got them.
+    $conf->data->set( optimize => $options );
+    print "optimize options: ", $options, "\n" if $verbose;
+
+    # disable debug flags.
+    $conf->data->set( cc_debug => '' );
+    $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
+
+    # per file overrides - not every compiler can optimize every file.
+
+    # The src/ops/core_ops*.c files are challenging to optimize.
+    # gcc can usually handle it, but don't assume any other compilers can,
+    # until there is specific evidence otherwise.
+    if ( ! defined($gccversion)) {
+        $conf->data->set('optimize::src/ops/core_ops_cg.c','');
+        $conf->data->set('optimize::src/ops/core_ops_cgp.c','');
+        $conf->data->set('optimize::src/ops/core_ops_switch.c','');
+    }
+
+    # TT #405
+    if ($conf->data->get('cpuarch') eq 'amd64') {
+        $conf->data->set('optimize::src/gc/system.c','');
     }
 
     return 1;

Modified: branches/ops_pct/config/inter/charset.pm
==============================================================================
--- branches/ops_pct/config/inter/charset.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/inter/charset.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -75,8 +75,7 @@
     }
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    $TEMP_charset_o =~ s/^| / src${slash}string${slash}charset${slash}/g;
+    $TEMP_charset_o =~ s{^| }{ src/string/charset/}g;
 
     $conf->data->set(
         charset            => $charset_list,

Modified: branches/ops_pct/config/inter/encoding.pm
==============================================================================
--- branches/ops_pct/config/inter/encoding.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/inter/encoding.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -75,8 +75,7 @@
     }
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    $TEMP_encoding_o =~ s/^| / src${slash}string${slash}encoding${slash}/g;
+    $TEMP_encoding_o =~ s{^| }{ src/string/encoding/}g;
 
     $conf->data->set(
         encoding            => $encoding_list,

Modified: branches/ops_pct/config/inter/libparrot.pm
==============================================================================
--- branches/ops_pct/config/inter/libparrot.pm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/config/inter/libparrot.pm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -105,7 +105,7 @@
                                      && $conf->data->get('rpath') )
         ? $conf->data->get('rpath')
             . $conf->data->get('build_dir')
-            . $conf->data->get('slash')
+            . '/'
             . $conf->data->get('blib_dir')
         : ''
     );
@@ -144,7 +144,7 @@
         $conf->data->set(libparrot_linkflags =>
         '-L'
         . $conf->data->get('build_dir')
-        . $conf->data->get('slash')
+        . '/'
         . $conf->data->get('blib_dir')
         . ' -lparrot'
         );

Modified: branches/ops_pct/docs/embed.pod
==============================================================================
--- branches/ops_pct/docs/embed.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/embed.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -84,21 +84,7 @@
 
 =head2 Type signatures
 
-These are used with the Parrot_call_sub family of functions.
-
-=over 4
-
-=item v - void (return only)
-
-=item I - integer (return or argument)
-
-=item N - float (return or argument)
-
-=item S - string (return or argument)
-
-=item P - PMC (return or argument)
-
-=back
+    TODO: Write about signature strings
 
 =head2 Interpreter initialization and destruction
 
@@ -354,14 +340,6 @@
 with return values are passed as references in the varargs list, after all
 arguments.
 
-=item [DEPRECATED] C<void *Parrot_call_sub(PARROT_INTERP, Parrot_PMC sub, const_char *signature)>
-
-Call a Parrot subroutine that returns a pointer using the supplied signature.
-
-=item [DEPRECATED] C<Parrot_Int Parrot_call_sub_ret_int(PARROT_INTERP, Parrot_PMC sub, const_char *signature)>
-
-Call a Parrot subroutine that returns an integer using the supplied signature.
-
 =back
 
 =head2 Objects
@@ -504,7 +482,7 @@
         sub = Parrot_find_global_cur(interp, pstr);
 
         /* run foo(), which returns nothing */
-        Parrot_call_sub(interp, sub, "v");
+	Parrot_ext_call(interp, sub, "->");
 
         Parrot_destroy(interp);
 
@@ -601,10 +579,6 @@
 
 =item C<Parrot_ext_call>
 
-=item [DEPRECATED] C<Parrot_call_sub>
-
-=item [DEPRECATED] C<Parrot_call_sub_ret_int>
-
 =item C<Parrot_char_digit_value>
 
 =item C<Parrot_charset_c_name>
@@ -1053,46 +1027,6 @@
 
 =item C<Parrot_PMC_assign_string_native>
 
-=item C<Parrot_PMC_bitwise_and>
-
-=item C<Parrot_PMC_bitwise_and_int>
-
-=item C<Parrot_PMC_bitwise_ands>
-
-=item C<Parrot_PMC_bitwise_ands_str>
-
-=item C<Parrot_PMC_bitwise_lsr>
-
-=item C<Parrot_PMC_bitwise_lsr_int>
-
-=item C<Parrot_PMC_bitwise_not>
-
-=item C<Parrot_PMC_bitwise_nots>
-
-=item C<Parrot_PMC_bitwise_or>
-
-=item C<Parrot_PMC_bitwise_or_int>
-
-=item C<Parrot_PMC_bitwise_ors>
-
-=item C<Parrot_PMC_bitwise_ors_str>
-
-=item C<Parrot_PMC_bitwise_shl>
-
-=item C<Parrot_PMC_bitwise_shl_int>
-
-=item C<Parrot_PMC_bitwise_shr>
-
-=item C<Parrot_PMC_bitwise_shr_int>
-
-=item C<Parrot_PMC_bitwise_xor>
-
-=item C<Parrot_PMC_bitwise_xor_int>
-
-=item C<Parrot_PMC_bitwise_xors>
-
-=item C<Parrot_PMC_bitwise_xors_str>
-
 =item C<Parrot_PMC_can>
 
 =item C<Parrot_PMC_clone>
@@ -1163,8 +1097,6 @@
 
 =item C<Parrot_PMC_get_attr_str>
 
-=item C<Parrot_PMC_get_bignum>
-
 =item C<Parrot_PMC_get_bool>
 
 =item C<Parrot_PMC_get_class>
@@ -1253,46 +1185,6 @@
 
 =item C<Parrot_PMC_i_add_int>
 
-=item C<Parrot_PMC_i_bitwise_and>
-
-=item C<Parrot_PMC_i_bitwise_and_int>
-
-=item C<Parrot_PMC_i_bitwise_ands>
-
-=item C<Parrot_PMC_i_bitwise_ands_str>
-
-=item C<Parrot_PMC_i_bitwise_lsr>
-
-=item C<Parrot_PMC_i_bitwise_lsr_int>
-
-=item C<Parrot_PMC_i_bitwise_not>
-
-=item C<Parrot_PMC_i_bitwise_nots>
-
-=item C<Parrot_PMC_i_bitwise_or>
-
-=item C<Parrot_PMC_i_bitwise_or_int>
-
-=item C<Parrot_PMC_i_bitwise_ors>
-
-=item C<Parrot_PMC_i_bitwise_ors_str>
-
-=item C<Parrot_PMC_i_bitwise_shl>
-
-=item C<Parrot_PMC_i_bitwise_shl_int>
-
-=item C<Parrot_PMC_i_bitwise_shr>
-
-=item C<Parrot_PMC_i_bitwise_shr_int>
-
-=item C<Parrot_PMC_i_bitwise_xor>
-
-=item C<Parrot_PMC_i_bitwise_xor_int>
-
-=item C<Parrot_PMC_i_bitwise_xors>
-
-=item C<Parrot_PMC_i_bitwise_xors_str>
-
 =item C<Parrot_PMC_i_concatenate>
 
 =item C<Parrot_PMC_i_concatenate_str>
@@ -1661,14 +1553,6 @@
 
 =item C<Parrot_str_append>
 
-=item C<Parrot_str_bitwise_and>
-
-=item C<Parrot_str_bitwise_not>
-
-=item C<Parrot_str_bitwise_or>
-
-=item C<Parrot_str_bitwise_xor>
-
 =item C<Parrot_str_boolean>
 
 =item C<Parrot_str_byte_length>
@@ -1807,7 +1691,7 @@
 
 =item C<Parrot_warn>
 
-=item C<PMC_is_null>
+=item C<Parrot_pmc_is_null>
 
 =item C<pmc_new>
 

Modified: branches/ops_pct/docs/parrothist.pod
==============================================================================
--- branches/ops_pct/docs/parrothist.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/parrothist.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -103,5 +103,5 @@
  Gerd        1.9.0          2009-Dec-15     "Blue-fronted Amazon"
 
  chromatic   2.0.0 *        2010-Jan-19     "Inevitable"
-
+ darbelo     2.1.0          2010-Feb-16     "As Scheduled"
 =cut

Modified: branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/pdds/draft/pdd06_pasm.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -989,8 +989,7 @@
 "Perl5", "Perl6", "Perl5RE", "Perl6RE", "Python", "Ruby"... you get the
 picture.
 
-Parrot knows of a "PASM1" compiler, i.e. a one statement PASM compiler
-implemented as PDB_eval. Imcc registers "PASM" and "PIR" compilers.
+Imcc registers "PASM" and "PIR" compilers automatically.
 
 This is a high-level op, with the assumption that the resulting sub will be
 called. It's the equivalent of perl 5's string eval, except for the actual

Modified: branches/ops_pct/docs/pdds/draft/pdd11_extending.pod
==============================================================================
--- branches/ops_pct/docs/pdds/draft/pdd11_extending.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/pdds/draft/pdd11_extending.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -275,11 +275,7 @@
 
 =over 4
 
-=item C<Parrot_call_sub(interp, Parrot_PMC sub, Parrot_Int argcount, ...)>
-
-Calls a Parrot subroutine, with C<argcount> PMC parameters. This function sets
-up Parrot's registers in line with the Parrot calling conventions; see
-L<pdd03_calling_conventions.pod> for more details.
+    TODO: Add new call functions here
 
 =back
 

Modified: branches/ops_pct/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd17_pmc.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/pdds/pdd17_pmc.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -628,12 +628,6 @@
 
 Return the native floating-point value of the PMC.
 
-=item get_bignum
-
-  PMC* get_bignum(INTERP, PMC *self)
-
-Return the extended precision numeric value of the PMC as a new bignum PMC.
-
 =item get_string
 
   STRING* get_string(INTERP, PMC *self)

Modified: branches/ops_pct/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd28_strings.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/pdds/pdd28_strings.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -666,10 +666,6 @@
 
 Return the floating-point representation of the string.
 
-=item get_bignum
-
-Return the big number representation of the string.
-
 =item get_string
 
 Return the string value of the String PMC.

Modified: branches/ops_pct/docs/project/release_manager_guide.pod
==============================================================================
--- branches/ops_pct/docs/project/release_manager_guide.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/project/release_manager_guide.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -393,9 +393,11 @@
 visible at
 L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.calendar.google.com>.
 
- - Feb 16, 2010      - 2.1  - darbelo
- - Mar 16, 2010      - 2.2  - cotto
- - Apr 20, 2010      - 2.3* - gerd
+ - Mar 16, 2010 - 2.2  - cotto
+ - Apr 20, 2010 - 2.3* - gerd
+ - May 18, 2010 - 2.4  - whiteknight
+ - Jun 15, 2010 - 2.5  - gerd
+ - Jul 20, 2010 - 2.6* - coke
 
 =cut
 

Modified: branches/ops_pct/docs/tests.pod
==============================================================================
--- branches/ops_pct/docs/tests.pod	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/docs/tests.pod	Sun Mar  7 19:33:20 2010	(r44743)
@@ -7,16 +7,16 @@
 
 =head1 A basic guide to writing and running tests for Parrot
 
-This is quick and dirty pointer to how the Parrot test suite is executed and
-to how new tests for Parrot should be written.
-The testing system is liable to change in the future, but tests written
-following the guidelines below should be easy to port into a new test suite.
+This is quick and dirty primer on to how the Parrot test suite is executed and
+to how new tests for Parrot should be written.  The testing system is liable to
+change in the future, but tests written following the guidelines below should be
+easy to port into a new test suite.
 
 =head1 How to test parrot
 
-The easy way to test parrot is running C<make test>. If you have
-updated your code recently and tests began failing, go for a C<make
-realclean> and recompile parrot before complaining.
+The easy way to test parrot is running C<make test>. If you have updated your
+code recently and tests began failing, go for a C<make realclean> and recompile
+parrot before complaining.
 
 C<make languages-test> runs the test suite for most language implementations
 in the languages directory.
@@ -26,41 +26,47 @@
 Parrot has a status page with smoke test results at
 L<http://smolder.plusthree.com/app/public_projects/details/8>.
 
-You can supply new tests results by just running C<make smoke>. 
-It will run the same tests as C<make test> would, but will upload
-the test results to the website.
+You can supply new tests results by just running C<make smoke>.  It will run the
+same tests as C<make test> would, but will upload the test results to the
+website.
 
 =head1 Location of the test files
 
 The parrot test files, the F<*.t> files, can be found in the F<t> directory.
-A quick overview over the subdirs in F<t> can be found in F<t/README>. 
+A quick overview over the subdirs in F<t> can be found in F<t/README>.
 
 The language implementations usually have their test files in F<languages/*/t>.
 
-New tests should be added to an existing F<*.t> file.
-If a previously untested feature is tested,
-it might also make sense to create a new F<*.t> file.
+New tests should be added to an existing F<*.t> file.  If a previously untested
+feature is tested, it might also make sense to create a new F<*.t> file. You
+may also see tests named like foo-old.t, which are Perl tests that are in the
+process of being translated to PIR.
 
 =head1 How to write a test
 
 Test scripts must emit text that conforms to the C<Test Anything Protocol>.
-Test scripts are currently usually written in Perl 5 or PIR.
-The Perl 5 module C<Parrot::Test>
-and the PIR module C<Test;More> help with writing tests.
+Test scripts are currently usually written in PIR or Perl 5.  The Perl 5 module
+C<Parrot::Test> and the PIR module C<Test;More> help with writing tests.
+Writing tests in PIR is preferred, but there are some cases where the
+proper framework is not available. If you can, write your tests in PIR.
 
 The testing framework needs to know how many tests it should expect.  So the
 number of planned tests needs to be incremented when adding a new test. This
 is done near the top of a test file, in a line that looks like:
 
+  plan(42)
+
+in PIR tests and
+
   use Parrot::Test tests => 8;
 
-for Perl 5 based test scripts.
+for Perl 5 test scripts.
 
 =head2 Testing Parrot Assembler
 
 PASM tests are mostly used for testing ops.  Appropriate test files for basic
-ops are F<t/op/*.t>.  Polymorphic Containers are tested in F<t/pmc/*.t>.  Add the
-new test like this:
+ops are F<t/op/*.t>.  Polymorphic Containers are tested in F<t/pmc/*.t>.  Add
+the new test like this:
 
     pasm_output_is(<<'CODE', <<'OUTPUT', "name for test");
         *** a big chunk of assembler, eg:

Modified: branches/ops_pct/examples/c/nanoparrot.c
==============================================================================
--- branches/ops_pct/examples/c/nanoparrot.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/c/nanoparrot.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -94,7 +94,7 @@
  * or for the curious: look at the preprocessor output
  */
 
-#define OP(x) OP_ ## (x)
+#define OP(x) OP_##x
 typedef enum { OPCODES } opcodes;
 #undef OP
 
@@ -148,6 +148,8 @@
 
 =item C<static void run(Interp *interp, opcode_t *pc)>
 
+Execute a single opcode.
+
 =cut
 
 */
@@ -167,7 +169,7 @@
         switch (*pc) {
 #    endif
 
-#    define CASE(x)         case OP_ ## (x):
+#    define CASE(x)         case OP_##x:
 #    define NEXT            continue;
 #    define DONE            return;
 #    define ENDDISPATCH     default : printf("illegal instruction"); \
@@ -228,11 +230,11 @@
 
 #ifdef FUNC_CORE
 #  define DEF_OP(op) \
-    interp->op_func[OP_ ## op] = (op); \
-    interp->op_info[OP_ ## op] = #op
+    interp->op_func[OP_##op] = (op); \
+    interp->op_info[OP_##op] = #op
 #else
 #  define DEF_OP(op) \
-    interp->op_info[OP_ ## op] = #op
+    interp->op_info[OP_##op] = #op
 #endif
 
 /*
@@ -287,6 +289,8 @@
 
 =item C<int main(int argc, char *argv[])>
 
+Initialize a minimal Parrotesque interpreter and run some hard-coded bytecode.
+
 =cut
 
 */

Modified: branches/ops_pct/examples/c/pbc_info.c
==============================================================================
--- branches/ops_pct/examples/c/pbc_info.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/c/pbc_info.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2003, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -27,6 +27,8 @@
 #include "parrot/embed.h"
 
 /*
+=item C<static INTVAL iter(PARROT_INTERP, PackFile_Segment *seg, void
+*user_data)>
 
 =item C<static INTVAL iter(PARROT_INTERP, PackFile_Segment *seg, void *user_data)>
 

Modified: branches/ops_pct/examples/embed/cotorra.c
==============================================================================
--- branches/ops_pct/examples/embed/cotorra.c	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/embed/cotorra.c	Sun Mar  7 19:33:20 2010	(r44743)
@@ -203,7 +203,7 @@
         Parrot_String compiler = create_string(interp, "PIR");
         Parrot_String errstr;
         Parrot_PMC code = Parrot_compile_string(interp, compiler, exec, &errstr);
-        void *discard = Parrot_call_sub(interp, code, "v");
+        Parrot_ext_call(interp, code, "->");
         return 0;
     }
 
@@ -224,8 +224,7 @@
         Parrot_PMC parrotns = Parrot_PMC_get_pmc_strkey(interp, rootns, parrotname);
         Parrot_String name = create_string(interp, stname);
         Parrot_PMC start = Parrot_PMC_get_pmc_strkey(interp, parrotns, name);
-        void *discard;
-        discard = Parrot_call_sub(interp, start, "v");
+        Parrot_ext_call(interp, start, "->");
     }
     else {
         Parrot_runcode(interp, argc - i, argv + i);

Modified: branches/ops_pct/examples/languages/abc/t/01-tests.t
==============================================================================
--- branches/ops_pct/examples/languages/abc/t/01-tests.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/languages/abc/t/01-tests.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -79,7 +79,7 @@
 # calculate total number of tests
 my $numtests = 0;
 foreach my $f (@test_files) {
-    open my( $TEST_FILE ), $f;
+    open my $TEST_FILE, '<', $f;
 
     # for each line in the given files if it's not a comment line
     # or an empty line, the it's a test
@@ -91,7 +91,7 @@
 
 # main loop
 foreach my $file (@test_files) {
-    open my $TEST_FILE, "<$file" or die "can't open file";
+    open my $TEST_FILE, '<', $file or die "can't open file";
     while (<$TEST_FILE>) {
         chomp;
         s/\r//g;

Modified: branches/ops_pct/examples/nci/QtHelloWorld.pasm
==============================================================================
--- branches/ops_pct/examples/nci/QtHelloWorld.pasm	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/nci/QtHelloWorld.pasm	Sun Mar  7 19:33:20 2010	(r44743)
@@ -21,7 +21,8 @@
 
 Note that this will either need JIT for building the NCI-functions on
 the fly. If this is not available try adding missing signatures to
-F<src/call_list.txt> and rebuilding Parrot.
+F<src/nci/extra_thunks.nci>, running F<tools/dev/mk_nci_thunks.pl>, and
+rebuilding Parrot.
 
 =cut
 

Modified: branches/ops_pct/examples/nci/QtHelloWorld.pir
==============================================================================
--- branches/ops_pct/examples/nci/QtHelloWorld.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/nci/QtHelloWorld.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -21,7 +21,8 @@
 
 Note that this will either need JIT for building the NCI-functions on
 the fly. If this is not available try adding missing signatures to
-F<src/call_list.txt> and rebuilding Parrot.
+F<src/nci/extra_thunks.nci>, running F<tools/dev/mk_nci_thunks.pl>, and
+rebuilding Parrot.
 
 =cut
 .sub main

Modified: branches/ops_pct/examples/nci/sdl_blue_rectangle.pir
==============================================================================
--- branches/ops_pct/examples/nci/sdl_blue_rectangle.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/nci/sdl_blue_rectangle.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -26,11 +26,11 @@
     .local pmc new_SDL_Rect
     .local object screen
 
-    SDL_Init       = global "SDL::SDL_Init"
-    SetVideoMode   = global "SDL::SDL_SetVideoMode"
-    SDL_Quit       = global "SDL::SDL_Quit"
-    SDL_UpdateRect = global "SDL::SDL_UpdateRect"
-    SDL_FillRect   = global "SDL::SDL_FillRect"
+    SDL_Init       = global ['SDL'; 'SDL_Init']
+    SetVideoMode   = global ['SDL'; 'SDL_SetVideoMode']
+    SDL_Quit       = global ['SDL'; 'SDL_Quit']
+    SDL_UpdateRect = global ['SDL'; 'SDL_UpdateRect']
+    SDL_FillRect   = global ['SDL'; 'SDL_FillRect']
     new_SDL_Rect   = global "new_SDL_Rect"
 
     .begin_call

Modified: branches/ops_pct/examples/pir/make_hello_pbc.pir
==============================================================================
--- branches/ops_pct/examples/pir/make_hello_pbc.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/pir/make_hello_pbc.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -2,7 +2,7 @@
 #$Id$
 # Sample creating of "Hello World" program using Packfile PMCs.
 .sub 'main'
-    .local pmc pf, pfdir, pffixup, pfbc, pfconst
+    .local pmc pf, pfdir, pffixup, pfbc, pfconst, oplib
 
     # Hello World is something like
     # .sub 'hello'
@@ -40,15 +40,19 @@
 
     # Generate bytecode
     pfbc = new 'PackfileRawSegment'
+    oplib = new 'OpLib'
 
-    # There is our function
-    pfbc[0] = 0x1d1 # say_sc
+    # Here is our function
+    $I0 = oplib['say_sc']
+    pfbc[0] = $I0
     pfbc[1] = 0x002 # constant id.
 
-    pfbc[2] = 0x026 # set_return_pc
+    $I0 = oplib['set_returns_pc']
+    pfbc[2] = $I0
     pfbc[3] = 0x001 # id of FIA
 
-    pfbc[4] = 0x020 # returncc
+    $I0 = oplib['returncc']
+    pfbc[4] = $I0
 
     # Store bytecode
     pfdir['BYTECODE_hello.pir'] = pfbc

Modified: branches/ops_pct/examples/sdl/anim_image.pir
==============================================================================
--- branches/ops_pct/examples/sdl/anim_image.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/anim_image.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -23,34 +23,34 @@
 
 
     .local pmc app
-    app = new 'SDL::App'
+    app = new ['SDL'; 'App']
     app.'init'( 'height' => 480, 'width' => 640, 'bpp' => 0, 'flags' => 1 )
 
     .local pmc main_screen
     main_screen = app.'surface'()
 
     .local pmc dest_rect
-    dest_rect   = new 'SDL::Rect'
+    dest_rect   = new ['SDL'; 'Rect']
     dest_rect.'init'( 'height' => 100, 'width' => 100, 'x' => 0, 'y' => 190 )
 
     .local pmc prev_rect
-    prev_rect   = new 'SDL::Rect'
+    prev_rect   = new ['SDL'; 'Rect']
     prev_rect.'init'( 'height' => 100, 'width' => 101, 'x' => 0, 'y' => 190 )
 
     .local pmc source_rect
-    source_rect = new 'SDL::Rect'
+    source_rect = new ['SDL'; 'Rect']
     source_rect.'init'( 'height' => 56, 'width' => 100, 'x' => 0, 'y' => 0 )
 
     .local pmc black
-    black = new 'SDL::Color'
+    black = new ['SDL'; 'Color']
     black.'init'( 'r' => 0, 'g' => 0, 'b' => 0 )
 
     .local pmc image
-    image    = new 'SDL::Image'
+    image    = new ['SDL'; 'Image']
     image.'init'( 'examples/sdl/parrot_small.png' )
 
     .local pmc sprite
-    sprite = new 'SDL::Sprite'
+    sprite = new ['SDL'; 'Sprite']
     sprite.'init'( 'surface' => image, 'source_x' => 0, 'source_y' => 0, 'dest_x' => 0, 'dest_y' => 190, 'bgcolor' => black )
 
     .local num start_time
@@ -96,7 +96,7 @@
     .local pmc rect
 
     .local pmc rect_array
-    rect_array = new 'Array'
+    rect_array = new 'ResizablePMCArray'
     set rect_array, 2
 
 _loop:

Modified: branches/ops_pct/examples/sdl/anim_image_dblbuf.pir
==============================================================================
--- branches/ops_pct/examples/sdl/anim_image_dblbuf.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/anim_image_dblbuf.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -22,34 +22,34 @@
     load_bytecode "SDL/Sprite.pir"
 
     .local pmc app
-    app = new 'SDL::App'
+    app = new ['SDL'; 'App']
     app.'init'( 'height' => 480, 'width' => 640, 'bpp' => 0, 'flags' => 1073741825 )
 
     .local pmc main_screen
     main_screen = app.'surface'()
 
     .local pmc dest_rect
-    dest_rect = new 'SDL::Rect'
+    dest_rect = new ['SDL'; 'Rect']
     dest_rect.'init'( 'height' => 100, 'width' => 100, 'x' => 0, 'y' => 190 )
 
     .local pmc prev_rect
-    prev_rect = new 'SDL::Rect'
+    prev_rect = new ['SDL'; 'Rect']
     prev_rect.'init'( 'height' => 100, 'width' => 101, 'x' => 0, 'y' => 190 )
 
     .local pmc source_rect
-    source_rect = new 'SDL::Rect'
+    source_rect = new ['SDL'; 'Rect']
     source_rect.'init'( 'height' => 56, 'width' => 100, 'x' => 0, 'y' => 0 )
 
     .local pmc black
-    black = new 'SDL::Color'
+    black = new ['SDL'; 'Color']
     black.'init'( 'r' => 0, 'g' => 0, 'b' => 0 )
 
     .local pmc image
-    image    = new 'SDL::Image'
+    image    = new ['SDL'; 'Image']
     image.'init'( 'examples/sdl/parrot_small.png' )
 
     .local pmc sprite
-    sprite = new 'SDL::Sprite'
+    sprite = new ['SDL'; 'Sprite']
     sprite.'init'( 'surface' => image, 'source_x' => 0, 'source_y' => 0, 'dest_x' => 0, 'dest_y' => 190, 'bgcolor' => black )
 
     .local num start_time

Modified: branches/ops_pct/examples/sdl/blue_font.pir
==============================================================================
--- branches/ops_pct/examples/sdl/blue_font.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/blue_font.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -29,7 +29,7 @@
 
     # create an SDL::App object
     .local pmc app
-    app = new 'SDL::App'
+    app = new ['SDL'; 'App']
     app.'init'( 'height' => 480, 'width' => 640, 'bpp' => 0, 'flags' => 1 )
 
     # fetch the SDL::Surface representing the main window
@@ -38,16 +38,16 @@
 
     # create an SDL::Rect object
     .local pmc rect
-    new rect, 'SDL::Rect'
+    new rect, ['SDL'; 'Rect']
     rect.'init'( 'height' => 100, 'width' => 100, 'x' => 194, 'y' => 208 )
 
     # create SDL::Color objects
     .local pmc blue
-    new blue, 'SDL::Color'
+    new blue, ['SDL'; 'Color']
     blue.'init'( 'r' => 0, 'g' => 0, 'b' => 255 )
 
     .local pmc white
-    new white, 'SDL::Color'
+    new white, ['SDL'; 'Color']
     white.'init'( 'r' => 255, 'g' => 255, 'b' => 255 )
 
     .local pmc file_pmc
@@ -62,11 +62,11 @@
 
   have_font:
     .local pmc font
-    new font,  'SDL::Font'
+    new font, ['SDL'; 'Font']
     font.'init'( 'font_file'  => 'times.ttf', 'point_size' => 48 )
 
     .local pmc full_rect
-    full_rect = new 'SDL::Rect'
+    full_rect = new ['SDL'; 'Rect']
     full_rect.'init'( 'width'  => 640, 'height' => 480, 'x' => 0, 'y' => 0 )
 
     main_screen.'fill_rect'( full_rect, white )

Modified: branches/ops_pct/examples/sdl/blue_rect.pir
==============================================================================
--- branches/ops_pct/examples/sdl/blue_rect.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/blue_rect.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -21,7 +21,7 @@
 
     # create an SDL::App object
     .local pmc app
-    app = new 'SDL::App'
+    app = new ['SDL'; 'App']
     app.'init'( 'height' => 480, 'width' => 640, 'bpp' => 32, 'flags' => 1 )
 
     # fetch the SDL::Surface representing the main window
@@ -30,12 +30,12 @@
 
     # create an SDL::Rect object
     .local pmc rect
-    new rect, 'SDL::Rect'
+    new rect, ['SDL'; 'Rect']
     rect.'init'( 'height' => 100, 'width'  => 100, 'x' => 270, 'y' => 190 )
 
     # create an SDL::Color object
     .local pmc color
-    new color, 'SDL::Color'
+    new color, ['SDL'; 'Color']
     color.'init'( 'r' => 0, 'g' => 0, 'b' => 255 )
 
     # draw the rectangle to the surface and update it

Modified: branches/ops_pct/examples/sdl/bounce_parrot_logo.pir
==============================================================================
--- branches/ops_pct/examples/sdl/bounce_parrot_logo.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/bounce_parrot_logo.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -27,22 +27,22 @@
     load_bytecode "SDL/Event.pir"
 
     .local pmc app
-    app = new 'SDL::App'
+    app = new ['SDL'; 'App']
     app.'init'( 'width' => 640, 'height' => 480, 'bpp' => 0, 'flags' => 0 )
 
     .local pmc main_screen
     main_screen = app.'surface'()
 
     .local pmc black
-    black = new 'SDL::Color'
+    black = new ['SDL'; 'Color']
     black.'init'( 'r' => 0, 'g' => 0, 'b' => 0 )
 
     .local pmc image
-    image = new 'SDL::Image'
+    image = new ['SDL'; 'Image']
     image.'init'( 'examples/sdl/parrot_small.png' )
 
     .local pmc sprite
-    sprite = new 'SDL::Sprite'
+    sprite = new ['SDL'; 'Sprite']
     sprite.'init'( 'surface' => image, 'source_x' => 0, 'source_y' => 0, 'dest_x' => 270, 'dest_y' => 212, 'bgcolor' => black )
 
     _main_loop( main_screen, sprite )
@@ -55,14 +55,14 @@
 
     .local pmc parent_class
     .local pmc class_type
-    get_class parent_class, 'SDL::EventHandler'
+    get_class parent_class, ['SDL'; 'EventHandler']
     subclass class_type, parent_class, 'MoveLogo::EventHandler'
 
     .local pmc event_handler
     event_handler = new 'MoveLogo::EventHandler'
 
     .local pmc event
-    event = new 'SDL::Event'
+    event = new ['SDL'; 'Event']
     event.'init'()
 
     .local pmc handler_args
@@ -176,7 +176,7 @@
     .local pmc prev_rect
     .local pmc rect
     .local pmc rect_array
-    rect_array = new 'Array'
+    rect_array = new 'ResizablePMCArray'
     set rect_array, 2
 
     (prev_rect, rect) = sprite.'draw_undraw'( screen )

Modified: branches/ops_pct/examples/sdl/lcd/clock.pir
==============================================================================
--- branches/ops_pct/examples/sdl/lcd/clock.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/lcd/clock.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -35,7 +35,7 @@
 
     # create the SDL application object
     .local pmc app
-    app = new 'SDL::App'
+    app = new ['SDL'; 'App']
     app.'init'( 'height' => 21, 'width' => 94, 'bpp' => 16, 'flags' => 5 )
 
     .local pmc screen
@@ -44,7 +44,7 @@
 
     # create the LCD
     .local pmc lcd
-    lcd = new 'SDL::LCD'
+    lcd = new ['SDL'; 'LCD']
     set_global 'LCD', lcd
 
     # draw the watch
@@ -67,8 +67,8 @@
     .local pmc eh
     .local pmc loop
 
-    eh   = new 'SDL::EventHandler'
-    loop = new 'SDL::Event'
+    eh   = new ['SDL'; 'EventHandler']
+    loop = new ['SDL'; 'Event']
     loop.'init'()
     loop.'process_events'( 0.1, eh )
 .end

Modified: branches/ops_pct/examples/sdl/mandel.pir
==============================================================================
--- branches/ops_pct/examples/sdl/mandel.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/mandel.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -72,7 +72,7 @@
     .param pmc opts
     # create an SDL::App subclass
     .local pmc app, cl
-    cl = subclass 'SDL::App', 'Mandel'
+    cl = subclass ['SDL'; 'App'], 'Mandel'
     addattribute cl, 'xstart'
     addattribute cl, 'ystart'
     addattribute cl, 'xend'
@@ -128,7 +128,7 @@
 
     # create an SDL::Rect representing the entire main screen
     .local pmc rect
-    rect = new 'SDL::Rect'
+    rect = new ['SDL'; 'Rect']
     rect.'init'( 'height' => h, 'width' => w, 'x' => 0, 'y' => 0 )
     setattribute self, 'rect', rect
 
@@ -397,11 +397,11 @@
 # init event system
 .sub 'init_events' :method
     .local pmc event, args, event_handler
-    event = new 'SDL::Event'
+    event = new ['SDL'; 'Event']
     event.'init'()
     setattribute self, 'event', event
 
-    $P0 = subclass 'SDL::EventHandler', ['Mandel'; 'EventHandler']
+    $P0 = subclass ['SDL'; 'EventHandler'], ['Mandel'; 'EventHandler']
     event_handler = new ['Mandel'; 'EventHandler']
     event_handler.'init'(self)	# XXX unused
     setattribute self, 'event_handler', event_handler
@@ -444,7 +444,7 @@
 loop_g:
     b = 0
 loop_b:
-    col = new 'SDL::Color'
+    col = new ['SDL'; 'Color']
     col.'init'( 'r' => r, 'g' => g, 'b' => b )
     push palette, col
     b += 36

Modified: branches/ops_pct/examples/sdl/minesweeper/eventhandler.pir
==============================================================================
--- branches/ops_pct/examples/sdl/minesweeper/eventhandler.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/minesweeper/eventhandler.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -6,7 +6,7 @@
 
 =head1 SYNOPSIS
 
-    $P0 = new "SDL::Event"
+    $P0 = new ['SDL'; 'Event']
 
     $P1 = new "Mines::EventHandler"
 

Modified: branches/ops_pct/examples/sdl/minesweeper/field.pir
==============================================================================
--- branches/ops_pct/examples/sdl/minesweeper/field.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/minesweeper/field.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -132,11 +132,11 @@
     field  = new 'ResizablePMCArray'
     cache  = new 'ResizablePMCArray'
 
-    watch = new 'SDL::StopWatch', screen
+    watch = new ['SDL'; 'StopWatch'], screen
     watch.'xpos'( 515 )
     watch.'ypos'( 5 )
 
-    lcd = new 'SDL::LCD'
+    lcd = new ['SDL'; 'LCD']
     # This seems to call __init() with too many parameters
     # lcd = 0
     lcd.'_digits'( 4 )
@@ -172,7 +172,7 @@
     # button
     $P0 = new 'String'
     $P0 = "examples/sdl/minesweeper/smiley.png"
-    $P0 = new "SDL::Button", $P0
+    $P0 = new ['SDL'; 'Button'], $P0
     $P0.'states'( 5 )
     $P0.'pos'( 305, 2 )
     $P0.'size'( 30, 30 )
@@ -324,10 +324,10 @@
     $P0['y'] = 0
     $P0['width']  = 0
     $P0['height'] = 0
-    dest_rect = new "SDL::Rect", $P0
+    dest_rect = new ['SDL'; 'Rect'], $P0
     $P0['width']  = FIELD_WIDTH
     $P0['height'] = FIELD_HEIGHT
-    src_rect = new "SDL::Rect", $P0
+    src_rect = new ['SDL'; 'Rect'], $P0
 
     set size, width
     mul size, height
@@ -975,12 +975,12 @@
 
     $P0 = new 'String'
     $P0 = "examples/sdl/minesweeper/mines.png"
-    image = new "SDL::Image", $P0
+    image = new ['SDL'; 'Image'], $P0
     set_hll_global [ "Mines::Field" ], "field", image
 
     $P0 = new 'String'
     $P0 = "examples/sdl/minesweeper/mines_debug.png"
-    image = new "SDL::Image", $P0
+    image = new ['SDL'; 'Image'], $P0
     set_hll_global [ "Mines::Field" ], "field_debug", image
 
     newclass $P0, "Mines::Field"

Modified: branches/ops_pct/examples/sdl/minesweeper/mines.pir
==============================================================================
--- branches/ops_pct/examples/sdl/minesweeper/mines.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/minesweeper/mines.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -48,7 +48,7 @@
     $P0["flags"]  =   5
 
     # create the SDL object
-    $P0 = new "SDL::App", $P0
+    $P0 = new ['SDL'; 'App'], $P0
     screen = $P0."surface"()
 
     # choose a "random" field
@@ -71,7 +71,7 @@
     field.'draw'()
 
     # runloop
-    $P0 = new "SDL::Event"
+    $P0 = new ['SDL'; 'Event']
     $P1 = new "Mines::EventHandler"
     $P0."process_events"( 0.1, $P1, field )
 

Modified: branches/ops_pct/examples/sdl/move_parrot_logo.pir
==============================================================================
--- branches/ops_pct/examples/sdl/move_parrot_logo.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/move_parrot_logo.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -25,7 +25,7 @@
 	.local pmc app
 	.local int app_type
 
-	app = new 'SDL::App'
+	app = new ['SDL'; 'App']
 
 	app.'init'( 'width' => 640, 'height' => 480, 'bpp' => 0, 'flags' => 0 )
 
@@ -35,7 +35,7 @@
 	.local pmc black
 	.local int color_type
 
-	black = new 'SDL::Color'
+	black = new ['SDL'; 'Color']
 	black.'init'( 'r' => 0, 'g' => 0, 'b' => 0 )
 
 	.local pmc    image
@@ -43,7 +43,7 @@
 	.local string filename
 
 
-	image    = new 'SDL::Image'
+	image    = new ['SDL'; 'Image']
 
 	filename = 'examples/sdl/parrot_small.png'
 	image.'init'( 'file' => filename )
@@ -53,12 +53,12 @@
 	.local pmc sprite
 	.local int sprite_type
 
-	sprite = new 'SDL::Sprite'
+	sprite = new ['SDL'; 'Sprite']
 	sprite.'init'( 'surface'  => image, 'source_x' =>     0, 'source_y' =>     0, 'dest_x'   =>   270, 'dest_y'   =>   212, 'bgcolor'  => black )
 
 	.local pmc parent_class
 	.local pmc class_type
-	get_class parent_class, 'SDL::EventHandler'
+	get_class parent_class, ['SDL'; 'EventHandler']
 	subclass class_type, parent_class, 'MoveLogo::EventHandler'
 
 	.local pmc event_handler
@@ -69,7 +69,7 @@
 	.local pmc event
 	.local int event_type
 
-	event = new 'SDL::Event'
+	event = new ['SDL'; 'Event']
 	event.'init'()
 
 	.local pmc handler_args
@@ -91,7 +91,7 @@
 	.local pmc prev_rect
 	.local pmc rect
 	.local pmc rect_array
-	rect_array = new 'Array'
+	rect_array = new 'ResizablePMCArray'
 	set rect_array, 2
 
 	(prev_rect, rect) = sprite.'draw_undraw'( screen )

Modified: branches/ops_pct/examples/sdl/raw_pixels.pir
==============================================================================
--- branches/ops_pct/examples/sdl/raw_pixels.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/raw_pixels.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -26,7 +26,7 @@
 	.local pmc app
 	.local int app_type
 
-	app = new 'SDL::App'
+	app = new ['SDL'; 'App']
 	app.'init'( 'height' => 480, 'width' => 640, 'bpp' => 0, 'flags' => 1 )
 
 	# fetch the SDL::Surface representing the main window
@@ -37,17 +37,17 @@
 	# create an SDL::Rect representing the entire main screen
 	.local pmc rect
 	.local int rect_type
-	rect = new 'SDL::Rect'
+	rect = new ['SDL'; 'Rect']
 	rect.'init'( 'height' => 480, 'width' => 640, 'x' => 0, 'y' => 0 )
 
 	# create a white color to paint the background; make new pixels show up
 	.local pmc white
-	white = new 'SDL::Color'
+	white = new ['SDL'; 'Color']
 	white.'init'( 'r' => 255, 'g' => 255, 'b' => 255 )
 
 	# create a blue color to paint the new pixels
 	.local pmc blue
-	blue = new 'SDL::Color'
+	blue = new ['SDL'; 'Color']
 	blue.'init'( 'r' => 0, 'g' => 0, 'b' => 255 )
 
 	# draw the background

Modified: branches/ops_pct/examples/sdl/tetris/app.pir
==============================================================================
--- branches/ops_pct/examples/sdl/tetris/app.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/tetris/app.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -92,7 +92,7 @@
     $P0["flags"]  =   1
 
     # create the SDL object
-    $P0 = new "SDL::App", $P0
+    $P0 = new ['SDL'; 'App'], $P0
 
     # store the SDL object
     setattribute self, 'SDL', $P0
@@ -177,7 +177,7 @@
 
     getattribute eh, self, 'EventHandler'
 
-    loop = new "SDL::Event"
+    loop = new ['SDL'; 'Event']
 
     self."enableTimer"()
     loop."process_events"( 0.1, eh, self )
@@ -329,7 +329,7 @@
     hash["r"] = r
     hash["g"] = g
     hash["b"] = b
-    color = new "SDL::Color", hash
+    color = new ['SDL'; 'Color'], hash
 
     push palette, color
     inc i
@@ -837,7 +837,7 @@
     rect["height"] = 480
     rect["x"] = 0
     rect["y"] = 0
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
     color = self."color"( 3 )
 
     screen."fill_rect"( temp, color )
@@ -856,7 +856,7 @@
     rect["height"] = 480
     rect["x"] = 0
     rect["y"] = 0
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
     screen."update_rect"( temp )
 
     self."enableTimer"()

Modified: branches/ops_pct/examples/sdl/tetris/block.pir
==============================================================================
--- branches/ops_pct/examples/sdl/tetris/block.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/tetris/block.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -439,7 +439,7 @@
     rect["y"] = yp
     rect["width"] = i
     rect["height"] = i
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
 
     surface."fill_rect"( temp, color )
     sub i, 2
@@ -450,7 +450,7 @@
     rect["y"] = yp
     rect["width"] = i
     rect["height"] = i
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
 
     # lookup the color value
     $P0 = app."color"( 0 )
@@ -478,7 +478,7 @@
     rect["y"] = yp
     rect["width"] = extent
     rect["height"] = extent
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
     inc extent
     surface."fill_rect"( temp, color )
 SKIP:

Modified: branches/ops_pct/examples/sdl/tetris/board.pir
==============================================================================
--- branches/ops_pct/examples/sdl/tetris/board.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/tetris/board.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -648,7 +648,7 @@
     rect["y"] = ypos
     rect["width"] = xp
     rect["height"] = yp
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
     color = palette[15]
     surface."fill_rect"( temp, color )
 NO_FIELDBACKGROUND:
@@ -682,7 +682,7 @@
     rect["y"] = yp
     rect["width"] = $I0
     rect["height"] = $I0
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
 
     $I0 = self[i]
     $I1 = cache[i]
@@ -734,7 +734,7 @@
     rect["y"] = yp
     rect["width"] = w
     rect["height"] = h
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
     color = palette[15]
     surface."fill_rect"( temp, color )
     inc xp
@@ -745,7 +745,7 @@
     rect["y"] = yp
     rect["width"] = w
     rect["height"] = h
-    temp = new "SDL::Rect", rect
+    temp = new ['SDL'; 'Rect'], rect
     color = palette[0]
     surface."fill_rect"( temp, color )
     getprop temp, "nextblock", self

Modified: branches/ops_pct/examples/sdl/tetris/eventhandler.pir
==============================================================================
--- branches/ops_pct/examples/sdl/tetris/eventhandler.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/examples/sdl/tetris/eventhandler.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -13,7 +13,7 @@
     unless null $P0 goto END
     load_bytecode "library/SDL/EventHandler.pir"
 
-    get_class $P0, "SDL::EventHandler"
+    get_class $P0, ['SDL'; 'EventHandler']
     subclass $P0, $P0, "Tetris::EventHandler"
     $P1 = new 'String'
     $P1 = "BUILD"
@@ -41,7 +41,7 @@
 
     app = self."app"()
     app."setTimer"( 0 )
-    $P0 = get_hll_global [ "SDL::Event" ], "disptach_event"
+    $P0 = get_hll_global ['SDL'; 'Event'], "disptach_event"
     ret = $P0()
     app."setTimer"( 1 )
     .return (ret)

Modified: branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs
==============================================================================
--- branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/ext/Parrot-Embed/lib/Parrot/Embed.xs	Sun Mar  7 19:33:20 2010	(r44743)
@@ -223,7 +223,7 @@
     pmc_actual = pmc->pmc;
     interp     = get_interp( pmc->interp );
     arg_string = Parrot_str_new_constant( interp, argument );
-    out_pmc    = Parrot_call_sub( interp, pmc_actual, signature, arg_string );
+    Parrot_ext_call( interp, pmc_actual, signature, arg_string, &out_pmc );
     RETVAL     = make_pmc( aTHX_ pmc->interp, out_pmc );
 OUTPUT:
     RETVAL

Modified: branches/ops_pct/ext/Parrot-Embed/t/pipp.t
==============================================================================
--- branches/ops_pct/ext/Parrot-Embed/t/pipp.t	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/ext/Parrot-Embed/t/pipp.t	Sun Mar  7 19:33:20 2010	(r44743)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2008-2009, Parrot Foundation.
+# Copyright (C) 2008-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -33,8 +33,8 @@
     isa_ok( $pipp_x, 'Parrot::PMC' );
 }
 
-# TODO: get hll id of Pipp
-# TODO: set hll namespace root to 'pipp'
+# todo: get hll id of Pipp
+# todo: set hll namespace root to 'pipp'
 # find sub 'eval' and hll namespace 'pipp'
 my $pipp_eval = $interp->find_global( 'pipp', 'eval' );
 # isa_ok( $pipp_eval, 'Parrot::PMC', todo => '$pipp_eval is not found'  );
@@ -73,3 +73,11 @@
     ok( $pmc, 'invoke() should return a PMC, given that signature' );
     is( $pmc->get_string(), 42, 'value returned in the PMC' );
 }
+
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Modified: branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir
==============================================================================
--- branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/ext/nqp-rx/src/stage0/HLL-s0.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -854,7 +854,7 @@
 ### .include 'gen/hllgrammar-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1261064003.48945")
+.sub "_block11"  :anon :subid("10_1267204683.33533")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Grammar"], "_block13" 
     capture_lex $P14
@@ -868,9 +868,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post94") :outer("10_1261064003.48945")
+.sub "" :load :init :subid("post94") :outer("10_1267204683.33533")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1261064003.48945" 
+    .const 'Sub' $P12 = "10_1267204683.33533" 
     .local pmc block
     set block, $P12
     $P297 = get_root_global ["parrot"], "P6metaclass"
@@ -879,78 +879,78 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block13"  :subid("11_1261064003.48945") :outer("10_1261064003.48945")
+.sub "_block13"  :subid("11_1267204683.33533") :outer("10_1267204683.33533")
 .annotate "line", 5
-    .const 'Sub' $P286 = "92_1261064003.48945" 
+    .const 'Sub' $P286 = "92_1267204683.33533" 
     capture_lex $P286
-    .const 'Sub' $P279 = "90_1261064003.48945" 
+    .const 'Sub' $P279 = "90_1267204683.33533" 
     capture_lex $P279
-    .const 'Sub' $P266 = "87_1261064003.48945" 
+    .const 'Sub' $P266 = "87_1267204683.33533" 
     capture_lex $P266
-    .const 'Sub' $P261 = "85_1261064003.48945" 
+    .const 'Sub' $P261 = "85_1267204683.33533" 
     capture_lex $P261
-    .const 'Sub' $P255 = "83_1261064003.48945" 
+    .const 'Sub' $P255 = "83_1267204683.33533" 
     capture_lex $P255
-    .const 'Sub' $P249 = "81_1261064003.48945" 
+    .const 'Sub' $P249 = "81_1267204683.33533" 
     capture_lex $P249
-    .const 'Sub' $P244 = "79_1261064003.48945" 
+    .const 'Sub' $P244 = "79_1267204683.33533" 
     capture_lex $P244
-    .const 'Sub' $P239 = "77_1261064003.48945" 
+    .const 'Sub' $P239 = "77_1267204683.33533" 
     capture_lex $P239
-    .const 'Sub' $P234 = "75_1261064003.48945" 
+    .const 'Sub' $P234 = "75_1267204683.33533" 
     capture_lex $P234
-    .const 'Sub' $P229 = "73_1261064003.48945" 
+    .const 'Sub' $P229 = "73_1267204683.33533" 
     capture_lex $P229
-    .const 'Sub' $P224 = "71_1261064003.48945" 
+    .const 'Sub' $P224 = "71_1267204683.33533" 
     capture_lex $P224
-    .const 'Sub' $P219 = "69_1261064003.48945" 
+    .const 'Sub' $P219 = "69_1267204683.33533" 
     capture_lex $P219
-    .const 'Sub' $P208 = "65_1261064003.48945" 
+    .const 'Sub' $P208 = "65_1267204683.33533" 
     capture_lex $P208
-    .const 'Sub' $P195 = "63_1261064003.48945" 
+    .const 'Sub' $P195 = "63_1267204683.33533" 
     capture_lex $P195
-    .const 'Sub' $P183 = "61_1261064003.48945" 
+    .const 'Sub' $P183 = "61_1267204683.33533" 
     capture_lex $P183
-    .const 'Sub' $P176 = "59_1261064003.48945" 
+    .const 'Sub' $P176 = "59_1267204683.33533" 
     capture_lex $P176
-    .const 'Sub' $P167 = "57_1261064003.48945" 
+    .const 'Sub' $P167 = "57_1267204683.33533" 
     capture_lex $P167
-    .const 'Sub' $P160 = "55_1261064003.48945" 
+    .const 'Sub' $P160 = "55_1267204683.33533" 
     capture_lex $P160
-    .const 'Sub' $P151 = "53_1261064003.48945" 
+    .const 'Sub' $P151 = "53_1267204683.33533" 
     capture_lex $P151
-    .const 'Sub' $P144 = "51_1261064003.48945" 
+    .const 'Sub' $P144 = "51_1267204683.33533" 
     capture_lex $P144
-    .const 'Sub' $P135 = "49_1261064003.48945" 
+    .const 'Sub' $P135 = "49_1267204683.33533" 
     capture_lex $P135
-    .const 'Sub' $P128 = "47_1261064003.48945" 
+    .const 'Sub' $P128 = "47_1267204683.33533" 
     capture_lex $P128
-    .const 'Sub' $P121 = "45_1261064003.48945" 
+    .const 'Sub' $P121 = "45_1267204683.33533" 
     capture_lex $P121
-    .const 'Sub' $P111 = "43_1261064003.48945" 
+    .const 'Sub' $P111 = "43_1267204683.33533" 
     capture_lex $P111
-    .const 'Sub' $P103 = "41_1261064003.48945" 
+    .const 'Sub' $P103 = "41_1267204683.33533" 
     capture_lex $P103
-    .const 'Sub' $P93 = "40_1261064003.48945" 
+    .const 'Sub' $P93 = "40_1267204683.33533" 
     capture_lex $P93
-    .const 'Sub' $P87 = "38_1261064003.48945" 
+    .const 'Sub' $P87 = "38_1267204683.33533" 
     capture_lex $P87
-    .const 'Sub' $P82 = "36_1261064003.48945" 
+    .const 'Sub' $P82 = "36_1267204683.33533" 
     capture_lex $P82
-    .const 'Sub' $P74 = "34_1261064003.48945" 
+    .const 'Sub' $P74 = "34_1267204683.33533" 
     capture_lex $P74
-    .const 'Sub' $P68 = "32_1261064003.48945" 
+    .const 'Sub' $P68 = "32_1267204683.33533" 
     capture_lex $P68
-    .const 'Sub' $P62 = "30_1261064003.48945" 
+    .const 'Sub' $P62 = "30_1267204683.33533" 
     capture_lex $P62
-    .const 'Sub' $P56 = "28_1261064003.48945" 
+    .const 'Sub' $P56 = "28_1267204683.33533" 
     capture_lex $P56
-    .const 'Sub' $P23 = "14_1261064003.48945" 
+    .const 'Sub' $P23 = "14_1267204683.33533" 
     capture_lex $P23
-    .const 'Sub' $P15 = "12_1261064003.48945" 
+    .const 'Sub' $P15 = "12_1267204683.33533" 
     capture_lex $P15
 .annotate "line", 33
-    .const 'Sub' $P286 = "92_1261064003.48945" 
+    .const 'Sub' $P286 = "92_1267204683.33533" 
     capture_lex $P286
 .annotate "line", 5
     .return ($P286)
@@ -958,7 +958,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "ws"  :subid("12_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "ws"  :subid("12_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx16_tgt
     .local int rx16_pos
@@ -1042,7 +1042,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__ws"  :subid("13_1261064003.48945") :method
+.sub "!PREFIX__ws"  :subid("13_1267204683.33533") :method
 .annotate "line", 5
     new $P18, "ResizablePMCArray"
     push $P18, ""
@@ -1051,7 +1051,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "termish"  :subid("14_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "termish"  :subid("14_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx24_tgt
     .local int rx24_pos
@@ -1143,7 +1143,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__termish"  :subid("15_1261064003.48945") :method
+.sub "!PREFIX__termish"  :subid("15_1267204683.33533") :method
 .annotate "line", 5
     new $P26, "ResizablePMCArray"
     push $P26, ""
@@ -1152,7 +1152,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term"  :subid("16_1261064003.48945") :method
+.sub "term"  :subid("16_1267204683.33533") :method
 .annotate "line", 13
     $P33 = self."!protoregex"("term")
     .return ($P33)
@@ -1160,7 +1160,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term"  :subid("17_1261064003.48945") :method
+.sub "!PREFIX__term"  :subid("17_1267204683.33533") :method
 .annotate "line", 13
     $P35 = self."!PREFIX__!protoregex"("term")
     .return ($P35)
@@ -1168,7 +1168,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infix"  :subid("18_1261064003.48945") :method
+.sub "infix"  :subid("18_1267204683.33533") :method
 .annotate "line", 14
     $P37 = self."!protoregex"("infix")
     .return ($P37)
@@ -1176,7 +1176,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infix"  :subid("19_1261064003.48945") :method
+.sub "!PREFIX__infix"  :subid("19_1267204683.33533") :method
 .annotate "line", 14
     $P39 = self."!PREFIX__!protoregex"("infix")
     .return ($P39)
@@ -1184,7 +1184,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefix"  :subid("20_1261064003.48945") :method
+.sub "prefix"  :subid("20_1267204683.33533") :method
 .annotate "line", 15
     $P41 = self."!protoregex"("prefix")
     .return ($P41)
@@ -1192,7 +1192,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefix"  :subid("21_1261064003.48945") :method
+.sub "!PREFIX__prefix"  :subid("21_1267204683.33533") :method
 .annotate "line", 15
     $P43 = self."!PREFIX__!protoregex"("prefix")
     .return ($P43)
@@ -1200,7 +1200,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfix"  :subid("22_1261064003.48945") :method
+.sub "postfix"  :subid("22_1267204683.33533") :method
 .annotate "line", 16
     $P45 = self."!protoregex"("postfix")
     .return ($P45)
@@ -1208,7 +1208,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfix"  :subid("23_1261064003.48945") :method
+.sub "!PREFIX__postfix"  :subid("23_1267204683.33533") :method
 .annotate "line", 16
     $P47 = self."!PREFIX__!protoregex"("postfix")
     .return ($P47)
@@ -1216,7 +1216,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "circumfix"  :subid("24_1261064003.48945") :method
+.sub "circumfix"  :subid("24_1267204683.33533") :method
 .annotate "line", 17
     $P49 = self."!protoregex"("circumfix")
     .return ($P49)
@@ -1224,7 +1224,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__circumfix"  :subid("25_1261064003.48945") :method
+.sub "!PREFIX__circumfix"  :subid("25_1267204683.33533") :method
 .annotate "line", 17
     $P51 = self."!PREFIX__!protoregex"("circumfix")
     .return ($P51)
@@ -1232,7 +1232,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postcircumfix"  :subid("26_1261064003.48945") :method
+.sub "postcircumfix"  :subid("26_1267204683.33533") :method
 .annotate "line", 18
     $P53 = self."!protoregex"("postcircumfix")
     .return ($P53)
@@ -1240,7 +1240,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postcircumfix"  :subid("27_1261064003.48945") :method
+.sub "!PREFIX__postcircumfix"  :subid("27_1267204683.33533") :method
 .annotate "line", 18
     $P55 = self."!PREFIX__!protoregex"("postcircumfix")
     .return ($P55)
@@ -1248,7 +1248,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "term:sym<circumfix>"  :subid("28_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "term:sym<circumfix>"  :subid("28_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx57_tgt
     .local int rx57_pos
@@ -1306,7 +1306,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1261064003.48945") :method
+.sub "!PREFIX__term:sym<circumfix>"  :subid("29_1267204683.33533") :method
 .annotate "line", 5
     $P59 = self."!PREFIX__!subrule"("circumfix", "")
     new $P60, "ResizablePMCArray"
@@ -1316,7 +1316,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "infixish"  :subid("30_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "infixish"  :subid("30_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx63_tgt
     .local int rx63_pos
@@ -1374,7 +1374,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__infixish"  :subid("31_1261064003.48945") :method
+.sub "!PREFIX__infixish"  :subid("31_1267204683.33533") :method
 .annotate "line", 5
     $P65 = self."!PREFIX__!subrule"("OPER=infix", "")
     new $P66, "ResizablePMCArray"
@@ -1384,7 +1384,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "prefixish"  :subid("32_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "prefixish"  :subid("32_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx69_tgt
     .local int rx69_pos
@@ -1447,7 +1447,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__prefixish"  :subid("33_1261064003.48945") :method
+.sub "!PREFIX__prefixish"  :subid("33_1267204683.33533") :method
 .annotate "line", 5
     $P71 = self."!PREFIX__!subrule"("OPER=prefix", "")
     new $P72, "ResizablePMCArray"
@@ -1457,7 +1457,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "postfixish"  :subid("34_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "postfixish"  :subid("34_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx75_tgt
     .local int rx75_pos
@@ -1531,7 +1531,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__postfixish"  :subid("35_1261064003.48945") :method
+.sub "!PREFIX__postfixish"  :subid("35_1267204683.33533") :method
 .annotate "line", 5
     $P77 = self."!PREFIX__!subrule"("OPER=postcircumfix", "")
     $P78 = self."!PREFIX__!subrule"("OPER=postfix", "")
@@ -1543,7 +1543,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm"  :subid("36_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "nullterm"  :subid("36_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx83_tgt
     .local int rx83_pos
@@ -1594,7 +1594,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm"  :subid("37_1261064003.48945") :method
+.sub "!PREFIX__nullterm"  :subid("37_1267204683.33533") :method
 .annotate "line", 5
     new $P85, "ResizablePMCArray"
     push $P85, ""
@@ -1603,7 +1603,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nullterm_alt"  :subid("38_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "nullterm_alt"  :subid("38_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 5
     .local string rx88_tgt
     .local int rx88_pos
@@ -1661,7 +1661,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__nullterm_alt"  :subid("39_1261064003.48945") :method
+.sub "!PREFIX__nullterm_alt"  :subid("39_1267204683.33533") :method
 .annotate "line", 5
     $P90 = self."!PREFIX__!subrule"("term", "")
     new $P91, "ResizablePMCArray"
@@ -1671,7 +1671,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "nulltermish"  :subid("40_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "nulltermish"  :subid("40_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     new $P95, 'ExceptionHandler'
     set_addr $P95, control_94
@@ -1698,7 +1698,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_delimited"  :subid("41_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_delimited"  :subid("41_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx104_tgt
     .local int rx104_pos
@@ -1780,7 +1780,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_delimited"  :subid("42_1261064003.48945") :method
+.sub "!PREFIX__quote_delimited"  :subid("42_1267204683.33533") :method
 .annotate "line", 33
     $P106 = self."!PREFIX__!subrule"("starter", "")
     new $P107, "ResizablePMCArray"
@@ -1790,7 +1790,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_atom"  :subid("43_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_atom"  :subid("43_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx112_tgt
     .local int rx112_pos
@@ -1881,7 +1881,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_atom"  :subid("44_1261064003.48945") :method
+.sub "!PREFIX__quote_atom"  :subid("44_1267204683.33533") :method
 .annotate "line", 33
     new $P114, "ResizablePMCArray"
     push $P114, ""
@@ -1890,7 +1890,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "decint"  :subid("45_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "decint"  :subid("45_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx122_tgt
     .local int rx122_pos
@@ -1962,7 +1962,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__decint"  :subid("46_1261064003.48945") :method
+.sub "!PREFIX__decint"  :subid("46_1267204683.33533") :method
 .annotate "line", 33
     new $P124, "ResizablePMCArray"
     push $P124, ""
@@ -1971,7 +1971,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("47_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "hexints"  :subid("47_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx129_tgt
     .local int rx129_pos
@@ -2055,7 +2055,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("48_1261064003.48945") :method
+.sub "!PREFIX__hexints"  :subid("48_1267204683.33533") :method
 .annotate "line", 33
     new $P131, "ResizablePMCArray"
     push $P131, ""
@@ -2064,7 +2064,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexint"  :subid("49_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "hexint"  :subid("49_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx136_tgt
     .local int rx136_pos
@@ -2145,7 +2145,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexint"  :subid("50_1261064003.48945") :method
+.sub "!PREFIX__hexint"  :subid("50_1267204683.33533") :method
 .annotate "line", 33
     new $P138, "ResizablePMCArray"
     push $P138, ""
@@ -2154,7 +2154,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "hexints"  :subid("51_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "hexints"  :subid("51_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx145_tgt
     .local int rx145_pos
@@ -2238,7 +2238,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__hexints"  :subid("52_1261064003.48945") :method
+.sub "!PREFIX__hexints"  :subid("52_1267204683.33533") :method
 .annotate "line", 33
     new $P147, "ResizablePMCArray"
     push $P147, ""
@@ -2247,7 +2247,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octint"  :subid("53_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "octint"  :subid("53_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx152_tgt
     .local int rx152_pos
@@ -2328,7 +2328,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octint"  :subid("54_1261064003.48945") :method
+.sub "!PREFIX__octint"  :subid("54_1267204683.33533") :method
 .annotate "line", 33
     new $P154, "ResizablePMCArray"
     push $P154, ""
@@ -2337,7 +2337,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "octints"  :subid("55_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "octints"  :subid("55_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx161_tgt
     .local int rx161_pos
@@ -2421,7 +2421,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__octints"  :subid("56_1261064003.48945") :method
+.sub "!PREFIX__octints"  :subid("56_1267204683.33533") :method
 .annotate "line", 33
     new $P163, "ResizablePMCArray"
     push $P163, ""
@@ -2430,7 +2430,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binint"  :subid("57_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "binint"  :subid("57_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx168_tgt
     .local int rx168_pos
@@ -2511,7 +2511,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binint"  :subid("58_1261064003.48945") :method
+.sub "!PREFIX__binint"  :subid("58_1267204683.33533") :method
 .annotate "line", 33
     new $P170, "ResizablePMCArray"
     push $P170, ""
@@ -2520,7 +2520,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "binints"  :subid("59_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "binints"  :subid("59_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx177_tgt
     .local int rx177_pos
@@ -2604,7 +2604,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__binints"  :subid("60_1261064003.48945") :method
+.sub "!PREFIX__binints"  :subid("60_1267204683.33533") :method
 .annotate "line", 33
     new $P179, "ResizablePMCArray"
     push $P179, ""
@@ -2613,7 +2613,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "integer"  :subid("61_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "integer"  :subid("61_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx184_tgt
     .local int rx184_pos
@@ -2761,7 +2761,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__integer"  :subid("62_1261064003.48945") :method
+.sub "!PREFIX__integer"  :subid("62_1267204683.33533") :method
 .annotate "line", 33
     $P186 = self."!PREFIX__!subrule"("VALUE=decint", "")
     $P187 = self."!PREFIX__!subrule"("VALUE=decint", "0d")
@@ -2779,7 +2779,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "dec_number"  :subid("63_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "dec_number"  :subid("63_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx196_tgt
     .local int rx196_pos
@@ -2958,7 +2958,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__dec_number"  :subid("64_1261064003.48945") :method
+.sub "!PREFIX__dec_number"  :subid("64_1267204683.33533") :method
 .annotate "line", 33
     new $P198, "ResizablePMCArray"
     push $P198, ""
@@ -2969,7 +2969,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "escale"  :subid("65_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "escale"  :subid("65_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx209_tgt
     .local int rx209_pos
@@ -3046,7 +3046,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__escale"  :subid("66_1261064003.48945") :method
+.sub "!PREFIX__escale"  :subid("66_1267204683.33533") :method
 .annotate "line", 33
     new $P211, "ResizablePMCArray"
     push $P211, "e"
@@ -3056,7 +3056,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape"  :subid("67_1261064003.48945") :method
+.sub "quote_escape"  :subid("67_1267204683.33533") :method
 .annotate "line", 79
     $P216 = self."!protoregex"("quote_escape")
     .return ($P216)
@@ -3064,7 +3064,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape"  :subid("68_1261064003.48945") :method
+.sub "!PREFIX__quote_escape"  :subid("68_1267204683.33533") :method
 .annotate "line", 79
     $P218 = self."!PREFIX__!protoregex"("quote_escape")
     .return ($P218)
@@ -3072,7 +3072,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<backslash>"  :subid("69_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<backslash>"  :subid("69_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx220_tgt
     .local int rx220_pos
@@ -3134,7 +3134,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<backslash>"  :subid("70_1267204683.33533") :method
 .annotate "line", 33
     new $P222, "ResizablePMCArray"
     push $P222, "\\\\"
@@ -3143,7 +3143,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<stopper>"  :subid("71_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<stopper>"  :subid("71_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx225_tgt
     .local int rx225_pos
@@ -3212,7 +3212,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<stopper>"  :subid("72_1267204683.33533") :method
 .annotate "line", 33
     new $P227, "ResizablePMCArray"
     push $P227, "\\"
@@ -3221,7 +3221,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<bs>"  :subid("73_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<bs>"  :subid("73_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx230_tgt
     .local int rx230_pos
@@ -3283,7 +3283,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<bs>"  :subid("74_1267204683.33533") :method
 .annotate "line", 33
     new $P232, "ResizablePMCArray"
     push $P232, "\\b"
@@ -3292,7 +3292,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<nl>"  :subid("75_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<nl>"  :subid("75_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx235_tgt
     .local int rx235_pos
@@ -3354,7 +3354,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<nl>"  :subid("76_1267204683.33533") :method
 .annotate "line", 33
     new $P237, "ResizablePMCArray"
     push $P237, "\\n"
@@ -3363,7 +3363,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<cr>"  :subid("77_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<cr>"  :subid("77_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx240_tgt
     .local int rx240_pos
@@ -3425,7 +3425,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<cr>"  :subid("78_1267204683.33533") :method
 .annotate "line", 33
     new $P242, "ResizablePMCArray"
     push $P242, "\\r"
@@ -3434,7 +3434,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<tab>"  :subid("79_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<tab>"  :subid("79_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx245_tgt
     .local int rx245_pos
@@ -3496,7 +3496,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<tab>"  :subid("80_1267204683.33533") :method
 .annotate "line", 33
     new $P247, "ResizablePMCArray"
     push $P247, "\\t"
@@ -3505,7 +3505,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<hex>"  :subid("81_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<hex>"  :subid("81_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx250_tgt
     .local int rx250_pos
@@ -3603,7 +3603,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<hex>"  :subid("82_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<hex>"  :subid("82_1267204683.33533") :method
 .annotate "line", 33
     new $P252, "ResizablePMCArray"
     push $P252, unicode:"\\x"
@@ -3612,7 +3612,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<oct>"  :subid("83_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<oct>"  :subid("83_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx256_tgt
     .local int rx256_pos
@@ -3710,7 +3710,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<oct>"  :subid("84_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<oct>"  :subid("84_1267204683.33533") :method
 .annotate "line", 33
     new $P258, "ResizablePMCArray"
     push $P258, "\\o"
@@ -3719,7 +3719,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "quote_escape:sym<chr>"  :subid("85_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "quote_escape:sym<chr>"  :subid("85_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx262_tgt
     .local int rx262_pos
@@ -3788,7 +3788,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<chr>"  :subid("86_1261064003.48945") :method
+.sub "!PREFIX__quote_escape:sym<chr>"  :subid("86_1267204683.33533") :method
 .annotate "line", 33
     new $P264, "ResizablePMCArray"
     push $P264, "\\c"
@@ -3797,9 +3797,9 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charname"  :subid("87_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "charname"  :subid("87_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
-    .const 'Sub' $P276 = "89_1261064003.48945" 
+    .const 'Sub' $P276 = "89_1267204683.33533" 
     capture_lex $P276
     .local string rx267_tgt
     .local int rx267_pos
@@ -3877,7 +3877,7 @@
 .annotate "line", 100
   # rx subrule "before" subtype=zerowidth negate=
     rx267_cur."!cursor_pos"(rx267_pos)
-    .const 'Sub' $P276 = "89_1261064003.48945" 
+    .const 'Sub' $P276 = "89_1267204683.33533" 
     capture_lex $P276
     $P10 = rx267_cur."before"($P276)
     unless $P10, rx267_fail
@@ -3902,7 +3902,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charname"  :subid("88_1261064003.48945") :method
+.sub "!PREFIX__charname"  :subid("88_1267204683.33533") :method
 .annotate "line", 33
     $P269 = self."!PREFIX__!subrule"("integer", "")
     new $P270, "ResizablePMCArray"
@@ -3964,7 +3964,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "_block275"  :anon :subid("89_1261064003.48945") :method :outer("87_1261064003.48945")
+.sub "_block275"  :anon :subid("89_1267204683.33533") :method :outer("87_1267204683.33533")
 .annotate "line", 100
     .local string rx277_tgt
     .local int rx277_pos
@@ -4024,7 +4024,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charnames"  :subid("90_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "charnames"  :subid("90_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx280_tgt
     .local int rx280_pos
@@ -4108,7 +4108,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charnames"  :subid("91_1261064003.48945") :method
+.sub "!PREFIX__charnames"  :subid("91_1267204683.33533") :method
 .annotate "line", 33
     new $P282, "ResizablePMCArray"
     push $P282, ""
@@ -4117,7 +4117,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "charspec"  :subid("92_1261064003.48945") :method :outer("11_1261064003.48945")
+.sub "charspec"  :subid("92_1267204683.33533") :method :outer("11_1267204683.33533")
 .annotate "line", 33
     .local string rx287_tgt
     .local int rx287_pos
@@ -4247,7 +4247,7 @@
 
 
 .namespace ["HLL";"Grammar"]
-.sub "!PREFIX__charspec"  :subid("93_1261064003.48945") :method
+.sub "!PREFIX__charspec"  :subid("93_1267204683.33533") :method
 .annotate "line", 33
     $P289 = self."!PREFIX__!subrule"("", "")
     $P290 = self."!PREFIX__!subrule"("charnames", "[")
@@ -4289,91 +4289,99 @@
 ### .include 'gen/hllgrammar-actions.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1261064005.70696")
+.sub "_block11"  :anon :subid("10_1267204685.44293")
 .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
-    $P451 = $P14()
+    $P538 = $P14()
 .annotate "line", 1
-    .return ($P451)
+    .return ($P538)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post41") :outer("10_1261064005.70696")
+.sub "" :load :init :subid("post46") :outer("10_1267204685.44293")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1261064005.70696" 
+    .const 'Sub' $P12 = "10_1267204685.44293" 
     .local pmc block
     set block, $P12
-    $P452 = get_root_global ["parrot"], "P6metaclass"
-    $P452."new_class"("HLL::Actions")
+    $P539 = get_root_global ["parrot"], "P6metaclass"
+    $P539."new_class"("HLL::Actions")
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block13"  :subid("11_1261064005.70696") :outer("10_1261064005.70696")
+.sub "_block13"  :subid("11_1267204685.44293") :outer("10_1267204685.44293")
 .annotate "line", 3
-    .const 'Sub' $P434 = "40_1261064005.70696" 
-    capture_lex $P434
-    .const 'Sub' $P417 = "39_1261064005.70696" 
-    capture_lex $P417
-    .const 'Sub' $P410 = "38_1261064005.70696" 
-    capture_lex $P410
-    .const 'Sub' $P403 = "37_1261064005.70696" 
-    capture_lex $P403
-    .const 'Sub' $P396 = "36_1261064005.70696" 
-    capture_lex $P396
-    .const 'Sub' $P389 = "35_1261064005.70696" 
-    capture_lex $P389
-    .const 'Sub' $P379 = "34_1261064005.70696" 
-    capture_lex $P379
-    .const 'Sub' $P372 = "33_1261064005.70696" 
-    capture_lex $P372
-    .const 'Sub' $P356 = "32_1261064005.70696" 
-    capture_lex $P356
-    .const 'Sub' $P281 = "30_1261064005.70696" 
-    capture_lex $P281
-    .const 'Sub' $P222 = "27_1261064005.70696" 
+    .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" 
+    capture_lex $P421
+    .const 'Sub' $P414 = "38_1267204685.44293" 
+    capture_lex $P414
+    .const 'Sub' $P407 = "37_1267204685.44293" 
+    capture_lex $P407
+    .const 'Sub' $P400 = "36_1267204685.44293" 
+    capture_lex $P400
+    .const 'Sub' $P393 = "35_1267204685.44293" 
+    capture_lex $P393
+    .const 'Sub' $P383 = "34_1267204685.44293" 
+    capture_lex $P383
+    .const 'Sub' $P376 = "33_1267204685.44293" 
+    capture_lex $P376
+    .const 'Sub' $P360 = "32_1267204685.44293" 
+    capture_lex $P360
+    .const 'Sub' $P285 = "30_1267204685.44293" 
+    capture_lex $P285
+    .const 'Sub' $P222 = "27_1267204685.44293" 
     capture_lex $P222
-    .const 'Sub' $P213 = "26_1261064005.70696" 
+    .const 'Sub' $P213 = "26_1267204685.44293" 
     capture_lex $P213
-    .const 'Sub' $P204 = "25_1261064005.70696" 
+    .const 'Sub' $P204 = "25_1267204685.44293" 
     capture_lex $P204
-    .const 'Sub' $P195 = "24_1261064005.70696" 
+    .const 'Sub' $P195 = "24_1267204685.44293" 
     capture_lex $P195
-    .const 'Sub' $P186 = "23_1261064005.70696" 
+    .const 'Sub' $P186 = "23_1267204685.44293" 
     capture_lex $P186
-    .const 'Sub' $P177 = "22_1261064005.70696" 
+    .const 'Sub' $P177 = "22_1267204685.44293" 
     capture_lex $P177
-    .const 'Sub' $P167 = "21_1261064005.70696" 
+    .const 'Sub' $P167 = "21_1267204685.44293" 
     capture_lex $P167
-    .const 'Sub' $P157 = "20_1261064005.70696" 
+    .const 'Sub' $P157 = "20_1267204685.44293" 
     capture_lex $P157
-    .const 'Sub' $P149 = "19_1261064005.70696" 
+    .const 'Sub' $P149 = "19_1267204685.44293" 
     capture_lex $P149
-    .const 'Sub' $P139 = "18_1261064005.70696" 
+    .const 'Sub' $P139 = "18_1267204685.44293" 
     capture_lex $P139
-    .const 'Sub' $P129 = "17_1261064005.70696" 
+    .const 'Sub' $P129 = "17_1267204685.44293" 
     capture_lex $P129
-    .const 'Sub' $P28 = "14_1261064005.70696" 
+    .const 'Sub' $P28 = "14_1267204685.44293" 
     capture_lex $P28
-    .const 'Sub' $P22 = "13_1261064005.70696" 
+    .const 'Sub' $P22 = "13_1267204685.44293" 
     capture_lex $P22
-    .const 'Sub' $P15 = "12_1261064005.70696" 
+    .const 'Sub' $P15 = "12_1267204685.44293" 
     capture_lex $P15
-.annotate "line", 163
-    .const 'Sub' $P434 = "40_1261064005.70696" 
-    capture_lex $P434
+.annotate "line", 188
+    .const 'Sub' $P521 = "45_1267204685.44293" 
+    capture_lex $P521
 .annotate "line", 3
-    .return ($P434)
+    .return ($P521)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "string_to_int"  :subid("12_1261064005.70696") :outer("11_1261064005.70696")
+.sub "string_to_int"  :subid("12_1267204685.44293") :outer("11_1267204685.44293")
     .param pmc param_18
     .param pmc param_19
 .annotate "line", 3
@@ -4426,7 +4434,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "ints_to_string"  :subid("13_1261064005.70696") :outer("11_1261064005.70696")
+.sub "ints_to_string"  :subid("13_1267204685.44293") :outer("11_1267204685.44293")
     .param pmc param_25
 .annotate "line", 37
     new $P24, 'ExceptionHandler'
@@ -4467,14 +4475,14 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "EXPR"  :subid("14_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "EXPR"  :subid("14_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_31
     .param pmc param_32 :optional
     .param int has_param_32 :opt_flag
 .annotate "line", 62
-    .const 'Sub' $P111 = "16_1261064005.70696" 
+    .const 'Sub' $P111 = "16_1267204685.44293" 
     capture_lex $P111
-    .const 'Sub' $P78 = "15_1261064005.70696" 
+    .const 'Sub' $P78 = "15_1267204685.44293" 
     capture_lex $P78
     new $P30, 'ExceptionHandler'
     set_addr $P30, control_29
@@ -4482,10 +4490,10 @@
     push_eh $P30
     .lex "self", self
     .lex "$/", param_31
-    if has_param_32, optparam_42
+    if has_param_32, optparam_47
     new $P33, "Undef"
     set param_32, $P33
-  optparam_42:
+  optparam_47:
     .lex "$key", param_32
 .annotate "line", 64
     new $P34, "Undef"
@@ -4507,13 +4515,13 @@
     defined $I43, $P39
     if $I43, default_42
     find_lex $P44, "$/"
-    unless_null $P44, vivify_43
-    new $P44, "Hash"
-  vivify_43:
+    unless_null $P44, vivify_48
+    $P44 = root_new ['parrot';'Hash']
+  vivify_48:
     set $P45, $P44["OPER"]
-    unless_null $P45, vivify_44
+    unless_null $P45, vivify_49
     new $P45, "Undef"
-  vivify_44:
+  vivify_49:
     $P46 = $P45."ast"()
     set $P39, $P46
   default_42:
@@ -4528,57 +4536,57 @@
     store_lex "$past", $P51
 .annotate "line", 67
     find_lex $P53, "$/"
-    unless_null $P53, vivify_45
-    new $P53, "Hash"
-  vivify_45:
+    unless_null $P53, vivify_50
+    $P53 = root_new ['parrot';'Hash']
+  vivify_50:
     set $P54, $P53["OPER"]
-    unless_null $P54, vivify_46
-    new $P54, "Hash"
-  vivify_46:
+    unless_null $P54, vivify_51
+    $P54 = root_new ['parrot';'Hash']
+  vivify_51:
     set $P55, $P54["O"]
-    unless_null $P55, vivify_47
-    new $P55, "Hash"
-  vivify_47:
+    unless_null $P55, vivify_52
+    $P55 = root_new ['parrot';'Hash']
+  vivify_52:
     set $P56, $P55["pasttype"]
-    unless_null $P56, vivify_48
+    unless_null $P56, vivify_53
     new $P56, "Undef"
-  vivify_48:
+  vivify_53:
     if $P56, if_52
 .annotate "line", 68
     find_lex $P64, "$/"
-    unless_null $P64, vivify_49
-    new $P64, "Hash"
-  vivify_49:
+    unless_null $P64, vivify_54
+    $P64 = root_new ['parrot';'Hash']
+  vivify_54:
     set $P65, $P64["OPER"]
-    unless_null $P65, vivify_50
-    new $P65, "Hash"
-  vivify_50:
+    unless_null $P65, vivify_55
+    $P65 = root_new ['parrot';'Hash']
+  vivify_55:
     set $P66, $P65["O"]
-    unless_null $P66, vivify_51
-    new $P66, "Hash"
-  vivify_51:
+    unless_null $P66, vivify_56
+    $P66 = root_new ['parrot';'Hash']
+  vivify_56:
     set $P67, $P66["pirop"]
-    unless_null $P67, vivify_52
+    unless_null $P67, vivify_57
     new $P67, "Undef"
-  vivify_52:
+  vivify_57:
     unless $P67, if_63_end
     find_lex $P68, "$past"
     find_lex $P69, "$/"
-    unless_null $P69, vivify_53
-    new $P69, "Hash"
-  vivify_53:
+    unless_null $P69, vivify_58
+    $P69 = root_new ['parrot';'Hash']
+  vivify_58:
     set $P70, $P69["OPER"]
-    unless_null $P70, vivify_54
-    new $P70, "Hash"
-  vivify_54:
+    unless_null $P70, vivify_59
+    $P70 = root_new ['parrot';'Hash']
+  vivify_59:
     set $P71, $P70["O"]
-    unless_null $P71, vivify_55
-    new $P71, "Hash"
-  vivify_55:
+    unless_null $P71, vivify_60
+    $P71 = root_new ['parrot';'Hash']
+  vivify_60:
     set $P72, $P71["pirop"]
-    unless_null $P72, vivify_56
+    unless_null $P72, vivify_61
     new $P72, "Undef"
-  vivify_56:
+  vivify_61:
     set $S73, $P72
     $P68."pirop"($S73)
   if_63_end:
@@ -4587,21 +4595,21 @@
 .annotate "line", 67
     find_lex $P57, "$past"
     find_lex $P58, "$/"
-    unless_null $P58, vivify_57
-    new $P58, "Hash"
-  vivify_57:
+    unless_null $P58, vivify_62
+    $P58 = root_new ['parrot';'Hash']
+  vivify_62:
     set $P59, $P58["OPER"]
-    unless_null $P59, vivify_58
-    new $P59, "Hash"
-  vivify_58:
+    unless_null $P59, vivify_63
+    $P59 = root_new ['parrot';'Hash']
+  vivify_63:
     set $P60, $P59["O"]
-    unless_null $P60, vivify_59
-    new $P60, "Hash"
-  vivify_59:
+    unless_null $P60, vivify_64
+    $P60 = root_new ['parrot';'Hash']
+  vivify_64:
     set $P61, $P60["pasttype"]
-    unless_null $P61, vivify_60
+    unless_null $P61, vivify_65
     new $P61, "Undef"
-  vivify_60:
+  vivify_65:
     set $S62, $P61
     $P57."pasttype"($S62)
   if_52_end:
@@ -4609,7 +4617,7 @@
     find_lex $P75, "$past"
     $P76 = $P75."name"()
     if $P76, unless_74_end
-    .const 'Sub' $P78 = "15_1261064005.70696" 
+    .const 'Sub' $P78 = "15_1267204685.44293" 
     capture_lex $P78
     $P78()
   unless_74_end:
@@ -4623,7 +4631,7 @@
     find_lex $P106, "$/"
     $P107 = $P106."list"()
     defined $I108, $P107
-    unless $I108, for_undef_64
+    unless $I108, for_undef_69
     iter $P105, $P107
     new $P123, 'ExceptionHandler'
     set_addr $P123, loop122_handler
@@ -4633,7 +4641,7 @@
     unless $P105, loop122_done
     shift $P109, $P105
   loop122_redo:
-    .const 'Sub' $P111 = "16_1261064005.70696" 
+    .const 'Sub' $P111 = "16_1267204685.44293" 
     capture_lex $P111
     $P111($P109)
   loop122_next:
@@ -4646,20 +4654,20 @@
     eq $P124, 67, loop122_redo
   loop122_done:
     pop_eh 
-  for_undef_64:
+  for_undef_69:
 .annotate "line", 81
     goto if_97_end
   if_97:
 .annotate "line", 80
     find_lex $P101, "$past"
     find_lex $P102, "$/"
-    unless_null $P102, vivify_65
-    new $P102, "ResizablePMCArray"
-  vivify_65:
+    unless_null $P102, vivify_70
+    $P102 = root_new ['parrot';'ResizablePMCArray']
+  vivify_70:
     set $P103, $P102[0]
-    unless_null $P103, vivify_66
+    unless_null $P103, vivify_71
     new $P103, "Undef"
-  vivify_66:
+  vivify_71:
     $P104 = $P103."ast"()
     $P101."unshift"($P104)
   if_97_end:
@@ -4678,7 +4686,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block77"  :anon :subid("15_1261064005.70696") :outer("14_1261064005.70696")
+.sub "_block77"  :anon :subid("15_1267204685.44293") :outer("14_1267204685.44293")
 .annotate "line", 71
     new $P79, "Undef"
     .lex "$name", $P79
@@ -4701,17 +4709,17 @@
     concat $P86, $P85, ":<"
 .annotate "line", 76
     find_lex $P87, "$/"
-    unless_null $P87, vivify_61
-    new $P87, "Hash"
-  vivify_61:
+    unless_null $P87, vivify_66
+    $P87 = root_new ['parrot';'Hash']
+  vivify_66:
     set $P88, $P87["OPER"]
-    unless_null $P88, vivify_62
-    new $P88, "Hash"
-  vivify_62:
+    unless_null $P88, vivify_67
+    $P88 = root_new ['parrot';'Hash']
+  vivify_67:
     set $P89, $P88["sym"]
-    unless_null $P89, vivify_63
+    unless_null $P89, vivify_68
     new $P89, "Undef"
-  vivify_63:
+  vivify_68:
     concat $P90, $P86, $P89
     concat $P91, $P90, ">"
     store_lex "$name", $P91
@@ -4728,7 +4736,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block110"  :anon :subid("16_1261064005.70696") :outer("14_1261064005.70696")
+.sub "_block110"  :anon :subid("16_1267204685.44293") :outer("14_1267204685.44293")
     .param pmc param_112
 .annotate "line", 82
     .lex "$_", param_112
@@ -4751,7 +4759,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "term:sym<circumfix>"  :subid("17_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "term:sym<circumfix>"  :subid("17_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_132
 .annotate "line", 87
     new $P131, 'ExceptionHandler'
@@ -4762,13 +4770,13 @@
     .lex "$/", param_132
     find_lex $P133, "$/"
     find_lex $P134, "$/"
-    unless_null $P134, vivify_67
-    new $P134, "Hash"
-  vivify_67:
+    unless_null $P134, vivify_72
+    $P134 = root_new ['parrot';'Hash']
+  vivify_72:
     set $P135, $P134["circumfix"]
-    unless_null $P135, vivify_68
+    unless_null $P135, vivify_73
     new $P135, "Undef"
-  vivify_68:
+  vivify_73:
     $P136 = $P135."ast"()
     $P137 = $P133."!make"($P136)
     .return ($P137)
@@ -4781,7 +4789,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "termish"  :subid("18_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "termish"  :subid("18_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_142
 .annotate "line", 89
     new $P141, 'ExceptionHandler'
@@ -4792,13 +4800,13 @@
     .lex "$/", param_142
     find_lex $P143, "$/"
     find_lex $P144, "$/"
-    unless_null $P144, vivify_69
-    new $P144, "Hash"
-  vivify_69:
+    unless_null $P144, vivify_74
+    $P144 = root_new ['parrot';'Hash']
+  vivify_74:
     set $P145, $P144["term"]
-    unless_null $P145, vivify_70
+    unless_null $P145, vivify_75
     new $P145, "Undef"
-  vivify_70:
+  vivify_75:
     $P146 = $P145."ast"()
     $P147 = $P143."!make"($P146)
     .return ($P147)
@@ -4811,7 +4819,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm"  :subid("19_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "nullterm"  :subid("19_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_152
 .annotate "line", 90
     new $P151, 'ExceptionHandler'
@@ -4833,7 +4841,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "nullterm_alt"  :subid("20_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "nullterm_alt"  :subid("20_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_160
 .annotate "line", 91
     new $P159, 'ExceptionHandler'
@@ -4844,13 +4852,13 @@
     .lex "$/", param_160
     find_lex $P161, "$/"
     find_lex $P162, "$/"
-    unless_null $P162, vivify_71
-    new $P162, "Hash"
-  vivify_71:
+    unless_null $P162, vivify_76
+    $P162 = root_new ['parrot';'Hash']
+  vivify_76:
     set $P163, $P162["term"]
-    unless_null $P163, vivify_72
+    unless_null $P163, vivify_77
     new $P163, "Undef"
-  vivify_72:
+  vivify_77:
     $P164 = $P163."ast"()
     $P165 = $P161."!make"($P164)
     .return ($P165)
@@ -4863,7 +4871,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "integer"  :subid("21_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "integer"  :subid("21_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_170
 .annotate "line", 93
     new $P169, 'ExceptionHandler'
@@ -4874,13 +4882,13 @@
     .lex "$/", param_170
     find_lex $P171, "$/"
     find_lex $P172, "$/"
-    unless_null $P172, vivify_73
-    new $P172, "Hash"
-  vivify_73:
+    unless_null $P172, vivify_78
+    $P172 = root_new ['parrot';'Hash']
+  vivify_78:
     set $P173, $P172["VALUE"]
-    unless_null $P173, vivify_74
+    unless_null $P173, vivify_79
     new $P173, "Undef"
-  vivify_74:
+  vivify_79:
     $P174 = $P173."ast"()
     $P175 = $P171."!make"($P174)
     .return ($P175)
@@ -4893,7 +4901,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "dec_number"  :subid("22_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "dec_number"  :subid("22_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_180
 .annotate "line", 95
     new $P179, 'ExceptionHandler'
@@ -4916,7 +4924,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "decint"  :subid("23_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "decint"  :subid("23_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_189
 .annotate "line", 97
     new $P188, 'ExceptionHandler'
@@ -4939,7 +4947,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "hexint"  :subid("24_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "hexint"  :subid("24_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_198
 .annotate "line", 98
     new $P197, 'ExceptionHandler'
@@ -4962,7 +4970,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "octint"  :subid("25_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "octint"  :subid("25_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_207
 .annotate "line", 99
     new $P206, 'ExceptionHandler'
@@ -4985,7 +4993,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "binint"  :subid("26_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "binint"  :subid("26_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_216
 .annotate "line", 100
     new $P215, 'ExceptionHandler'
@@ -5008,10 +5016,10 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_EXPR"  :subid("27_1261064005.70696") :method :outer("11_1261064005.70696")
+.sub "quote_EXPR"  :subid("27_1267204685.44293") :method :outer("11_1267204685.44293")
     .param pmc param_225
 .annotate "line", 102
-    .const 'Sub' $P241 = "28_1261064005.70696" 
+    .const 'Sub' $P241 = "28_1267204685.44293" 
     capture_lex $P241
     new $P224, 'ExceptionHandler'
     set_addr $P224, control_223
@@ -5023,13 +5031,13 @@
     new $P226, "Undef"
     .lex "$past", $P226
     find_lex $P227, "$/"
-    unless_null $P227, vivify_75
-    new $P227, "Hash"
-  vivify_75:
+    unless_null $P227, vivify_80
+    $P227 = root_new ['parrot';'Hash']
+  vivify_80:
     set $P228, $P227["quote_delimited"]
-    unless_null $P228, vivify_76
+    unless_null $P228, vivify_81
     new $P228, "Undef"
-  vivify_76:
+  vivify_81:
     $P229 = $P228."ast"()
     store_lex "$past", $P229
 .annotate "line", 104
@@ -5043,7 +5051,7 @@
     $P237 = $P235."ACCEPTS"($P236)
     if $P237, if_234
 .annotate "line", 108
-    .const 'Sub' $P241 = "28_1261064005.70696" 
+    .const 'Sub' $P241 = "28_1267204685.44293" 
     capture_lex $P241
     $P241()
     goto if_234_end
@@ -5054,40 +5062,40 @@
     $P239."panic"("Can't form :w list from non-constant strings (yet)")
   if_234_end:
   if_230_end:
-.annotate "line", 116
-    get_hll_global $P269, ["PAST"], "Node"
-    find_lex $P270, "$past"
-    $P271 = $P269."ACCEPTS"($P270)
-    isfalse $I272, $P271
-    unless $I272, if_268_end
-.annotate "line", 117
-    get_hll_global $P273, ["PAST"], "Val"
-    find_lex $P274, "$past"
-    set $S275, $P274
-    $P276 = $P273."new"($S275 :named("value"))
-    store_lex "$past", $P276
-  if_268_end:
 .annotate "line", 119
-    find_lex $P277, "$/"
+    get_hll_global $P273, ["PAST"], "Node"
+    find_lex $P274, "$past"
+    $P275 = $P273."ACCEPTS"($P274)
+    isfalse $I276, $P275
+    unless $I276, if_272_end
+.annotate "line", 120
+    get_hll_global $P277, ["PAST"], "Val"
     find_lex $P278, "$past"
-    $P279 = $P277."!make"($P278)
+    set $S279, $P278
+    $P280 = $P277."new"($S279 :named("value"))
+    store_lex "$past", $P280
+  if_272_end:
+.annotate "line", 122
+    find_lex $P281, "$/"
+    find_lex $P282, "$past"
+    $P283 = $P281."!make"($P282)
 .annotate "line", 102
-    .return ($P279)
+    .return ($P283)
   control_223:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P280, exception, "payload"
-    .return ($P280)
+    getattribute $P284, exception, "payload"
+    .return ($P284)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block240"  :anon :subid("28_1261064005.70696") :outer("27_1261064005.70696")
+.sub "_block240"  :anon :subid("28_1267204685.44293") :outer("27_1267204685.44293")
 .annotate "line", 108
-    .const 'Sub' $P260 = "29_1261064005.70696" 
+    .const 'Sub' $P260 = "29_1267204685.44293" 
     capture_lex $P260
 .annotate "line", 109
-    new $P242, "ResizablePMCArray"
+    $P242 = root_new ['parrot';'ResizablePMCArray']
     .lex "@words", $P242
     get_hll_global $P243, ["HLL";"Grammar"], "split_words"
     find_lex $P244, "$/"
@@ -5099,8 +5107,22 @@
     set $N250, $P249
     isgt $I251, $N250, 1.0
     if $I251, if_248
-    new $P247, 'Integer'
-    set $P247, $I251
+.annotate "line", 115
+    find_lex $P268, "@words"
+    unless_null $P268, vivify_82
+    $P268 = root_new ['parrot';'ResizablePMCArray']
+  vivify_82:
+    set $P269, $P268[0]
+    unless_null $P269, vivify_83
+    new $P269, "Undef"
+  vivify_83:
+    set $S270, $P269
+    new $P271, 'String'
+    set $P271, $S270
+    store_lex "$past", $P271
+.annotate "line", 114
+    set $P247, $P271
+.annotate "line", 110
     goto if_248_end
   if_248:
 .annotate "line", 111
@@ -5111,7 +5133,7 @@
 .annotate "line", 112
     find_lex $P256, "@words"
     defined $I257, $P256
-    unless $I257, for_undef_77
+    unless $I257, for_undef_84
     iter $P255, $P256
     new $P266, 'ExceptionHandler'
     set_addr $P266, loop265_handler
@@ -5121,7 +5143,7 @@
     unless $P255, loop265_done
     shift $P258, $P255
   loop265_redo:
-    .const 'Sub' $P260 = "29_1261064005.70696" 
+    .const 'Sub' $P260 = "29_1267204685.44293" 
     capture_lex $P260
     $P260($P258)
   loop265_next:
@@ -5134,7 +5156,7 @@
     eq $P267, 67, loop265_redo
   loop265_done:
     pop_eh 
-  for_undef_77:
+  for_undef_84:
 .annotate "line", 110
     set $P247, $P255
   if_248_end:
@@ -5144,7 +5166,7 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block259"  :anon :subid("29_1261064005.70696") :outer("28_1261064005.70696")
+.sub "_block259"  :anon :subid("29_1267204685.44293") :outer("28_1267204685.44293")
     .param pmc param_261
 .annotate "line", 112
     .lex "$_", param_261
@@ -5156,501 +5178,736 @@
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_delimited"  :subid("30_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_284
-.annotate "line", 122
-    .const 'Sub' $P296 = "31_1261064005.70696" 
-    capture_lex $P296
-    new $P283, 'ExceptionHandler'
-    set_addr $P283, control_282
-    $P283."handle_types"(58)
-    push_eh $P283
+.sub "quote_delimited"  :subid("30_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_288
+.annotate "line", 125
+    .const 'Sub' $P300 = "31_1267204685.44293" 
+    capture_lex $P300
+    new $P287, 'ExceptionHandler'
+    set_addr $P287, control_286
+    $P287."handle_types"(58)
+    push_eh $P287
     .lex "self", self
-    .lex "$/", param_284
-.annotate "line", 123
-    new $P285, "ResizablePMCArray"
-    .lex "@parts", $P285
-.annotate "line", 124
-    new $P286, "Undef"
-    .lex "$lastlit", $P286
-.annotate "line", 140
-    new $P287, "Undef"
-    .lex "$past", $P287
-.annotate "line", 122
-    find_lex $P288, "@parts"
-.annotate "line", 124
-    new $P289, "String"
-    assign $P289, ""
-    store_lex "$lastlit", $P289
+    .lex "$/", param_288
+.annotate "line", 126
+    $P289 = root_new ['parrot';'ResizablePMCArray']
+    .lex "@parts", $P289
+.annotate "line", 127
+    new $P290, "Undef"
+    .lex "$lastlit", $P290
+.annotate "line", 143
+    new $P291, "Undef"
+    .lex "$past", $P291
 .annotate "line", 125
-    find_lex $P291, "$/"
-    unless_null $P291, vivify_78
-    new $P291, "Hash"
-  vivify_78:
-    set $P292, $P291["quote_atom"]
-    unless_null $P292, vivify_79
-    new $P292, "Undef"
-  vivify_79:
-    defined $I293, $P292
-    unless $I293, for_undef_80
-    iter $P290, $P292
-    new $P329, 'ExceptionHandler'
-    set_addr $P329, loop328_handler
-    $P329."handle_types"(65, 67, 66)
-    push_eh $P329
-  loop328_test:
-    unless $P290, loop328_done
-    shift $P294, $P290
-  loop328_redo:
-    .const 'Sub' $P296 = "31_1261064005.70696" 
-    capture_lex $P296
-    $P296($P294)
-  loop328_next:
-    goto loop328_test
-  loop328_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P330, exception, 'type'
-    eq $P330, 65, loop328_next
-    eq $P330, 67, loop328_redo
-  loop328_done:
+    find_lex $P292, "@parts"
+.annotate "line", 127
+    new $P293, "String"
+    assign $P293, ""
+    store_lex "$lastlit", $P293
+.annotate "line", 128
+    find_lex $P295, "$/"
+    unless_null $P295, vivify_85
+    $P295 = root_new ['parrot';'Hash']
+  vivify_85:
+    set $P296, $P295["quote_atom"]
+    unless_null $P296, vivify_86
+    new $P296, "Undef"
+  vivify_86:
+    defined $I297, $P296
+    unless $I297, for_undef_87
+    iter $P294, $P296
+    new $P333, 'ExceptionHandler'
+    set_addr $P333, loop332_handler
+    $P333."handle_types"(65, 67, 66)
+    push_eh $P333
+  loop332_test:
+    unless $P294, loop332_done
+    shift $P298, $P294
+  loop332_redo:
+    .const 'Sub' $P300 = "31_1267204685.44293" 
+    capture_lex $P300
+    $P300($P298)
+  loop332_next:
+    goto loop332_test
+  loop332_handler:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P334, exception, 'type'
+    eq $P334, 65, loop332_next
+    eq $P334, 67, loop332_redo
+  loop332_done:
     pop_eh 
-  for_undef_80:
-.annotate "line", 139
-    find_lex $P332, "$lastlit"
-    set $S333, $P332
-    isgt $I334, $S333, ""
-    unless $I334, if_331_end
-    find_lex $P335, "@parts"
+  for_undef_87:
+.annotate "line", 142
     find_lex $P336, "$lastlit"
-    $P335."push"($P336)
-  if_331_end:
-.annotate "line", 140
+    set $S337, $P336
+    isgt $I338, $S337, ""
+    unless $I338, if_335_end
     find_lex $P339, "@parts"
-    if $P339, if_338
-    new $P342, "String"
-    assign $P342, ""
-    set $P337, $P342
-    goto if_338_end
-  if_338:
-    find_lex $P340, "@parts"
-    $P341 = $P340."shift"()
-    set $P337, $P341
-  if_338_end:
-    store_lex "$past", $P337
-.annotate "line", 141
-    new $P350, 'ExceptionHandler'
-    set_addr $P350, loop349_handler
-    $P350."handle_types"(65, 67, 66)
-    push_eh $P350
-  loop349_test:
+    find_lex $P340, "$lastlit"
+    $P339."push"($P340)
+  if_335_end:
+.annotate "line", 143
     find_lex $P343, "@parts"
-    unless $P343, loop349_done
-  loop349_redo:
-.annotate "line", 142
-    get_hll_global $P344, ["PAST"], "Op"
-    find_lex $P345, "$past"
-    find_lex $P346, "@parts"
-    $P347 = $P346."shift"()
-    $P348 = $P344."new"($P345, $P347, "concat" :named("pirop"))
-    store_lex "$past", $P348
-  loop349_next:
-.annotate "line", 141
-    goto loop349_test
-  loop349_handler:
-    .local pmc exception 
-    .get_results (exception) 
-    getattribute $P351, exception, 'type'
-    eq $P351, 65, loop349_next
-    eq $P351, 67, loop349_redo
-  loop349_done:
-    pop_eh 
+    if $P343, if_342
+    new $P346, "String"
+    assign $P346, ""
+    set $P341, $P346
+    goto if_342_end
+  if_342:
+    find_lex $P344, "@parts"
+    $P345 = $P344."shift"()
+    set $P341, $P345
+  if_342_end:
+    store_lex "$past", $P341
 .annotate "line", 144
-    find_lex $P352, "$/"
-    find_lex $P353, "$past"
-    $P354 = $P352."!make"($P353)
-.annotate "line", 122
-    .return ($P354)
-  control_282:
+    new $P354, 'ExceptionHandler'
+    set_addr $P354, loop353_handler
+    $P354."handle_types"(65, 67, 66)
+    push_eh $P354
+  loop353_test:
+    find_lex $P347, "@parts"
+    unless $P347, loop353_done
+  loop353_redo:
+.annotate "line", 145
+    get_hll_global $P348, ["PAST"], "Op"
+    find_lex $P349, "$past"
+    find_lex $P350, "@parts"
+    $P351 = $P350."shift"()
+    $P352 = $P348."new"($P349, $P351, "concat" :named("pirop"))
+    store_lex "$past", $P352
+  loop353_next:
+.annotate "line", 144
+    goto loop353_test
+  loop353_handler:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P355, exception, "payload"
-    .return ($P355)
+    getattribute $P355, exception, 'type'
+    eq $P355, 65, loop353_next
+    eq $P355, 67, loop353_redo
+  loop353_done:
+    pop_eh 
+.annotate "line", 147
+    find_lex $P356, "$/"
+    find_lex $P357, "$past"
+    $P358 = $P356."!make"($P357)
+.annotate "line", 125
+    .return ($P358)
+  control_286:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P359, exception, "payload"
+    .return ($P359)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "_block295"  :anon :subid("31_1261064005.70696") :outer("30_1261064005.70696")
-    .param pmc param_298
-.annotate "line", 126
-    new $P297, "Undef"
-    .lex "$ast", $P297
-    .lex "$_", param_298
-    find_lex $P299, "$_"
-    $P300 = $P299."ast"()
-    store_lex "$ast", $P300
-.annotate "line", 127
-    get_hll_global $P303, ["PAST"], "Node"
-    find_lex $P304, "$ast"
-    $P305 = $P303."ACCEPTS"($P304)
-    isfalse $I306, $P305
-    if $I306, if_302
+.sub "_block299"  :anon :subid("31_1267204685.44293") :outer("30_1267204685.44293")
+    .param pmc param_302
+.annotate "line", 129
+    new $P301, "Undef"
+    .lex "$ast", $P301
+    .lex "$_", param_302
+    find_lex $P303, "$_"
+    $P304 = $P303."ast"()
+    store_lex "$ast", $P304
 .annotate "line", 130
-    find_lex $P312, "$ast"
-    get_hll_global $P313, ["PAST"], "Val"
-    $P314 = $P312."isa"($P313)
-    if $P314, if_311
-.annotate "line", 134
-    find_lex $P320, "$lastlit"
-    set $S321, $P320
-    isgt $I322, $S321, ""
-    unless $I322, if_319_end
-    find_lex $P323, "@parts"
+    get_hll_global $P307, ["PAST"], "Node"
+    find_lex $P308, "$ast"
+    $P309 = $P307."ACCEPTS"($P308)
+    isfalse $I310, $P309
+    if $I310, if_306
+.annotate "line", 133
+    find_lex $P316, "$ast"
+    get_hll_global $P317, ["PAST"], "Val"
+    $P318 = $P316."isa"($P317)
+    if $P318, if_315
+.annotate "line", 137
     find_lex $P324, "$lastlit"
-    $P323."push"($P324)
-  if_319_end:
-.annotate "line", 135
-    find_lex $P325, "@parts"
-    find_lex $P326, "$ast"
-    $P325."push"($P326)
+    set $S325, $P324
+    isgt $I326, $S325, ""
+    unless $I326, if_323_end
+    find_lex $P327, "@parts"
+    find_lex $P328, "$lastlit"
+    $P327."push"($P328)
+  if_323_end:
+.annotate "line", 138
+    find_lex $P329, "@parts"
+    find_lex $P330, "$ast"
+    $P329."push"($P330)
+.annotate "line", 139
+    new $P331, "String"
+    assign $P331, ""
+    store_lex "$lastlit", $P331
 .annotate "line", 136
-    new $P327, "String"
-    assign $P327, ""
-    store_lex "$lastlit", $P327
+    set $P314, $P331
+.annotate "line", 133
+    goto if_315_end
+  if_315:
+.annotate "line", 134
+    find_lex $P319, "$lastlit"
+    find_lex $P320, "$ast"
+    $S321 = $P320."value"()
+    concat $P322, $P319, $S321
+    store_lex "$lastlit", $P322
 .annotate "line", 133
-    set $P310, $P327
+    set $P314, $P322
+  if_315_end:
+    set $P305, $P314
 .annotate "line", 130
-    goto if_311_end
-  if_311:
+    goto if_306_end
+  if_306:
 .annotate "line", 131
-    find_lex $P315, "$lastlit"
-    find_lex $P316, "$ast"
-    $S317 = $P316."value"()
-    concat $P318, $P315, $S317
-    store_lex "$lastlit", $P318
+    find_lex $P311, "$lastlit"
+    find_lex $P312, "$ast"
+    concat $P313, $P311, $P312
+    store_lex "$lastlit", $P313
 .annotate "line", 130
-    set $P310, $P318
-  if_311_end:
-    set $P301, $P310
-.annotate "line", 127
-    goto if_302_end
-  if_302:
+    set $P305, $P313
+  if_306_end:
 .annotate "line", 128
-    find_lex $P307, "$lastlit"
-    find_lex $P308, "$ast"
-    concat $P309, $P307, $P308
-    store_lex "$lastlit", $P309
-.annotate "line", 127
-    set $P301, $P309
-  if_302_end:
-.annotate "line", 125
-    .return ($P301)
+    .return ($P305)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_atom"  :subid("32_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_359
-.annotate "line", 147
-    new $P358, 'ExceptionHandler'
-    set_addr $P358, control_357
-    $P358."handle_types"(58)
-    push_eh $P358
+.sub "quote_atom"  :subid("32_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_363
+.annotate "line", 150
+    new $P362, 'ExceptionHandler'
+    set_addr $P362, control_361
+    $P362."handle_types"(58)
+    push_eh $P362
     .lex "self", self
-    .lex "$/", param_359
-.annotate "line", 148
-    find_lex $P360, "$/"
-    find_lex $P363, "$/"
-    unless_null $P363, vivify_81
-    new $P363, "Hash"
-  vivify_81:
-    set $P364, $P363["quote_escape"]
-    unless_null $P364, vivify_82
-    new $P364, "Undef"
-  vivify_82:
-    if $P364, if_362
-    find_lex $P368, "$/"
-    set $S369, $P368
-    new $P361, 'String'
-    set $P361, $S369
-    goto if_362_end
-  if_362:
-    find_lex $P365, "$/"
-    unless_null $P365, vivify_83
-    new $P365, "Hash"
-  vivify_83:
-    set $P366, $P365["quote_escape"]
-    unless_null $P366, vivify_84
-    new $P366, "Undef"
-  vivify_84:
-    $P367 = $P366."ast"()
-    set $P361, $P367
-  if_362_end:
-    $P370 = $P360."!make"($P361)
-.annotate "line", 147
-    .return ($P370)
-  control_357:
+    .lex "$/", param_363
+.annotate "line", 151
+    find_lex $P364, "$/"
+    find_lex $P367, "$/"
+    unless_null $P367, vivify_88
+    $P367 = root_new ['parrot';'Hash']
+  vivify_88:
+    set $P368, $P367["quote_escape"]
+    unless_null $P368, vivify_89
+    new $P368, "Undef"
+  vivify_89:
+    if $P368, if_366
+    find_lex $P372, "$/"
+    set $S373, $P372
+    new $P365, 'String'
+    set $P365, $S373
+    goto if_366_end
+  if_366:
+    find_lex $P369, "$/"
+    unless_null $P369, vivify_90
+    $P369 = root_new ['parrot';'Hash']
+  vivify_90:
+    set $P370, $P369["quote_escape"]
+    unless_null $P370, vivify_91
+    new $P370, "Undef"
+  vivify_91:
+    $P371 = $P370."ast"()
+    set $P365, $P371
+  if_366_end:
+    $P374 = $P364."!make"($P365)
+.annotate "line", 150
+    .return ($P374)
+  control_361:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P371, exception, "payload"
-    .return ($P371)
+    getattribute $P375, exception, "payload"
+    .return ($P375)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<backslash>"  :subid("33_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_375
-.annotate "line", 151
-    new $P374, 'ExceptionHandler'
-    set_addr $P374, control_373
-    $P374."handle_types"(58)
-    push_eh $P374
+.sub "quote_escape:sym<backslash>"  :subid("33_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_379
+.annotate "line", 154
+    new $P378, 'ExceptionHandler'
+    set_addr $P378, control_377
+    $P378."handle_types"(58)
+    push_eh $P378
     .lex "self", self
-    .lex "$/", param_375
-    find_lex $P376, "$/"
-    $P377 = $P376."!make"("\\")
-    .return ($P377)
-  control_373:
+    .lex "$/", param_379
+    find_lex $P380, "$/"
+    $P381 = $P380."!make"("\\")
+    .return ($P381)
+  control_377:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P378, exception, "payload"
-    .return ($P378)
+    getattribute $P382, exception, "payload"
+    .return ($P382)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<stopper>"  :subid("34_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_382
-.annotate "line", 152
-    new $P381, 'ExceptionHandler'
-    set_addr $P381, control_380
-    $P381."handle_types"(58)
-    push_eh $P381
+.sub "quote_escape:sym<stopper>"  :subid("34_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_386
+.annotate "line", 155
+    new $P385, 'ExceptionHandler'
+    set_addr $P385, control_384
+    $P385."handle_types"(58)
+    push_eh $P385
     .lex "self", self
-    .lex "$/", param_382
-    find_lex $P383, "$/"
-    find_lex $P384, "$/"
-    unless_null $P384, vivify_85
-    new $P384, "Hash"
-  vivify_85:
-    set $P385, $P384["stopper"]
-    unless_null $P385, vivify_86
-    new $P385, "Undef"
-  vivify_86:
-    set $S386, $P385
-    $P387 = $P383."!make"($S386)
-    .return ($P387)
-  control_380:
+    .lex "$/", param_386
+    find_lex $P387, "$/"
+    find_lex $P388, "$/"
+    unless_null $P388, vivify_92
+    $P388 = root_new ['parrot';'Hash']
+  vivify_92:
+    set $P389, $P388["stopper"]
+    unless_null $P389, vivify_93
+    new $P389, "Undef"
+  vivify_93:
+    set $S390, $P389
+    $P391 = $P387."!make"($S390)
+    .return ($P391)
+  control_384:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P388, exception, "payload"
-    .return ($P388)
+    getattribute $P392, exception, "payload"
+    .return ($P392)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<bs>"  :subid("35_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_392
-.annotate "line", 154
-    new $P391, 'ExceptionHandler'
-    set_addr $P391, control_390
-    $P391."handle_types"(58)
-    push_eh $P391
+.sub "quote_escape:sym<bs>"  :subid("35_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_396
+.annotate "line", 157
+    new $P395, 'ExceptionHandler'
+    set_addr $P395, control_394
+    $P395."handle_types"(58)
+    push_eh $P395
     .lex "self", self
-    .lex "$/", param_392
-    find_lex $P393, "$/"
-    $P394 = $P393."!make"("\b")
-    .return ($P394)
-  control_390:
+    .lex "$/", param_396
+    find_lex $P397, "$/"
+    $P398 = $P397."!make"("\b")
+    .return ($P398)
+  control_394:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P395, exception, "payload"
-    .return ($P395)
+    getattribute $P399, exception, "payload"
+    .return ($P399)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<nl>"  :subid("36_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_399
-.annotate "line", 155
-    new $P398, 'ExceptionHandler'
-    set_addr $P398, control_397
-    $P398."handle_types"(58)
-    push_eh $P398
+.sub "quote_escape:sym<nl>"  :subid("36_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_403
+.annotate "line", 158
+    new $P402, 'ExceptionHandler'
+    set_addr $P402, control_401
+    $P402."handle_types"(58)
+    push_eh $P402
     .lex "self", self
-    .lex "$/", param_399
-    find_lex $P400, "$/"
-    $P401 = $P400."!make"("\n")
-    .return ($P401)
-  control_397:
+    .lex "$/", param_403
+    find_lex $P404, "$/"
+    $P405 = $P404."!make"("\n")
+    .return ($P405)
+  control_401:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P402, exception, "payload"
-    .return ($P402)
+    getattribute $P406, exception, "payload"
+    .return ($P406)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<cr>"  :subid("37_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_406
-.annotate "line", 156
-    new $P405, 'ExceptionHandler'
-    set_addr $P405, control_404
-    $P405."handle_types"(58)
-    push_eh $P405
+.sub "quote_escape:sym<cr>"  :subid("37_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_410
+.annotate "line", 159
+    new $P409, 'ExceptionHandler'
+    set_addr $P409, control_408
+    $P409."handle_types"(58)
+    push_eh $P409
     .lex "self", self
-    .lex "$/", param_406
-    find_lex $P407, "$/"
-    $P408 = $P407."!make"("\r")
-    .return ($P408)
-  control_404:
+    .lex "$/", param_410
+    find_lex $P411, "$/"
+    $P412 = $P411."!make"("\r")
+    .return ($P412)
+  control_408:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P409, exception, "payload"
-    .return ($P409)
+    getattribute $P413, exception, "payload"
+    .return ($P413)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<tab>"  :subid("38_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_413
-.annotate "line", 157
-    new $P412, 'ExceptionHandler'
-    set_addr $P412, control_411
-    $P412."handle_types"(58)
-    push_eh $P412
+.sub "quote_escape:sym<tab>"  :subid("38_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_417
+.annotate "line", 160
+    new $P416, 'ExceptionHandler'
+    set_addr $P416, control_415
+    $P416."handle_types"(58)
+    push_eh $P416
     .lex "self", self
-    .lex "$/", param_413
-    find_lex $P414, "$/"
-    $P415 = $P414."!make"("\t")
-    .return ($P415)
-  control_411:
+    .lex "$/", param_417
+    find_lex $P418, "$/"
+    $P419 = $P418."!make"("\t")
+    .return ($P419)
+  control_415:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P416, exception, "payload"
-    .return ($P416)
+    getattribute $P420, exception, "payload"
+    .return ($P420)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<hex>"  :subid("39_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_420
-.annotate "line", 159
-    new $P419, 'ExceptionHandler'
-    set_addr $P419, control_418
-    $P419."handle_types"(58)
-    push_eh $P419
+.sub "quote_escape:sym<hex>"  :subid("39_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_424
+.annotate "line", 162
+    new $P423, 'ExceptionHandler'
+    set_addr $P423, control_422
+    $P423."handle_types"(58)
+    push_eh $P423
     .lex "self", self
-    .lex "$/", param_420
-.annotate "line", 160
-    find_lex $P421, "$/"
-    find_lex $P424, "$/"
-    unless_null $P424, vivify_87
-    new $P424, "Hash"
-  vivify_87:
-    set $P425, $P424["hexint"]
-    unless_null $P425, vivify_88
-    new $P425, "Undef"
-  vivify_88:
-    if $P425, if_423
+    .lex "$/", param_424
+.annotate "line", 163
+    find_lex $P425, "$/"
     find_lex $P428, "$/"
-    unless_null $P428, vivify_89
-    new $P428, "Hash"
-  vivify_89:
-    set $P429, $P428["hexints"]
-    unless_null $P429, vivify_90
-    new $P429, "Hash"
-  vivify_90:
-    set $P430, $P429["hexint"]
-    unless_null $P430, vivify_91
-    new $P430, "Undef"
-  vivify_91:
-    set $P422, $P430
-    goto if_423_end
-  if_423:
-    find_lex $P426, "$/"
-    unless_null $P426, vivify_92
-    new $P426, "Hash"
-  vivify_92:
-    set $P427, $P426["hexint"]
-    unless_null $P427, vivify_93
-    new $P427, "Undef"
-  vivify_93:
-    set $P422, $P427
-  if_423_end:
-    $P431 = "ints_to_string"($P422)
-    $P432 = $P421."!make"($P431)
-.annotate "line", 159
-    .return ($P432)
-  control_418:
+    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)
+  control_422:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P433, exception, "payload"
-    .return ($P433)
+    getattribute $P437, exception, "payload"
+    .return ($P437)
 .end
 
 
 .namespace ["HLL";"Actions"]
-.sub "quote_escape:sym<oct>"  :subid("40_1261064005.70696") :method :outer("11_1261064005.70696")
-    .param pmc param_437
-.annotate "line", 163
-    new $P436, 'ExceptionHandler'
-    set_addr $P436, control_435
-    $P436."handle_types"(58)
-    push_eh $P436
+.sub "quote_escape:sym<oct>"  :subid("40_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_441
+.annotate "line", 166
+    new $P440, 'ExceptionHandler'
+    set_addr $P440, control_439
+    $P440."handle_types"(58)
+    push_eh $P440
     .lex "self", self
-    .lex "$/", param_437
-.annotate "line", 164
-    find_lex $P438, "$/"
-    find_lex $P441, "$/"
-    unless_null $P441, vivify_94
-    new $P441, "Hash"
-  vivify_94:
-    set $P442, $P441["octint"]
-    unless_null $P442, vivify_95
-    new $P442, "Undef"
-  vivify_95:
-    if $P442, if_440
+    .lex "$/", param_441
+.annotate "line", 167
+    find_lex $P442, "$/"
     find_lex $P445, "$/"
-    unless_null $P445, vivify_96
-    new $P445, "Hash"
-  vivify_96:
-    set $P446, $P445["octints"]
-    unless_null $P446, vivify_97
-    new $P446, "Hash"
-  vivify_97:
-    set $P447, $P446["octint"]
-    unless_null $P447, vivify_98
-    new $P447, "Undef"
-  vivify_98:
-    set $P439, $P447
-    goto if_440_end
-  if_440:
-    find_lex $P443, "$/"
-    unless_null $P443, vivify_99
-    new $P443, "Hash"
-  vivify_99:
-    set $P444, $P443["octint"]
-    unless_null $P444, vivify_100
-    new $P444, "Undef"
-  vivify_100:
-    set $P439, $P444
-  if_440_end:
-    $P448 = "ints_to_string"($P439)
-    $P449 = $P438."!make"($P448)
-.annotate "line", 163
-    .return ($P449)
-  control_435:
+    unless_null $P445, vivify_101
+    $P445 = root_new ['parrot';'Hash']
+  vivify_101:
+    set $P446, $P445["octint"]
+    unless_null $P446, vivify_102
+    new $P446, "Undef"
+  vivify_102:
+    if $P446, if_444
+    find_lex $P449, "$/"
+    unless_null $P449, vivify_103
+    $P449 = root_new ['parrot';'Hash']
+  vivify_103:
+    set $P450, $P449["octints"]
+    unless_null $P450, vivify_104
+    $P450 = root_new ['parrot';'Hash']
+  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:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P454, exception, "payload"
+    .return ($P454)
+.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
+    .lex "self", self
+    .lex "$/", param_458
+.annotate "line", 171
+    find_lex $P459, "$/"
+    find_lex $P460, "$/"
+    unless_null $P460, vivify_108
+    $P460 = root_new ['parrot';'Hash']
+  vivify_108:
+    set $P461, $P460["charspec"]
+    unless_null $P461, vivify_109
+    new $P461, "Undef"
+  vivify_109:
+    $P462 = $P461."ast"()
+    $P463 = $P459."!make"($P462)
+.annotate "line", 170
+    .return ($P463)
+  control_456:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P464, exception, "payload"
+    .return ($P464)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "charname"  :subid("42_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_468
+.annotate "line", 174
+    new $P467, 'ExceptionHandler'
+    set_addr $P467, control_466
+    $P467."handle_types"(58)
+    push_eh $P467
+    .lex "self", self
+    .lex "$/", param_468
+.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:
+    find_lex $P474, "$/"
+    unless_null $P474, vivify_112
+    $P474 = root_new ['parrot';'Hash']
+  vivify_112:
+    set $P475, $P474["integer"]
+    unless_null $P475, vivify_113
+    new $P475, "Undef"
+  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:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P495, exception, "payload"
+    .return ($P495)
+.end
+
+
+.namespace ["HLL";"Actions"]
+.sub "charnames"  :subid("43_1267204685.44293") :method :outer("11_1267204685.44293")
+    .param pmc param_499
+.annotate "line", 182
+    .const 'Sub' $P508 = "44_1267204685.44293" 
+    capture_lex $P508
+    new $P498, 'ExceptionHandler'
+    set_addr $P498, control_497
+    $P498."handle_types"(58)
+    push_eh $P498
+    .lex "self", self
+    .lex "$/", param_499
+.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:
+    .local pmc exception 
+    .get_results (exception) 
+    getattribute $P520, exception, "payload"
+    .return ($P520)
+.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)
+.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
+    .lex "self", self
+    .lex "$/", param_524
+.annotate "line", 189
+    find_lex $P525, "$/"
+    find_lex $P528, "$/"
+    unless_null $P528, vivify_117
+    $P528 = root_new ['parrot';'Hash']
+  vivify_117:
+    set $P529, $P528["charnames"]
+    unless_null $P529, vivify_118
+    new $P529, "Undef"
+  vivify_118:
+    if $P529, if_527
+    find_lex $P533, "$/"
+    $I534 = "string_to_int"($P533, 10)
+    chr $S535, $I534
+    new $P526, 'String'
+    set $P526, $S535
+    goto if_527_end
+  if_527:
+    find_lex $P530, "$/"
+    unless_null $P530, vivify_119
+    $P530 = root_new ['parrot';'Hash']
+  vivify_119:
+    set $P531, $P530["charnames"]
+    unless_null $P531, vivify_120
+    new $P531, "Undef"
+  vivify_120:
+    $P532 = $P531."ast"()
+    set $P526, $P532
+  if_527_end:
+    $P536 = $P525."!make"($P526)
+.annotate "line", 188
+    .return ($P536)
+  control_522:
     .local pmc exception 
     .get_results (exception) 
-    getattribute $P450, exception, "payload"
-    .return ($P450)
+    getattribute $P537, exception, "payload"
+    .return ($P537)
 .end
 
 ### .include 'gen/hllcompiler.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1261064006.8204")
+.sub "_block11"  :anon :subid("10_1267204686.55407")
 .annotate "line", 0
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     capture_lex $P14
@@ -5664,9 +5921,9 @@
 
 
 .namespace []
-.sub "" :load :init :subid("post25") :outer("10_1261064006.8204")
+.sub "" :load :init :subid("post25") :outer("10_1267204686.55407")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1261064006.8204" 
+    .const 'Sub' $P12 = "10_1267204686.55407" 
     .local pmc block
     set block, $P12
 .annotate "line", 2
@@ -5680,28 +5937,28 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block13"  :subid("11_1261064006.8204") :outer("10_1261064006.8204")
+.sub "_block13"  :subid("11_1267204686.55407") :outer("10_1267204686.55407")
 .annotate "line", 6
-    .const 'Sub' $P187 = "20_1261064006.8204" 
+    .const 'Sub' $P187 = "20_1267204686.55407" 
     capture_lex $P187
-    .const 'Sub' $P152 = "18_1261064006.8204" 
+    .const 'Sub' $P152 = "18_1267204686.55407" 
     capture_lex $P152
-    .const 'Sub' $P137 = "17_1261064006.8204" 
+    .const 'Sub' $P137 = "17_1267204686.55407" 
     capture_lex $P137
-    .const 'Sub' $P121 = "16_1261064006.8204" 
+    .const 'Sub' $P121 = "16_1267204686.55407" 
     capture_lex $P121
-    .const 'Sub' $P32 = "13_1261064006.8204" 
+    .const 'Sub' $P32 = "13_1267204686.55407" 
     capture_lex $P32
-    .const 'Sub' $P15 = "12_1261064006.8204" 
+    .const 'Sub' $P15 = "12_1267204686.55407" 
     capture_lex $P15
 .annotate "line", 14
-    .const 'Sub' $P15 = "12_1261064006.8204" 
+    .const 'Sub' $P15 = "12_1267204686.55407" 
     capture_lex $P15
     .lex "value_type", $P15
 .annotate "line", 10
     find_lex $P31, "value_type"
 .annotate "line", 69
-    .const 'Sub' $P187 = "20_1261064006.8204" 
+    .const 'Sub' $P187 = "20_1267204686.55407" 
     capture_lex $P187
 .annotate "line", 6
     .return ($P187)
@@ -5709,7 +5966,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "" :load :init :subid("post26") :outer("11_1261064006.8204")
+.sub "" :load :init :subid("post26") :outer("11_1267204686.55407")
 .annotate "line", 6
     get_hll_global $P14, ["HLL";"Compiler"], "_block13" 
     .local pmc block
@@ -5721,7 +5978,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "value_type"  :subid("12_1261064006.8204") :outer("11_1261064006.8204")
+.sub "value_type"  :subid("12_1267204686.55407") :outer("11_1267204686.55407")
     .param pmc param_18
 .annotate "line", 14
     new $P17, 'ExceptionHandler'
@@ -5765,15 +6022,15 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_exports"  :subid("13_1261064006.8204") :method :outer("11_1261064006.8204")
+.sub "get_exports"  :subid("13_1267204686.55407") :method :outer("11_1267204686.55407")
     .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_1261064006.8204" 
+    .const 'Sub' $P104 = "15_1267204686.55407" 
     capture_lex $P104
-    .const 'Sub' $P83 = "14_1261064006.8204" 
+    .const 'Sub' $P83 = "14_1267204686.55407" 
     capture_lex $P83
     new $P34, 'ExceptionHandler'
     set_addr $P34, control_33
@@ -5788,10 +6045,10 @@
     .lex "$tagset", param_36
     .lex "@symbols", param_38
 .annotate "line", 27
-    new $P39, "Hash"
+    $P39 = root_new ['parrot';'Hash']
     .lex "%exports", $P39
 .annotate "line", 28
-    new $P40, "Hash"
+    $P40 = root_new ['parrot';'Hash']
     .lex "%source", $P40
 .annotate "line", 22
     find_lex $P42, "$module"
@@ -5831,11 +6088,11 @@
     set $S60, $P59
     find_lex $P61, "$module"
     unless_null $P61, vivify_28
-    new $P61, "Hash"
+    $P61 = root_new ['parrot';'Hash']
   vivify_28:
     set $P62, $P61["EXPORT"]
     unless_null $P62, vivify_29
-    new $P62, "Hash"
+    $P62 = root_new ['parrot';'Hash']
   vivify_29:
     set $P63, $P62[$S60]
     unless_null $P63, vivify_30
@@ -5854,7 +6111,7 @@
     set $S72, $P71
     iseq $I73, $S72, "ALL"
     if $I73, if_70
-    $P75 = new ["Hash"]
+    $P75 = root_new ['parrot';'Hash']
     set $P69, $P75
     goto if_70_end
   if_70:
@@ -5879,7 +6136,7 @@
     unless $P99, loop116_done
     shift $P102, $P99
   loop116_redo:
-    .const 'Sub' $P104 = "15_1261064006.8204" 
+    .const 'Sub' $P104 = "15_1267204686.55407" 
     capture_lex $P104
     $P104($P102)
   loop116_next:
@@ -5909,7 +6166,7 @@
     unless $P78, loop96_done
     shift $P81, $P78
   loop96_redo:
-    .const 'Sub' $P83 = "14_1261064006.8204" 
+    .const 'Sub' $P83 = "14_1267204686.55407" 
     capture_lex $P83
     $P83($P81)
   loop96_next:
@@ -5937,7 +6194,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block103"  :anon :subid("15_1261064006.8204") :outer("13_1261064006.8204")
+.sub "_block103"  :anon :subid("15_1267204686.55407") :outer("13_1267204686.55407")
     .param pmc param_106
 .annotate "line", 40
     new $P105, "Undef"
@@ -5954,12 +6211,12 @@
     $P113 = "value_type"($P112)
     find_lex $P114, "%exports"
     unless_null $P114, vivify_32
-    new $P114, "Hash"
+    $P114 = root_new ['parrot';'Hash']
     store_lex "%exports", $P114
   vivify_32:
     set $P115, $P114[$P113]
     unless_null $P115, vivify_33
-    new $P115, "Hash"
+    $P115 = root_new ['parrot';'Hash']
     set $P114[$P113], $P115
   vivify_33:
     set $P115[$P111], $P109
@@ -5969,7 +6226,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block82"  :anon :subid("14_1261064006.8204") :outer("13_1261064006.8204")
+.sub "_block82"  :anon :subid("14_1267204686.55407") :outer("13_1267204686.55407")
     .param pmc param_85
 .annotate "line", 34
     new $P84, "Undef"
@@ -5979,7 +6236,7 @@
     set $S87, $P86
     find_lex $P88, "%source"
     unless_null $P88, vivify_35
-    new $P88, "Hash"
+    $P88 = root_new ['parrot';'Hash']
   vivify_35:
     set $P89, $P88[$S87]
     unless_null $P89, vivify_36
@@ -5993,12 +6250,12 @@
     $P93 = "value_type"($P92)
     find_lex $P94, "%exports"
     unless_null $P94, vivify_37
-    new $P94, "Hash"
+    $P94 = root_new ['parrot';'Hash']
     store_lex "%exports", $P94
   vivify_37:
     set $P95, $P94[$P93]
     unless_null $P95, vivify_38
-    new $P95, "Hash"
+    $P95 = root_new ['parrot';'Hash']
     set $P94[$P93], $P95
   vivify_38:
     set $P95[$P91], $P90
@@ -6008,7 +6265,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "get_module"  :subid("16_1261064006.8204") :method :outer("11_1261064006.8204")
+.sub "get_module"  :subid("16_1267204686.55407") :method :outer("11_1267204686.55407")
     .param pmc param_124
 .annotate "line", 47
     new $P123, 'ExceptionHandler'
@@ -6018,7 +6275,7 @@
     .lex "self", self
     .lex "$name", param_124
 .annotate "line", 48
-    new $P125, "ResizablePMCArray"
+    $P125 = root_new ['parrot';'ResizablePMCArray']
     .lex "@name", $P125
     find_lex $P126, "self"
     find_lex $P127, "$name"
@@ -6048,7 +6305,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "language"  :subid("17_1261064006.8204") :method :outer("11_1261064006.8204")
+.sub "language"  :subid("17_1267204686.55407") :method :outer("11_1267204686.55407")
     .param pmc param_140 :optional
     .param int has_param_140 :opt_flag
 .annotate "line", 53
@@ -6092,10 +6349,10 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "load_module"  :subid("18_1261064006.8204") :method :outer("11_1261064006.8204")
+.sub "load_module"  :subid("18_1267204686.55407") :method :outer("11_1267204686.55407")
     .param pmc param_155
 .annotate "line", 61
-    .const 'Sub' $P165 = "19_1261064006.8204" 
+    .const 'Sub' $P165 = "19_1267204686.55407" 
     capture_lex $P165
     new $P154, 'ExceptionHandler'
     set_addr $P154, control_153
@@ -6122,7 +6379,7 @@
     assign $P163, 0
     store_lex "$loaded", $P163
 .annotate "line", 64
-    .const 'Sub' $P165 = "19_1261064006.8204" 
+    .const 'Sub' $P165 = "19_1267204686.55407" 
     capture_lex $P165
     $P165()
 .annotate "line", 65
@@ -6151,7 +6408,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block164"  :anon :subid("19_1261064006.8204") :outer("18_1261064006.8204")
+.sub "_block164"  :anon :subid("19_1267204686.55407") :outer("18_1267204686.55407")
 .annotate "line", 64
     new $P172, 'ExceptionHandler'
     set_addr $P172, control_171
@@ -6184,11 +6441,11 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "import"  :subid("20_1261064006.8204") :method :outer("11_1261064006.8204")
+.sub "import"  :subid("20_1267204686.55407") :method :outer("11_1267204686.55407")
     .param pmc param_190
     .param pmc param_191
 .annotate "line", 69
-    .const 'Sub' $P197 = "21_1261064006.8204" 
+    .const 'Sub' $P197 = "21_1267204686.55407" 
     capture_lex $P197
     new $P189, 'ExceptionHandler'
     set_addr $P189, control_188
@@ -6210,7 +6467,7 @@
     unless $P192, loop278_done
     shift $P195, $P192
   loop278_redo:
-    .const 'Sub' $P197 = "21_1261064006.8204" 
+    .const 'Sub' $P197 = "21_1267204686.55407" 
     capture_lex $P197
     $P197($P195)
   loop278_next:
@@ -6235,20 +6492,20 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block196"  :anon :subid("21_1261064006.8204") :outer("20_1261064006.8204")
+.sub "_block196"  :anon :subid("21_1267204686.55407") :outer("20_1267204686.55407")
     .param pmc param_200
 .annotate "line", 70
-    .const 'Sub' $P267 = "24_1261064006.8204" 
+    .const 'Sub' $P267 = "24_1267204686.55407" 
     capture_lex $P267
-    .const 'Sub' $P247 = "23_1261064006.8204" 
+    .const 'Sub' $P247 = "23_1267204686.55407" 
     capture_lex $P247
-    .const 'Sub' $P218 = "22_1261064006.8204" 
+    .const 'Sub' $P218 = "22_1267204686.55407" 
     capture_lex $P218
 .annotate "line", 71
     new $P198, "Undef"
     .lex "$type", $P198
 .annotate "line", 72
-    new $P199, "Hash"
+    $P199 = root_new ['parrot';'Hash']
     .lex "%items", $P199
     .lex "$_", param_200
 .annotate "line", 71
@@ -6290,7 +6547,7 @@
     unless $P262, loop275_done
     shift $P265, $P262
   loop275_redo:
-    .const 'Sub' $P267 = "24_1261064006.8204" 
+    .const 'Sub' $P267 = "24_1267204686.55407" 
     capture_lex $P267
     $P267($P265)
   loop275_next:
@@ -6322,7 +6579,7 @@
     unless $P242, loop259_done
     shift $P245, $P242
   loop259_redo:
-    .const 'Sub' $P247 = "23_1261064006.8204" 
+    .const 'Sub' $P247 = "23_1267204686.55407" 
     capture_lex $P247
     $P247($P245)
   loop259_next:
@@ -6356,7 +6613,7 @@
     unless $P213, loop231_done
     shift $P216, $P213
   loop231_redo:
-    .const 'Sub' $P218 = "22_1261064006.8204" 
+    .const 'Sub' $P218 = "22_1267204686.55407" 
     capture_lex $P218
     $P218($P216)
   loop231_next:
@@ -6379,7 +6636,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block266"  :anon :subid("24_1261064006.8204") :outer("21_1261064006.8204")
+.sub "_block266"  :anon :subid("24_1267204686.55407") :outer("21_1267204686.55407")
     .param pmc param_268
 .annotate "line", 80
     .lex "$_", param_268
@@ -6390,7 +6647,7 @@
     set $S273, $P272
     find_lex $P274, "$target"
     unless_null $P274, vivify_44
-    new $P274, "Hash"
+    $P274 = root_new ['parrot';'Hash']
     store_lex "$target", $P274
   vivify_44:
     set $P274[$S273], $P270
@@ -6399,7 +6656,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block246"  :anon :subid("23_1261064006.8204") :outer("21_1261064006.8204")
+.sub "_block246"  :anon :subid("23_1267204686.55407") :outer("21_1267204686.55407")
     .param pmc param_248
 .annotate "line", 77
     .lex "$_", param_248
@@ -6419,7 +6676,7 @@
 
 
 .namespace ["HLL";"Compiler"]
-.sub "_block217"  :anon :subid("22_1261064006.8204") :outer("21_1261064006.8204")
+.sub "_block217"  :anon :subid("22_1267204686.55407") :outer("21_1267204686.55407")
     .param pmc param_219
 .annotate "line", 74
     .lex "$_", param_219

Modified: branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir
==============================================================================
--- branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir	Sun Mar  7 17:00:27 2010	(r44742)
+++ branches/ops_pct/ext/nqp-rx/src/stage0/NQP-s0.pir	Sun Mar  7 19:33:20 2010	(r44743)
@@ -15,387 +15,387 @@
 ### .include 'gen/nqp-grammar.pir'
 
 .namespace []
-.sub "_block11"  :anon :subid("10_1261064023.05912")
+.sub "_block11"  :anon :subid("10_1267204702.05125")
 .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
-    $P1291 = $P14()
+    $P1296 = $P14()
 .annotate "line", 1
-    .return ($P1291)
+    .return ($P1296)
 .end
 
 
 .namespace []
-.sub "" :load :init :subid("post331") :outer("10_1261064023.05912")
+.sub "" :load :init :subid("post331") :outer("10_1267204702.05125")
 .annotate "line", 0
-    .const 'Sub' $P12 = "10_1261064023.05912" 
+    .const 'Sub' $P12 = "10_1267204702.05125" 
     .local pmc block
     set block, $P12
-    $P1292 = get_root_global ["parrot"], "P6metaclass"
-    $P1292."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
+    $P1297 = get_root_global ["parrot"], "P6metaclass"
+    $P1297."new_class"("NQP::Grammar", "HLL::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block13"  :subid("11_1261064023.05912") :outer("10_1261064023.05912")
+.sub "_block13"  :subid("11_1267204702.05125") :outer("10_1267204702.05125")
 .annotate "line", 4
-    get_hll_global $P1235, ["NQP";"Regex"], "_block1234" 
-    capture_lex $P1235
-    .const 'Sub' $P1221 = "317_1261064023.05912" 
-    capture_lex $P1221
-    .const 'Sub' $P1215 = "315_1261064023.05912" 
-    capture_lex $P1215
-    .const 'Sub' $P1209 = "313_1261064023.05912" 
-    capture_lex $P1209
-    .const 'Sub' $P1202 = "311_1261064023.05912" 
-    capture_lex $P1202
-    .const 'Sub' $P1195 = "309_1261064023.05912" 
-    capture_lex $P1195
-    .const 'Sub' $P1188 = "307_1261064023.05912" 
-    capture_lex $P1188
-    .const 'Sub' $P1181 = "305_1261064023.05912" 
-    capture_lex $P1181
-    .const 'Sub' $P1175 = "303_1261064023.05912" 
-    capture_lex $P1175
-    .const 'Sub' $P1168 = "301_1261064023.05912" 
-    capture_lex $P1168
-    .const 'Sub' $P1161 = "299_1261064023.05912" 
-    capture_lex $P1161
-    .const 'Sub' $P1154 = "297_1261064023.05912" 
-    capture_lex $P1154
-    .const 'Sub' $P1147 = "295_1261064023.05912" 
-    capture_lex $P1147
-    .const 'Sub' $P1140 = "293_1261064023.05912" 
-    capture_lex $P1140
-    .const 'Sub' $P1133 = "291_1261064023.05912" 
-    capture_lex $P1133
-    .const 'Sub' $P1126 = "289_1261064023.05912" 
-    capture_lex $P1126
-    .const 'Sub' $P1119 = "287_1261064023.05912" 
-    capture_lex $P1119
-    .const 'Sub' $P1112 = "285_1261064023.05912" 
-    capture_lex $P1112
-    .const 'Sub' $P1105 = "283_1261064023.05912" 
-    capture_lex $P1105
-    .const 'Sub' $P1098 = "281_1261064023.05912" 
-    capture_lex $P1098
-    .const 'Sub' $P1091 = "279_1261064023.05912" 
-    capture_lex $P1091
-    .const 'Sub' $P1084 = "277_1261064023.05912" 
-    capture_lex $P1084
-    .const 'Sub' $P1077 = "275_1261064023.05912" 
-    capture_lex $P1077
-    .const 'Sub' $P1070 = "273_1261064023.05912" 
-    capture_lex $P1070
-    .const 'Sub' $P1063 = "271_1261064023.05912" 
-    capture_lex $P1063
-    .const 'Sub' $P1056 = "269_1261064023.05912" 
-    capture_lex $P1056
-    .const 'Sub' $P1049 = "267_1261064023.05912" 
-    capture_lex $P1049
-    .const 'Sub' $P1042 = "265_1261064023.05912" 
-    capture_lex $P1042
-    .const 'Sub' $P1035 = "263_1261064023.05912" 
-    capture_lex $P1035
-    .const 'Sub' $P1028 = "261_1261064023.05912" 
-    capture_lex $P1028
-    .const 'Sub' $P1021 = "259_1261064023.05912" 
-    capture_lex $P1021
-    .const 'Sub' $P1014 = "257_1261064023.05912" 
-    capture_lex $P1014
-    .const 'Sub' $P1007 = "255_1261064023.05912" 
-    capture_lex $P1007
-    .const 'Sub' $P1000 = "253_1261064023.05912" 
-    capture_lex $P1000
-    .const 'Sub' $P993 = "251_1261064023.05912" 
-    capture_lex $P993
-    .const 'Sub' $P987 = "249_1261064023.05912" 
-    capture_lex $P987
-    .const 'Sub' $P980 = "247_1261064023.05912" 
-    capture_lex $P980
-    .const 'Sub' $P973 = "245_1261064023.05912" 
-    capture_lex $P973
-    .const 'Sub' $P966 = "243_1261064023.05912" 
-    capture_lex $P966
-    .const 'Sub' $P959 = "241_1261064023.05912" 
-    capture_lex $P959
-    .const 'Sub' $P952 = "239_1261064023.05912" 
-    capture_lex $P952
-    .const 'Sub' $P945 = "237_1261064023.05912" 
-    capture_lex $P945
-    .const 'Sub' $P938 = "235_1261064023.05912" 
-    capture_lex $P938
-    .const 'Sub' $P932 = "233_1261064023.05912" 
-    capture_lex $P932
-    .const 'Sub' $P926 = "231_1261064023.05912" 
+    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' $P921 = "229_1261064023.05912" 
-    capture_lex $P921
-    .const 'Sub' $P915 = "227_1261064023.05912" 
-    capture_lex $P915
-    .const 'Sub' $P909 = "225_1261064023.05912" 
+    .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 = "223_1261064023.05912" 
+    .const 'Sub' $P904 = "221_1267204702.05125" 
     capture_lex $P904
-    .const 'Sub' $P899 = "221_1261064023.05912" 
-    capture_lex $P899
-    .const 'Sub' $P892 = "219_1261064023.05912" 
-    capture_lex $P892
-    .const 'Sub' $P884 = "217_1261064023.05912" 
+    .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 = "215_1261064023.05912" 
+    .const 'Sub' $P879 = "213_1267204702.05125" 
     capture_lex $P879
-    .const 'Sub' $P874 = "213_1261064023.05912" 
+    .const 'Sub' $P874 = "211_1267204702.05125" 
     capture_lex $P874
-    .const 'Sub' $P869 = "211_1261064023.05912" 
-    capture_lex $P869
-    .const 'Sub' $P861 = "209_1261064023.05912" 
-    capture_lex $P861
-    .const 'Sub' $P853 = "207_1261064023.05912" 
+    .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 = "205_1261064023.05912" 
+    .const 'Sub' $P848 = "203_1267204702.05125" 
     capture_lex $P848
-    .const 'Sub' $P843 = "203_1261064023.05912" 
-    capture_lex $P843
-    .const 'Sub' $P837 = "201_1261064023.05912" 
-    capture_lex $P837
-    .const 'Sub' $P831 = "199_1261064023.05912" 
-    capture_lex $P831
-    .const 'Sub' $P825 = "197_1261064023.05912" 
-    capture_lex $P825
-    .const 'Sub' $P819 = "195_1261064023.05912" 
-    capture_lex $P819
-    .const 'Sub' $P813 = "193_1261064023.05912" 
+    .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 = "191_1261064023.05912" 
+    .const 'Sub' $P808 = "189_1267204702.05125" 
     capture_lex $P808
-    .const 'Sub' $P803 = "189_1261064023.05912" 
-    capture_lex $P803
-    .const 'Sub' $P790 = "185_1261064023.05912" 
-    capture_lex $P790
-    .const 'Sub' $P782 = "183_1261064023.05912" 
-    capture_lex $P782
-    .const 'Sub' $P776 = "181_1261064023.05912" 
-    capture_lex $P776
-    .const 'Sub' $P769 = "179_1261064023.05912" 
-    capture_lex $P769
-    .const 'Sub' $P763 = "177_1261064023.05912" 
-    capture_lex $P763
-    .const 'Sub' $P755 = "175_1261064023.05912" 
-    capture_lex $P755
-    .const 'Sub' $P747 = "173_1261064023.05912" 
-    capture_lex $P747
-    .const 'Sub' $P741 = "171_1261064023.05912" 
-    capture_lex $P741
-    .const 'Sub' $P735 = "169_1261064023.05912" 
-    capture_lex $P735
-    .const 'Sub' $P720 = "165_1261064023.05912" 
-    capture_lex $P720
-    .const 'Sub' $P688 = "163_1261064023.05912" 
+    .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_1261064023.05912" 
+    .const 'Sub' $P680 = "161_1267204702.05125" 
     capture_lex $P680
-    .const 'Sub' $P674 = "159_1261064023.05912" 
+    .const 'Sub' $P674 = "159_1267204702.05125" 
     capture_lex $P674
-    .const 'Sub' $P664 = "157_1261064023.05912" 
+    .const 'Sub' $P664 = "157_1267204702.05125" 
     capture_lex $P664
-    .const 'Sub' $P649 = "155_1261064023.05912" 
+    .const 'Sub' $P649 = "155_1267204702.05125" 
     capture_lex $P649
-    .const 'Sub' $P640 = "153_1261064023.05912" 
+    .const 'Sub' $P640 = "153_1267204702.05125" 
     capture_lex $P640
-    .const 'Sub' $P621 = "151_1261064023.05912" 
+    .const 'Sub' $P621 = "151_1267204702.05125" 
     capture_lex $P621
-    .const 'Sub' $P597 = "149_1261064023.05912" 
+    .const 'Sub' $P597 = "149_1267204702.05125" 
     capture_lex $P597
-    .const 'Sub' $P590 = "147_1261064023.05912" 
+    .const 'Sub' $P590 = "147_1267204702.05125" 
     capture_lex $P590
-    .const 'Sub' $P583 = "145_1261064023.05912" 
+    .const 'Sub' $P583 = "145_1267204702.05125" 
     capture_lex $P583
-    .const 'Sub' $P573 = "141_1261064023.05912" 
+    .const 'Sub' $P573 = "141_1267204702.05125" 
     capture_lex $P573
-    .const 'Sub' $P562 = "139_1261064023.05912" 
+    .const 'Sub' $P562 = "139_1267204702.05125" 
     capture_lex $P562
-    .const 'Sub' $P555 = "137_1261064023.05912" 
+    .const 'Sub' $P555 = "137_1267204702.05125" 
     capture_lex $P555
-    .const 'Sub' $P548 = "135_1261064023.05912" 
+    .const 'Sub' $P548 = "135_1267204702.05125" 
     capture_lex $P548
-    .const 'Sub' $P541 = "133_1261064023.05912" 
+    .const 'Sub' $P541 = "133_1267204702.05125" 
     capture_lex $P541
-    .const 'Sub' $P514 = "129_1261064023.05912" 
+    .const 'Sub' $P514 = "129_1267204702.05125" 
     capture_lex $P514
-    .const 'Sub' $P505 = "127_1261064023.05912" 
+    .const 'Sub' $P505 = "127_1267204702.05125" 
     capture_lex $P505
-    .const 'Sub' $P498 = "125_1261064023.05912" 
+    .const 'Sub' $P498 = "125_1267204702.05125" 
     capture_lex $P498
-    .const 'Sub' $P489 = "121_1261064023.05912" 
+    .const 'Sub' $P489 = "121_1267204702.05125" 
     capture_lex $P489
-    .const 'Sub' $P484 = "119_1261064023.05912" 
+    .const 'Sub' $P484 = "119_1267204702.05125" 
     capture_lex $P484
-    .const 'Sub' $P472 = "117_1261064023.05912" 
+    .const 'Sub' $P472 = "117_1267204702.05125" 
     capture_lex $P472
-    .const 'Sub' $P460 = "115_1261064023.05912" 
+    .const 'Sub' $P460 = "115_1267204702.05125" 
     capture_lex $P460
-    .const 'Sub' $P452 = "113_1261064023.05912" 
+    .const 'Sub' $P452 = "113_1267204702.05125" 
     capture_lex $P452
-    .const 'Sub' $P447 = "111_1261064023.05912" 
+    .const 'Sub' $P447 = "111_1267204702.05125" 
     capture_lex $P447
-    .const 'Sub' $P441 = "109_1261064023.05912" 
+    .const 'Sub' $P441 = "109_1267204702.05125" 
     capture_lex $P441
-    .const 'Sub' $P435 = "107_1261064023.05912" 
+    .const 'Sub' $P435 = "107_1267204702.05125" 
     capture_lex $P435
-    .const 'Sub' $P429 = "105_1261064023.05912" 
+    .const 'Sub' $P429 = "105_1267204702.05125" 
     capture_lex $P429
-    .const 'Sub' $P423 = "103_1261064023.05912" 
+    .const 'Sub' $P423 = "103_1267204702.05125" 
     capture_lex $P423
-    .const 'Sub' $P417 = "101_1261064023.05912" 
+    .const 'Sub' $P417 = "101_1267204702.05125" 
     capture_lex $P417
-    .const 'Sub' $P411 = "99_1261064023.05912" 
+    .const 'Sub' $P411 = "99_1267204702.05125" 
     capture_lex $P411
-    .const 'Sub' $P405 = "97_1261064023.05912" 
+    .const 'Sub' $P405 = "97_1267204702.05125" 
     capture_lex $P405
-    .const 'Sub' $P399 = "95_1261064023.05912" 
+    .const 'Sub' $P399 = "95_1267204702.05125" 
     capture_lex $P399
-    .const 'Sub' $P391 = "93_1261064023.05912" 
+    .const 'Sub' $P391 = "93_1267204702.05125" 
     capture_lex $P391
-    .const 'Sub' $P383 = "91_1261064023.05912" 
+    .const 'Sub' $P383 = "91_1267204702.05125" 
     capture_lex $P383
-    .const 'Sub' $P371 = "87_1261064023.05912" 
+    .const 'Sub' $P371 = "87_1267204702.05125" 
     capture_lex $P371
-    .const 'Sub' $P363 = "85_1261064023.05912" 
+    .const 'Sub' $P363 = "85_1267204702.05125" 
     capture_lex $P363
-    .const 'Sub' $P353 = "81_1261064023.05912" 
+    .const 'Sub' $P353 = "81_1267204702.05125" 
     capture_lex $P353
-    .const 'Sub' $P346 = "79_1261064023.05912" 
+    .const 'Sub' $P346 = "79_1267204702.05125" 
     capture_lex $P346
-    .const 'Sub' $P339 = "77_1261064023.05912" 
+    .const 'Sub' $P339 = "77_1267204702.05125" 
     capture_lex $P339
-    .const 'Sub' $P327 = "73_1261064023.05912" 
+    .const 'Sub' $P327 = "73_1267204702.05125" 
     capture_lex $P327
-    .const 'Sub' $P319 = "71_1261064023.05912" 
+    .const 'Sub' $P319 = "71_1267204702.05125" 
     capture_lex $P319
-    .const 'Sub' $P311 = "69_1261064023.05912" 
+    .const 'Sub' $P311 = "69_1267204702.05125" 
     capture_lex $P311
-    .const 'Sub' $P291 = "67_1261064023.05912" 
+    .const 'Sub' $P291 = "67_1267204702.05125" 
     capture_lex $P291
-    .const 'Sub' $P282 = "65_1261064023.05912" 
+    .const 'Sub' $P282 = "65_1267204702.05125" 
     capture_lex $P282
-    .const 'Sub' $P264 = "62_1261064023.05912" 
+    .const 'Sub' $P264 = "62_1267204702.05125" 
     capture_lex $P264
-    .const 'Sub' $P244 = "60_1261064023.05912" 
+    .const 'Sub' $P244 = "60_1267204702.05125" 
     capture_lex $P244
-    .const 'Sub' $P235 = "56_1261064023.05912" 
+    .const 'Sub' $P235 = "56_1267204702.05125" 
     capture_lex $P235
-    .const 'Sub' $P230 = "54_1261064023.05912" 
+    .const 'Sub' $P230 = "54_1267204702.05125" 
     capture_lex $P230
-    .const 'Sub' $P221 = "50_1261064023.05912" 
+    .const 'Sub' $P221 = "50_1267204702.05125" 
     capture_lex $P221
-    .const 'Sub' $P216 = "48_1261064023.05912" 
+    .const 'Sub' $P216 = "48_1267204702.05125" 
     capture_lex $P216
-    .const 'Sub' $P208 = "46_1261064023.05912" 
+    .const 'Sub' $P208 = "46_1267204702.05125" 
     capture_lex $P208
-    .const 'Sub' $P201 = "44_1261064023.05912" 
+    .const 'Sub' $P201 = "44_1267204702.05125" 
     capture_lex $P201
-    .const 'Sub' $P195 = "42_1261064023.05912" 
+    .const 'Sub' $P195 = "42_1267204702.05125" 
     capture_lex $P195
-    .const 'Sub' $P187 = "40_1261064023.05912" 
+    .const 'Sub' $P187 = "40_1267204702.05125" 
     capture_lex $P187
-    .const 'Sub' $P181 = "38_1261064023.05912" 
+    .const 'Sub' $P181 = "38_1267204702.05125" 
     capture_lex $P181
-    .const 'Sub' $P175 = "36_1261064023.05912" 
+    .const 'Sub' $P175 = "36_1267204702.05125" 
     capture_lex $P175
-    .const 'Sub' $P159 = "33_1261064023.05912" 
+    .const 'Sub' $P159 = "33_1267204702.05125" 
     capture_lex $P159
-    .const 'Sub' $P146 = "31_1261064023.05912" 
+    .const 'Sub' $P146 = "31_1267204702.05125" 
     capture_lex $P146
-    .const 'Sub' $P139 = "29_1261064023.05912" 
+    .const 'Sub' $P139 = "29_1267204702.05125" 
     capture_lex $P139
-    .const 'Sub' $P96 = "26_1261064023.05912" 
+    .const 'Sub' $P96 = "26_1267204702.05125" 
     capture_lex $P96
-    .const 'Sub' $P78 = "23_1261064023.05912" 
+    .const 'Sub' $P78 = "23_1267204702.05125" 
     capture_lex $P78
-    .const 'Sub' $P68 = "21_1261064023.05912" 
+    .const 'Sub' $P68 = "21_1267204702.05125" 
     capture_lex $P68
-    .const 'Sub' $P54 = "19_1261064023.05912" 
+    .const 'Sub' $P54 = "19_1267204702.05125" 
     capture_lex $P54
-    .const 'Sub' $P46 = "17_1261064023.05912" 
+    .const 'Sub' $P46 = "17_1267204702.05125" 
     capture_lex $P46
-    .const 'Sub' $P39 = "15_1261064023.05912" 
+    .const 'Sub' $P39 = "15_1267204702.05125" 
     capture_lex $P39
-    .const 'Sub' $P33 = "13_1261064023.05912" 
+    .const 'Sub' $P33 = "13_1267204702.05125" 
     capture_lex $P33
-    .const 'Sub' $P15 = "12_1261064023.05912" 
+    .const 'Sub' $P15 = "12_1267204702.05125" 
     capture_lex $P15
-.annotate "line", 527
-    get_hll_global $P1235, ["NQP";"Regex"], "_block1234" 
-    capture_lex $P1235
-    $P1274 = $P1235()
+.annotate "line", 531
+    get_hll_global $P1240, ["NQP";"Regex"], "_block1239" 
+    capture_lex $P1240
+    $P1279 = $P1240()
 .annotate "line", 4
-    .return ($P1274)
+    .return ($P1279)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "" :load :init :subid("post332") :outer("11_1261064023.05912")
+.sub "" :load :init :subid("post332") :outer("11_1267204702.05125")
 .annotate "line", 4
     get_hll_global $P14, ["NQP";"Grammar"], "_block13" 
     .local pmc block
     set block, $P14
-.annotate "line", 414
-    get_hll_global $P1275, ["NQP"], "Grammar"
-    $P1275."O"(":prec<y=>, :assoc<unary>", "%methodop")
-.annotate "line", 415
-    get_hll_global $P1276, ["NQP"], "Grammar"
-    $P1276."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
-.annotate "line", 416
-    get_hll_global $P1277, ["NQP"], "Grammar"
-    $P1277."O"(":prec<w=>, :assoc<left>", "%exponentiation")
-.annotate "line", 417
-    get_hll_global $P1278, ["NQP"], "Grammar"
-    $P1278."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
 .annotate "line", 418
-    get_hll_global $P1279, ["NQP"], "Grammar"
-    $P1279."O"(":prec<u=>, :assoc<left>", "%multiplicative")
-.annotate "line", 419
     get_hll_global $P1280, ["NQP"], "Grammar"
-    $P1280."O"(":prec<t=>, :assoc<left>", "%additive")
-.annotate "line", 420
+    $P1280."O"(":prec<y=>, :assoc<unary>", "%methodop")
+.annotate "line", 419
     get_hll_global $P1281, ["NQP"], "Grammar"
-    $P1281."O"(":prec<r=>, :assoc<left>", "%concatenation")
-.annotate "line", 421
+    $P1281."O"(":prec<x=>, :assoc<unary>", "%autoincrement")
+.annotate "line", 420
     get_hll_global $P1282, ["NQP"], "Grammar"
-    $P1282."O"(":prec<m=>, :assoc<left>", "%relational")
-.annotate "line", 422
+    $P1282."O"(":prec<w=>, :assoc<left>", "%exponentiation")
+.annotate "line", 421
     get_hll_global $P1283, ["NQP"], "Grammar"
-    $P1283."O"(":prec<l=>, :assoc<left>", "%tight_and")
-.annotate "line", 423
+    $P1283."O"(":prec<v=>, :assoc<unary>", "%symbolic_unary")
+.annotate "line", 422
     get_hll_global $P1284, ["NQP"], "Grammar"
-    $P1284."O"(":prec<k=>, :assoc<left>", "%tight_or")
-.annotate "line", 424
+    $P1284."O"(":prec<u=>, :assoc<left>", "%multiplicative")
+.annotate "line", 423
     get_hll_global $P1285, ["NQP"], "Grammar"
-    $P1285."O"(":prec<j=>, :assoc<right>", "%conditional")
-.annotate "line", 425
+    $P1285."O"(":prec<t=>, :assoc<left>", "%additive")
+.annotate "line", 424
     get_hll_global $P1286, ["NQP"], "Grammar"
-    $P1286."O"(":prec<i=>, :assoc<right>", "%assignment")
-.annotate "line", 426
+    $P1286."O"(":prec<r=>, :assoc<left>", "%concatenation")
+.annotate "line", 425
     get_hll_global $P1287, ["NQP"], "Grammar"
-    $P1287."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
-.annotate "line", 427
+    $P1287."O"(":prec<m=>, :assoc<left>", "%relational")
+.annotate "line", 426
     get_hll_global $P1288, ["NQP"], "Grammar"
-    $P1288."O"(":prec<f=>, :assoc<list>", "%list_infix")
-.annotate "line", 428
+    $P1288."O"(":prec<l=>, :assoc<left>", "%tight_and")
+.annotate "line", 427
     get_hll_global $P1289, ["NQP"], "Grammar"
-    $P1289."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
-.annotate "line", 413
-    $P1290 = get_root_global ["parrot"], "P6metaclass"
-    $P1290."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
+    $P1289."O"(":prec<k=>, :assoc<left>", "%tight_or")
+.annotate "line", 428
+    get_hll_global $P1290, ["NQP"], "Grammar"
+    $P1290."O"(":prec<j=>, :assoc<right>", "%conditional")
+.annotate "line", 429
+    get_hll_global $P1291, ["NQP"], "Grammar"
+    $P1291."O"(":prec<i=>, :assoc<right>", "%assignment")
+.annotate "line", 430
+    get_hll_global $P1292, ["NQP"], "Grammar"
+    $P1292."O"(":prec<g=>, :assoc<list>, :nextterm<nulltermish>", "%comma")
+.annotate "line", 431
+    get_hll_global $P1293, ["NQP"], "Grammar"
+    $P1293."O"(":prec<f=>, :assoc<list>", "%list_infix")
+.annotate "line", 432
+    get_hll_global $P1294, ["NQP"], "Grammar"
+    $P1294."O"(":prec<e=>, :assoc<unary>", "%list_prefix")
+.annotate "line", 417
+    $P1295 = get_root_global ["parrot"], "P6metaclass"
+    $P1295."new_class"("NQP::Regex", "Regex::P6Regex::Grammar" :named("parent"))
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "TOP"  :subid("12_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "TOP"  :subid("12_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     new $P17, 'ExceptionHandler'
     set_addr $P17, control_16
@@ -403,7 +403,7 @@
     push_eh $P17
     .lex "self", self
 .annotate "line", 5
-    new $P18, "Hash"
+    $P18 = root_new ['parrot';'Hash']
     .lex "%*LANG", $P18
 .annotate "line", 10
     new $P19, "Undef"
@@ -478,7 +478,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "identifier"  :subid("13_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "identifier"  :subid("13_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx34_tgt
     .local int rx34_pos
@@ -536,7 +536,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__identifier"  :subid("14_1261064023.05912") :method
+.sub "!PREFIX__identifier"  :subid("14_1267204702.05125") :method
 .annotate "line", 4
     $P36 = self."!PREFIX__!subrule"("ident", "")
     new $P37, "ResizablePMCArray"
@@ -546,7 +546,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "name"  :subid("15_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "name"  :subid("15_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx40_tgt
     .local int rx40_pos
@@ -620,7 +620,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__name"  :subid("16_1261064023.05912") :method
+.sub "!PREFIX__name"  :subid("16_1267204702.05125") :method
 .annotate "line", 4
     new $P42, "ResizablePMCArray"
     push $P42, ""
@@ -629,7 +629,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "deflongname"  :subid("17_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "deflongname"  :subid("17_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx47_tgt
     .local int rx47_pos
@@ -702,7 +702,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__deflongname"  :subid("18_1261064023.05912") :method
+.sub "!PREFIX__deflongname"  :subid("18_1267204702.05125") :method
 .annotate "line", 4
     $P49 = self."!PREFIX__!subrule"("identifier", "")
     new $P50, "ResizablePMCArray"
@@ -712,7 +712,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ENDSTMT"  :subid("19_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "ENDSTMT"  :subid("19_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx55_tgt
     .local int rx55_pos
@@ -844,7 +844,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ENDSTMT"  :subid("20_1261064023.05912") :method
+.sub "!PREFIX__ENDSTMT"  :subid("20_1267204702.05125") :method
 .annotate "line", 4
     new $P57, "ResizablePMCArray"
     push $P57, ""
@@ -853,7 +853,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "ws"  :subid("21_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "ws"  :subid("21_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx69_tgt
     .local int rx69_pos
@@ -979,7 +979,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__ws"  :subid("22_1261064023.05912") :method
+.sub "!PREFIX__ws"  :subid("22_1267204702.05125") :method
 .annotate "line", 4
     new $P71, "ResizablePMCArray"
     push $P71, ""
@@ -989,9 +989,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "unv"  :subid("23_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "unv"  :subid("23_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .const 'Sub' $P86 = "25_1261064023.05912" 
+    .const 'Sub' $P86 = "25_1267204702.05125" 
     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_1261064023.05912" 
+    .const 'Sub' $P86 = "25_1267204702.05125" 
     capture_lex $P86
     $P10 = rx79_cur."before"($P86)
     unless $P10, rx79_fail
@@ -1116,7 +1116,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__unv"  :subid("24_1261064023.05912") :method
+.sub "!PREFIX__unv"  :subid("24_1267204702.05125") :method
 .annotate "line", 4
     new $P81, "ResizablePMCArray"
     push $P81, ""
@@ -1127,7 +1127,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block85"  :anon :subid("25_1261064023.05912") :method :outer("23_1261064023.05912")
+.sub "_block85"  :anon :subid("25_1267204702.05125") :method :outer("23_1267204702.05125")
 .annotate "line", 44
     .local string rx87_tgt
     .local int rx87_pos
@@ -1217,9 +1217,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pod_comment"  :subid("26_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "pod_comment"  :subid("26_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .const 'Sub' $P131 = "28_1261064023.05912" 
+    .const 'Sub' $P131 = "28_1267204702.05125" 
     capture_lex $P131
     .local string rx97_tgt
     .local int rx97_pos
@@ -1651,7 +1651,7 @@
 .annotate "line", 67
   # rx subrule "before" subtype=zerowidth negate=
     rx97_cur."!cursor_pos"(rx97_pos)
-    .const 'Sub' $P131 = "28_1261064023.05912" 
+    .const 'Sub' $P131 = "28_1267204702.05125" 
     capture_lex $P131
     $P10 = rx97_cur."before"($P131)
     unless $P10, rx97_fail
@@ -1718,7 +1718,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pod_comment"  :subid("27_1261064023.05912") :method
+.sub "!PREFIX__pod_comment"  :subid("27_1267204702.05125") :method
 .annotate "line", 4
     new $P99, "ResizablePMCArray"
     push $P99, ""
@@ -1727,7 +1727,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block130"  :anon :subid("28_1261064023.05912") :method :outer("26_1261064023.05912")
+.sub "_block130"  :anon :subid("28_1267204702.05125") :method :outer("26_1267204702.05125")
 .annotate "line", 67
     .local string rx132_tgt
     .local int rx132_pos
@@ -1810,7 +1810,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "comp_unit"  :subid("29_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "comp_unit"  :subid("29_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx140_tgt
     .local int rx140_pos
@@ -1889,7 +1889,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__comp_unit"  :subid("30_1261064023.05912") :method
+.sub "!PREFIX__comp_unit"  :subid("30_1267204702.05125") :method
 .annotate "line", 4
     $P142 = self."!PREFIX__!subrule"("", "")
     new $P143, "ResizablePMCArray"
@@ -1899,7 +1899,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statementlist"  :subid("31_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statementlist"  :subid("31_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx147_tgt
     .local int rx147_pos
@@ -2007,7 +2007,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statementlist"  :subid("32_1261064023.05912") :method
+.sub "!PREFIX__statementlist"  :subid("32_1267204702.05125") :method
 .annotate "line", 4
     new $P149, "ResizablePMCArray"
     push $P149, ""
@@ -2017,9 +2017,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement"  :subid("33_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement"  :subid("33_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .const 'Sub' $P165 = "35_1261064023.05912" 
+    .const 'Sub' $P165 = "35_1267204702.05125" 
     capture_lex $P165
     .local string rx160_tgt
     .local int rx160_pos
@@ -2029,7 +2029,7 @@
     .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_loop", "statement_mod_cond")
+    rx160_cur."!cursor_caparray"("statement_mod_cond", "statement_mod_loop")
     .lex unicode:"$\x{a2}", rx160_cur
     .local pmc match
     .lex "$/", match
@@ -2054,7 +2054,7 @@
 .annotate "line", 89
   # rx subrule "before" subtype=zerowidth negate=1
     rx160_cur."!cursor_pos"(rx160_pos)
-    .const 'Sub' $P165 = "35_1261064023.05912" 
+    .const 'Sub' $P165 = "35_1267204702.05125" 
     capture_lex $P165
     $P10 = rx160_cur."before"($P165)
     if $P10, rx160_fail
@@ -2085,7 +2085,7 @@
     $P10 = rx160_cur."ws"()
     unless $P10, rx160_fail
     rx160_pos = $P10."pos"()
-.annotate "line", 96
+.annotate "line", 97
   # rx rxquantr170 ** 0..1
     set_addr $I174, rxquantr170_done
     rx160_cur."!mark_push"(0, rx160_pos, $I174)
@@ -2095,6 +2095,15 @@
     set_addr $I10, alt171_1
     rx160_cur."!mark_push"(0, rx160_pos, $I10)
 .annotate "line", 94
+  # 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
   # rx subrule "statement_mod_cond" subtype=capture negate=
     rx160_cur."!cursor_pos"(rx160_pos)
     $P10 = rx160_cur."statement_mod_cond"()
@@ -2116,8 +2125,8 @@
     (rx160_rep) = rx160_cur."!mark_commit"($I173)
   rxquantr172_done:
     goto alt171_end
-  alt171_1:
-.annotate "line", 95
+  alt171_2:
+.annotate "line", 96
   # rx subrule "statement_mod_loop" subtype=capture negate=
     rx160_cur."!cursor_pos"(rx160_pos)
     $P10 = rx160_cur."statement_mod_loop"()
@@ -2126,7 +2135,7 @@
     $P10."!cursor_names"("statement_mod_loop")
     rx160_pos = $P10."pos"()
   alt171_end:
-.annotate "line", 96
+.annotate "line", 97
     (rx160_rep) = rx160_cur."!mark_commit"($I174)
   rxquantr170_done:
   alt169_end:
@@ -2150,7 +2159,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement"  :subid("34_1261064023.05912") :method
+.sub "!PREFIX__statement"  :subid("34_1267204702.05125") :method
 .annotate "line", 4
     new $P162, "ResizablePMCArray"
     push $P162, ""
@@ -2159,7 +2168,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block164"  :anon :subid("35_1261064023.05912") :method :outer("33_1261064023.05912")
+.sub "_block164"  :anon :subid("35_1267204702.05125") :method :outer("33_1267204702.05125")
 .annotate "line", 89
     .local string rx166_tgt
     .local int rx166_pos
@@ -2223,7 +2232,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "eat_terminator"  :subid("36_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "eat_terminator"  :subid("36_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx176_tgt
     .local int rx176_pos
@@ -2255,10 +2264,10 @@
     rx176_cur."!mark_push"(0, rx176_pos, $I10)
   rxscan179_done:
   alt180_0:
-.annotate "line", 100
+.annotate "line", 101
     set_addr $I10, alt180_1
     rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 101
+.annotate "line", 102
   # rx literal  ";"
     add $I11, rx176_pos, 1
     gt $I11, rx176_eos, rx176_fail
@@ -2270,7 +2279,7 @@
   alt180_1:
     set_addr $I10, alt180_2
     rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 102
+.annotate "line", 103
   # rx subrule "MARKED" subtype=zerowidth negate=
     rx176_cur."!cursor_pos"(rx176_pos)
     $P10 = rx176_cur."MARKED"("endstmt")
@@ -2279,18 +2288,18 @@
   alt180_2:
     set_addr $I10, alt180_3
     rx176_cur."!mark_push"(0, rx176_pos, $I10)
-.annotate "line", 103
+.annotate "line", 104
   # 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", 104
+.annotate "line", 105
   # rxanchor eos
     ne rx176_pos, rx176_eos, rx176_fail
   alt180_end:
-.annotate "line", 100
+.annotate "line", 101
   # rx pass
     rx176_cur."!cursor_pass"(rx176_pos, "eat_terminator")
     rx176_cur."!cursor_debug"("PASS  ", "eat_terminator", " at pos=", rx176_pos)
@@ -2310,7 +2319,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__eat_terminator"  :subid("37_1261064023.05912") :method
+.sub "!PREFIX__eat_terminator"  :subid("37_1267204702.05125") :method
 .annotate "line", 4
     new $P178, "ResizablePMCArray"
     push $P178, ""
@@ -2322,7 +2331,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "xblock"  :subid("38_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "xblock"  :subid("38_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx182_tgt
     .local int rx182_pos
@@ -2353,7 +2362,7 @@
     set_addr $I10, rxscan186_loop
     rx182_cur."!mark_push"(0, rx182_pos, $I10)
   rxscan186_done:
-.annotate "line", 108
+.annotate "line", 109
   # rx subrule "EXPR" subtype=capture negate=
     rx182_cur."!cursor_pos"(rx182_pos)
     $P10 = rx182_cur."EXPR"()
@@ -2373,7 +2382,7 @@
     rx182_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("pblock")
     rx182_pos = $P10."pos"()
-.annotate "line", 107
+.annotate "line", 108
   # rx pass
     rx182_cur."!cursor_pass"(rx182_pos, "xblock")
     rx182_cur."!cursor_debug"("PASS  ", "xblock", " at pos=", rx182_pos)
@@ -2393,7 +2402,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__xblock"  :subid("39_1261064023.05912") :method
+.sub "!PREFIX__xblock"  :subid("39_1267204702.05125") :method
 .annotate "line", 4
     $P184 = self."!PREFIX__!subrule"("EXPR", "")
     new $P185, "ResizablePMCArray"
@@ -2403,7 +2412,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "pblock"  :subid("40_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "pblock"  :subid("40_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx188_tgt
     .local int rx188_pos
@@ -2435,22 +2444,22 @@
     rx188_cur."!mark_push"(0, rx188_pos, $I10)
   rxscan193_done:
   alt194_0:
-.annotate "line", 111
+.annotate "line", 112
     set_addr $I10, alt194_1
     rx188_cur."!mark_push"(0, rx188_pos, $I10)
-.annotate "line", 112
+.annotate "line", 113
   # 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", 113
+.annotate "line", 114
   # 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", 114
+.annotate "line", 115
   # rx subrule "signature" subtype=capture negate=
     rx188_cur."!cursor_pos"(rx188_pos)
     $P10 = rx188_cur."signature"()
@@ -2458,7 +2467,7 @@
     rx188_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("signature")
     rx188_pos = $P10."pos"()
-.annotate "line", 115
+.annotate "line", 116
   # rx subrule "blockoid" subtype=capture negate=
     rx188_cur."!cursor_pos"(rx188_pos)
     $P10 = rx188_cur."blockoid"()
@@ -2466,25 +2475,25 @@
     rx188_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
     rx188_pos = $P10."pos"()
-.annotate "line", 112
+.annotate "line", 113
     goto alt194_end
   alt194_1:
     set_addr $I10, alt194_2
     rx188_cur."!mark_push"(0, rx188_pos, $I10)
-.annotate "line", 116
+.annotate "line", 117
   # rx enumcharlist negate=0 zerowidth
     ge rx188_pos, rx188_eos, rx188_fail
     sub $I10, rx188_pos, rx188_off
     substr $S10, rx188_tgt, $I10, 1
     index $I11, "{", $S10
     lt $I11, 0, rx188_fail
-.annotate "line", 117
+.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", 118
+.annotate "line", 119
   # rx subrule "blockoid" subtype=capture negate=
     rx188_cur."!cursor_pos"(rx188_pos)
     $P10 = rx188_cur."blockoid"()
@@ -2492,17 +2501,17 @@
     rx188_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
     rx188_pos = $P10."pos"()
-.annotate "line", 116
+.annotate "line", 117
     goto alt194_end
   alt194_2:
-.annotate "line", 119
+.annotate "line", 120
   # 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", 111
+.annotate "line", 112
   # rx pass
     rx188_cur."!cursor_pass"(rx188_pos, "pblock")
     rx188_cur."!cursor_debug"("PASS  ", "pblock", " at pos=", rx188_pos)
@@ -2522,7 +2531,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__pblock"  :subid("41_1261064023.05912") :method
+.sub "!PREFIX__pblock"  :subid("41_1267204702.05125") :method
 .annotate "line", 4
     $P190 = self."!PREFIX__!subrule"("", "")
     $P191 = self."!PREFIX__!subrule"("", "")
@@ -2535,7 +2544,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "lambda"  :subid("42_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "lambda"  :subid("42_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx196_tgt
     .local int rx196_pos
@@ -2567,7 +2576,7 @@
     rx196_cur."!mark_push"(0, rx196_pos, $I10)
   rxscan199_done:
   alt200_0:
-.annotate "line", 122
+.annotate "line", 123
     set_addr $I10, alt200_1
     rx196_cur."!mark_push"(0, rx196_pos, $I10)
   # rx literal  "->"
@@ -2606,7 +2615,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__lambda"  :subid("43_1261064023.05912") :method
+.sub "!PREFIX__lambda"  :subid("43_1267204702.05125") :method
 .annotate "line", 4
     new $P198, "ResizablePMCArray"
     push $P198, "<->"
@@ -2616,7 +2625,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "block"  :subid("44_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "block"  :subid("44_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx202_tgt
     .local int rx202_pos
@@ -2648,7 +2657,7 @@
     rx202_cur."!mark_push"(0, rx202_pos, $I10)
   rxscan206_done:
   alt207_0:
-.annotate "line", 125
+.annotate "line", 126
     set_addr $I10, alt207_1
     rx202_cur."!mark_push"(0, rx202_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
@@ -2665,13 +2674,13 @@
     unless $P10, rx202_fail
     rx202_pos = $P10."pos"()
   alt207_end:
-.annotate "line", 126
+.annotate "line", 127
   # 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", 127
+.annotate "line", 128
   # rx subrule "blockoid" subtype=capture negate=
     rx202_cur."!cursor_pos"(rx202_pos)
     $P10 = rx202_cur."blockoid"()
@@ -2679,7 +2688,7 @@
     rx202_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blockoid")
     rx202_pos = $P10."pos"()
-.annotate "line", 124
+.annotate "line", 125
   # rx pass
     rx202_cur."!cursor_pass"(rx202_pos, "block")
     rx202_cur."!cursor_debug"("PASS  ", "block", " at pos=", rx202_pos)
@@ -2699,7 +2708,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__block"  :subid("45_1261064023.05912") :method
+.sub "!PREFIX__block"  :subid("45_1267204702.05125") :method
 .annotate "line", 4
     $P204 = self."!PREFIX__!subrule"("", "")
     new $P205, "ResizablePMCArray"
@@ -2710,7 +2719,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blockoid"  :subid("46_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "blockoid"  :subid("46_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx209_tgt
     .local int rx209_pos
@@ -2741,13 +2750,13 @@
     set_addr $I10, rxscan213_loop
     rx209_cur."!mark_push"(0, rx209_pos, $I10)
   rxscan213_done:
-.annotate "line", 131
+.annotate "line", 132
   # 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", 132
+.annotate "line", 133
   # rx literal  "{"
     add $I11, rx209_pos, 1
     gt $I11, rx209_eos, rx209_fail
@@ -2780,12 +2789,12 @@
     unless $P10, rx209_fail
     rx209_pos = $P10."pos"()
   alt214_end:
-.annotate "line", 133
+.annotate "line", 134
   # rx subrule "ENDSTMT" subtype=zerowidth negate=
     rx209_cur."!cursor_pos"(rx209_pos)
     $P10 = rx209_cur."ENDSTMT"()
     unless $P10, rx209_fail
-.annotate "line", 130
+.annotate "line", 131
   # rx pass
     rx209_cur."!cursor_pass"(rx209_pos, "blockoid")
     rx209_cur."!cursor_debug"("PASS  ", "blockoid", " at pos=", rx209_pos)
@@ -2805,7 +2814,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blockoid"  :subid("47_1261064023.05912") :method
+.sub "!PREFIX__blockoid"  :subid("47_1267204702.05125") :method
 .annotate "line", 4
     $P211 = self."!PREFIX__!subrule"("", "")
     new $P212, "ResizablePMCArray"
@@ -2815,7 +2824,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "newpad"  :subid("48_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "newpad"  :subid("48_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx217_tgt
     .local int rx217_pos
@@ -2846,7 +2855,7 @@
     set_addr $I10, rxscan220_loop
     rx217_cur."!mark_push"(0, rx217_pos, $I10)
   rxscan220_done:
-.annotate "line", 136
+.annotate "line", 137
   # rx pass
     rx217_cur."!cursor_pass"(rx217_pos, "newpad")
     rx217_cur."!cursor_debug"("PASS  ", "newpad", " at pos=", rx217_pos)
@@ -2866,7 +2875,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__newpad"  :subid("49_1261064023.05912") :method
+.sub "!PREFIX__newpad"  :subid("49_1267204702.05125") :method
 .annotate "line", 4
     new $P219, "ResizablePMCArray"
     push $P219, ""
@@ -2875,7 +2884,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "finishpad"  :subid("50_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "finishpad"  :subid("50_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx222_tgt
     .local int rx222_pos
@@ -2906,7 +2915,7 @@
     set_addr $I10, rxscan225_loop
     rx222_cur."!mark_push"(0, rx222_pos, $I10)
   rxscan225_done:
-.annotate "line", 137
+.annotate "line", 138
   # rx pass
     rx222_cur."!cursor_pass"(rx222_pos, "finishpad")
     rx222_cur."!cursor_debug"("PASS  ", "finishpad", " at pos=", rx222_pos)
@@ -2926,7 +2935,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__finishpad"  :subid("51_1261064023.05912") :method
+.sub "!PREFIX__finishpad"  :subid("51_1267204702.05125") :method
 .annotate "line", 4
     new $P224, "ResizablePMCArray"
     push $P224, ""
@@ -2935,23 +2944,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator"  :subid("52_1261064023.05912") :method
-.annotate "line", 139
+.sub "terminator"  :subid("52_1267204702.05125") :method
+.annotate "line", 140
     $P227 = self."!protoregex"("terminator")
     .return ($P227)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator"  :subid("53_1261064023.05912") :method
-.annotate "line", 139
+.sub "!PREFIX__terminator"  :subid("53_1267204702.05125") :method
+.annotate "line", 140
     $P229 = self."!PREFIX__!protoregex"("terminator")
     .return ($P229)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<;>"  :subid("54_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "terminator:sym<;>"  :subid("54_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx231_tgt
     .local int rx231_pos
@@ -2982,7 +2991,7 @@
     set_addr $I10, rxscan234_loop
     rx231_cur."!mark_push"(0, rx231_pos, $I10)
   rxscan234_done:
-.annotate "line", 141
+.annotate "line", 142
   # rx enumcharlist negate=0 zerowidth
     ge rx231_pos, rx231_eos, rx231_fail
     sub $I10, rx231_pos, rx231_off
@@ -3008,7 +3017,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<;>"  :subid("55_1261064023.05912") :method
+.sub "!PREFIX__terminator:sym<;>"  :subid("55_1267204702.05125") :method
 .annotate "line", 4
     new $P233, "ResizablePMCArray"
     push $P233, ";"
@@ -3017,7 +3026,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "terminator:sym<}>"  :subid("56_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "terminator:sym<}>"  :subid("56_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx236_tgt
     .local int rx236_pos
@@ -3048,7 +3057,7 @@
     set_addr $I10, rxscan239_loop
     rx236_cur."!mark_push"(0, rx236_pos, $I10)
   rxscan239_done:
-.annotate "line", 142
+.annotate "line", 143
   # rx enumcharlist negate=0 zerowidth
     ge rx236_pos, rx236_eos, rx236_fail
     sub $I10, rx236_pos, rx236_off
@@ -3074,7 +3083,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__terminator:sym<}>"  :subid("57_1261064023.05912") :method
+.sub "!PREFIX__terminator:sym<}>"  :subid("57_1267204702.05125") :method
 .annotate "line", 4
     new $P238, "ResizablePMCArray"
     push $P238, "}"
@@ -3083,23 +3092,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control"  :subid("58_1261064023.05912") :method
-.annotate "line", 146
+.sub "statement_control"  :subid("58_1267204702.05125") :method
+.annotate "line", 147
     $P241 = self."!protoregex"("statement_control")
     .return ($P241)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control"  :subid("59_1261064023.05912") :method
-.annotate "line", 146
+.sub "!PREFIX__statement_control"  :subid("59_1267204702.05125") :method
+.annotate "line", 147
     $P243 = self."!PREFIX__!protoregex"("statement_control")
     .return ($P243)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<if>"  :subid("60_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_control:sym<if>"  :subid("60_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx245_tgt
     .local int rx245_pos
@@ -3109,7 +3118,7 @@
     .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"("xblock", "else")
+    rx245_cur."!cursor_caparray"("else", "xblock")
     .lex unicode:"$\x{a2}", rx245_cur
     .local pmc match
     .lex "$/", match
@@ -3131,7 +3140,7 @@
     set_addr $I10, rxscan248_loop
     rx245_cur."!mark_push"(0, rx245_pos, $I10)
   rxscan248_done:
-.annotate "line", 149
+.annotate "line", 150
   # rx subcapture "sym"
     set_addr $I10, rxcap_249_fail
     rx245_cur."!mark_push"(0, rx245_pos, $I10)
@@ -3164,7 +3173,7 @@
     $P10 = rx245_cur."ws"()
     unless $P10, rx245_fail
     rx245_pos = $P10."pos"()
-.annotate "line", 150
+.annotate "line", 151
   # rx subrule "xblock" subtype=capture negate=
     rx245_cur."!cursor_pos"(rx245_pos)
     $P10 = rx245_cur."xblock"()
@@ -3177,7 +3186,7 @@
     $P10 = rx245_cur."ws"()
     unless $P10, rx245_fail
     rx245_pos = $P10."pos"()
-.annotate "line", 151
+.annotate "line", 152
   # rx rxquantr252 ** 0..*
     set_addr $I256, rxquantr252_done
     rx245_cur."!mark_push"(0, rx245_pos, $I256)
@@ -3226,7 +3235,7 @@
     $P10 = rx245_cur."ws"()
     unless $P10, rx245_fail
     rx245_pos = $P10."pos"()
-.annotate "line", 152
+.annotate "line", 153
   # rx rxquantr258 ** 0..1
     set_addr $I262, rxquantr258_done
     rx245_cur."!mark_push"(0, rx245_pos, $I262)
@@ -3273,7 +3282,7 @@
     $P10 = rx245_cur."ws"()
     unless $P10, rx245_fail
     rx245_pos = $P10."pos"()
-.annotate "line", 148
+.annotate "line", 149
   # 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)
@@ -3293,7 +3302,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<if>"  :subid("61_1267204702.05125") :method
 .annotate "line", 4
     new $P247, "ResizablePMCArray"
     push $P247, "if"
@@ -3302,9 +3311,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<unless>"  :subid("62_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_control:sym<unless>"  :subid("62_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .const 'Sub' $P275 = "64_1261064023.05912" 
+    .const 'Sub' $P275 = "64_1267204702.05125" 
     capture_lex $P275
     .local string rx265_tgt
     .local int rx265_pos
@@ -3335,7 +3344,7 @@
     set_addr $I10, rxscan268_loop
     rx265_cur."!mark_push"(0, rx265_pos, $I10)
   rxscan268_done:
-.annotate "line", 156
+.annotate "line", 157
   # rx subcapture "sym"
     set_addr $I10, rxcap_269_fail
     rx265_cur."!mark_push"(0, rx265_pos, $I10)
@@ -3368,7 +3377,7 @@
     $P10 = rx265_cur."ws"()
     unless $P10, rx265_fail
     rx265_pos = $P10."pos"()
-.annotate "line", 157
+.annotate "line", 158
   # rx subrule "xblock" subtype=capture negate=
     rx265_cur."!cursor_pos"(rx265_pos)
     $P10 = rx265_cur."xblock"()
@@ -3382,7 +3391,7 @@
     unless $P10, rx265_fail
     rx265_pos = $P10."pos"()
   alt272_0:
-.annotate "line", 158
+.annotate "line", 159
     set_addr $I10, alt272_1
     rx265_cur."!mark_push"(0, rx265_pos, $I10)
   # rx subrule "ws" subtype=method negate=
@@ -3392,7 +3401,7 @@
     rx265_pos = $P10."pos"()
   # rx subrule "before" subtype=zerowidth negate=1
     rx265_cur."!cursor_pos"(rx265_pos)
-    .const 'Sub' $P275 = "64_1261064023.05912" 
+    .const 'Sub' $P275 = "64_1267204702.05125" 
     capture_lex $P275
     $P10 = rx265_cur."before"($P275)
     if $P10, rx265_fail
@@ -3424,7 +3433,7 @@
     $P10 = rx265_cur."ws"()
     unless $P10, rx265_fail
     rx265_pos = $P10."pos"()
-.annotate "line", 155
+.annotate "line", 156
   # 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)
@@ -3444,7 +3453,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<unless>"  :subid("63_1267204702.05125") :method
 .annotate "line", 4
     new $P267, "ResizablePMCArray"
     push $P267, "unless"
@@ -3453,8 +3462,8 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "_block274"  :anon :subid("64_1261064023.05912") :method :outer("62_1261064023.05912")
-.annotate "line", 158
+.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
@@ -3509,7 +3518,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<while>"  :subid("65_1261064023.05912") :method :outer("11_1261064023.05912")
+.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
@@ -3540,7 +3549,7 @@
     set_addr $I10, rxscan286_loop
     rx283_cur."!mark_push"(0, rx283_pos, $I10)
   rxscan286_done:
-.annotate "line", 162
+.annotate "line", 163
   # rx subcapture "sym"
     set_addr $I10, rxcap_288_fail
     rx283_cur."!mark_push"(0, rx283_pos, $I10)
@@ -3586,7 +3595,7 @@
     $P10 = rx283_cur."ws"()
     unless $P10, rx283_fail
     rx283_pos = $P10."pos"()
-.annotate "line", 163
+.annotate "line", 164
   # rx subrule "xblock" subtype=capture negate=
     rx283_cur."!cursor_pos"(rx283_pos)
     $P10 = rx283_cur."xblock"()
@@ -3599,7 +3608,7 @@
     $P10 = rx283_cur."ws"()
     unless $P10, rx283_fail
     rx283_pos = $P10."pos"()
-.annotate "line", 161
+.annotate "line", 162
   # 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)
@@ -3619,7 +3628,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<while>"  :subid("66_1267204702.05125") :method
 .annotate "line", 4
     new $P285, "ResizablePMCArray"
     push $P285, "until"
@@ -3629,7 +3638,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<repeat>"  :subid("67_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_control:sym<repeat>"  :subid("67_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx292_tgt
     .local int rx292_pos
@@ -3660,7 +3669,7 @@
     set_addr $I10, rxscan295_loop
     rx292_cur."!mark_push"(0, rx292_pos, $I10)
   rxscan295_done:
-.annotate "line", 167
+.annotate "line", 168
   # rx subcapture "sym"
     set_addr $I10, rxcap_296_fail
     rx292_cur."!mark_push"(0, rx292_pos, $I10)
@@ -3694,10 +3703,10 @@
     unless $P10, rx292_fail
     rx292_pos = $P10."pos"()
   alt298_0:
-.annotate "line", 168
+.annotate "line", 169
     set_addr $I10, alt298_1
     rx292_cur."!mark_push"(0, rx292_pos, $I10)
-.annotate "line", 169
+.annotate "line", 170
   # rx subrule "ws" subtype=method negate=
     rx292_cur."!cursor_pos"(rx292_pos)
     $P10 = rx292_cur."ws"()
@@ -3762,7 +3771,7 @@
     rx292_pos = $P10."pos"()
     goto alt298_end
   alt298_1:
-.annotate "line", 170
+.annotate "line", 171
   # rx subrule "ws" subtype=method negate=
     rx292_cur."!cursor_pos"(rx292_pos)
     $P10 = rx292_cur."ws"()
@@ -3838,13 +3847,13 @@
     unless $P10, rx292_fail
     rx292_pos = $P10."pos"()
   alt298_end:
-.annotate "line", 171
+.annotate "line", 172
   # 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", 166
+.annotate "line", 167
   # 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)
@@ -3864,7 +3873,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<repeat>"  :subid("68_1267204702.05125") :method
 .annotate "line", 4
     new $P294, "ResizablePMCArray"
     push $P294, "repeat"
@@ -3873,7 +3882,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<for>"  :subid("69_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_control:sym<for>"  :subid("69_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx312_tgt
     .local int rx312_pos
@@ -3904,7 +3913,7 @@
     set_addr $I10, rxscan315_loop
     rx312_cur."!mark_push"(0, rx312_pos, $I10)
   rxscan315_done:
-.annotate "line", 175
+.annotate "line", 176
   # rx subcapture "sym"
     set_addr $I10, rxcap_316_fail
     rx312_cur."!mark_push"(0, rx312_pos, $I10)
@@ -3937,7 +3946,7 @@
     $P10 = rx312_cur."ws"()
     unless $P10, rx312_fail
     rx312_pos = $P10."pos"()
-.annotate "line", 176
+.annotate "line", 177
   # rx subrule "xblock" subtype=capture negate=
     rx312_cur."!cursor_pos"(rx312_pos)
     $P10 = rx312_cur."xblock"()
@@ -3950,7 +3959,7 @@
     $P10 = rx312_cur."ws"()
     unless $P10, rx312_fail
     rx312_pos = $P10."pos"()
-.annotate "line", 174
+.annotate "line", 175
   # 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)
@@ -3970,7 +3979,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<for>"  :subid("70_1267204702.05125") :method
 .annotate "line", 4
     new $P314, "ResizablePMCArray"
     push $P314, "for"
@@ -3979,7 +3988,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CATCH>"  :subid("71_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_control:sym<CATCH>"  :subid("71_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx320_tgt
     .local int rx320_pos
@@ -4010,7 +4019,7 @@
     set_addr $I10, rxscan323_loop
     rx320_cur."!mark_push"(0, rx320_pos, $I10)
   rxscan323_done:
-.annotate "line", 180
+.annotate "line", 181
   # rx subcapture "sym"
     set_addr $I10, rxcap_324_fail
     rx320_cur."!mark_push"(0, rx320_pos, $I10)
@@ -4043,7 +4052,7 @@
     $P10 = rx320_cur."ws"()
     unless $P10, rx320_fail
     rx320_pos = $P10."pos"()
-.annotate "line", 181
+.annotate "line", 182
   # rx subrule "block" subtype=capture negate=
     rx320_cur."!cursor_pos"(rx320_pos)
     $P10 = rx320_cur."block"()
@@ -4056,7 +4065,7 @@
     $P10 = rx320_cur."ws"()
     unless $P10, rx320_fail
     rx320_pos = $P10."pos"()
-.annotate "line", 179
+.annotate "line", 180
   # 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)
@@ -4076,7 +4085,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<CATCH>"  :subid("72_1267204702.05125") :method
 .annotate "line", 4
     new $P322, "ResizablePMCArray"
     push $P322, "CATCH"
@@ -4085,7 +4094,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_control:sym<CONTROL>"  :subid("73_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_control:sym<CONTROL>"  :subid("73_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx328_tgt
     .local int rx328_pos
@@ -4116,7 +4125,7 @@
     set_addr $I10, rxscan331_loop
     rx328_cur."!mark_push"(0, rx328_pos, $I10)
   rxscan331_done:
-.annotate "line", 185
+.annotate "line", 186
   # rx subcapture "sym"
     set_addr $I10, rxcap_332_fail
     rx328_cur."!mark_push"(0, rx328_pos, $I10)
@@ -4149,7 +4158,7 @@
     $P10 = rx328_cur."ws"()
     unless $P10, rx328_fail
     rx328_pos = $P10."pos"()
-.annotate "line", 186
+.annotate "line", 187
   # rx subrule "block" subtype=capture negate=
     rx328_cur."!cursor_pos"(rx328_pos)
     $P10 = rx328_cur."block"()
@@ -4162,7 +4171,7 @@
     $P10 = rx328_cur."ws"()
     unless $P10, rx328_fail
     rx328_pos = $P10."pos"()
-.annotate "line", 184
+.annotate "line", 185
   # 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)
@@ -4182,7 +4191,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1261064023.05912") :method
+.sub "!PREFIX__statement_control:sym<CONTROL>"  :subid("74_1267204702.05125") :method
 .annotate "line", 4
     new $P330, "ResizablePMCArray"
     push $P330, "CONTROL"
@@ -4191,23 +4200,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix"  :subid("75_1261064023.05912") :method
-.annotate "line", 189
+.sub "statement_prefix"  :subid("75_1267204702.05125") :method
+.annotate "line", 190
     $P336 = self."!protoregex"("statement_prefix")
     .return ($P336)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix"  :subid("76_1261064023.05912") :method
-.annotate "line", 189
+.sub "!PREFIX__statement_prefix"  :subid("76_1267204702.05125") :method
+.annotate "line", 190
     $P338 = self."!PREFIX__!protoregex"("statement_prefix")
     .return ($P338)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<INIT>"  :subid("77_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_prefix:sym<INIT>"  :subid("77_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx340_tgt
     .local int rx340_pos
@@ -4238,7 +4247,7 @@
     set_addr $I10, rxscan344_loop
     rx340_cur."!mark_push"(0, rx340_pos, $I10)
   rxscan344_done:
-.annotate "line", 190
+.annotate "line", 191
   # rx subcapture "sym"
     set_addr $I10, rxcap_345_fail
     rx340_cur."!mark_push"(0, rx340_pos, $I10)
@@ -4286,7 +4295,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1261064023.05912") :method
+.sub "!PREFIX__statement_prefix:sym<INIT>"  :subid("78_1267204702.05125") :method
 .annotate "line", 4
     $P342 = self."!PREFIX__!subrule"("blorst", "INIT")
     new $P343, "ResizablePMCArray"
@@ -4296,7 +4305,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_prefix:sym<try>"  :subid("79_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_prefix:sym<try>"  :subid("79_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx347_tgt
     .local int rx347_pos
@@ -4327,7 +4336,7 @@
     set_addr $I10, rxscan351_loop
     rx347_cur."!mark_push"(0, rx347_pos, $I10)
   rxscan351_done:
-.annotate "line", 193
+.annotate "line", 194
   # rx subcapture "sym"
     set_addr $I10, rxcap_352_fail
     rx347_cur."!mark_push"(0, rx347_pos, $I10)
@@ -4349,7 +4358,7 @@
   rxcap_352_fail:
     goto rx347_fail
   rxcap_352_done:
-.annotate "line", 194
+.annotate "line", 195
   # rx subrule "blorst" subtype=capture negate=
     rx347_cur."!cursor_pos"(rx347_pos)
     $P10 = rx347_cur."blorst"()
@@ -4357,7 +4366,7 @@
     rx347_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("blorst")
     rx347_pos = $P10."pos"()
-.annotate "line", 192
+.annotate "line", 193
   # 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)
@@ -4377,7 +4386,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1261064023.05912") :method
+.sub "!PREFIX__statement_prefix:sym<try>"  :subid("80_1267204702.05125") :method
 .annotate "line", 4
     $P349 = self."!PREFIX__!subrule"("blorst", "try")
     new $P350, "ResizablePMCArray"
@@ -4387,7 +4396,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "blorst"  :subid("81_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "blorst"  :subid("81_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx354_tgt
     .local int rx354_pos
@@ -4418,7 +4427,7 @@
     set_addr $I10, rxscan357_loop
     rx354_cur."!mark_push"(0, rx354_pos, $I10)
   rxscan357_done:
-.annotate "line", 198
+.annotate "line", 199
   # rx charclass s
     ge rx354_pos, rx354_eos, rx354_fail
     sub $I10, rx354_pos, rx354_off
@@ -4456,7 +4465,7 @@
     $P10."!cursor_names"("statement")
     rx354_pos = $P10."pos"()
   alt358_end:
-.annotate "line", 197
+.annotate "line", 198
   # rx pass
     rx354_cur."!cursor_pass"(rx354_pos, "blorst")
     rx354_cur."!cursor_debug"("PASS  ", "blorst", " at pos=", rx354_pos)
@@ -4476,7 +4485,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__blorst"  :subid("82_1261064023.05912") :method
+.sub "!PREFIX__blorst"  :subid("82_1267204702.05125") :method
 .annotate "line", 4
     new $P356, "ResizablePMCArray"
     push $P356, ""
@@ -4485,23 +4494,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond"  :subid("83_1261064023.05912") :method
-.annotate "line", 203
+.sub "statement_mod_cond"  :subid("83_1267204702.05125") :method
+.annotate "line", 204
     $P360 = self."!protoregex"("statement_mod_cond")
     .return ($P360)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond"  :subid("84_1261064023.05912") :method
-.annotate "line", 203
+.sub "!PREFIX__statement_mod_cond"  :subid("84_1267204702.05125") :method
+.annotate "line", 204
     $P362 = self."!PREFIX__!protoregex"("statement_mod_cond")
     .return ($P362)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<if>"  :subid("85_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_mod_cond:sym<if>"  :subid("85_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx364_tgt
     .local int rx364_pos
@@ -4532,7 +4541,7 @@
     set_addr $I10, rxscan367_loop
     rx364_cur."!mark_push"(0, rx364_pos, $I10)
   rxscan367_done:
-.annotate "line", 205
+.annotate "line", 206
   # rx subcapture "sym"
     set_addr $I10, rxcap_368_fail
     rx364_cur."!mark_push"(0, rx364_pos, $I10)
@@ -4590,7 +4599,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1261064023.05912") :method
+.sub "!PREFIX__statement_mod_cond:sym<if>"  :subid("86_1267204702.05125") :method
 .annotate "line", 4
     new $P366, "ResizablePMCArray"
     push $P366, "if"
@@ -4599,7 +4608,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_cond:sym<unless>"  :subid("87_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_mod_cond:sym<unless>"  :subid("87_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx372_tgt
     .local int rx372_pos
@@ -4630,7 +4639,7 @@
     set_addr $I10, rxscan375_loop
     rx372_cur."!mark_push"(0, rx372_pos, $I10)
   rxscan375_done:
-.annotate "line", 206
+.annotate "line", 207
   # rx subcapture "sym"
     set_addr $I10, rxcap_376_fail
     rx372_cur."!mark_push"(0, rx372_pos, $I10)
@@ -4688,7 +4697,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1261064023.05912") :method
+.sub "!PREFIX__statement_mod_cond:sym<unless>"  :subid("88_1267204702.05125") :method
 .annotate "line", 4
     new $P374, "ResizablePMCArray"
     push $P374, "unless"
@@ -4697,23 +4706,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop"  :subid("89_1261064023.05912") :method
-.annotate "line", 208
+.sub "statement_mod_loop"  :subid("89_1267204702.05125") :method
+.annotate "line", 209
     $P380 = self."!protoregex"("statement_mod_loop")
     .return ($P380)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop"  :subid("90_1261064023.05912") :method
-.annotate "line", 208
+.sub "!PREFIX__statement_mod_loop"  :subid("90_1267204702.05125") :method
+.annotate "line", 209
     $P382 = self."!PREFIX__!protoregex"("statement_mod_loop")
     .return ($P382)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<while>"  :subid("91_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_mod_loop:sym<while>"  :subid("91_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx384_tgt
     .local int rx384_pos
@@ -4744,7 +4753,7 @@
     set_addr $I10, rxscan387_loop
     rx384_cur."!mark_push"(0, rx384_pos, $I10)
   rxscan387_done:
-.annotate "line", 210
+.annotate "line", 211
   # rx subcapture "sym"
     set_addr $I10, rxcap_388_fail
     rx384_cur."!mark_push"(0, rx384_pos, $I10)
@@ -4802,7 +4811,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1261064023.05912") :method
+.sub "!PREFIX__statement_mod_loop:sym<while>"  :subid("92_1267204702.05125") :method
 .annotate "line", 4
     new $P386, "ResizablePMCArray"
     push $P386, "while"
@@ -4811,7 +4820,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "statement_mod_loop:sym<until>"  :subid("93_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "statement_mod_loop:sym<until>"  :subid("93_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx392_tgt
     .local int rx392_pos
@@ -4842,7 +4851,7 @@
     set_addr $I10, rxscan395_loop
     rx392_cur."!mark_push"(0, rx392_pos, $I10)
   rxscan395_done:
-.annotate "line", 211
+.annotate "line", 212
   # rx subcapture "sym"
     set_addr $I10, rxcap_396_fail
     rx392_cur."!mark_push"(0, rx392_pos, $I10)
@@ -4900,7 +4909,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1261064023.05912") :method
+.sub "!PREFIX__statement_mod_loop:sym<until>"  :subid("94_1267204702.05125") :method
 .annotate "line", 4
     new $P394, "ResizablePMCArray"
     push $P394, "until"
@@ -4909,7 +4918,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<fatarrow>"  :subid("95_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<fatarrow>"  :subid("95_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx400_tgt
     .local int rx400_pos
@@ -4940,7 +4949,7 @@
     set_addr $I10, rxscan404_loop
     rx400_cur."!mark_push"(0, rx400_pos, $I10)
   rxscan404_done:
-.annotate "line", 215
+.annotate "line", 216
   # rx subrule "fatarrow" subtype=capture negate=
     rx400_cur."!cursor_pos"(rx400_pos)
     $P10 = rx400_cur."fatarrow"()
@@ -4967,7 +4976,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1261064023.05912") :method
+.sub "!PREFIX__term:sym<fatarrow>"  :subid("96_1267204702.05125") :method
 .annotate "line", 4
     $P402 = self."!PREFIX__!subrule"("fatarrow", "")
     new $P403, "ResizablePMCArray"
@@ -4977,7 +4986,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<colonpair>"  :subid("97_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<colonpair>"  :subid("97_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx406_tgt
     .local int rx406_pos
@@ -5008,7 +5017,7 @@
     set_addr $I10, rxscan410_loop
     rx406_cur."!mark_push"(0, rx406_pos, $I10)
   rxscan410_done:
-.annotate "line", 216
+.annotate "line", 217
   # rx subrule "colonpair" subtype=capture negate=
     rx406_cur."!cursor_pos"(rx406_pos)
     $P10 = rx406_cur."colonpair"()
@@ -5035,7 +5044,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1261064023.05912") :method
+.sub "!PREFIX__term:sym<colonpair>"  :subid("98_1267204702.05125") :method
 .annotate "line", 4
     $P408 = self."!PREFIX__!subrule"("colonpair", "")
     new $P409, "ResizablePMCArray"
@@ -5045,7 +5054,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<variable>"  :subid("99_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<variable>"  :subid("99_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx412_tgt
     .local int rx412_pos
@@ -5076,7 +5085,7 @@
     set_addr $I10, rxscan416_loop
     rx412_cur."!mark_push"(0, rx412_pos, $I10)
   rxscan416_done:
-.annotate "line", 217
+.annotate "line", 218
   # rx subrule "variable" subtype=capture negate=
     rx412_cur."!cursor_pos"(rx412_pos)
     $P10 = rx412_cur."variable"()
@@ -5103,7 +5112,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<variable>"  :subid("100_1261064023.05912") :method
+.sub "!PREFIX__term:sym<variable>"  :subid("100_1267204702.05125") :method
 .annotate "line", 4
     $P414 = self."!PREFIX__!subrule"("variable", "")
     new $P415, "ResizablePMCArray"
@@ -5113,7 +5122,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<package_declarator>"  :subid("101_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<package_declarator>"  :subid("101_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx418_tgt
     .local int rx418_pos
@@ -5144,7 +5153,7 @@
     set_addr $I10, rxscan422_loop
     rx418_cur."!mark_push"(0, rx418_pos, $I10)
   rxscan422_done:
-.annotate "line", 218
+.annotate "line", 219
   # rx subrule "package_declarator" subtype=capture negate=
     rx418_cur."!cursor_pos"(rx418_pos)
     $P10 = rx418_cur."package_declarator"()
@@ -5171,7 +5180,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1261064023.05912") :method
+.sub "!PREFIX__term:sym<package_declarator>"  :subid("102_1267204702.05125") :method
 .annotate "line", 4
     $P420 = self."!PREFIX__!subrule"("package_declarator", "")
     new $P421, "ResizablePMCArray"
@@ -5181,7 +5190,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<scope_declarator>"  :subid("103_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<scope_declarator>"  :subid("103_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx424_tgt
     .local int rx424_pos
@@ -5212,7 +5221,7 @@
     set_addr $I10, rxscan428_loop
     rx424_cur."!mark_push"(0, rx424_pos, $I10)
   rxscan428_done:
-.annotate "line", 219
+.annotate "line", 220
   # rx subrule "scope_declarator" subtype=capture negate=
     rx424_cur."!cursor_pos"(rx424_pos)
     $P10 = rx424_cur."scope_declarator"()
@@ -5239,7 +5248,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1261064023.05912") :method
+.sub "!PREFIX__term:sym<scope_declarator>"  :subid("104_1267204702.05125") :method
 .annotate "line", 4
     $P426 = self."!PREFIX__!subrule"("scope_declarator", "")
     new $P427, "ResizablePMCArray"
@@ -5249,7 +5258,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<routine_declarator>"  :subid("105_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<routine_declarator>"  :subid("105_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx430_tgt
     .local int rx430_pos
@@ -5280,7 +5289,7 @@
     set_addr $I10, rxscan434_loop
     rx430_cur."!mark_push"(0, rx430_pos, $I10)
   rxscan434_done:
-.annotate "line", 220
+.annotate "line", 221
   # rx subrule "routine_declarator" subtype=capture negate=
     rx430_cur."!cursor_pos"(rx430_pos)
     $P10 = rx430_cur."routine_declarator"()
@@ -5307,7 +5316,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1261064023.05912") :method
+.sub "!PREFIX__term:sym<routine_declarator>"  :subid("106_1267204702.05125") :method
 .annotate "line", 4
     $P432 = self."!PREFIX__!subrule"("routine_declarator", "")
     new $P433, "ResizablePMCArray"
@@ -5317,7 +5326,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<regex_declarator>"  :subid("107_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<regex_declarator>"  :subid("107_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx436_tgt
     .local int rx436_pos
@@ -5348,7 +5357,7 @@
     set_addr $I10, rxscan440_loop
     rx436_cur."!mark_push"(0, rx436_pos, $I10)
   rxscan440_done:
-.annotate "line", 221
+.annotate "line", 222
   # rx subrule "regex_declarator" subtype=capture negate=
     rx436_cur."!cursor_pos"(rx436_pos)
     $P10 = rx436_cur."regex_declarator"()
@@ -5375,7 +5384,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1261064023.05912") :method
+.sub "!PREFIX__term:sym<regex_declarator>"  :subid("108_1267204702.05125") :method
 .annotate "line", 4
     $P438 = self."!PREFIX__!subrule"("regex_declarator", "")
     new $P439, "ResizablePMCArray"
@@ -5385,7 +5394,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<statement_prefix>"  :subid("109_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<statement_prefix>"  :subid("109_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx442_tgt
     .local int rx442_pos
@@ -5416,7 +5425,7 @@
     set_addr $I10, rxscan446_loop
     rx442_cur."!mark_push"(0, rx442_pos, $I10)
   rxscan446_done:
-.annotate "line", 222
+.annotate "line", 223
   # rx subrule "statement_prefix" subtype=capture negate=
     rx442_cur."!cursor_pos"(rx442_pos)
     $P10 = rx442_cur."statement_prefix"()
@@ -5443,7 +5452,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1261064023.05912") :method
+.sub "!PREFIX__term:sym<statement_prefix>"  :subid("110_1267204702.05125") :method
 .annotate "line", 4
     $P444 = self."!PREFIX__!subrule"("statement_prefix", "")
     new $P445, "ResizablePMCArray"
@@ -5453,7 +5462,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<lambda>"  :subid("111_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<lambda>"  :subid("111_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx448_tgt
     .local int rx448_pos
@@ -5484,7 +5493,7 @@
     set_addr $I10, rxscan451_loop
     rx448_cur."!mark_push"(0, rx448_pos, $I10)
   rxscan451_done:
-.annotate "line", 223
+.annotate "line", 224
   # rx subrule "lambda" subtype=zerowidth negate=
     rx448_cur."!cursor_pos"(rx448_pos)
     $P10 = rx448_cur."lambda"()
@@ -5515,7 +5524,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<lambda>"  :subid("112_1261064023.05912") :method
+.sub "!PREFIX__term:sym<lambda>"  :subid("112_1267204702.05125") :method
 .annotate "line", 4
     new $P450, "ResizablePMCArray"
     push $P450, ""
@@ -5524,7 +5533,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "fatarrow"  :subid("113_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "fatarrow"  :subid("113_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx453_tgt
     .local int rx453_pos
@@ -5555,7 +5564,7 @@
     set_addr $I10, rxscan457_loop
     rx453_cur."!mark_push"(0, rx453_pos, $I10)
   rxscan457_done:
-.annotate "line", 226
+.annotate "line", 227
   # rx subrule "identifier" subtype=capture negate=
     rx453_cur."!cursor_pos"(rx453_pos)
     $P10 = rx453_cur."identifier"()
@@ -5597,7 +5606,7 @@
     rx453_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("val")
     rx453_pos = $P10."pos"()
-.annotate "line", 225
+.annotate "line", 226
   # rx pass
     rx453_cur."!cursor_pass"(rx453_pos, "fatarrow")
     rx453_cur."!cursor_debug"("PASS  ", "fatarrow", " at pos=", rx453_pos)
@@ -5617,7 +5626,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__fatarrow"  :subid("114_1261064023.05912") :method
+.sub "!PREFIX__fatarrow"  :subid("114_1267204702.05125") :method
 .annotate "line", 4
     $P455 = self."!PREFIX__!subrule"("key", "")
     new $P456, "ResizablePMCArray"
@@ -5627,7 +5636,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "colonpair"  :subid("115_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "colonpair"  :subid("115_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx461_tgt
     .local int rx461_pos
@@ -5659,7 +5668,7 @@
     set_addr $I10, rxscan467_loop
     rx461_cur."!mark_push"(0, rx461_pos, $I10)
   rxscan467_done:
-.annotate "line", 230
+.annotate "line", 231
   # rx literal  ":"
     add $I11, rx461_pos, 1
     gt $I11, rx461_eos, rx461_fail
@@ -5668,10 +5677,10 @@
     ne $S10, ":", rx461_fail
     add rx461_pos, 1
   alt468_0:
-.annotate "line", 231
+.annotate "line", 232
     set_addr $I10, alt468_1
     rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 232
+.annotate "line", 233
   # rx subcapture "not"
     set_addr $I10, rxcap_469_fail
     rx461_cur."!mark_push"(0, rx461_pos, $I10)
@@ -5704,7 +5713,7 @@
   alt468_1:
     set_addr $I10, alt468_2
     rx461_cur."!mark_push"(0, rx461_pos, $I10)
-.annotate "line", 233
+.annotate "line", 234
   # rx subrule "identifier" subtype=capture negate=
     rx461_cur."!cursor_pos"(rx461_pos)
     $P10 = rx461_cur."identifier"()
@@ -5727,7 +5736,7 @@
   rxquantr470_done:
     goto alt468_end
   alt468_2:
-.annotate "line", 234
+.annotate "line", 235
   # rx subrule "circumfix" subtype=capture negate=
     rx461_cur."!cursor_pos"(rx461_pos)
     $P10 = rx461_cur."circumfix"()
@@ -5736,7 +5745,7 @@
     $P10."!cursor_names"("circumfix")
     rx461_pos = $P10."pos"()
   alt468_end:
-.annotate "line", 229
+.annotate "line", 230
   # rx pass
     rx461_cur."!cursor_pass"(rx461_pos, "colonpair")
     rx461_cur."!cursor_debug"("PASS  ", "colonpair", " at pos=", rx461_pos)
@@ -5756,7 +5765,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__colonpair"  :subid("116_1261064023.05912") :method
+.sub "!PREFIX__colonpair"  :subid("116_1267204702.05125") :method
 .annotate "line", 4
     $P463 = self."!PREFIX__!subrule"("circumfix", ":")
     $P464 = self."!PREFIX__!subrule"("identifier", ":")
@@ -5770,7 +5779,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable"  :subid("117_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "variable"  :subid("117_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx473_tgt
     .local int rx473_pos
@@ -5803,10 +5812,10 @@
     rx473_cur."!mark_push"(0, rx473_pos, $I10)
   rxscan478_done:
   alt479_0:
-.annotate "line", 238
+.annotate "line", 239
     set_addr $I10, alt479_1
     rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 239
+.annotate "line", 240
   # rx subrule "sigil" subtype=capture negate=
     rx473_cur."!cursor_pos"(rx473_pos)
     $P10 = rx473_cur."sigil"()
@@ -5838,7 +5847,7 @@
   alt479_1:
     set_addr $I10, alt479_2
     rx473_cur."!mark_push"(0, rx473_pos, $I10)
-.annotate "line", 240
+.annotate "line", 241
   # rx subrule "sigil" subtype=capture negate=
     rx473_cur."!cursor_pos"(rx473_pos)
     $P10 = rx473_cur."sigil"()
@@ -5861,7 +5870,7 @@
     rx473_pos = $P10."pos"()
     goto alt479_end
   alt479_2:
-.annotate "line", 241
+.annotate "line", 242
   # rx subcapture "sigil"
     set_addr $I10, rxcap_482_fail
     rx473_cur."!mark_push"(0, rx473_pos, $I10)
@@ -5905,7 +5914,7 @@
     goto rx473_fail
   rxcap_483_done:
   alt479_end:
-.annotate "line", 238
+.annotate "line", 239
   # rx pass
     rx473_cur."!cursor_pass"(rx473_pos, "variable")
     rx473_cur."!cursor_debug"("PASS  ", "variable", " at pos=", rx473_pos)
@@ -5925,7 +5934,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable"  :subid("118_1261064023.05912") :method
+.sub "!PREFIX__variable"  :subid("118_1267204702.05125") :method
 .annotate "line", 4
     $P475 = self."!PREFIX__!subrule"("sigil", "")
     $P476 = self."!PREFIX__!subrule"("sigil", "")
@@ -5940,7 +5949,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "sigil"  :subid("119_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "sigil"  :subid("119_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx485_tgt
     .local int rx485_pos
@@ -5971,7 +5980,7 @@
     set_addr $I10, rxscan488_loop
     rx485_cur."!mark_push"(0, rx485_pos, $I10)
   rxscan488_done:
-.annotate "line", 244
+.annotate "line", 245
   # rx enumcharlist negate=0 
     ge rx485_pos, rx485_eos, rx485_fail
     sub $I10, rx485_pos, rx485_off
@@ -5998,7 +6007,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__sigil"  :subid("120_1261064023.05912") :method
+.sub "!PREFIX__sigil"  :subid("120_1267204702.05125") :method
 .annotate "line", 4
     new $P487, "ResizablePMCArray"
     push $P487, "&"
@@ -6010,7 +6019,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "twigil"  :subid("121_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "twigil"  :subid("121_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx490_tgt
     .local int rx490_pos
@@ -6041,7 +6050,7 @@
     set_addr $I10, rxscan493_loop
     rx490_cur."!mark_push"(0, rx490_pos, $I10)
   rxscan493_done:
-.annotate "line", 246
+.annotate "line", 247
   # rx enumcharlist negate=0 
     ge rx490_pos, rx490_eos, rx490_fail
     sub $I10, rx490_pos, rx490_off
@@ -6068,7 +6077,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__twigil"  :subid("122_1261064023.05912") :method
+.sub "!PREFIX__twigil"  :subid("122_1267204702.05125") :method
 .annotate "line", 4
     new $P492, "ResizablePMCArray"
     push $P492, "?"
@@ -6079,23 +6088,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator"  :subid("123_1261064023.05912") :method
-.annotate "line", 248
+.sub "package_declarator"  :subid("123_1267204702.05125") :method
+.annotate "line", 249
     $P495 = self."!protoregex"("package_declarator")
     .return ($P495)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator"  :subid("124_1261064023.05912") :method
-.annotate "line", 248
+.sub "!PREFIX__package_declarator"  :subid("124_1267204702.05125") :method
+.annotate "line", 249
     $P497 = self."!PREFIX__!protoregex"("package_declarator")
     .return ($P497)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<module>"  :subid("125_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "package_declarator:sym<module>"  :subid("125_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx499_tgt
     .local int rx499_pos
@@ -6126,7 +6135,7 @@
     set_addr $I10, rxscan503_loop
     rx499_cur."!mark_push"(0, rx499_pos, $I10)
   rxscan503_done:
-.annotate "line", 249
+.annotate "line", 250
   # rx subcapture "sym"
     set_addr $I10, rxcap_504_fail
     rx499_cur."!mark_push"(0, rx499_pos, $I10)
@@ -6174,7 +6183,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1261064023.05912") :method
+.sub "!PREFIX__package_declarator:sym<module>"  :subid("126_1267204702.05125") :method
 .annotate "line", 4
     $P501 = self."!PREFIX__!subrule"("package_def", "module")
     new $P502, "ResizablePMCArray"
@@ -6184,7 +6193,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_declarator:sym<class>"  :subid("127_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "package_declarator:sym<class>"  :subid("127_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx506_tgt
     .local int rx506_pos
@@ -6215,7 +6224,7 @@
     set_addr $I10, rxscan511_loop
     rx506_cur."!mark_push"(0, rx506_pos, $I10)
   rxscan511_done:
-.annotate "line", 250
+.annotate "line", 251
   # rx subcapture "sym"
     set_addr $I10, rxcap_513_fail
     rx506_cur."!mark_push"(0, rx506_pos, $I10)
@@ -6276,7 +6285,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1261064023.05912") :method
+.sub "!PREFIX__package_declarator:sym<class>"  :subid("128_1267204702.05125") :method
 .annotate "line", 4
     $P508 = self."!PREFIX__!subrule"("package_def", "grammar")
     $P509 = self."!PREFIX__!subrule"("package_def", "class")
@@ -6288,7 +6297,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "package_def"  :subid("129_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "package_def"  :subid("129_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx515_tgt
     .local int rx515_pos
@@ -6320,13 +6329,13 @@
     set_addr $I10, rxscan518_loop
     rx515_cur."!mark_push"(0, rx515_pos, $I10)
   rxscan518_done:
-.annotate "line", 252
+.annotate "line", 253
   # 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
+.annotate "line", 254
   # rx subrule "name" subtype=capture negate=
     rx515_cur."!cursor_pos"(rx515_pos)
     $P10 = rx515_cur."name"()
@@ -6339,7 +6348,7 @@
     $P10 = rx515_cur."ws"()
     unless $P10, rx515_fail
     rx515_pos = $P10."pos"()
-.annotate "line", 254
+.annotate "line", 255
   # rx rxquantr521 ** 0..1
     set_addr $I525, rxquantr521_done
     rx515_cur."!mark_push"(0, rx515_pos, $I525)
@@ -6381,10 +6390,10 @@
     unless $P10, rx515_fail
     rx515_pos = $P10."pos"()
   alt527_0:
-.annotate "line", 255
+.annotate "line", 256
     set_addr $I10, alt527_1
     rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 256
+.annotate "line", 257
   # rx subrule "ws" subtype=method negate=
     rx515_cur."!cursor_pos"(rx515_pos)
     $P10 = rx515_cur."ws"()
@@ -6418,7 +6427,7 @@
   alt527_1:
     set_addr $I10, alt527_2
     rx515_cur."!mark_push"(0, rx515_pos, $I10)
-.annotate "line", 257
+.annotate "line", 258
   # rx subrule "ws" subtype=method negate=
     rx515_cur."!cursor_pos"(rx515_pos)
     $P10 = rx515_cur."ws"()
@@ -6449,7 +6458,7 @@
     rx515_pos = $P10."pos"()
     goto alt527_end
   alt527_2:
-.annotate "line", 258
+.annotate "line", 259
   # rx subrule "ws" subtype=method negate=
     rx515_cur."!cursor_pos"(rx515_pos)
     $P10 = rx515_cur."ws"()
@@ -6466,13 +6475,13 @@
     unless $P10, rx515_fail
     rx515_pos = $P10."pos"()
   alt527_end:
-.annotate "line", 259
+.annotate "line", 260
   # 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", 252
+.annotate "line", 253
   # rx pass
     rx515_cur."!cursor_pass"(rx515_pos, "package_def")
     rx515_cur."!cursor_debug"("PASS  ", "package_def", " at pos=", rx515_pos)
@@ -6492,7 +6501,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__package_def"  :subid("130_1261064023.05912") :method
+.sub "!PREFIX__package_def"  :subid("130_1267204702.05125") :method
 .annotate "line", 4
     new $P517, "ResizablePMCArray"
     push $P517, ""
@@ -6501,23 +6510,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator"  :subid("131_1261064023.05912") :method
-.annotate "line", 262
+.sub "scope_declarator"  :subid("131_1267204702.05125") :method
+.annotate "line", 263
     $P538 = self."!protoregex"("scope_declarator")
     .return ($P538)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator"  :subid("132_1261064023.05912") :method
-.annotate "line", 262
+.sub "!PREFIX__scope_declarator"  :subid("132_1267204702.05125") :method
+.annotate "line", 263
     $P540 = self."!PREFIX__!protoregex"("scope_declarator")
     .return ($P540)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<my>"  :subid("133_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "scope_declarator:sym<my>"  :subid("133_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx542_tgt
     .local int rx542_pos
@@ -6548,7 +6557,7 @@
     set_addr $I10, rxscan546_loop
     rx542_cur."!mark_push"(0, rx542_pos, $I10)
   rxscan546_done:
-.annotate "line", 263
+.annotate "line", 264
   # rx subcapture "sym"
     set_addr $I10, rxcap_547_fail
     rx542_cur."!mark_push"(0, rx542_pos, $I10)
@@ -6596,7 +6605,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1261064023.05912") :method
+.sub "!PREFIX__scope_declarator:sym<my>"  :subid("134_1267204702.05125") :method
 .annotate "line", 4
     $P544 = self."!PREFIX__!subrule"("scoped", "my")
     new $P545, "ResizablePMCArray"
@@ -6606,7 +6615,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<our>"  :subid("135_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "scope_declarator:sym<our>"  :subid("135_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx549_tgt
     .local int rx549_pos
@@ -6637,7 +6646,7 @@
     set_addr $I10, rxscan553_loop
     rx549_cur."!mark_push"(0, rx549_pos, $I10)
   rxscan553_done:
-.annotate "line", 264
+.annotate "line", 265
   # rx subcapture "sym"
     set_addr $I10, rxcap_554_fail
     rx549_cur."!mark_push"(0, rx549_pos, $I10)
@@ -6685,7 +6694,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1261064023.05912") :method
+.sub "!PREFIX__scope_declarator:sym<our>"  :subid("136_1267204702.05125") :method
 .annotate "line", 4
     $P551 = self."!PREFIX__!subrule"("scoped", "our")
     new $P552, "ResizablePMCArray"
@@ -6695,7 +6704,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scope_declarator:sym<has>"  :subid("137_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "scope_declarator:sym<has>"  :subid("137_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx556_tgt
     .local int rx556_pos
@@ -6726,7 +6735,7 @@
     set_addr $I10, rxscan560_loop
     rx556_cur."!mark_push"(0, rx556_pos, $I10)
   rxscan560_done:
-.annotate "line", 265
+.annotate "line", 266
   # rx subcapture "sym"
     set_addr $I10, rxcap_561_fail
     rx556_cur."!mark_push"(0, rx556_pos, $I10)
@@ -6774,7 +6783,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1261064023.05912") :method
+.sub "!PREFIX__scope_declarator:sym<has>"  :subid("138_1267204702.05125") :method
 .annotate "line", 4
     $P558 = self."!PREFIX__!subrule"("scoped", "has")
     new $P559, "ResizablePMCArray"
@@ -6784,9 +6793,9 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "scoped"  :subid("139_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "scoped"  :subid("139_1267204702.05125") :method :outer("11_1267204702.05125")
     .param pmc param_563
-.annotate "line", 267
+.annotate "line", 268
     .lex "$*SCOPE", param_563
 .annotate "line", 4
     .local string rx564_tgt
@@ -6819,10 +6828,10 @@
     rx564_cur."!mark_push"(0, rx564_pos, $I10)
   rxscan567_done:
   alt568_0:
-.annotate "line", 267
+.annotate "line", 268
     set_addr $I10, alt568_1
     rx564_cur."!mark_push"(0, rx564_pos, $I10)
-.annotate "line", 268
+.annotate "line", 269
   # rx subrule "ws" subtype=method negate=
     rx564_cur."!cursor_pos"(rx564_pos)
     $P10 = rx564_cur."ws"()
@@ -6842,7 +6851,7 @@
     rx564_pos = $P10."pos"()
     goto alt568_end
   alt568_1:
-.annotate "line", 269
+.annotate "line", 270
   # rx subrule "ws" subtype=method negate=
     rx564_cur."!cursor_pos"(rx564_pos)
     $P10 = rx564_cur."ws"()
@@ -6861,7 +6870,7 @@
     unless $P10, rx564_fail
     rx564_pos = $P10."pos"()
   alt568_end:
-.annotate "line", 267
+.annotate "line", 268
   # rx pass
     rx564_cur."!cursor_pass"(rx564_pos, "scoped")
     rx564_cur."!cursor_debug"("PASS  ", "scoped", " at pos=", rx564_pos)
@@ -6881,7 +6890,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__scoped"  :subid("140_1261064023.05912") :method
+.sub "!PREFIX__scoped"  :subid("140_1267204702.05125") :method
 .annotate "line", 4
     new $P566, "ResizablePMCArray"
     push $P566, ""
@@ -6891,7 +6900,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "variable_declarator"  :subid("141_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "variable_declarator"  :subid("141_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx574_tgt
     .local int rx574_pos
@@ -6922,7 +6931,7 @@
     set_addr $I10, rxscan578_loop
     rx574_cur."!mark_push"(0, rx574_pos, $I10)
   rxscan578_done:
-.annotate "line", 272
+.annotate "line", 273
   # rx subrule "variable" subtype=capture negate=
     rx574_cur."!cursor_pos"(rx574_pos)
     $P10 = rx574_cur."variable"()
@@ -6949,7 +6958,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__variable_declarator"  :subid("142_1261064023.05912") :method
+.sub "!PREFIX__variable_declarator"  :subid("142_1267204702.05125") :method
 .annotate "line", 4
     $P576 = self."!PREFIX__!subrule"("variable", "")
     new $P577, "ResizablePMCArray"
@@ -6959,23 +6968,23 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator"  :subid("143_1261064023.05912") :method
-.annotate "line", 274
+.sub "routine_declarator"  :subid("143_1267204702.05125") :method
+.annotate "line", 275
     $P580 = self."!protoregex"("routine_declarator")
     .return ($P580)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator"  :subid("144_1261064023.05912") :method
-.annotate "line", 274
+.sub "!PREFIX__routine_declarator"  :subid("144_1267204702.05125") :method
+.annotate "line", 275
     $P582 = self."!PREFIX__!protoregex"("routine_declarator")
     .return ($P582)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<sub>"  :subid("145_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "routine_declarator:sym<sub>"  :subid("145_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx584_tgt
     .local int rx584_pos
@@ -7006,7 +7015,7 @@
     set_addr $I10, rxscan588_loop
     rx584_cur."!mark_push"(0, rx584_pos, $I10)
   rxscan588_done:
-.annotate "line", 275
+.annotate "line", 276
   # rx subcapture "sym"
     set_addr $I10, rxcap_589_fail
     rx584_cur."!mark_push"(0, rx584_pos, $I10)
@@ -7054,7 +7063,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1261064023.05912") :method
+.sub "!PREFIX__routine_declarator:sym<sub>"  :subid("146_1267204702.05125") :method
 .annotate "line", 4
     $P586 = self."!PREFIX__!subrule"("routine_def", "sub")
     new $P587, "ResizablePMCArray"
@@ -7064,7 +7073,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_declarator:sym<method>"  :subid("147_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "routine_declarator:sym<method>"  :subid("147_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx591_tgt
     .local int rx591_pos
@@ -7095,7 +7104,7 @@
     set_addr $I10, rxscan595_loop
     rx591_cur."!mark_push"(0, rx591_pos, $I10)
   rxscan595_done:
-.annotate "line", 276
+.annotate "line", 277
   # rx subcapture "sym"
     set_addr $I10, rxcap_596_fail
     rx591_cur."!mark_push"(0, rx591_pos, $I10)
@@ -7143,7 +7152,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1261064023.05912") :method
+.sub "!PREFIX__routine_declarator:sym<method>"  :subid("148_1267204702.05125") :method
 .annotate "line", 4
     $P593 = self."!PREFIX__!subrule"("method_def", "method")
     new $P594, "ResizablePMCArray"
@@ -7153,7 +7162,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "routine_def"  :subid("149_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "routine_def"  :subid("149_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx598_tgt
     .local int rx598_pos
@@ -7163,7 +7172,7 @@
     .local pmc rx598_cur
     (rx598_cur, rx598_pos, rx598_tgt) = self."!cursor_start"()
     rx598_cur."!cursor_debug"("START ", "routine_def")
-    rx598_cur."!cursor_caparray"("sigil", "deflongname")
+    rx598_cur."!cursor_caparray"("deflongname", "sigil")
     .lex unicode:"$\x{a2}", rx598_cur
     .local pmc match
     .lex "$/", match
@@ -7185,13 +7194,13 @@
     set_addr $I10, rxscan601_loop
     rx598_cur."!mark_push"(0, rx598_pos, $I10)
   rxscan601_done:
-.annotate "line", 278
+.annotate "line", 279
   # 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
+.annotate "line", 280
   # rx rxquantr603 ** 0..1
     set_addr $I609, rxquantr603_done
     rx598_cur."!mark_push"(0, rx598_pos, $I609)
@@ -7247,7 +7256,7 @@
     $P10 = rx598_cur."ws"()
     unless $P10, rx598_fail
     rx598_pos = $P10."pos"()
-.annotate "line", 280
+.annotate "line", 281
   # rx subrule "newpad" subtype=method negate=
     rx598_cur."!cursor_pos"(rx598_pos)
     $P10 = rx598_cur."newpad"()
@@ -7259,7 +7268,7 @@
     unless $P10, rx598_fail
     rx598_pos = $P10."pos"()
   alt612_0:
-.annotate "line", 281
+.annotate "line", 282
     set_addr $I10, alt612_1
     rx598_cur."!mark_push"(0, rx598_pos, $I10)
   # rx subrule "ws" subtype=method negate=
@@ -7305,7 +7314,7 @@
     rx598_pos = $P10."pos"()
     goto alt612_end
   alt612_1:
-.annotate "line", 282
+.annotate "line", 283
   # rx subrule "ws" subtype=method negate=
     rx598_cur."!cursor_pos"(rx598_pos)
     $P10 = rx598_cur."ws"()
@@ -7327,7 +7336,7 @@
     $P10 = rx598_cur."ws"()
     unless $P10, rx598_fail
     rx598_pos = $P10."pos"()
-.annotate "line", 283
+.annotate "line", 284
   # rx subrule "blockoid" subtype=capture negate=
     rx598_cur."!cursor_pos"(rx598_pos)
     $P10 = rx598_cur."blockoid"()
@@ -7340,7 +7349,7 @@
     $P10 = rx598_cur."ws"()
     unless $P10, rx598_fail
     rx598_pos = $P10."pos"()
-.annotate "line", 278
+.annotate "line", 279
   # rx pass
     rx598_cur."!cursor_pass"(rx598_pos, "routine_def")
     rx598_cur."!cursor_debug"("PASS  ", "routine_def", " at pos=", rx598_pos)
@@ -7360,7 +7369,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__routine_def"  :subid("150_1261064023.05912") :method
+.sub "!PREFIX__routine_def"  :subid("150_1267204702.05125") :method
 .annotate "line", 4
     new $P600, "ResizablePMCArray"
     push $P600, ""
@@ -7369,7 +7378,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "method_def"  :subid("151_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "method_def"  :subid("151_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx622_tgt
     .local int rx622_pos
@@ -7401,13 +7410,13 @@
     set_addr $I10, rxscan625_loop
     rx622_cur."!mark_push"(0, rx622_pos, $I10)
   rxscan625_done:
-.annotate "line", 286
+.annotate "line", 287
   # 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
+.annotate "line", 288
   # rx rxquantr627 ** 0..1
     set_addr $I628, rxquantr627_done
     rx622_cur."!mark_push"(0, rx622_pos, $I628)
@@ -7426,7 +7435,7 @@
     $P10 = rx622_cur."ws"()
     unless $P10, rx622_fail
     rx622_pos = $P10."pos"()
-.annotate "line", 288
+.annotate "line", 289
   # rx subrule "newpad" subtype=method negate=
     rx622_cur."!cursor_pos"(rx622_pos)
     $P10 = rx622_cur."newpad"()
@@ -7438,7 +7447,7 @@
     unless $P10, rx622_fail
     rx622_pos = $P10."pos"()
   alt631_0:
-.annotate "line", 289
+.annotate "line", 290
     set_addr $I10, alt631_1
     rx622_cur."!mark_push"(0, rx622_pos, $I10)
   # rx subrule "ws" subtype=method negate=
@@ -7484,7 +7493,7 @@
     rx622_pos = $P10."pos"()
     goto alt631_end
   alt631_1:
-.annotate "line", 290
+.annotate "line", 291
   # rx subrule "ws" subtype=method negate=
     rx622_cur."!cursor_pos"(rx622_pos)
     $P10 = rx622_cur."ws"()
@@ -7506,7 +7515,7 @@
     $P10 = rx622_cur."ws"()
     unless $P10, rx622_fail
     rx622_pos = $P10."pos"()
-.annotate "line", 291
+.annotate "line", 292
   # rx subrule "blockoid" subtype=capture negate=
     rx622_cur."!cursor_pos"(rx622_pos)
     $P10 = rx622_cur."blockoid"()
@@ -7519,7 +7528,7 @@
     $P10 = rx622_cur."ws"()
     unless $P10, rx622_fail
     rx622_pos = $P10."pos"()
-.annotate "line", 286
+.annotate "line", 287
   # rx pass
     rx622_cur."!cursor_pass"(rx622_pos, "method_def")
     rx622_cur."!cursor_debug"("PASS  ", "method_def", " at pos=", rx622_pos)
@@ -7539,7 +7548,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__method_def"  :subid("152_1261064023.05912") :method
+.sub "!PREFIX__method_def"  :subid("152_1267204702.05125") :method
 .annotate "line", 4
     new $P624, "ResizablePMCArray"
     push $P624, ""
@@ -7548,7 +7557,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "signature"  :subid("153_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "signature"  :subid("153_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx641_tgt
     .local int rx641_pos
@@ -7580,7 +7589,7 @@
     set_addr $I10, rxscan644_loop
     rx641_cur."!mark_push"(0, rx641_pos, $I10)
   rxscan644_done:
-.annotate "line", 294
+.annotate "line", 295
   # rx rxquantr645 ** 0..1
     set_addr $I648, rxquantr645_done
     rx641_cur."!mark_push"(0, rx641_pos, $I648)
@@ -7638,7 +7647,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__signature"  :subid("154_1261064023.05912") :method
+.sub "!PREFIX__signature"  :subid("154_1267204702.05125") :method
 .annotate "line", 4
     new $P643, "ResizablePMCArray"
     push $P643, ""
@@ -7647,7 +7656,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "parameter"  :subid("155_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "parameter"  :subid("155_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx650_tgt
     .local int rx650_pos
@@ -7680,10 +7689,10 @@
     rx650_cur."!mark_push"(0, rx650_pos, $I10)
   rxscan656_done:
   alt657_0:
-.annotate "line", 297
+.annotate "line", 298
     set_addr $I10, alt657_1
     rx650_cur."!mark_push"(0, rx650_pos, $I10)
-.annotate "line", 298
+.annotate "line", 299
   # rx subcapture "quant"
     set_addr $I10, rxcap_658_fail
     rx650_cur."!mark_push"(0, rx650_pos, $I10)
@@ -7715,7 +7724,7 @@
     goto alt657_end
   alt657_1:
   alt659_0:
-.annotate "line", 299
+.annotate "line", 300
     set_addr $I10, alt659_1
     rx650_cur."!mark_push"(0, rx650_pos, $I10)
   # rx subrule "param_var" subtype=capture negate=
@@ -7774,7 +7783,7 @@
     goto rx650_fail
   rxcap_661_done:
   alt657_end:
-.annotate "line", 301
+.annotate "line", 302
   # rx rxquantr662 ** 0..1
     set_addr $I663, rxquantr662_done
     rx650_cur."!mark_push"(0, rx650_pos, $I663)
@@ -7788,7 +7797,7 @@
     rx650_pos = $P10."pos"()
     (rx650_rep) = rx650_cur."!mark_commit"($I663)
   rxquantr662_done:
-.annotate "line", 296
+.annotate "line", 297
   # rx pass
     rx650_cur."!cursor_pass"(rx650_pos, "parameter")
     rx650_cur."!cursor_debug"("PASS  ", "parameter", " at pos=", rx650_pos)
@@ -7808,7 +7817,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__parameter"  :subid("156_1261064023.05912") :method
+.sub "!PREFIX__parameter"  :subid("156_1267204702.05125") :method
 .annotate "line", 4
     $P652 = self."!PREFIX__!subrule"("named_param", "")
     $P653 = self."!PREFIX__!subrule"("param_var", "")
@@ -7822,7 +7831,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "param_var"  :subid("157_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "param_var"  :subid("157_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx665_tgt
     .local int rx665_pos
@@ -7854,7 +7863,7 @@
     set_addr $I10, rxscan669_loop
     rx665_cur."!mark_push"(0, rx665_pos, $I10)
   rxscan669_done:
-.annotate "line", 305
+.annotate "line", 306
   # rx subrule "sigil" subtype=capture negate=
     rx665_cur."!cursor_pos"(rx665_pos)
     $P10 = rx665_cur."sigil"()
@@ -7876,7 +7885,7 @@
     (rx665_rep) = rx665_cur."!mark_commit"($I671)
   rxquantr670_done:
   alt672_0:
-.annotate "line", 306
+.annotate "line", 307
     set_addr $I10, alt672_1
     rx665_cur."!mark_push"(0, rx665_pos, $I10)
   # rx subrule "ident" subtype=capture negate=
@@ -7910,7 +7919,7 @@
     goto rx665_fail
   rxcap_673_done:
   alt672_end:
-.annotate "line", 304
+.annotate "line", 305
   # rx pass
     rx665_cur."!cursor_pass"(rx665_pos, "param_var")
     rx665_cur."!cursor_debug"("PASS  ", "param_var", " at pos=", rx665_pos)
@@ -7930,7 +7939,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__param_var"  :subid("158_1261064023.05912") :method
+.sub "!PREFIX__param_var"  :subid("158_1267204702.05125") :method
 .annotate "line", 4
     $P667 = self."!PREFIX__!subrule"("sigil", "")
     new $P668, "ResizablePMCArray"
@@ -7940,7 +7949,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "named_param"  :subid("159_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "named_param"  :subid("159_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx675_tgt
     .local int rx675_pos
@@ -7971,7 +7980,7 @@
     set_addr $I10, rxscan679_loop
     rx675_cur."!mark_push"(0, rx675_pos, $I10)
   rxscan679_done:
-.annotate "line", 310
+.annotate "line", 311
   # rx literal  ":"
     add $I11, rx675_pos, 1
     gt $I11, rx675_eos, rx675_fail
@@ -7986,7 +7995,7 @@
     rx675_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("param_var")
     rx675_pos = $P10."pos"()
-.annotate "line", 309
+.annotate "line", 310
   # rx pass
     rx675_cur."!cursor_pass"(rx675_pos, "named_param")
     rx675_cur."!cursor_debug"("PASS  ", "named_param", " at pos=", rx675_pos)
@@ -8006,7 +8015,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__named_param"  :subid("160_1261064023.05912") :method
+.sub "!PREFIX__named_param"  :subid("160_1267204702.05125") :method
 .annotate "line", 4
     $P677 = self."!PREFIX__!subrule"("param_var", ":")
     new $P678, "ResizablePMCArray"
@@ -8016,7 +8025,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "default_value"  :subid("161_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "default_value"  :subid("161_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx681_tgt
     .local int rx681_pos
@@ -8047,7 +8056,7 @@
     set_addr $I10, rxscan684_loop
     rx681_cur."!mark_push"(0, rx681_pos, $I10)
   rxscan684_done:
-.annotate "line", 313
+.annotate "line", 314
   # rx subrule "ws" subtype=method negate=
     rx681_cur."!cursor_pos"(rx681_pos)
     $P10 = rx681_cur."ws"()
@@ -8096,7 +8105,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__default_value"  :subid("162_1261064023.05912") :method
+.sub "!PREFIX__default_value"  :subid("162_1267204702.05125") :method
 .annotate "line", 4
     new $P683, "ResizablePMCArray"
     push $P683, ""
@@ -8105,7 +8114,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "regex_declarator"  :subid("163_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "regex_declarator"  :subid("163_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx689_tgt
     .local int rx689_pos
@@ -8137,17 +8146,17 @@
     set_addr $I10, rxscan692_loop
     rx689_cur."!mark_push"(0, rx689_pos, $I10)
   rxscan692_done:
-.annotate "line", 315
+.annotate "line", 316
   # 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", 316
+.annotate "line", 317
     set_addr $I10, alt694_1
     rx689_cur."!mark_push"(0, rx689_pos, $I10)
-.annotate "line", 317
+.annotate "line", 318
   # rx subrule "ws" subtype=method negate=
     rx689_cur."!cursor_pos"(rx689_pos)
     $P10 = rx689_cur."ws"()
@@ -8215,7 +8224,7 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-.annotate "line", 318
+.annotate "line", 319
   # rx subrule "deflongname" subtype=capture negate=
     rx689_cur."!cursor_pos"(rx689_pos)
     $P10 = rx689_cur."deflongname"()
@@ -8228,7 +8237,16 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-.annotate "line", 319
+  alt701_0:
+.annotate "line", 320
+    set_addr $I10, alt701_1
+    rx689_cur."!mark_push"(0, rx689_pos, $I10)
+.annotate "line", 321
+  # rx subrule "ws" subtype=method negate=
+    rx689_cur."!cursor_pos"(rx689_pos)
+    $P10 = rx689_cur."ws"()
+    unless $P10, rx689_fail
+    rx689_pos = $P10."pos"()
   # rx literal  "{"
     add $I11, rx689_pos, 1
     gt $I11, rx689_eos, rx689_fail
@@ -8269,20 +8287,45 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-.annotate "line", 317
+    goto alt701_end
+  alt701_1:
+.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"()
+  # 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
+  # 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", 320
+.annotate "line", 324
   # rx subrule "ws" subtype=method negate=
     rx689_cur."!cursor_pos"(rx689_pos)
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
   # rx subcapture "sym"
-    set_addr $I10, rxcap_706_fail
+    set_addr $I10, rxcap_711_fail
     rx689_cur."!mark_push"(0, rx689_pos, $I10)
-  alt705_0:
-    set_addr $I10, alt705_1
+  alt710_0:
+    set_addr $I10, alt710_1
     rx689_cur."!mark_push"(0, rx689_pos, $I10)
   # rx literal  "regex"
     add $I11, rx689_pos, 5
@@ -8291,9 +8334,9 @@
     substr $S10, rx689_tgt, $I11, 5
     ne $S10, "regex", rx689_fail
     add rx689_pos, 5
-    goto alt705_end
-  alt705_1:
-    set_addr $I10, alt705_2
+    goto alt710_end
+  alt710_1:
+    set_addr $I10, alt710_2
     rx689_cur."!mark_push"(0, rx689_pos, $I10)
   # rx literal  "token"
     add $I11, rx689_pos, 5
@@ -8302,8 +8345,8 @@
     substr $S10, rx689_tgt, $I11, 5
     ne $S10, "token", rx689_fail
     add rx689_pos, 5
-    goto alt705_end
-  alt705_2:
+    goto alt710_end
+  alt710_2:
   # rx literal  "rule"
     add $I11, rx689_pos, 4
     gt $I11, rx689_eos, rx689_fail
@@ -8311,24 +8354,24 @@
     substr $S10, rx689_tgt, $I11, 4
     ne $S10, "rule", rx689_fail
     add rx689_pos, 4
-  alt705_end:
-    set_addr $I10, rxcap_706_fail
+  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)
     $P10."!cursor_names"("sym")
-    goto rxcap_706_done
-  rxcap_706_fail:
+    goto rxcap_711_done
+  rxcap_711_fail:
     goto rx689_fail
-  rxcap_706_done:
+  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", 321
+.annotate "line", 325
   # rx subrule "deflongname" subtype=capture negate=
     rx689_cur."!cursor_pos"(rx689_pos)
     $P10 = rx689_cur."deflongname"()
@@ -8341,7 +8384,7 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-.annotate "line", 322
+.annotate "line", 326
   # rx subrule "newpad" subtype=method negate=
     rx689_cur."!cursor_pos"(rx689_pos)
     $P10 = rx689_cur."newpad"()
@@ -8352,11 +8395,11 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-.annotate "line", 323
-  # rx rxquantr710 ** 0..1
-    set_addr $I715, rxquantr710_done
-    rx689_cur."!mark_push"(0, rx689_pos, $I715)
-  rxquantr710_loop:
+.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"()
@@ -8398,14 +8441,14 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-    (rx689_rep) = rx689_cur."!mark_commit"($I715)
-  rxquantr710_done:
+    (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", 324
+.annotate "line", 328
   # rx reduce name="regex_declarator" key="open"
     rx689_cur."!cursor_pos"(rx689_pos)
     rx689_cur."!reduce"("regex_declarator", "open")
@@ -8414,7 +8457,7 @@
     $P10 = rx689_cur."ws"()
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
-.annotate "line", 325
+.annotate "line", 329
   # rx literal  "{"
     add $I11, rx689_pos, 1
     gt $I11, rx689_eos, rx689_fail
@@ -8446,13 +8489,13 @@
     unless $P10, rx689_fail
     rx689_pos = $P10."pos"()
   alt694_end:
-.annotate "line", 326
+.annotate "line", 330
   # 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", 315
+.annotate "line", 316
   # rx pass
     rx689_cur."!cursor_pass"(rx689_pos, "regex_declarator")
     rx689_cur."!cursor_debug"("PASS  ", "regex_declarator", " at pos=", rx689_pos)
@@ -8472,7 +8515,7 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__regex_declarator"  :subid("164_1261064023.05912") :method
+.sub "!PREFIX__regex_declarator"  :subid("164_1267204702.05125") :method
 .annotate "line", 4
     new $P691, "ResizablePMCArray"
     push $P691, ""
@@ -8481,1063 +8524,990 @@
 
 
 .namespace ["NQP";"Grammar"]
-.sub "dotty"  :subid("165_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "dotty"  :subid("165_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx721_tgt
-    .local int rx721_pos
-    .local int rx721_off
-    .local int rx721_eos
-    .local int rx721_rep
-    .local pmc rx721_cur
-    (rx721_cur, rx721_pos, rx721_tgt) = self."!cursor_start"()
-    rx721_cur."!cursor_debug"("START ", "dotty")
-    rx721_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx721_cur
-    .local pmc match
-    .lex "$/", match
-    length rx721_eos, rx721_tgt
-    set rx721_off, 0
-    lt rx721_pos, 2, rx721_start
-    sub rx721_off, rx721_pos, 1
-    substr rx721_tgt, rx721_tgt, rx721_off
-  rx721_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan725_done
-    goto rxscan725_scan
-  rxscan725_loop:
-    ($P10) = rx721_cur."from"()
-    inc $P10
-    set rx721_pos, $P10
-    ge rx721_pos, rx721_eos, rxscan725_done
-  rxscan725_scan:
-    set_addr $I10, rxscan725_loop
-    rx721_cur."!mark_push"(0, rx721_pos, $I10)
-  rxscan725_done:
-.annotate "line", 330
+    .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 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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan730_done
+    goto rxscan730_scan
+  rxscan730_loop:
+    ($P10) = rx726_cur."from"()
+    inc $P10
+    set rx726_pos, $P10
+    ge rx726_pos, rx726_eos, rxscan730_done
+  rxscan730_scan:
+    set_addr $I10, rxscan730_loop
+    rx726_cur."!mark_push"(0, rx726_pos, $I10)
+  rxscan730_done:
+.annotate "line", 334
   # rx literal  "."
-    add $I11, rx721_pos, 1
-    gt $I11, rx721_eos, rx721_fail
-    sub $I11, rx721_pos, rx721_off
-    substr $S10, rx721_tgt, $I11, 1
-    ne $S10, ".", rx721_fail
-    add rx721_pos, 1
-  alt726_0:
-.annotate "line", 331
-    set_addr $I10, alt726_1
-    rx721_cur."!mark_push"(0, rx721_pos, $I10)
+    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)
   # rx subrule "identifier" subtype=capture negate=
-    rx721_cur."!cursor_pos"(rx721_pos)
-    $P10 = rx721_cur."identifier"()
-    unless $P10, rx721_fail
-    rx721_cur."!mark_push"(0, -1, 0, $P10)
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."identifier"()
+    unless $P10, rx726_fail
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("longname=identifier")
-    rx721_pos = $P10."pos"()
-    goto alt726_end
-  alt726_1:
-.annotate "line", 332
+    rx726_pos = $P10."pos"()
+    goto alt731_end
+  alt731_1:
+.annotate "line", 336
   # rx enumcharlist negate=0 zerowidth
-    ge rx721_pos, rx721_eos, rx721_fail
-    sub $I10, rx721_pos, rx721_off
-    substr $S10, rx721_tgt, $I10, 1
+    ge rx726_pos, rx726_eos, rx726_fail
+    sub $I10, rx726_pos, rx726_off
+    substr $S10, rx726_tgt, $I10, 1
     index $I11, "'\"", $S10
-    lt $I11, 0, rx721_fail
+    lt $I11, 0, rx726_fail
   # rx subrule "quote" subtype=capture negate=
-    rx721_cur."!cursor_pos"(rx721_pos)
-    $P10 = rx721_cur."quote"()
-    unless $P10, rx721_fail
-    rx721_cur."!mark_push"(0, -1, 0, $P10)
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."quote"()
+    unless $P10, rx726_fail
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx721_pos = $P10."pos"()
-  alt727_0:
-.annotate "line", 333
-    set_addr $I10, alt727_1
-    rx721_cur."!mark_push"(0, rx721_pos, $I10)
+    rx726_pos = $P10."pos"()
+  alt732_0:
+.annotate "line", 337
+    set_addr $I10, alt732_1
+    rx726_cur."!mark_push"(0, rx726_pos, $I10)
   # rx enumcharlist negate=0 zerowidth
-    ge rx721_pos, rx721_eos, rx721_fail
-    sub $I10, rx721_pos, rx721_off
-    substr $S10, rx721_tgt, $I10, 1
+    ge rx726_pos, rx726_eos, rx726_fail
+    sub $I10, rx726_pos, rx726_off
+    substr $S10, rx726_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx721_fail
-    goto alt727_end
-  alt727_1:
+    lt $I11, 0, rx726_fail
+    goto alt732_end
+  alt732_1:
   # rx subrule "panic" subtype=method negate=
-    rx721_cur."!cursor_pos"(rx721_pos)
-    $P10 = rx721_cur."panic"("Quoted method name requires parenthesized arguments")
-    unless $P10, rx721_fail
-    rx721_pos = $P10."pos"()
-  alt727_end:
-  alt726_end:
-.annotate "line", 339
-  # rx rxquantr728 ** 0..1
-    set_addr $I730, rxquantr728_done
-    rx721_cur."!mark_push"(0, rx721_pos, $I730)
-  rxquantr728_loop:
-  alt729_0:
-.annotate "line", 336
-    set_addr $I10, alt729_1
-    rx721_cur."!mark_push"(0, rx721_pos, $I10)
-.annotate "line", 337
+    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
   # rx enumcharlist negate=0 zerowidth
-    ge rx721_pos, rx721_eos, rx721_fail
-    sub $I10, rx721_pos, rx721_off
-    substr $S10, rx721_tgt, $I10, 1
+    ge rx726_pos, rx726_eos, rx726_fail
+    sub $I10, rx726_pos, rx726_off
+    substr $S10, rx726_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx721_fail
+    lt $I11, 0, rx726_fail
   # rx subrule "args" subtype=capture negate=
-    rx721_cur."!cursor_pos"(rx721_pos)
-    $P10 = rx721_cur."args"()
-    unless $P10, rx721_fail
-    rx721_cur."!mark_push"(0, -1, 0, $P10)
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."args"()
+    unless $P10, rx726_fail
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx721_pos = $P10."pos"()
-    goto alt729_end
-  alt729_1:
-.annotate "line", 338
+    rx726_pos = $P10."pos"()
+    goto alt734_end
+  alt734_1:
+.annotate "line", 342
   # rx literal  ":"
-    add $I11, rx721_pos, 1
-    gt $I11, rx721_eos, rx721_fail
-    sub $I11, rx721_pos, rx721_off
-    substr $S10, rx721_tgt, $I11, 1
-    ne $S10, ":", rx721_fail
-    add rx721_pos, 1
+    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
   # rx charclass s
-    ge rx721_pos, rx721_eos, rx721_fail
-    sub $I10, rx721_pos, rx721_off
-    is_cclass $I11, 32, rx721_tgt, $I10
-    unless $I11, rx721_fail
-    inc rx721_pos
+    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
   # rx subrule "arglist" subtype=capture negate=
-    rx721_cur."!cursor_pos"(rx721_pos)
-    $P10 = rx721_cur."arglist"()
-    unless $P10, rx721_fail
-    rx721_cur."!mark_push"(0, -1, 0, $P10)
+    rx726_cur."!cursor_pos"(rx726_pos)
+    $P10 = rx726_cur."arglist"()
+    unless $P10, rx726_fail
+    rx726_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx721_pos = $P10."pos"()
-  alt729_end:
-.annotate "line", 339
-    (rx721_rep) = rx721_cur."!mark_commit"($I730)
-  rxquantr728_done:
-.annotate "line", 329
+    rx726_pos = $P10."pos"()
+  alt734_end:
+.annotate "line", 343
+    (rx726_rep) = rx726_cur."!mark_commit"($I735)
+  rxquantr733_done:
+.annotate "line", 333
   # rx pass
-    rx721_cur."!cursor_pass"(rx721_pos, "dotty")
-    rx721_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx721_pos)
-    .return (rx721_cur)
-  rx721_fail:
+    rx726_cur."!cursor_pass"(rx726_pos, "dotty")
+    rx726_cur."!cursor_debug"("PASS  ", "dotty", " at pos=", rx726_pos)
+    .return (rx726_cur)
+  rx726_fail:
 .annotate "line", 4
-    (rx721_rep, rx721_pos, $I10, $P10) = rx721_cur."!mark_fail"(0)
-    lt rx721_pos, -1, rx721_done
-    eq rx721_pos, -1, rx721_fail
+    (rx726_rep, rx726_pos, $I10, $P10) = rx726_cur."!mark_fail"(0)
+    lt rx726_pos, -1, rx726_done
+    eq rx726_pos, -1, rx726_fail
     jump $I10
-  rx721_done:
-    rx721_cur."!cursor_fail"()
-    rx721_cur."!cursor_debug"("FAIL  ", "dotty")
-    .return (rx721_cur)
+  rx726_done:
+    rx726_cur."!cursor_fail"()
+    rx726_cur."!cursor_debug"("FAIL  ", "dotty")
+    .return (rx726_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__dotty"  :subid("166_1261064023.05912") :method
+.sub "!PREFIX__dotty"  :subid("166_1267204702.05125") :method
 .annotate "line", 4
-    $P723 = self."!PREFIX__!subrule"("longname=identifier", ".")
-    new $P724, "ResizablePMCArray"
-    push $P724, "'"
-    push $P724, "\""
-    push $P724, $P723
-    .return ($P724)
+    $P728 = self."!PREFIX__!subrule"("longname=identifier", ".")
+    new $P729, "ResizablePMCArray"
+    push $P729, "'"
+    push $P729, "\""
+    push $P729, $P728
+    .return ($P729)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term"  :subid("167_1261064023.05912") :method
-.annotate "line", 343
-    $P732 = self."!protoregex"("term")
-    .return ($P732)
+.sub "term"  :subid("167_1267204702.05125") :method
+.annotate "line", 347
+    $P737 = self."!protoregex"("term")
+    .return ($P737)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term"  :subid("168_1261064023.05912") :method
-.annotate "line", 343
-    $P734 = self."!PREFIX__!protoregex"("term")
-    .return ($P734)
+.sub "!PREFIX__term"  :subid("168_1267204702.05125") :method
+.annotate "line", 347
+    $P739 = self."!PREFIX__!protoregex"("term")
+    .return ($P739)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<self>"  :subid("169_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<self>"  :subid("169_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx736_tgt
-    .local int rx736_pos
-    .local int rx736_off
-    .local int rx736_eos
-    .local int rx736_rep
-    .local pmc rx736_cur
-    (rx736_cur, rx736_pos, rx736_tgt) = self."!cursor_start"()
-    rx736_cur."!cursor_debug"("START ", "term:sym<self>")
-    .lex unicode:"$\x{a2}", rx736_cur
-    .local pmc match
-    .lex "$/", match
-    length rx736_eos, rx736_tgt
-    set rx736_off, 0
-    lt rx736_pos, 2, rx736_start
-    sub rx736_off, rx736_pos, 1
-    substr rx736_tgt, rx736_tgt, rx736_off
-  rx736_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan739_done
-    goto rxscan739_scan
-  rxscan739_loop:
-    ($P10) = rx736_cur."from"()
-    inc $P10
-    set rx736_pos, $P10
-    ge rx736_pos, rx736_eos, rxscan739_done
-  rxscan739_scan:
-    set_addr $I10, rxscan739_loop
-    rx736_cur."!mark_push"(0, rx736_pos, $I10)
-  rxscan739_done:
-.annotate "line", 345
+    .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
   # rx subcapture "sym"
-    set_addr $I10, rxcap_740_fail
-    rx736_cur."!mark_push"(0, rx736_pos, $I10)
+    set_addr $I10, rxcap_745_fail
+    rx741_cur."!mark_push"(0, rx741_pos, $I10)
   # rx literal  "self"
-    add $I11, rx736_pos, 4
-    gt $I11, rx736_eos, rx736_fail
-    sub $I11, rx736_pos, rx736_off
-    substr $S10, rx736_tgt, $I11, 4
-    ne $S10, "self", rx736_fail
-    add rx736_pos, 4
-    set_addr $I10, rxcap_740_fail
-    ($I12, $I11) = rx736_cur."!mark_peek"($I10)
-    rx736_cur."!cursor_pos"($I11)
-    ($P10) = rx736_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx736_pos, "")
-    rx736_cur."!mark_push"(0, -1, 0, $P10)
+    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)
     $P10."!cursor_names"("sym")
-    goto rxcap_740_done
-  rxcap_740_fail:
-    goto rx736_fail
-  rxcap_740_done:
+    goto rxcap_745_done
+  rxcap_745_fail:
+    goto rx741_fail
+  rxcap_745_done:
   # rxanchor rwb
-    le rx736_pos, 0, rx736_fail
-    sub $I10, rx736_pos, rx736_off
-    is_cclass $I11, 8192, rx736_tgt, $I10
-    if $I11, rx736_fail
+    le rx741_pos, 0, rx741_fail
+    sub $I10, rx741_pos, rx741_off
+    is_cclass $I11, 8192, rx741_tgt, $I10
+    if $I11, rx741_fail
     dec $I10
-    is_cclass $I11, 8192, rx736_tgt, $I10
-    unless $I11, rx736_fail
+    is_cclass $I11, 8192, rx741_tgt, $I10
+    unless $I11, rx741_fail
   # rx pass
-    rx736_cur."!cursor_pass"(rx736_pos, "term:sym<self>")
-    rx736_cur."!cursor_debug"("PASS  ", "term:sym<self>", " at pos=", rx736_pos)
-    .return (rx736_cur)
-  rx736_fail:
+    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:
 .annotate "line", 4
-    (rx736_rep, rx736_pos, $I10, $P10) = rx736_cur."!mark_fail"(0)
-    lt rx736_pos, -1, rx736_done
-    eq rx736_pos, -1, rx736_fail
+    (rx741_rep, rx741_pos, $I10, $P10) = rx741_cur."!mark_fail"(0)
+    lt rx741_pos, -1, rx741_done
+    eq rx741_pos, -1, rx741_fail
     jump $I10
-  rx736_done:
-    rx736_cur."!cursor_fail"()
-    rx736_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
-    .return (rx736_cur)
+  rx741_done:
+    rx741_cur."!cursor_fail"()
+    rx741_cur."!cursor_debug"("FAIL  ", "term:sym<self>")
+    .return (rx741_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<self>"  :subid("170_1261064023.05912") :method
+.sub "!PREFIX__term:sym<self>"  :subid("170_1267204702.05125") :method
 .annotate "line", 4
-    new $P738, "ResizablePMCArray"
-    push $P738, "self"
-    .return ($P738)
+    new $P743, "ResizablePMCArray"
+    push $P743, "self"
+    .return ($P743)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<identifier>"  :subid("171_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<identifier>"  :subid("171_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx742_tgt
-    .local int rx742_pos
-    .local int rx742_off
-    .local int rx742_eos
-    .local int rx742_rep
-    .local pmc rx742_cur
-    (rx742_cur, rx742_pos, rx742_tgt) = self."!cursor_start"()
-    rx742_cur."!cursor_debug"("START ", "term:sym<identifier>")
-    .lex unicode:"$\x{a2}", rx742_cur
+    .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 rx742_eos, rx742_tgt
-    set rx742_off, 0
-    lt rx742_pos, 2, rx742_start
-    sub rx742_off, rx742_pos, 1
-    substr rx742_tgt, rx742_tgt, rx742_off
-  rx742_start:
+    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, rxscan746_done
-    goto rxscan746_scan
-  rxscan746_loop:
-    ($P10) = rx742_cur."from"()
+    ne $I10, -1, rxscan751_done
+    goto rxscan751_scan
+  rxscan751_loop:
+    ($P10) = rx747_cur."from"()
     inc $P10
-    set rx742_pos, $P10
-    ge rx742_pos, rx742_eos, rxscan746_done
-  rxscan746_scan:
-    set_addr $I10, rxscan746_loop
-    rx742_cur."!mark_push"(0, rx742_pos, $I10)
-  rxscan746_done:
-.annotate "line", 348
+    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
   # rx subrule "identifier" subtype=capture negate=
-    rx742_cur."!cursor_pos"(rx742_pos)
-    $P10 = rx742_cur."identifier"()
-    unless $P10, rx742_fail
-    rx742_cur."!mark_push"(0, -1, 0, $P10)
+    rx747_cur."!cursor_pos"(rx747_pos)
+    $P10 = rx747_cur."identifier"()
+    unless $P10, rx747_fail
+    rx747_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("identifier")
-    rx742_pos = $P10."pos"()
+    rx747_pos = $P10."pos"()
   # rx enumcharlist negate=0 zerowidth
-    ge rx742_pos, rx742_eos, rx742_fail
-    sub $I10, rx742_pos, rx742_off
-    substr $S10, rx742_tgt, $I10, 1
+    ge rx747_pos, rx747_eos, rx747_fail
+    sub $I10, rx747_pos, rx747_off
+    substr $S10, rx747_tgt, $I10, 1
     index $I11, "(", $S10
-    lt $I11, 0, rx742_fail
+    lt $I11, 0, rx747_fail
   # rx subrule "args" subtype=capture negate=
-    rx742_cur."!cursor_pos"(rx742_pos)
-    $P10 = rx742_cur."args"()
-    unless $P10, rx742_fail
-    rx742_cur."!mark_push"(0, -1, 0, $P10)
+    rx747_cur."!cursor_pos"(rx747_pos)
+    $P10 = rx747_cur."args"()
+    unless $P10, rx747_fail
+    rx747_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx742_pos = $P10."pos"()
-.annotate "line", 347
+    rx747_pos = $P10."pos"()
+.annotate "line", 351
   # rx pass
-    rx742_cur."!cursor_pass"(rx742_pos, "term:sym<identifier>")
-    rx742_cur."!cursor_debug"("PASS  ", "term:sym<identifier>", " at pos=", rx742_pos)
-    .return (rx742_cur)
-  rx742_fail:
+    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:
 .annotate "line", 4
-    (rx742_rep, rx742_pos, $I10, $P10) = rx742_cur."!mark_fail"(0)
-    lt rx742_pos, -1, rx742_done
-    eq rx742_pos, -1, rx742_fail
+    (rx747_rep, rx747_pos, $I10, $P10) = rx747_cur."!mark_fail"(0)
+    lt rx747_pos, -1, rx747_done
+    eq rx747_pos, -1, rx747_fail
     jump $I10
-  rx742_done:
-    rx742_cur."!cursor_fail"()
-    rx742_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
-    .return (rx742_cur)
+  rx747_done:
+    rx747_cur."!cursor_fail"()
+    rx747_cur."!cursor_debug"("FAIL  ", "term:sym<identifier>")
+    .return (rx747_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<identifier>"  :subid("172_1261064023.05912") :method
+.sub "!PREFIX__term:sym<identifier>"  :subid("172_1267204702.05125") :method
 .annotate "line", 4
-    $P744 = self."!PREFIX__!subrule"("identifier", "")
-    new $P745, "ResizablePMCArray"
-    push $P745, $P744
-    .return ($P745)
+    $P749 = self."!PREFIX__!subrule"("identifier", "")
+    new $P750, "ResizablePMCArray"
+    push $P750, $P749
+    .return ($P750)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<name>"  :subid("173_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<name>"  :subid("173_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx748_tgt
-    .local int rx748_pos
-    .local int rx748_off
-    .local int rx748_eos
-    .local int rx748_rep
-    .local pmc rx748_cur
-    (rx748_cur, rx748_pos, rx748_tgt) = self."!cursor_start"()
-    rx748_cur."!cursor_debug"("START ", "term:sym<name>")
-    rx748_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx748_cur
+    .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 pmc match
     .lex "$/", match
-    length rx748_eos, rx748_tgt
-    set rx748_off, 0
-    lt rx748_pos, 2, rx748_start
-    sub rx748_off, rx748_pos, 1
-    substr rx748_tgt, rx748_tgt, rx748_off
-  rx748_start:
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan752_done
-    goto rxscan752_scan
-  rxscan752_loop:
-    ($P10) = rx748_cur."from"()
+    ne $I10, -1, rxscan757_done
+    goto rxscan757_scan
+  rxscan757_loop:
+    ($P10) = rx753_cur."from"()
     inc $P10
-    set rx748_pos, $P10
-    ge rx748_pos, rx748_eos, rxscan752_done
-  rxscan752_scan:
-    set_addr $I10, rxscan752_loop
-    rx748_cur."!mark_push"(0, rx748_pos, $I10)
-  rxscan752_done:
-.annotate "line", 352
+    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
   # rx subrule "name" subtype=capture negate=
-    rx748_cur."!cursor_pos"(rx748_pos)
-    $P10 = rx748_cur."name"()
-    unless $P10, rx748_fail
-    rx748_cur."!mark_push"(0, -1, 0, $P10)
+    rx753_cur."!cursor_pos"(rx753_pos)
+    $P10 = rx753_cur."name"()
+    unless $P10, rx753_fail
+    rx753_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("name")
-    rx748_pos = $P10."pos"()
-  # rx rxquantr753 ** 0..1
-    set_addr $I754, rxquantr753_done
-    rx748_cur."!mark_push"(0, rx748_pos, $I754)
-  rxquantr753_loop:
+    rx753_pos = $P10."pos"()
+  # rx rxquantr758 ** 0..1
+    set_addr $I759, rxquantr758_done
+    rx753_cur."!mark_push"(0, rx753_pos, $I759)
+  rxquantr758_loop:
   # rx subrule "args" subtype=capture negate=
-    rx748_cur."!cursor_pos"(rx748_pos)
-    $P10 = rx748_cur."args"()
-    unless $P10, rx748_fail
-    rx748_cur."!mark_push"(0, -1, 0, $P10)
+    rx753_cur."!cursor_pos"(rx753_pos)
+    $P10 = rx753_cur."args"()
+    unless $P10, rx753_fail
+    rx753_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx748_pos = $P10."pos"()
-    (rx748_rep) = rx748_cur."!mark_commit"($I754)
-  rxquantr753_done:
-.annotate "line", 351
+    rx753_pos = $P10."pos"()
+    (rx753_rep) = rx753_cur."!mark_commit"($I759)
+  rxquantr758_done:
+.annotate "line", 355
   # rx pass
-    rx748_cur."!cursor_pass"(rx748_pos, "term:sym<name>")
-    rx748_cur."!cursor_debug"("PASS  ", "term:sym<name>", " at pos=", rx748_pos)
-    .return (rx748_cur)
-  rx748_fail:
+    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:
 .annotate "line", 4
-    (rx748_rep, rx748_pos, $I10, $P10) = rx748_cur."!mark_fail"(0)
-    lt rx748_pos, -1, rx748_done
-    eq rx748_pos, -1, rx748_fail
+    (rx753_rep, rx753_pos, $I10, $P10) = rx753_cur."!mark_fail"(0)
+    lt rx753_pos, -1, rx753_done
+    eq rx753_pos, -1, rx753_fail
     jump $I10
-  rx748_done:
-    rx748_cur."!cursor_fail"()
-    rx748_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
-    .return (rx748_cur)
+  rx753_done:
+    rx753_cur."!cursor_fail"()
+    rx753_cur."!cursor_debug"("FAIL  ", "term:sym<name>")
+    .return (rx753_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<name>"  :subid("174_1261064023.05912") :method
+.sub "!PREFIX__term:sym<name>"  :subid("174_1267204702.05125") :method
 .annotate "line", 4
-    $P750 = self."!PREFIX__!subrule"("name", "")
-    new $P751, "ResizablePMCArray"
-    push $P751, $P750
-    .return ($P751)
+    $P755 = self."!PREFIX__!subrule"("name", "")
+    new $P756, "ResizablePMCArray"
+    push $P756, $P755
+    .return ($P756)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<pir::op>"  :subid("175_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<pir::op>"  :subid("175_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .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<pir::op>")
-    rx756_cur."!cursor_caparray"("args")
-    .lex unicode:"$\x{a2}", rx756_cur
+    .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 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:
+    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, rxscan759_done
-    goto rxscan759_scan
-  rxscan759_loop:
-    ($P10) = rx756_cur."from"()
+    ne $I10, -1, rxscan764_done
+    goto rxscan764_scan
+  rxscan764_loop:
+    ($P10) = rx761_cur."from"()
     inc $P10
-    set rx756_pos, $P10
-    ge rx756_pos, rx756_eos, rxscan759_done
-  rxscan759_scan:
-    set_addr $I10, rxscan759_loop
-    rx756_cur."!mark_push"(0, rx756_pos, $I10)
-  rxscan759_done:
-.annotate "line", 356
+    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
   # rx literal  "pir::"
-    add $I11, rx756_pos, 5
-    gt $I11, rx756_eos, rx756_fail
-    sub $I11, rx756_pos, rx756_off
-    substr $S10, rx756_tgt, $I11, 5
-    ne $S10, "pir::", rx756_fail
-    add rx756_pos, 5
+    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
   # rx subcapture "op"
-    set_addr $I10, rxcap_760_fail
-    rx756_cur."!mark_push"(0, rx756_pos, $I10)
+    set_addr $I10, rxcap_765_fail
+    rx761_cur."!mark_push"(0, rx761_pos, $I10)
   # rx charclass_q w r 1..-1
-    sub $I10, rx756_pos, rx756_off
-    find_not_cclass $I11, 8192, rx756_tgt, $I10, rx756_eos
+    sub $I10, rx761_pos, rx761_off
+    find_not_cclass $I11, 8192, rx761_tgt, $I10, rx761_eos
     add $I12, $I10, 1
-    lt $I11, $I12, rx756_fail
-    add rx756_pos, rx756_off, $I11
-    set_addr $I10, rxcap_760_fail
-    ($I12, $I11) = rx756_cur."!mark_peek"($I10)
-    rx756_cur."!cursor_pos"($I11)
-    ($P10) = rx756_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx756_pos, "")
-    rx756_cur."!mark_push"(0, -1, 0, $P10)
+    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)
     $P10."!cursor_names"("op")
-    goto rxcap_760_done
-  rxcap_760_fail:
-    goto rx756_fail
-  rxcap_760_done:
-  # rx rxquantr761 ** 0..1
-    set_addr $I762, rxquantr761_done
-    rx756_cur."!mark_push"(0, rx756_pos, $I762)
-  rxquantr761_loop:
+    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:
   # rx subrule "args" subtype=capture negate=
-    rx756_cur."!cursor_pos"(rx756_pos)
-    $P10 = rx756_cur."args"()
-    unless $P10, rx756_fail
-    rx756_cur."!mark_push"(0, -1, 0, $P10)
+    rx761_cur."!cursor_pos"(rx761_pos)
+    $P10 = rx761_cur."args"()
+    unless $P10, rx761_fail
+    rx761_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("args")
-    rx756_pos = $P10."pos"()
-    (rx756_rep) = rx756_cur."!mark_commit"($I762)
-  rxquantr761_done:
-.annotate "line", 355
+    rx761_pos = $P10."pos"()
+    (rx761_rep) = rx761_cur."!mark_commit"($I767)
+  rxquantr766_done:
+.annotate "line", 359
   # rx pass
-    rx756_cur."!cursor_pass"(rx756_pos, "term:sym<pir::op>")
-    rx756_cur."!cursor_debug"("PASS  ", "term:sym<pir::op>", " at pos=", rx756_pos)
-    .return (rx756_cur)
-  rx756_fail:
+    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:
 .annotate "line", 4
-    (rx756_rep, rx756_pos, $I10, $P10) = rx756_cur."!mark_fail"(0)
-    lt rx756_pos, -1, rx756_done
-    eq rx756_pos, -1, rx756_fail
+    (rx761_rep, rx761_pos, $I10, $P10) = rx761_cur."!mark_fail"(0)
+    lt rx761_pos, -1, rx761_done
+    eq rx761_pos, -1, rx761_fail
     jump $I10
-  rx756_done:
-    rx756_cur."!cursor_fail"()
-    rx756_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
-    .return (rx756_cur)
+  rx761_done:
+    rx761_cur."!cursor_fail"()
+    rx761_cur."!cursor_debug"("FAIL  ", "term:sym<pir::op>")
+    .return (rx761_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1261064023.05912") :method
+.sub "!PREFIX__term:sym<pir::op>"  :subid("176_1267204702.05125") :method
 .annotate "line", 4
-    new $P758, "ResizablePMCArray"
-    push $P758, "pir::"
-    .return ($P758)
+    new $P763, "ResizablePMCArray"
+    push $P763, "pir::"
+    .return ($P763)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "args"  :subid("177_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "args"  :subid("177_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .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 ", "args")
-    .lex unicode:"$\x{a2}", rx764_cur
+    .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 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:
+    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, rxscan768_done
-    goto rxscan768_scan
-  rxscan768_loop:
-    ($P10) = rx764_cur."from"()
+    ne $I10, -1, rxscan773_done
+    goto rxscan773_scan
+  rxscan773_loop:
+    ($P10) = rx769_cur."from"()
     inc $P10
-    set rx764_pos, $P10
-    ge rx764_pos, rx764_eos, rxscan768_done
-  rxscan768_scan:
-    set_addr $I10, rxscan768_loop
-    rx764_cur."!mark_push"(0, rx764_pos, $I10)
-  rxscan768_done:
-.annotate "line", 360
+    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
   # rx literal  "("
-    add $I11, rx764_pos, 1
-    gt $I11, rx764_eos, rx764_fail
-    sub $I11, rx764_pos, rx764_off
-    substr $S10, rx764_tgt, $I11, 1
-    ne $S10, "(", rx764_fail
-    add rx764_pos, 1
+    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 subrule "arglist" subtype=capture negate=
-    rx764_cur."!cursor_pos"(rx764_pos)
-    $P10 = rx764_cur."arglist"()
-    unless $P10, rx764_fail
-    rx764_cur."!mark_push"(0, -1, 0, $P10)
+    rx769_cur."!cursor_pos"(rx769_pos)
+    $P10 = rx769_cur."arglist"()
+    unless $P10, rx769_fail
+    rx769_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("arglist")
-    rx764_pos = $P10."pos"()
+    rx769_pos = $P10."pos"()
   # rx literal  ")"
-    add $I11, rx764_pos, 1
-    gt $I11, rx764_eos, rx764_fail
-    sub $I11, rx764_pos, rx764_off
-    substr $S10, rx764_tgt, $I11, 1
-    ne $S10, ")", rx764_fail
-    add rx764_pos, 1
+    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
-    rx764_cur."!cursor_pass"(rx764_pos, "args")
-    rx764_cur."!cursor_debug"("PASS  ", "args", " at pos=", rx764_pos)
-    .return (rx764_cur)
-  rx764_fail:
+    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
-    (rx764_rep, rx764_pos, $I10, $P10) = rx764_cur."!mark_fail"(0)
-    lt rx764_pos, -1, rx764_done
-    eq rx764_pos, -1, rx764_fail
+    (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
-  rx764_done:
-    rx764_cur."!cursor_fail"()
-    rx764_cur."!cursor_debug"("FAIL  ", "args")
-    .return (rx764_cur)
+  rx769_done:
+    rx769_cur."!cursor_fail"()
+    rx769_cur."!cursor_debug"("FAIL  ", "args")
+    .return (rx769_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__args"  :subid("178_1261064023.05912") :method
+.sub "!PREFIX__args"  :subid("178_1267204702.05125") :method
 .annotate "line", 4
-    $P766 = self."!PREFIX__!subrule"("arglist", "(")
-    new $P767, "ResizablePMCArray"
-    push $P767, $P766
-    .return ($P767)
+    $P771 = self."!PREFIX__!subrule"("arglist", "(")
+    new $P772, "ResizablePMCArray"
+    push $P772, $P771
+    .return ($P772)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "arglist"  :subid("179_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "arglist"  :subid("179_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx770_tgt
-    .local int rx770_pos
-    .local int rx770_off
-    .local int rx770_eos
-    .local int rx770_rep
-    .local pmc rx770_cur
-    (rx770_cur, rx770_pos, rx770_tgt) = self."!cursor_start"()
-    rx770_cur."!cursor_debug"("START ", "arglist")
-    .lex unicode:"$\x{a2}", rx770_cur
-    .local pmc match
-    .lex "$/", match
-    length rx770_eos, rx770_tgt
-    set rx770_off, 0
-    lt rx770_pos, 2, rx770_start
-    sub rx770_off, rx770_pos, 1
-    substr rx770_tgt, rx770_tgt, rx770_off
-  rx770_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan774_done
-    goto rxscan774_scan
-  rxscan774_loop:
-    ($P10) = rx770_cur."from"()
-    inc $P10
-    set rx770_pos, $P10
-    ge rx770_pos, rx770_eos, rxscan774_done
-  rxscan774_scan:
-    set_addr $I10, rxscan774_loop
-    rx770_cur."!mark_push"(0, rx770_pos, $I10)
-  rxscan774_done:
-.annotate "line", 364
+    .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=
-    rx770_cur."!cursor_pos"(rx770_pos)
-    $P10 = rx770_cur."ws"()
-    unless $P10, rx770_fail
-    rx770_pos = $P10."pos"()
-  alt775_0:
-.annotate "line", 365
-    set_addr $I10, alt775_1
-    rx770_cur."!mark_push"(0, rx770_pos, $I10)
-.annotate "line", 366
+    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
   # rx subrule "EXPR" subtype=capture negate=
-    rx770_cur."!cursor_pos"(rx770_pos)
-    $P10 = rx770_cur."EXPR"("f=")
-    unless $P10, rx770_fail
-    rx770_cur."!mark_push"(0, -1, 0, $P10)
+    rx775_cur."!cursor_pos"(rx775_pos)
+    $P10 = rx775_cur."EXPR"("f=")
+    unless $P10, rx775_fail
+    rx775_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx770_pos = $P10."pos"()
-    goto alt775_end
-  alt775_1:
-  alt775_end:
-.annotate "line", 363
+    rx775_pos = $P10."pos"()
+    goto alt780_end
+  alt780_1:
+  alt780_end:
+.annotate "line", 367
   # rx pass
-    rx770_cur."!cursor_pass"(rx770_pos, "arglist")
-    rx770_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx770_pos)
-    .return (rx770_cur)
-  rx770_fail:
+    rx775_cur."!cursor_pass"(rx775_pos, "arglist")
+    rx775_cur."!cursor_debug"("PASS  ", "arglist", " at pos=", rx775_pos)
+    .return (rx775_cur)
+  rx775_fail:
 .annotate "line", 4
-    (rx770_rep, rx770_pos, $I10, $P10) = rx770_cur."!mark_fail"(0)
-    lt rx770_pos, -1, rx770_done
-    eq rx770_pos, -1, rx770_fail
+    (rx775_rep, rx775_pos, $I10, $P10) = rx775_cur."!mark_fail"(0)
+    lt rx775_pos, -1, rx775_done
+    eq rx775_pos, -1, rx775_fail
     jump $I10
-  rx770_done:
-    rx770_cur."!cursor_fail"()
-    rx770_cur."!cursor_debug"("FAIL  ", "arglist")
-    .return (rx770_cur)
+  rx775_done:
+    rx775_cur."!cursor_fail"()
+    rx775_cur."!cursor_debug"("FAIL  ", "arglist")
+    .return (rx775_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__arglist"  :subid("180_1261064023.05912") :method
+.sub "!PREFIX__arglist"  :subid("180_1267204702.05125") :method
 .annotate "line", 4
-    $P772 = self."!PREFIX__!subrule"("", "")
-    new $P773, "ResizablePMCArray"
-    push $P773, $P772
-    .return ($P773)
+    $P777 = self."!PREFIX__!subrule"("", "")
+    new $P778, "ResizablePMCArray"
+    push $P778, $P777
+    .return ($P778)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "term:sym<value>"  :subid("181_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "term:sym<value>"  :subid("181_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx777_tgt
-    .local int rx777_pos
-    .local int rx777_off
-    .local int rx777_eos
-    .local int rx777_rep
-    .local pmc rx777_cur
-    (rx777_cur, rx777_pos, rx777_tgt) = self."!cursor_start"()
-    rx777_cur."!cursor_debug"("START ", "term:sym<value>")
-    .lex unicode:"$\x{a2}", rx777_cur
+    .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 pmc match
     .lex "$/", match
-    length rx777_eos, rx777_tgt
-    set rx777_off, 0
-    lt rx777_pos, 2, rx777_start
-    sub rx777_off, rx777_pos, 1
-    substr rx777_tgt, rx777_tgt, rx777_off
-  rx777_start:
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan781_done
-    goto rxscan781_scan
-  rxscan781_loop:
-    ($P10) = rx777_cur."from"()
+    ne $I10, -1, rxscan786_done
+    goto rxscan786_scan
+  rxscan786_loop:
+    ($P10) = rx782_cur."from"()
     inc $P10
-    set rx777_pos, $P10
-    ge rx777_pos, rx777_eos, rxscan781_done
-  rxscan781_scan:
-    set_addr $I10, rxscan781_loop
-    rx777_cur."!mark_push"(0, rx777_pos, $I10)
-  rxscan781_done:
-.annotate "line", 372
+    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
   # rx subrule "value" subtype=capture negate=
-    rx777_cur."!cursor_pos"(rx777_pos)
-    $P10 = rx777_cur."value"()
-    unless $P10, rx777_fail
-    rx777_cur."!mark_push"(0, -1, 0, $P10)
+    rx782_cur."!cursor_pos"(rx782_pos)
+    $P10 = rx782_cur."value"()
+    unless $P10, rx782_fail
+    rx782_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("value")
-    rx777_pos = $P10."pos"()
+    rx782_pos = $P10."pos"()
   # rx pass
-    rx777_cur."!cursor_pass"(rx777_pos, "term:sym<value>")
-    rx777_cur."!cursor_debug"("PASS  ", "term:sym<value>", " at pos=", rx777_pos)
-    .return (rx777_cur)
-  rx777_fail:
+    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:
 .annotate "line", 4
-    (rx777_rep, rx777_pos, $I10, $P10) = rx777_cur."!mark_fail"(0)
-    lt rx777_pos, -1, rx777_done
-    eq rx777_pos, -1, rx777_fail
+    (rx782_rep, rx782_pos, $I10, $P10) = rx782_cur."!mark_fail"(0)
+    lt rx782_pos, -1, rx782_done
+    eq rx782_pos, -1, rx782_fail
     jump $I10
-  rx777_done:
-    rx777_cur."!cursor_fail"()
-    rx777_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
-    .return (rx777_cur)
+  rx782_done:
+    rx782_cur."!cursor_fail"()
+    rx782_cur."!cursor_debug"("FAIL  ", "term:sym<value>")
+    .return (rx782_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__term:sym<value>"  :subid("182_1261064023.05912") :method
+.sub "!PREFIX__term:sym<value>"  :subid("182_1267204702.05125") :method
 .annotate "line", 4
-    $P779 = self."!PREFIX__!subrule"("value", "")
-    new $P780, "ResizablePMCArray"
-    push $P780, $P779
-    .return ($P780)
+    $P784 = self."!PREFIX__!subrule"("value", "")
+    new $P785, "ResizablePMCArray"
+    push $P785, $P784
+    .return ($P785)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "value"  :subid("183_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "value"  :subid("183_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx783_tgt
-    .local int rx783_pos
-    .local int rx783_off
-    .local int rx783_eos
-    .local int rx783_rep
-    .local pmc rx783_cur
-    (rx783_cur, rx783_pos, rx783_tgt) = self."!cursor_start"()
-    rx783_cur."!cursor_debug"("START ", "value")
-    .lex unicode:"$\x{a2}", rx783_cur
-    .local pmc match
-    .lex "$/", match
-    length rx783_eos, rx783_tgt
-    set rx783_off, 0
-    lt rx783_pos, 2, rx783_start
-    sub rx783_off, rx783_pos, 1
-    substr rx783_tgt, rx783_tgt, rx783_off
-  rx783_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan788_done
-    goto rxscan788_scan
-  rxscan788_loop:
-    ($P10) = rx783_cur."from"()
-    inc $P10
-    set rx783_pos, $P10
-    ge rx783_pos, rx783_eos, rxscan788_done
-  rxscan788_scan:
-    set_addr $I10, rxscan788_loop
-    rx783_cur."!mark_push"(0, rx783_pos, $I10)
-  rxscan788_done:
-  alt789_0:
-.annotate "line", 374
-    set_addr $I10, alt789_1
-    rx783_cur."!mark_push"(0, rx783_pos, $I10)
-.annotate "line", 375
+    .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 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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan793_done
+    goto rxscan793_scan
+  rxscan793_loop:
+    ($P10) = rx788_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
   # rx subrule "quote" subtype=capture negate=
-    rx783_cur."!cursor_pos"(rx783_pos)
-    $P10 = rx783_cur."quote"()
-    unless $P10, rx783_fail
-    rx783_cur."!mark_push"(0, -1, 0, $P10)
+    rx788_cur."!cursor_pos"(rx788_pos)
+    $P10 = rx788_cur."quote"()
+    unless $P10, rx788_fail
+    rx788_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote")
-    rx783_pos = $P10."pos"()
-    goto alt789_end
-  alt789_1:
-.annotate "line", 376
+    rx788_pos = $P10."pos"()
+    goto alt794_end
+  alt794_1:
+.annotate "line", 380
   # rx subrule "number" subtype=capture negate=
-    rx783_cur."!cursor_pos"(rx783_pos)
-    $P10 = rx783_cur."number"()
-    unless $P10, rx783_fail
-    rx783_cur."!mark_push"(0, -1, 0, $P10)
+    rx788_cur."!cursor_pos"(rx788_pos)
+    $P10 = rx788_cur."number"()
+    unless $P10, rx788_fail
+    rx788_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("number")
-    rx783_pos = $P10."pos"()
-  alt789_end:
-.annotate "line", 374
+    rx788_pos = $P10."pos"()
+  alt794_end:
+.annotate "line", 378
   # rx pass
-    rx783_cur."!cursor_pass"(rx783_pos, "value")
-    rx783_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx783_pos)
-    .return (rx783_cur)
-  rx783_fail:
+    rx788_cur."!cursor_pass"(rx788_pos, "value")
+    rx788_cur."!cursor_debug"("PASS  ", "value", " at pos=", rx788_pos)
+    .return (rx788_cur)
+  rx788_fail:
 .annotate "line", 4
-    (rx783_rep, rx783_pos, $I10, $P10) = rx783_cur."!mark_fail"(0)
-    lt rx783_pos, -1, rx783_done
-    eq rx783_pos, -1, rx783_fail
+    (rx788_rep, rx788_pos, $I10, $P10) = rx788_cur."!mark_fail"(0)
+    lt rx788_pos, -1, rx788_done
+    eq rx788_pos, -1, rx788_fail
     jump $I10
-  rx783_done:
-    rx783_cur."!cursor_fail"()
-    rx783_cur."!cursor_debug"("FAIL  ", "value")
-    .return (rx783_cur)
+  rx788_done:
+    rx788_cur."!cursor_fail"()
+    rx788_cur."!cursor_debug"("FAIL  ", "value")
+    .return (rx788_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__value"  :subid("184_1261064023.05912") :method
+.sub "!PREFIX__value"  :subid("184_1267204702.05125") :method
 .annotate "line", 4
-    $P785 = self."!PREFIX__!subrule"("number", "")
-    $P786 = self."!PREFIX__!subrule"("quote", "")
-    new $P787, "ResizablePMCArray"
-    push $P787, $P785
-    push $P787, $P786
-    .return ($P787)
+    $P790 = self."!PREFIX__!subrule"("number", "")
+    $P791 = self."!PREFIX__!subrule"("quote", "")
+    new $P792, "ResizablePMCArray"
+    push $P792, $P790
+    push $P792, $P791
+    .return ($P792)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "number"  :subid("185_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "number"  :subid("185_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .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 ", "number")
-    .lex unicode:"$\x{a2}", rx791_cur
-    .local pmc match
-    .lex "$/", match
-    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, rxscan794_done
-    goto rxscan794_scan
-  rxscan794_loop:
-    ($P10) = rx791_cur."from"()
-    inc $P10
-    set rx791_pos, $P10
-    ge rx791_pos, rx791_eos, rxscan794_done
-  rxscan794_scan:
-    set_addr $I10, rxscan794_loop
-    rx791_cur."!mark_push"(0, rx791_pos, $I10)
-  rxscan794_done:
-.annotate "line", 380
+    .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 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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan799_done
+    goto rxscan799_scan
+  rxscan799_loop:
+    ($P10) = rx796_cur."from"()
+    inc $P10
+    set rx796_pos, $P10
+    ge rx796_pos, rx796_eos, rxscan799_done
+  rxscan799_scan:
+    set_addr $I10, rxscan799_loop
+    rx796_cur."!mark_push"(0, rx796_pos, $I10)
+  rxscan799_done:
+.annotate "line", 384
   # rx subcapture "sign"
-    set_addr $I10, rxcap_797_fail
-    rx791_cur."!mark_push"(0, rx791_pos, $I10)
-  # rx rxquantr795 ** 0..1
-    set_addr $I796, rxquantr795_done
-    rx791_cur."!mark_push"(0, rx791_pos, $I796)
-  rxquantr795_loop:
+    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:
   # rx enumcharlist negate=0 
-    ge rx791_pos, rx791_eos, rx791_fail
-    sub $I10, rx791_pos, rx791_off
-    substr $S10, rx791_tgt, $I10, 1
+    ge rx796_pos, rx796_eos, rx796_fail
+    sub $I10, rx796_pos, rx796_off
+    substr $S10, rx796_tgt, $I10, 1
     index $I11, "+-", $S10
-    lt $I11, 0, rx791_fail
-    inc rx791_pos
-    (rx791_rep) = rx791_cur."!mark_commit"($I796)
-  rxquantr795_done:
-    set_addr $I10, rxcap_797_fail
-    ($I12, $I11) = rx791_cur."!mark_peek"($I10)
-    rx791_cur."!cursor_pos"($I11)
-    ($P10) = rx791_cur."!cursor_start"()
-    $P10."!cursor_pass"(rx791_pos, "")
-    rx791_cur."!mark_push"(0, -1, 0, $P10)
+    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)
     $P10."!cursor_names"("sign")
-    goto rxcap_797_done
-  rxcap_797_fail:
-    goto rx791_fail
-  rxcap_797_done:
-  alt798_0:
-.annotate "line", 381
-    set_addr $I10, alt798_1
-    rx791_cur."!mark_push"(0, rx791_pos, $I10)
+    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)
   # rx subrule "dec_number" subtype=capture negate=
-    rx791_cur."!cursor_pos"(rx791_pos)
-    $P10 = rx791_cur."dec_number"()
-    unless $P10, rx791_fail
-    rx791_cur."!mark_push"(0, -1, 0, $P10)
+    rx796_cur."!cursor_pos"(rx796_pos)
+    $P10 = rx796_cur."dec_number"()
+    unless $P10, rx796_fail
+    rx796_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("dec_number")
-    rx791_pos = $P10."pos"()
-    goto alt798_end
-  alt798_1:
+    rx796_pos = $P10."pos"()
+    goto alt803_end
+  alt803_1:
   # rx subrule "integer" subtype=capture negate=
-    rx791_cur."!cursor_pos"(rx791_pos)
-    $P10 = rx791_cur."integer"()
-    unless $P10, rx791_fail
-    rx791_cur."!mark_push"(0, -1, 0, $P10)
+    rx796_cur."!cursor_pos"(rx796_pos)
+    $P10 = rx796_cur."integer"()
+    unless $P10, rx796_fail
+    rx796_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("integer")
-    rx791_pos = $P10."pos"()
-  alt798_end:
-.annotate "line", 379
+    rx796_pos = $P10."pos"()
+  alt803_end:
+.annotate "line", 383
   # rx pass
-    rx791_cur."!cursor_pass"(rx791_pos, "number")
-    rx791_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx791_pos)
-    .return (rx791_cur)
-  rx791_fail:
+    rx796_cur."!cursor_pass"(rx796_pos, "number")
+    rx796_cur."!cursor_debug"("PASS  ", "number", " at pos=", rx796_pos)
+    .return (rx796_cur)
+  rx796_fail:
 .annotate "line", 4
-    (rx791_rep, rx791_pos, $I10, $P10) = rx791_cur."!mark_fail"(0)
-    lt rx791_pos, -1, rx791_done
-    eq rx791_pos, -1, rx791_fail
+    (rx796_rep, rx796_pos, $I10, $P10) = rx796_cur."!mark_fail"(0)
+    lt rx796_pos, -1, rx796_done
+    eq rx796_pos, -1, rx796_fail
     jump $I10
-  rx791_done:
-    rx791_cur."!cursor_fail"()
-    rx791_cur."!cursor_debug"("FAIL  ", "number")
-    .return (rx791_cur)
+  rx796_done:
+    rx796_cur."!cursor_fail"()
+    rx796_cur."!cursor_debug"("FAIL  ", "number")
+    .return (rx796_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__number"  :subid("186_1261064023.05912") :method
+.sub "!PREFIX__number"  :subid("186_1267204702.05125") :method
 .annotate "line", 4
-    new $P793, "ResizablePMCArray"
-    push $P793, ""
-    .return ($P793)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote"  :subid("187_1261064023.05912") :method
-.annotate "line", 384
-    $P800 = self."!protoregex"("quote")
-    .return ($P800)
+    new $P798, "ResizablePMCArray"
+    push $P798, ""
+    .return ($P798)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote"  :subid("188_1261064023.05912") :method
-.annotate "line", 384
-    $P802 = self."!PREFIX__!protoregex"("quote")
-    .return ($P802)
-.end
-
-
-.namespace ["NQP";"Grammar"]
-.sub "quote:sym<apos>"  :subid("189_1261064023.05912") :method :outer("11_1261064023.05912")
-.annotate "line", 4
-    .local string rx804_tgt
-    .local int rx804_pos
-    .local int rx804_off
-    .local int rx804_eos
-    .local int rx804_rep
-    .local pmc rx804_cur
-    (rx804_cur, rx804_pos, rx804_tgt) = self."!cursor_start"()
-    rx804_cur."!cursor_debug"("START ", "quote:sym<apos>")
-    .lex unicode:"$\x{a2}", rx804_cur
-    .local pmc match
-    .lex "$/", match
-    length rx804_eos, rx804_tgt
-    set rx804_off, 0
-    lt rx804_pos, 2, rx804_start
-    sub rx804_off, rx804_pos, 1
-    substr rx804_tgt, rx804_tgt, rx804_off
-  rx804_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan807_done
-    goto rxscan807_scan
-  rxscan807_loop:
-    ($P10) = rx804_cur."from"()
-    inc $P10
-    set rx804_pos, $P10
-    ge rx804_pos, rx804_eos, rxscan807_done
-  rxscan807_scan:
-    set_addr $I10, rxscan807_loop
-    rx804_cur."!mark_push"(0, rx804_pos, $I10)
-  rxscan807_done:
-.annotate "line", 385
-  # rx enumcharlist negate=0 zerowidth
-    ge rx804_pos, rx804_eos, rx804_fail
-    sub $I10, rx804_pos, rx804_off
-    substr $S10, rx804_tgt, $I10, 1
-    index $I11, "'", $S10
-    lt $I11, 0, rx804_fail
-  # rx subrule "quote_EXPR" subtype=capture negate=
-    rx804_cur."!cursor_pos"(rx804_pos)
-    $P10 = rx804_cur."quote_EXPR"(":q")
-    unless $P10, rx804_fail
-    rx804_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("quote_EXPR")
-    rx804_pos = $P10."pos"()
-  # rx pass
-    rx804_cur."!cursor_pass"(rx804_pos, "quote:sym<apos>")
-    rx804_cur."!cursor_debug"("PASS  ", "quote:sym<apos>", " at pos=", rx804_pos)
-    .return (rx804_cur)
-  rx804_fail:
-.annotate "line", 4
-    (rx804_rep, rx804_pos, $I10, $P10) = rx804_cur."!mark_fail"(0)
-    lt rx804_pos, -1, rx804_done
-    eq rx804_pos, -1, rx804_fail
-    jump $I10
-  rx804_done:
-    rx804_cur."!cursor_fail"()
-    rx804_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
-    .return (rx804_cur)
-    .return ()
+.sub "quote"  :subid("187_1267204702.05125") :method
+.annotate "line", 388
+    $P805 = self."!protoregex"("quote")
+    .return ($P805)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<apos>"  :subid("190_1261064023.05912") :method
-.annotate "line", 4
-    new $P806, "ResizablePMCArray"
-    push $P806, "'"
-    .return ($P806)
+.sub "!PREFIX__quote"  :subid("188_1267204702.05125") :method
+.annotate "line", 388
+    $P807 = self."!PREFIX__!protoregex"("quote")
+    .return ($P807)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<dblq>"  :subid("191_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote:sym<apos>"  :subid("189_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx809_tgt
     .local int rx809_pos
@@ -9546,7 +9516,7 @@
     .local int rx809_rep
     .local pmc rx809_cur
     (rx809_cur, rx809_pos, rx809_tgt) = self."!cursor_start"()
-    rx809_cur."!cursor_debug"("START ", "quote:sym<dblq>")
+    rx809_cur."!cursor_debug"("START ", "quote:sym<apos>")
     .lex unicode:"$\x{a2}", rx809_cur
     .local pmc match
     .lex "$/", match
@@ -9568,23 +9538,23 @@
     set_addr $I10, rxscan812_loop
     rx809_cur."!mark_push"(0, rx809_pos, $I10)
   rxscan812_done:
-.annotate "line", 386
+.annotate "line", 389
   # rx enumcharlist negate=0 zerowidth
     ge rx809_pos, rx809_eos, rx809_fail
     sub $I10, rx809_pos, rx809_off
     substr $S10, rx809_tgt, $I10, 1
-    index $I11, "\"", $S10
+    index $I11, "'", $S10
     lt $I11, 0, rx809_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
     rx809_cur."!cursor_pos"(rx809_pos)
-    $P10 = rx809_cur."quote_EXPR"(":qq")
+    $P10 = rx809_cur."quote_EXPR"(":q")
     unless $P10, rx809_fail
     rx809_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
     rx809_pos = $P10."pos"()
   # rx pass
-    rx809_cur."!cursor_pass"(rx809_pos, "quote:sym<dblq>")
-    rx809_cur."!cursor_debug"("PASS  ", "quote:sym<dblq>", " at pos=", rx809_pos)
+    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:
 .annotate "line", 4
@@ -9594,23 +9564,23 @@
     jump $I10
   rx809_done:
     rx809_cur."!cursor_fail"()
-    rx809_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
+    rx809_cur."!cursor_debug"("FAIL  ", "quote:sym<apos>")
     .return (rx809_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1261064023.05912") :method
+.sub "!PREFIX__quote:sym<apos>"  :subid("190_1267204702.05125") :method
 .annotate "line", 4
     new $P811, "ResizablePMCArray"
-    push $P811, "\""
+    push $P811, "'"
     .return ($P811)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<q>"  :subid("193_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote:sym<dblq>"  :subid("191_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx814_tgt
     .local int rx814_pos
@@ -9619,7 +9589,7 @@
     .local int rx814_rep
     .local pmc rx814_cur
     (rx814_cur, rx814_pos, rx814_tgt) = self."!cursor_start"()
-    rx814_cur."!cursor_debug"("START ", "quote:sym<q>")
+    rx814_cur."!cursor_debug"("START ", "quote:sym<dblq>")
     .lex unicode:"$\x{a2}", rx814_cur
     .local pmc match
     .lex "$/", match
@@ -9630,46 +9600,34 @@
     substr rx814_tgt, rx814_tgt, rx814_off
   rx814_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan818_done
-    goto rxscan818_scan
-  rxscan818_loop:
+    ne $I10, -1, rxscan817_done
+    goto rxscan817_scan
+  rxscan817_loop:
     ($P10) = rx814_cur."from"()
     inc $P10
     set rx814_pos, $P10
-    ge rx814_pos, rx814_eos, rxscan818_done
-  rxscan818_scan:
-    set_addr $I10, rxscan818_loop
+    ge rx814_pos, rx814_eos, rxscan817_done
+  rxscan817_scan:
+    set_addr $I10, rxscan817_loop
     rx814_cur."!mark_push"(0, rx814_pos, $I10)
-  rxscan818_done:
-.annotate "line", 387
-  # rx literal  "q"
-    add $I11, rx814_pos, 1
-    gt $I11, rx814_eos, rx814_fail
-    sub $I11, rx814_pos, rx814_off
-    substr $S10, rx814_tgt, $I11, 1
-    ne $S10, "q", rx814_fail
-    add rx814_pos, 1
-  # rx enumcharlist negate=1 zerowidth
+  rxscan817_done:
+.annotate "line", 390
+  # rx enumcharlist negate=0 zerowidth
     ge rx814_pos, rx814_eos, rx814_fail
     sub $I10, rx814_pos, rx814_off
     substr $S10, rx814_tgt, $I10, 1
-    index $I11, "(", $S10
-    ge $I11, 0, rx814_fail
-  # rx subrule "ws" subtype=method negate=
-    rx814_cur."!cursor_pos"(rx814_pos)
-    $P10 = rx814_cur."ws"()
-    unless $P10, rx814_fail
-    rx814_pos = $P10."pos"()
+    index $I11, "\"", $S10
+    lt $I11, 0, rx814_fail
   # rx subrule "quote_EXPR" subtype=capture negate=
     rx814_cur."!cursor_pos"(rx814_pos)
-    $P10 = rx814_cur."quote_EXPR"(":q")
+    $P10 = rx814_cur."quote_EXPR"(":qq")
     unless $P10, rx814_fail
     rx814_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
     rx814_pos = $P10."pos"()
   # rx pass
-    rx814_cur."!cursor_pass"(rx814_pos, "quote:sym<q>")
-    rx814_cur."!cursor_debug"("PASS  ", "quote:sym<q>", " at pos=", rx814_pos)
+    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:
 .annotate "line", 4
@@ -9679,448 +9637,456 @@
     jump $I10
   rx814_done:
     rx814_cur."!cursor_fail"()
-    rx814_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    rx814_cur."!cursor_debug"("FAIL  ", "quote:sym<dblq>")
     .return (rx814_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<q>"  :subid("194_1261064023.05912") :method
+.sub "!PREFIX__quote:sym<dblq>"  :subid("192_1267204702.05125") :method
 .annotate "line", 4
-    $P816 = self."!PREFIX__!subrule"("", "q")
-    new $P817, "ResizablePMCArray"
-    push $P817, $P816
-    .return ($P817)
+    new $P816, "ResizablePMCArray"
+    push $P816, "\""
+    .return ($P816)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<qq>"  :subid("195_1261064023.05912") :method :outer("11_1261064023.05912")
-.annotate "line", 4
-    .local string rx820_tgt
-    .local int rx820_pos
-    .local int rx820_off
-    .local int rx820_eos
-    .local int rx820_rep
-    .local pmc rx820_cur
-    (rx820_cur, rx820_pos, rx820_tgt) = self."!cursor_start"()
-    rx820_cur."!cursor_debug"("START ", "quote:sym<qq>")
-    .lex unicode:"$\x{a2}", rx820_cur
-    .local pmc match
-    .lex "$/", match
-    length rx820_eos, rx820_tgt
-    set rx820_off, 0
-    lt rx820_pos, 2, rx820_start
-    sub rx820_off, rx820_pos, 1
-    substr rx820_tgt, rx820_tgt, rx820_off
-  rx820_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan824_done
-    goto rxscan824_scan
-  rxscan824_loop:
-    ($P10) = rx820_cur."from"()
-    inc $P10
-    set rx820_pos, $P10
-    ge rx820_pos, rx820_eos, rxscan824_done
-  rxscan824_scan:
-    set_addr $I10, rxscan824_loop
-    rx820_cur."!mark_push"(0, rx820_pos, $I10)
-  rxscan824_done:
-.annotate "line", 388
-  # rx literal  "qq"
-    add $I11, rx820_pos, 2
-    gt $I11, rx820_eos, rx820_fail
-    sub $I11, rx820_pos, rx820_off
-    substr $S10, rx820_tgt, $I11, 2
-    ne $S10, "qq", rx820_fail
-    add rx820_pos, 2
+.sub "quote:sym<q>"  :subid("193_1267204702.05125") :method :outer("11_1267204702.05125")
+.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 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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan823_done
+    goto rxscan823_scan
+  rxscan823_loop:
+    ($P10) = rx819_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
+  # 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
   # rx enumcharlist negate=1 zerowidth
-    ge rx820_pos, rx820_eos, rx820_fail
-    sub $I10, rx820_pos, rx820_off
-    substr $S10, rx820_tgt, $I10, 1
+    ge rx819_pos, rx819_eos, rx819_fail
+    sub $I10, rx819_pos, rx819_off
+    substr $S10, rx819_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx820_fail
+    ge $I11, 0, rx819_fail
   # rx subrule "ws" subtype=method negate=
-    rx820_cur."!cursor_pos"(rx820_pos)
-    $P10 = rx820_cur."ws"()
-    unless $P10, rx820_fail
-    rx820_pos = $P10."pos"()
+    rx819_cur."!cursor_pos"(rx819_pos)
+    $P10 = rx819_cur."ws"()
+    unless $P10, rx819_fail
+    rx819_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx820_cur."!cursor_pos"(rx820_pos)
-    $P10 = rx820_cur."quote_EXPR"(":qq")
-    unless $P10, rx820_fail
-    rx820_cur."!mark_push"(0, -1, 0, $P10)
+    rx819_cur."!cursor_pos"(rx819_pos)
+    $P10 = rx819_cur."quote_EXPR"(":q")
+    unless $P10, rx819_fail
+    rx819_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx820_pos = $P10."pos"()
+    rx819_pos = $P10."pos"()
   # rx pass
-    rx820_cur."!cursor_pass"(rx820_pos, "quote:sym<qq>")
-    rx820_cur."!cursor_debug"("PASS  ", "quote:sym<qq>", " at pos=", rx820_pos)
-    .return (rx820_cur)
-  rx820_fail:
+    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:
 .annotate "line", 4
-    (rx820_rep, rx820_pos, $I10, $P10) = rx820_cur."!mark_fail"(0)
-    lt rx820_pos, -1, rx820_done
-    eq rx820_pos, -1, rx820_fail
+    (rx819_rep, rx819_pos, $I10, $P10) = rx819_cur."!mark_fail"(0)
+    lt rx819_pos, -1, rx819_done
+    eq rx819_pos, -1, rx819_fail
     jump $I10
-  rx820_done:
-    rx820_cur."!cursor_fail"()
-    rx820_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
-    .return (rx820_cur)
+  rx819_done:
+    rx819_cur."!cursor_fail"()
+    rx819_cur."!cursor_debug"("FAIL  ", "quote:sym<q>")
+    .return (rx819_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<qq>"  :subid("196_1261064023.05912") :method
+.sub "!PREFIX__quote:sym<q>"  :subid("194_1267204702.05125") :method
 .annotate "line", 4
-    $P822 = self."!PREFIX__!subrule"("", "qq")
-    new $P823, "ResizablePMCArray"
-    push $P823, $P822
-    .return ($P823)
+    $P821 = self."!PREFIX__!subrule"("", "q")
+    new $P822, "ResizablePMCArray"
+    push $P822, $P821
+    .return ($P822)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q>"  :subid("197_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote:sym<qq>"  :subid("195_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx826_tgt
-    .local int rx826_pos
-    .local int rx826_off
-    .local int rx826_eos
-    .local int rx826_rep
-    .local pmc rx826_cur
-    (rx826_cur, rx826_pos, rx826_tgt) = self."!cursor_start"()
-    rx826_cur."!cursor_debug"("START ", "quote:sym<Q>")
-    .lex unicode:"$\x{a2}", rx826_cur
+    .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 pmc match
     .lex "$/", match
-    length rx826_eos, rx826_tgt
-    set rx826_off, 0
-    lt rx826_pos, 2, rx826_start
-    sub rx826_off, rx826_pos, 1
-    substr rx826_tgt, rx826_tgt, rx826_off
-  rx826_start:
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan830_done
-    goto rxscan830_scan
-  rxscan830_loop:
-    ($P10) = rx826_cur."from"()
+    ne $I10, -1, rxscan829_done
+    goto rxscan829_scan
+  rxscan829_loop:
+    ($P10) = rx825_cur."from"()
     inc $P10
-    set rx826_pos, $P10
-    ge rx826_pos, rx826_eos, rxscan830_done
-  rxscan830_scan:
-    set_addr $I10, rxscan830_loop
-    rx826_cur."!mark_push"(0, rx826_pos, $I10)
-  rxscan830_done:
-.annotate "line", 389
-  # rx literal  "Q"
-    add $I11, rx826_pos, 1
-    gt $I11, rx826_eos, rx826_fail
-    sub $I11, rx826_pos, rx826_off
-    substr $S10, rx826_tgt, $I11, 1
-    ne $S10, "Q", rx826_fail
-    add rx826_pos, 1
+    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
+  # 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
   # rx enumcharlist negate=1 zerowidth
-    ge rx826_pos, rx826_eos, rx826_fail
-    sub $I10, rx826_pos, rx826_off
-    substr $S10, rx826_tgt, $I10, 1
+    ge rx825_pos, rx825_eos, rx825_fail
+    sub $I10, rx825_pos, rx825_off
+    substr $S10, rx825_tgt, $I10, 1
     index $I11, "(", $S10
-    ge $I11, 0, rx826_fail
+    ge $I11, 0, rx825_fail
   # rx subrule "ws" subtype=method negate=
-    rx826_cur."!cursor_pos"(rx826_pos)
-    $P10 = rx826_cur."ws"()
-    unless $P10, rx826_fail
-    rx826_pos = $P10."pos"()
+    rx825_cur."!cursor_pos"(rx825_pos)
+    $P10 = rx825_cur."ws"()
+    unless $P10, rx825_fail
+    rx825_pos = $P10."pos"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx826_cur."!cursor_pos"(rx826_pos)
-    $P10 = rx826_cur."quote_EXPR"()
-    unless $P10, rx826_fail
-    rx826_cur."!mark_push"(0, -1, 0, $P10)
+    rx825_cur."!cursor_pos"(rx825_pos)
+    $P10 = rx825_cur."quote_EXPR"(":qq")
+    unless $P10, rx825_fail
+    rx825_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx826_pos = $P10."pos"()
+    rx825_pos = $P10."pos"()
   # rx pass
-    rx826_cur."!cursor_pass"(rx826_pos, "quote:sym<Q>")
-    rx826_cur."!cursor_debug"("PASS  ", "quote:sym<Q>", " at pos=", rx826_pos)
-    .return (rx826_cur)
-  rx826_fail:
+    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:
 .annotate "line", 4
-    (rx826_rep, rx826_pos, $I10, $P10) = rx826_cur."!mark_fail"(0)
-    lt rx826_pos, -1, rx826_done
-    eq rx826_pos, -1, rx826_fail
+    (rx825_rep, rx825_pos, $I10, $P10) = rx825_cur."!mark_fail"(0)
+    lt rx825_pos, -1, rx825_done
+    eq rx825_pos, -1, rx825_fail
     jump $I10
-  rx826_done:
-    rx826_cur."!cursor_fail"()
-    rx826_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
-    .return (rx826_cur)
+  rx825_done:
+    rx825_cur."!cursor_fail"()
+    rx825_cur."!cursor_debug"("FAIL  ", "quote:sym<qq>")
+    .return (rx825_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q>"  :subid("198_1261064023.05912") :method
+.sub "!PREFIX__quote:sym<qq>"  :subid("196_1267204702.05125") :method
 .annotate "line", 4
-    $P828 = self."!PREFIX__!subrule"("", "Q")
-    new $P829, "ResizablePMCArray"
-    push $P829, $P828
-    .return ($P829)
+    $P827 = self."!PREFIX__!subrule"("", "qq")
+    new $P828, "ResizablePMCArray"
+    push $P828, $P827
+    .return ($P828)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym<Q:PIR>"  :subid("199_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote:sym<Q>"  :subid("197_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx832_tgt
-    .local int rx832_pos
-    .local int rx832_off
-    .local int rx832_eos
-    .local int rx832_rep
-    .local pmc rx832_cur
-    (rx832_cur, rx832_pos, rx832_tgt) = self."!cursor_start"()
-    rx832_cur."!cursor_debug"("START ", "quote:sym<Q:PIR>")
-    .lex unicode:"$\x{a2}", rx832_cur
-    .local pmc match
-    .lex "$/", match
-    length rx832_eos, rx832_tgt
-    set rx832_off, 0
-    lt rx832_pos, 2, rx832_start
-    sub rx832_off, rx832_pos, 1
-    substr rx832_tgt, rx832_tgt, rx832_off
-  rx832_start:
-    $I10 = self.'from'()
-    ne $I10, -1, rxscan836_done
-    goto rxscan836_scan
-  rxscan836_loop:
-    ($P10) = rx832_cur."from"()
-    inc $P10
-    set rx832_pos, $P10
-    ge rx832_pos, rx832_eos, rxscan836_done
-  rxscan836_scan:
-    set_addr $I10, rxscan836_loop
-    rx832_cur."!mark_push"(0, rx832_pos, $I10)
-  rxscan836_done:
-.annotate "line", 390
-  # rx literal  "Q:PIR"
-    add $I11, rx832_pos, 5
-    gt $I11, rx832_eos, rx832_fail
-    sub $I11, rx832_pos, rx832_off
-    substr $S10, rx832_tgt, $I11, 5
-    ne $S10, "Q:PIR", rx832_fail
-    add rx832_pos, 5
-  # rx subrule "ws" subtype=method negate=
-    rx832_cur."!cursor_pos"(rx832_pos)
-    $P10 = rx832_cur."ws"()
-    unless $P10, rx832_fail
-    rx832_pos = $P10."pos"()
+    .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
+  # 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
+  # rx enumcharlist negate=1 zerowidth
+    ge rx831_pos, rx831_eos, rx831_fail
+    sub $I10, rx831_pos, rx831_off
+    substr $S10, rx831_tgt, $I10, 1
+    index $I11, "(", $S10
+    ge $I11, 0, rx831_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"()
   # rx subrule "quote_EXPR" subtype=capture negate=
-    rx832_cur."!cursor_pos"(rx832_pos)
-    $P10 = rx832_cur."quote_EXPR"()
-    unless $P10, rx832_fail
-    rx832_cur."!mark_push"(0, -1, 0, $P10)
+    rx831_cur."!cursor_pos"(rx831_pos)
+    $P10 = rx831_cur."quote_EXPR"()
+    unless $P10, rx831_fail
+    rx831_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("quote_EXPR")
-    rx832_pos = $P10."pos"()
+    rx831_pos = $P10."pos"()
   # rx pass
-    rx832_cur."!cursor_pass"(rx832_pos, "quote:sym<Q:PIR>")
-    rx832_cur."!cursor_debug"("PASS  ", "quote:sym<Q:PIR>", " at pos=", rx832_pos)
-    .return (rx832_cur)
-  rx832_fail:
+    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:
 .annotate "line", 4
-    (rx832_rep, rx832_pos, $I10, $P10) = rx832_cur."!mark_fail"(0)
-    lt rx832_pos, -1, rx832_done
-    eq rx832_pos, -1, rx832_fail
+    (rx831_rep, rx831_pos, $I10, $P10) = rx831_cur."!mark_fail"(0)
+    lt rx831_pos, -1, rx831_done
+    eq rx831_pos, -1, rx831_fail
     jump $I10
-  rx832_done:
-    rx832_cur."!cursor_fail"()
-    rx832_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
-    .return (rx832_cur)
+  rx831_done:
+    rx831_cur."!cursor_fail"()
+    rx831_cur."!cursor_debug"("FAIL  ", "quote:sym<Q>")
+    .return (rx831_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1261064023.05912") :method
+.sub "!PREFIX__quote:sym<Q>"  :subid("198_1267204702.05125") :method
 .annotate "line", 4
-    $P834 = self."!PREFIX__!subrule"("", "Q:PIR")
-    new $P835, "ResizablePMCArray"
-    push $P835, $P834
-    .return ($P835)
+    $P833 = self."!PREFIX__!subrule"("", "Q")
+    new $P834, "ResizablePMCArray"
+    push $P834, $P833
+    .return ($P834)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote:sym</ />"  :subid("201_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote:sym<Q:PIR>"  :subid("199_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx838_tgt
-    .local int rx838_pos
-    .local int rx838_off
-    .local int rx838_eos
-    .local int rx838_rep
-    .local pmc rx838_cur
-    (rx838_cur, rx838_pos, rx838_tgt) = self."!cursor_start"()
-    rx838_cur."!cursor_debug"("START ", "quote:sym</ />")
-    .lex unicode:"$\x{a2}", rx838_cur
+    .local string rx837_tgt
+    .local int rx837_pos
+    .local int rx837_off
+    .local int rx837_eos
+    .local int rx837_rep
+    .local pmc rx837_cur
+    (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 pmc match
     .lex "$/", match
-    length rx838_eos, rx838_tgt
-    set rx838_off, 0
-    lt rx838_pos, 2, rx838_start
-    sub rx838_off, rx838_pos, 1
-    substr rx838_tgt, rx838_tgt, rx838_off
-  rx838_start:
+    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:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan842_done
-    goto rxscan842_scan
-  rxscan842_loop:
-    ($P10) = rx838_cur."from"()
+    ne $I10, -1, rxscan841_done
+    goto rxscan841_scan
+  rxscan841_loop:
+    ($P10) = rx837_cur."from"()
     inc $P10
-    set rx838_pos, $P10
-    ge rx838_pos, rx838_eos, rxscan842_done
-  rxscan842_scan:
-    set_addr $I10, rxscan842_loop
-    rx838_cur."!mark_push"(0, rx838_pos, $I10)
-  rxscan842_done:
-.annotate "line", 392
-  # rx literal  "/"
-    add $I11, rx838_pos, 1
-    gt $I11, rx838_eos, rx838_fail
-    sub $I11, rx838_pos, rx838_off
-    substr $S10, rx838_tgt, $I11, 1
-    ne $S10, "/", rx838_fail
-    add rx838_pos, 1
-.annotate "line", 393
-  # rx subrule "newpad" subtype=method negate=
-    rx838_cur."!cursor_pos"(rx838_pos)
-    $P10 = rx838_cur."newpad"()
-    unless $P10, rx838_fail
-    rx838_pos = $P10."pos"()
+    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
-  # rx reduce name="quote:sym</ />" key="open"
-    rx838_cur."!cursor_pos"(rx838_pos)
-    rx838_cur."!reduce"("quote:sym</ />", "open")
-.annotate "line", 395
-  # rx subrule "LANG" subtype=capture negate=
-    rx838_cur."!cursor_pos"(rx838_pos)
-    $P10 = rx838_cur."LANG"("Regex", "nibbler")
-    unless $P10, rx838_fail
-    rx838_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("p6regex")
-    rx838_pos = $P10."pos"()
-.annotate "line", 396
-  # rx literal  "/"
-    add $I11, rx838_pos, 1
-    gt $I11, rx838_eos, rx838_fail
-    sub $I11, rx838_pos, rx838_off
-    substr $S10, rx838_tgt, $I11, 1
-    ne $S10, "/", rx838_fail
-    add rx838_pos, 1
-.annotate "line", 391
+  # 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"()
+  # 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)
+    $P10."!cursor_names"("quote_EXPR")
+    rx837_pos = $P10."pos"()
   # rx pass
-    rx838_cur."!cursor_pass"(rx838_pos, "quote:sym</ />")
-    rx838_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx838_pos)
-    .return (rx838_cur)
-  rx838_fail:
+    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:
 .annotate "line", 4
-    (rx838_rep, rx838_pos, $I10, $P10) = rx838_cur."!mark_fail"(0)
-    lt rx838_pos, -1, rx838_done
-    eq rx838_pos, -1, rx838_fail
+    (rx837_rep, rx837_pos, $I10, $P10) = rx837_cur."!mark_fail"(0)
+    lt rx837_pos, -1, rx837_done
+    eq rx837_pos, -1, rx837_fail
     jump $I10
-  rx838_done:
-    rx838_cur."!cursor_fail"()
-    rx838_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
-    .return (rx838_cur)
+  rx837_done:
+    rx837_cur."!cursor_fail"()
+    rx837_cur."!cursor_debug"("FAIL  ", "quote:sym<Q:PIR>")
+    .return (rx837_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote:sym</ />"  :subid("202_1261064023.05912") :method
+.sub "!PREFIX__quote:sym<Q:PIR>"  :subid("200_1267204702.05125") :method
 .annotate "line", 4
-    $P840 = self."!PREFIX__!subrule"("", "/")
-    new $P841, "ResizablePMCArray"
-    push $P841, $P840
-    .return ($P841)
+    $P839 = self."!PREFIX__!subrule"("", "Q:PIR")
+    new $P840, "ResizablePMCArray"
+    push $P840, $P839
+    .return ($P840)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<$>"  :subid("203_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote:sym</ />"  :subid("201_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
-    .local string rx844_tgt
-    .local int rx844_pos
-    .local int rx844_off
-    .local int rx844_eos
-    .local int rx844_rep
-    .local pmc rx844_cur
-    (rx844_cur, rx844_pos, rx844_tgt) = self."!cursor_start"()
-    rx844_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
-    .lex unicode:"$\x{a2}", rx844_cur
+    .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 pmc match
     .lex "$/", match
-    length rx844_eos, rx844_tgt
-    set rx844_off, 0
-    lt rx844_pos, 2, rx844_start
-    sub rx844_off, rx844_pos, 1
-    substr rx844_tgt, rx844_tgt, rx844_off
-  rx844_start:
+    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:
     $I10 = self.'from'()
     ne $I10, -1, rxscan847_done
     goto rxscan847_scan
   rxscan847_loop:
-    ($P10) = rx844_cur."from"()
+    ($P10) = rx843_cur."from"()
     inc $P10
-    set rx844_pos, $P10
-    ge rx844_pos, rx844_eos, rxscan847_done
+    set rx843_pos, $P10
+    ge rx843_pos, rx843_eos, rxscan847_done
   rxscan847_scan:
     set_addr $I10, rxscan847_loop
-    rx844_cur."!mark_push"(0, rx844_pos, $I10)
+    rx843_cur."!mark_push"(0, rx843_pos, $I10)
   rxscan847_done:
+.annotate "line", 396
+  # 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
+  # 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
+  # rx reduce name="quote:sym</ />" key="open"
+    rx843_cur."!cursor_pos"(rx843_pos)
+    rx843_cur."!reduce"("quote:sym</ />", "open")
 .annotate "line", 399
-  # rx enumcharlist negate=0 zerowidth
-    ge rx844_pos, rx844_eos, rx844_fail
-    sub $I10, rx844_pos, rx844_off
-    substr $S10, rx844_tgt, $I10, 1
-    index $I11, "$", $S10
-    lt $I11, 0, rx844_fail
-  # rx subrule "quotemod_check" subtype=zerowidth negate=
-    rx844_cur."!cursor_pos"(rx844_pos)
-    $P10 = rx844_cur."quotemod_check"("s")
-    unless $P10, rx844_fail
-  # rx subrule "variable" subtype=capture negate=
-    rx844_cur."!cursor_pos"(rx844_pos)
-    $P10 = rx844_cur."variable"()
-    unless $P10, rx844_fail
-    rx844_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("variable")
-    rx844_pos = $P10."pos"()
+  # 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)
+    $P10."!cursor_names"("p6regex")
+    rx843_pos = $P10."pos"()
+.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", 395
   # rx pass
-    rx844_cur."!cursor_pass"(rx844_pos, "quote_escape:sym<$>")
-    rx844_cur."!cursor_debug"("PASS  ", "quote_escape:sym<$>", " at pos=", rx844_pos)
-    .return (rx844_cur)
-  rx844_fail:
+    rx843_cur."!cursor_pass"(rx843_pos, "quote:sym</ />")
+    rx843_cur."!cursor_debug"("PASS  ", "quote:sym</ />", " at pos=", rx843_pos)
+    .return (rx843_cur)
+  rx843_fail:
 .annotate "line", 4
-    (rx844_rep, rx844_pos, $I10, $P10) = rx844_cur."!mark_fail"(0)
-    lt rx844_pos, -1, rx844_done
-    eq rx844_pos, -1, rx844_fail
+    (rx843_rep, rx843_pos, $I10, $P10) = rx843_cur."!mark_fail"(0)
+    lt rx843_pos, -1, rx843_done
+    eq rx843_pos, -1, rx843_fail
     jump $I10
-  rx844_done:
-    rx844_cur."!cursor_fail"()
-    rx844_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
-    .return (rx844_cur)
+  rx843_done:
+    rx843_cur."!cursor_fail"()
+    rx843_cur."!cursor_debug"("FAIL  ", "quote:sym</ />")
+    .return (rx843_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1261064023.05912") :method
+.sub "!PREFIX__quote:sym</ />"  :subid("202_1267204702.05125") :method
 .annotate "line", 4
+    $P845 = self."!PREFIX__!subrule"("", "/")
     new $P846, "ResizablePMCArray"
-    push $P846, "$"
+    push $P846, $P845
     .return ($P846)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "quote_escape:sym<{ }>"  :subid("205_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote_escape:sym<$>"  :subid("203_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx849_tgt
     .local int rx849_pos
@@ -10129,7 +10095,7 @@
     .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<{ }>")
+    rx849_cur."!cursor_debug"("START ", "quote_escape:sym<$>")
     .lex unicode:"$\x{a2}", rx849_cur
     .local pmc match
     .lex "$/", match
@@ -10151,27 +10117,27 @@
     set_addr $I10, rxscan852_loop
     rx849_cur."!mark_push"(0, rx849_pos, $I10)
   rxscan852_done:
-.annotate "line", 400
+.annotate "line", 403
   # rx enumcharlist negate=0 zerowidth
     ge rx849_pos, rx849_eos, rx849_fail
     sub $I10, rx849_pos, rx849_off
     substr $S10, rx849_tgt, $I10, 1
-    index $I11, "{", $S10
+    index $I11, "$", $S10
     lt $I11, 0, rx849_fail
   # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."quotemod_check"("c")
+    $P10 = rx849_cur."quotemod_check"("s")
     unless $P10, rx849_fail
-  # rx subrule "block" subtype=capture negate=
+  # rx subrule "variable" subtype=capture negate=
     rx849_cur."!cursor_pos"(rx849_pos)
-    $P10 = rx849_cur."block"()
+    $P10 = rx849_cur."variable"()
     unless $P10, rx849_fail
     rx849_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("block")
+    $P10."!cursor_names"("variable")
     rx849_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)
+    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:
 .annotate "line", 4
@@ -10181,23 +10147,23 @@
     jump $I10
   rx849_done:
     rx849_cur."!cursor_fail"()
-    rx849_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
+    rx849_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<$>")
     .return (rx849_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1261064023.05912") :method
+.sub "!PREFIX__quote_escape:sym<$>"  :subid("204_1267204702.05125") :method
 .annotate "line", 4
     new $P851, "ResizablePMCArray"
-    push $P851, "{"
+    push $P851, "$"
     .return ($P851)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<( )>"  :subid("207_1261064023.05912") :method :outer("11_1261064023.05912")
+.sub "quote_escape:sym<{ }>"  :subid("205_1267204702.05125") :method :outer("11_1267204702.05125")
 .annotate "line", 4
     .local string rx854_tgt
     .local int rx854_pos
@@ -10206,8 +10172,7 @@
     .local int rx854_rep
     .local pmc rx854_cur
     (rx854_cur, rx854_pos, rx854_tgt) = self."!cursor_start"()
-    rx854_cur."!cursor_debug"("START ", "circumfix:sym<( )>")
-    rx854_cur."!cursor_caparray"("EXPR")
+    rx854_cur."!cursor_debug"("START ", "quote_escape:sym<{ }>")
     .lex unicode:"$\x{a2}", rx854_cur
     .local pmc match
     .lex "$/", match
@@ -10218,53 +10183,38 @@
     substr rx854_tgt, rx854_tgt, rx854_off
   rx854_start:
     $I10 = self.'from'()
-    ne $I10, -1, rxscan858_done
-    goto rxscan858_scan
-  rxscan858_loop:
+    ne $I10, -1, rxscan857_done
+    goto rxscan857_scan
+  rxscan857_loop:
     ($P10) = rx854_cur."from"()
     inc $P10
     set rx854_pos, $P10
-    ge rx854_pos, rx854_eos, rxscan858_done
-  rxscan858_scan:
-    set_addr $I10, rxscan858_loop
+    ge rx854_pos, rx854_eos, rxscan857_done
+  rxscan857_scan:
+    set_addr $I10, rxscan857_loop
     rx854_cur."!mark_push"(0, rx854_pos, $I10)
-  rxscan858_done:
-.annotate "line", 402
-  # rx literal  "("
-    add $I11, rx854_pos, 1
-    gt $I11, rx854_eos, rx854_fail
-    sub $I11, rx854_pos, rx854_off
-    substr $S10, rx854_tgt, $I11, 1
-    ne $S10, "(", rx854_fail
-    add rx854_pos, 1
-  # rx subrule "ws" subtype=method negate=
+  rxscan857_done:
+.annotate "line", 404
+  # rx enumcharlist negate=0 zerowidth
+    ge rx854_pos, rx854_eos, rx854_fail
+    sub $I10, rx854_pos, rx854_off
+    substr $S10, rx854_tgt, $I10, 1
+    index $I11, "{", $S10
+    lt $I11, 0, rx854_fail
+  # rx subrule "quotemod_check" subtype=zerowidth negate=
     rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."ws"()
+    $P10 = rx854_cur."quotemod_check"("c")
     unless $P10, rx854_fail
-    rx854_pos = $P10."pos"()
-  # rx rxquantr859 ** 0..1
-    set_addr $I860, rxquantr859_done
-    rx854_cur."!mark_push"(0, rx854_pos, $I860)
-  rxquantr859_loop:
-  # rx subrule "EXPR" subtype=capture negate=
+  # rx subrule "block" subtype=capture negate=
     rx854_cur."!cursor_pos"(rx854_pos)
-    $P10 = rx854_cur."EXPR"()
+    $P10 = rx854_cur."block"()
     unless $P10, rx854_fail
     rx854_cur."!mark_push"(0, -1, 0, $P10)
-    $P10."!cursor_names"("EXPR")
+    $P10."!cursor_names"("block")
     rx854_pos = $P10."pos"()
-    (rx854_rep) = rx854_cur."!mark_commit"($I860)
-  rxquantr859_done:
-  # rx literal  ")"
-    add $I11, rx854_pos, 1
-    gt $I11, rx854_eos, rx854_fail
-    sub $I11, rx854_pos, rx854_off
-    substr $S10, rx854_tgt, $I11, 1
-    ne $S10, ")", rx854_fail
-    add rx854_pos, 1
   # rx pass
-    rx854_cur."!cursor_pass"(rx854_pos, "circumfix:sym<( )>")
-    rx854_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx854_pos)
+    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:
 .annotate "line", 4
@@ -10274,191 +10224,211 @@
     jump $I10
   rx854_done:
     rx854_cur."!cursor_fail"()
-    rx854_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
+    rx854_cur."!cursor_debug"("FAIL  ", "quote_escape:sym<{ }>")
     .return (rx854_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1261064023.05912") :method
+.sub "!PREFIX__quote_escape:sym<{ }>"  :subid("206_1267204702.05125") :method
 .annotate "line", 4
-    $P856 = self."!PREFIX__!subrule"("", "(")
-    new $P857, "ResizablePMCArray"
-    push $P857, $P856
-    .return ($P857)
+    new $P856, "ResizablePMCArray"
+    push $P856, "{"
+    .return ($P856)
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "circumfix:sym<[ ]>"  :subid("209_1261064023.05912") :method :outer("11_1261064023.05912")
-.annotate "line", 4
-    .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 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, rxscan866_done
-    goto rxscan866_scan
-  rxscan866_loop:
-    ($P10) = rx862_cur."from"()
-    inc $P10
-    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", 403
-  # rx literal  "["
-    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:
+.sub "circumfix:sym<( )>"  :subid("207_1267204702.05125") :method :outer("11_1267204702.05125")
+.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 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:
+    $I10 = self.'from'()
+    ne $I10, -1, rxscan863_done
+    goto rxscan863_scan
+  rxscan863_loop:
+    ($P10) = rx859_cur."from"()
+    inc $P10
+    set rx859_pos, $P10
+    ge rx859_pos, rx859_eos, rxscan863_done
+  rxscan863_scan:
+    set_addr $I10, rxscan863_loop
+    rx859_cur."!mark_push"(0, rx859_pos, $I10)
+  rxscan863_done:
+.annotate "line", 406
+  # rx literal  "("
+    add $I11, rx859_pos, 1
+    gt $I11, rx859_eos, rx859_fail
+    sub $I11, rx859_pos, rx859_off
+    substr $S10, rx859_tgt, $I11, 1
+    ne $S10, "(", rx859_fail
+    add rx859_pos, 1
+  # rx subrule "ws" subtype=method negate=
+    rx859_cur."!cursor_pos"(rx859_pos)
+    $P10 = rx859_cur."ws"()
+    unless $P10, rx859_fail
+    rx859_pos = $P10."pos"()
+  # rx rxquantr864 ** 0..1
+    set_addr $I865, rxquantr864_done
+    rx859_cur."!mark_push"(0, rx859_pos, $I865)
+  rxquantr864_loop:
   # rx subrule "EXPR" subtype=capture negate=
-    rx862_cur."!cursor_pos"(rx862_pos)
-    $P10 = rx862_cur."EXPR"()
-    unless $P10, rx862_fail
-    rx862_cur."!mark_push"(0, -1, 0, $P10)
+    rx859_cur."!cursor_pos"(rx859_pos)
+    $P10 = rx859_cur."EXPR"()
+    unless $P10, rx859_fail
+    rx859_cur."!mark_push"(0, -1, 0, $P10)
     $P10."!cursor_names"("EXPR")
-    rx862_pos = $P10."pos"()
-    (rx862_rep) = rx862_cur."!mark_commit"($I868)
-  rxquantr867_done:
-  # rx literal  "]"
-    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
+    rx859_pos = $P10."pos"()
+    (rx859_rep) = rx859_cur."!mark_commit"($I865)
+  rxquantr864_done:
+  # rx literal  ")"
+    add $I11, rx859_pos, 1
+    gt $I11, rx859_eos, rx859_fail
+    sub $I11, rx859_pos, rx859_off
+    substr $S10, rx859_tgt, $I11, 1
+    ne $S10, ")", rx859_fail
+    add rx859_pos, 1
   # rx pass
-    rx862_cur."!cursor_pass"(rx862_pos, "circumfix:sym<[ ]>")
-    rx862_cur."!cursor_debug"("PASS  ", "circumfix:sym<[ ]>", " at pos=", rx862_pos)
-    .return (rx862_cur)
-  rx862_fail:
+    rx859_cur."!cursor_pass"(rx859_pos, "circumfix:sym<( )>")
+    rx859_cur."!cursor_debug"("PASS  ", "circumfix:sym<( )>", " at pos=", rx859_pos)
+    .return (rx859_cur)
+  rx859_fail:
 .annotate "line", 4
-    (rx862_rep, rx862_pos, $I10, $P10) = rx862_cur."!mark_fail"(0)
-    lt rx862_pos, -1, rx862_done
-    eq rx862_pos, -1, rx862_fail
+    (rx859_rep, rx859_pos, $I10, $P10) = rx859_cur."!mark_fail"(0)
+    lt rx859_pos, -1, rx859_done
+    eq rx859_pos, -1, rx859_fail
     jump $I10
-  rx862_done:
-    rx862_cur."!cursor_fail"()
-    rx862_cur."!cursor_debug"("FAIL  ", "circumfix:sym<[ ]>")
-    .return (rx862_cur)
+  rx859_done:
+    rx859_cur."!cursor_fail"()
+    rx859_cur."!cursor_debug"("FAIL  ", "circumfix:sym<( )>")
+    .return (rx859_cur)
     .return ()
 .end
 
 
 .namespace ["NQP";"Grammar"]
-.sub "!PREFIX__circumfix:sym<[ ]>"  :subid("210_1261064023.05912") :method
+.sub "!PREFIX__circumfix:sym<( )>"  :subid("208_1267204702.05125") :method
 .annotate "line", 4
-    $P864 = self."!PREFIX__!subrule"