[svn:parrot] r46301 - in branches/ops_pct: . compilers/data_json compilers/imcc compilers/json compilers/json/JSON compilers/ncigen compilers/ncigen/config compilers/ncigen/config/makefiles compilers/ncigen/lib compilers/ncigen/lib/Parrot compilers/ncigen/lib/Parrot/Test compilers/ncigen/src compilers/ncigen/src/builtins compilers/ncigen/src/parser compilers/ncigen/t compilers/ncigen/t/NCIGENAST compilers/nqp compilers/nqp/bootstrap compilers/nqp/bootstrap/t compilers/nqp/src compilers/nqp/src/Grammar compilers/nqp/t compilers/opsc compilers/opsc/src/Ops compilers/opsc/t compilers/pct compilers/pct/src/PAST compilers/pct/src/PCT compilers/pct/src/POST compilers/pge compilers/pge/PGE compilers/pirc compilers/pirc/src compilers/tge config/auto config/auto/attributes config/auto/cgoto config/auto/crypto config/auto/gdbm config/auto/sizes config/auto/zlib config/gen config/gen/config_h config/gen/config_pm config/gen/crypto config/gen/makefiles config/gen/platform config /gen/platform/ansi config/gen/platform/generic config/gen/platform/win32 config/init config/init/hints config/inter docs docs/book/draft docs/book/pct docs/dev docs/pdds docs/pdds/draft docs/pmc docs/project examples/benchmarks examples/c examples/config/file examples/embed examples/japh examples/json examples/languages/abc examples/languages/squaak examples/languages/squaak/src/parser examples/library examples/nci examples/pge examples/pir examples/pir/befunge examples/sdl examples/shootout examples/tutorial ext/Parrot-Embed ext/Parrot-Embed/lib/Parrot ext/Parrot-Embed/t ext/SQLite3 ext/SQLite3/DBDI ext/SQLite3/DBDI/Driver ext/SQLite3/t ext/nqp-rx ext/nqp-rx/src/gen ext/nqp-rx/src/stage0 include/parrot include/parrot/oplib lib/Parrot lib/Parrot/Configure/Options lib/Parrot/Configure/Options/Conf lib/Parrot/Configure/Options/Test lib/Parrot/Configure/Step lib/Parrot/Docs/Section lib/Parrot/Harness lib/Parrot/OpTrans lib/Parrot/Ops2c lib/Parrot/Ops2pm lib/Parrot/Pmc2c lib/Par rot/Pmc2c/PMC ports/cpan ports/cygwin ports/debian ports/fedora ports/fedora/2.3.0 ports/mandriva ports/suse ports/suse/2.2.0 ports/ubuntu runtime/parrot/languages runtime/parrot/library runtime/parrot/library/CGI runtime/parrot/library/Config runtime/parrot/library/Getopt runtime/parrot/library/HTTP runtime/parrot/library/MIME runtime/parrot/library/Math runtime/parrot/library/ProfTest runtime/parrot/library/Stream runtime/parrot/library/String runtime/parrot/library/TAP runtime/parrot/library/Test runtime/parrot/library/Test/Builder src src/call src/dynoplibs src/dynpmc src/gc src/interp src/io src/nci src/ops src/packfile src/pmc src/runcore src/string src/string/charset src/string/encoding t t/codingstd t/compilers/data_json t/compilers/imcc/imcpasm t/compilers/imcc/reg t/compilers/imcc/syn t/compilers/json t/compilers/pct t/compilers/pge t/compilers/pge/p5regex t/compilers/pge/perl6regex t/compilers/tge t/configure/testlib t/distro t/dynoplibs t/dynpmc t/examples t/incl ude t/library t/native_pbc t/oo t/op t/pharness t/pir t/pmc t/profiling t/run t/src t/steps/auto t/steps/gen t/steps/init t/steps/init/hints t/steps/inter t/tools/install/testlib t/tools/ops2cutils t/tools/ops2pm tools/build tools/dev tools/install tools/util

cotto at svn.parrot.org cotto at svn.parrot.org
Wed May 5 08:26:30 UTC 2010


Author: cotto
Date: Wed May  5 08:26:03 2010
New Revision: 46301
URL: https://trac.parrot.org/parrot/changeset/46301

Log:
revert previous bad sync

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

Modified: branches/ops_pct/CREDITS
==============================================================================
--- branches/ops_pct/CREDITS	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/CREDITS	Wed May  5 08:26:03 2010	(r46301)
@@ -402,7 +402,7 @@
 
 N: Gerd Pokorra
 E: pokorra at uni-siegen.de
-D: Release manager for 1.9.0 and 2.3.0
+D: Release manager for 1.9.0
 
 N: Goplat
 D: Win98 and other fixes.
@@ -573,8 +573,7 @@
 D: Getopt/Obj.pir
 
 N: Julian Albo
-U: NotFound
-A: julianalbo
+U: julianalbo
 E: julian.notfound at gmail.com
 
 N: Julian Fondren
@@ -768,6 +767,10 @@
 N: Nigelsandever
 D: Win32 patches
 
+N: Notfound
+D: Bugfixing and cage cleaning.
+E: julian.notfound at gmail.com
+
 N: Nuno 'smash' Carvalho
 U: smash
 D: PGE/perl6/abc debugging and testing
@@ -919,11 +922,6 @@
 N: Stefan Lidman
 D: sqrt ops
 
-N: Stefan O'Rear
-E: stefanor at cox.net
-D: Perl 5 interoperability, Blizkost
-U: sorear
-
 N: Stéphane Payrard
 D: Various code fixes and improvements
 

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

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

Modified: branches/ops_pct/DEPRECATED.pod
==============================================================================
--- branches/ops_pct/DEPRECATED.pod	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/DEPRECATED.pod	Wed May  5 08:26:03 2010	(r46301)
@@ -7,8 +7,8 @@
 
 =head1 Experimental Status
 
-These features are not considered supported, even though they may
-have shipped in a supported release of parrot[2]. Use them at your own
+These features are not considered stable, even though they may
+have shipped in a stable release of parrot[2]. Use them at your own
 risk, as they can be removed or changed in any release. These
 items are marked below with C<[experimental]>.
 
@@ -37,10 +37,6 @@
 
 =over 4
 
-=item gziphandle [experimental]
-
-L<https://trac.parrot.org/parrot/ticket/1580>
-
 =item moved to dynpmc [eligible in 1.1]
 
 AddrRegistry, CodeString, Env, Eval, File, OS, PCCMETHOD_Test, StringHandle,
@@ -64,64 +60,27 @@
 
 L<https://trac.parrot.org/parrot/ticket/103>
 
-=item NCI without signature ("raw" pointers) [eligible in 2.4]
-
-No equivalent functionality is promised. You shouldn't be using this. Here be
-segfaults.
-
-L<https://trac.parrot.org/parrot/ticket/1549>
-
-=item UnManagedStruct handling nested structure [eligible in 2.4]
-
-UnManagedStruct will be simplified to only support flat structures. This means
-that elements which themselves have structure - struct pointers and function
-pointers will be stored as C<void *> and C<void (*)(void)> respectively. To use
-these, they will need to be cast to the appropriate signature on access.
-
-L<https://trac.parrot.org/parrot/ticket/1551>
-
-=item UnManagedStruct initializer structure [eligible in 2.4]
-
-The initializer structure will cease to be an array of triples. In stead, an
-array of flags (no counts or offsets), or a string representation of the same
-information may be used.
+=item CPointer PMC [eligible in 2.1]
 
-L<https://trac.parrot.org/parrot/ticket/1552>
+And all uses in the Parrot calling conventions.
 
-=item UnManagedStruct get_integer, set_integer_native [eligible in 2.4]
+L<https://trac.parrot.org/parrot/ticket/1407>
 
-These will no longer refer to the byte length of the buffer, but to the number
-of times the struct is repeated; emulating an array of structs.
+=item Digest dynpmcs [eligible in 2.4]
 
-L<https://trac.parrot.org/parrot/ticket/1553>
+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.
 
-=item ManagedStruct reallocations based on shape changes [eligible in 2.4]
+L<https://trac.parrot.org/parrot/ticket/1467>
 
-Since shape changes may simply be used for re-interpreting data, and may also
-occur in several steps, re-allocating after any one shape change may be
-undesirable. In stead, an explicit allocate/reallocate method will be provided.
+=item gdbmhash dynpmc [eligible in 2.4]
 
-L<https://trac.parrot.org/parrot/ticket/1554>
+The gdbmhash dynpmc is, since the posting of this notice, available on
+http://gitorious.org/dbm-dynpmcs and will no longer be distributed
+with parrot after 2.3.
 
-=item Auto-vivification of nested aggregates [eligible in 2.4]
-
-Auto-vivifation of nested aggregated is deprecated.
-
-E.g.
-
-  $P0 = new ['Hash']
-  $S1 = $P0['foo';'bar';'baz']
-
-will not auto-vivify nested hashes and return PMCNULL early.
-
-L<https://trac.parrot.org/parrot/ticket/1561>
-
-=item PMC must use manual_attrs or auto_attrs flag [eligible in 2.4]
-
-PMCs must no longer use default value for manual/auto attribute allocation,
-manual_attrs or auto_attrs must be specified.
-
-L<http://trac.parrot.org/parrot/ticket/1506>
+L<https://trac.parrot.org/parrot/ticket/1469>
 
 =back
 
@@ -163,6 +122,10 @@
 
 =item get_results opcode order and features [eligible in 2.1]
 
+Move get_results to follow invoke.
+
+L<https://trac.parrot.org/parrot/ticket/1405>
+
 get_results no longer used to fetch exception object.
 
 L<https://trac.parrot.org/parrot/ticket/1406>
@@ -172,63 +135,6 @@
 Ability to get the string name of the current GC core from the interpinfo_s_i.
 See r43900 and r43904 for details.
 
-L<https://trac.parrot.org/parrot/ticket/1581>
-
-=item NCI_FB_CB and NCI_FB_UD in iglobals [experimental]
-
-Hooks allowing a runtime-loadable dynamic frame builder.
-
-L<https://trac.parrot.org/parrot/ticket/1582>
-
-=item loadlib_p_s_p [experimental]
-
-Ability to use non-default dynamic loading behaviour.
-
-L<https://trac.parrot.org/parrot/ticket/1583>
-
-=item pushaction, pushmark, popmark [eligible in 2.4]
-
-L<https://trac.parrot.org/parrot/ticket/876>
-
-=item new_callback_p_p_p_s [eligible in 2.4]
-
-To be replaced with new_callback_p_p_p_p_s.
-
-L<https://trac.parrot.org/parrot/ticket/1548>
-
-=item dlfunc and new_callback signature string format [eligible in 2.4]
-
-These will be changed to allow more flexibility in types.
-
-L<https://trac.parrot.org/parrot/ticket/1565>
-
-=item find_lex [eligible in 2.4]
-
-find_lex will not throw exception for non-existing lexicals.
-
-L<https://trac.parrot.org/parrot/ticket/1207>
-
-=item substr_s_i_i_s [eligible in 2.4]
-
-This op will be replaced with replace_s_s_i_i_s op to clearly indicate
-semantic. Part of COW removal.
-
-L<https://trac.parrot.org/parrot/ticket/1540>
-
-=item substr_s_s_i_i_s [eligible in 2.4]
-
-This op is deprecated. Use replace_s_s_i_i_s or substr_s_s_i_i (or both)
-instead. Part of COW removal.
-
-L<https://trac.parrot.org/parrot/ticket/1540>
-
-=item inplace string updates. [eligible in 2.4]
-
-All "inplace" string update ops are deprecated. E.g. "chopn_s", etc.
-Part of COW removal.
-
-L<https://trac.parrot.org/parrot/ticket/1540>
-
 =back
 
 =head1 Bytecode
@@ -279,6 +185,14 @@
 
 L<https://trac.parrot.org/parrot/ticket/907>
 
+=item Subs marked with C<:vtable>/C<:method> aren't in namespace [eligible in 1.1]
+
+Subs marked with C<:vtable> or C<:method> flags are no longer given a
+namespace entry by default.  Use the C<:nsentry> flag to cause this
+to happen.
+
+L<https://trac.parrot.org/parrot/ticket/389>
+
 =item C API coding standards cleanup [eligible in 1.1]
 
 All C API functions that aren't currently named according to the
@@ -293,55 +207,24 @@
  Parrot_gc_free_pmc_attributes
 
 These items and related helper functions are added as experimental support
-for L<https://trac.parrot.org/parrot/ticket/1506>
+for L<https://trac.parrot.org/parrot/ticket/895>
 
 =item STRING Out parameters in Parrot_str_* functions [eligible in 2.1]
 
 All STRING modification functions will return a STRING pointer; capture and use
 this rather than relying on in-place modification of an existing pointer.
 
-L<https://trac.parrot.org/parrot/ticket/1584>
-
 =item STRING_is_null function [eligible in 2.4]
 
 renamed to Parrot_str_is_null
 
-L<https://trac.parrot.org/parrot/ticket/1585>
-
 =item Parrot_string_* [eligible in 2.4]
 
 rename Parrot_string_cstring to Parrot_str_cstring
 
-L<https://trac.parrot.org/parrot/ticket/1586>
-
-=item STRING COW [eligible in 2.4]
-
-COW strings are to be removed. All "inplace" string modification
-functions and all "inplace" string ops are deprecated.
-
-L<https://trac.parrot.org/parrot/ticket/1540>
+=item STRING functions which don't have Parrot_str_ prefix
 
-=item Parrot_PMC_* in src/extend.c [eligible in 2.4]
-
-These are duplicates of functions in src/extend_vtable.c. Exceptions:
-
-  Parrot_PMC_new
-  Parrot_PMC_typenum
-  Parrot_PMC_null
-  Parrot_PMC_set_vtable
-  Parrot_PMC_newclass
-
-L<https://trac.parrot.org/parrot/ticket/1587>
-
-=item Parrot_VTABLE, Parrot_get_vtable, Parrot_PMC_set_vtable [eligible in 2.4]
-
-These do not expose any functionality that should be available to code outside
-of parrot core.
-
-These might get revived in some form to allow for creating new types and adding
-vtable-overrides, if that functionality becomes desired.
-
-L<https://trac.parrot.org/parrot/ticket/1588>
+The string subsytem is gradually getting an overhaul.
 
 =back
 
@@ -395,6 +278,23 @@
 
 =back
 
+=head1 Compilers
+
+=over 4
+
+=item json [eligible in 2.4]
+
+The json compiler was dupicated into data_json some time ago. If you're
+using json, just use data_json instead, it's the same code. See TT #1461.
+
+=item nqp [eligible in 2.4]
+
+Replaced by ext/nqp-rx and parrot-nqp.
+
+L<http://trac.parrot.org/parrot/ticket/1462>
+
+=back
+
 =head1 Parrot library
 
 =over 4
@@ -406,7 +306,7 @@
 A way to provide an equivalent of -L and -I parrot command line options
 to language that doesn't support it.
 
-=item JSON, and Config;JSON [eligible in 1.5]
+=item JSON, JSON, and Config;JSON [eligible in 1.5]
 
 L<https://trac.parrot.org/parrot/ticket/508>
 
@@ -431,7 +331,7 @@
 =item 2
 
 For an item to be considered experimental, it can B<never> have shipped in
-a supported release without the C<[experimental]> tag; otherwise, it must be
+a stable release without the C<[experimental]> tag; otherwise, it must be
 deprecated normally before removal or incompatible change.
 
 =back

Modified: branches/ops_pct/MANIFEST
==============================================================================
--- branches/ops_pct/MANIFEST	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/MANIFEST	Wed May  5 08:26:03 2010	(r46301)
@@ -1,12 +1,11 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 28 02:47:10 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Sun Mar 14 21:20:56 2010 UT
 #
 # See below for documentation on the format of this file.
 #
-# See docs/submissions.pod and the documentation in
-# tools/dev/mk_manifest_and_skip.pl on how to recreate this file after SVN
+# See docs/submissions.pod on how to recreate this file after SVN
 # has been told about new or deleted files.
 CREDITS                                                     [main]doc
 ChangeLog                                                   []
@@ -18,6 +17,8 @@
 MANIFEST                                                    []
 MANIFEST.SKIP                                               []
 MANIFEST.generated                                          []
+META.yml                                                    []
+Makefile.PL                                                 []
 NEWS                                                        [main]doc
 PBC_COMPAT                                                  [main]doc
 PLATFORMS                                                   [devel]doc
@@ -61,6 +62,72 @@
 compilers/imcc/symreg.c                                     [imcc]
 compilers/imcc/symreg.h                                     [imcc]
 compilers/imcc/unit.h                                       [imcc]
+compilers/json/Defines.mak                                  [json]
+compilers/json/JSON.pir                                     [json]
+compilers/json/JSON/grammar.pg                              [json]
+compilers/json/JSON/pge2pir.tg                              [json]
+compilers/json/Rules.mak                                    [json]
+compilers/ncigen/MAINTAINER                                 [ncigen]
+compilers/ncigen/NCIGEN.TODO                                [ncigen]
+compilers/ncigen/NCIGENP6.pm                                [ncigen]
+compilers/ncigen/README                                     []doc
+compilers/ncigen/config/makefiles/ncigen.in                 [ncigen]
+compilers/ncigen/lib/Parrot/Test/NCIGENAST.pm               [ncigen]
+compilers/ncigen/ncigen.pir                                 [ncigen]
+compilers/ncigen/ncigen.pl                                  [ncigen]
+compilers/ncigen/src/NCIGENAST.pir                          [ncigen]
+compilers/ncigen/src/NCIPIR.pir                             [ncigen]
+compilers/ncigen/src/builtins/say.pir                       [ncigen]
+compilers/ncigen/src/parser/actions.pm                      [ncigen]
+compilers/ncigen/src/parser/grammar.pg                      [ncigen]
+compilers/ncigen/t/NCIGENAST/struct_00.t                    [test]
+compilers/ncigen/t/NCIGENAST/typedef_00.t                   [test]
+compilers/ncigen/t/harness                                  [test]
+compilers/ncigen/t/parse_00.t                               [test]
+compilers/ncigen/t/parse_01.t                               [test]
+compilers/ncigen/t/parse_02.t                               [test]
+compilers/nqp/Defines.mak                                   [nqp]
+compilers/nqp/README.pod                                    []doc
+compilers/nqp/Rules.mak                                     [nqp]
+compilers/nqp/TODO.pod                                      [nqp]
+compilers/nqp/bootstrap/actions.pm                          [nqp]
+compilers/nqp/bootstrap/nqp.pir                             [nqp]
+compilers/nqp/bootstrap/t/harness                           [test]
+compilers/nqp/nqp.pir                                       [nqp]
+compilers/nqp/src/Grammar.pg                                [nqp]
+compilers/nqp/src/Grammar/Actions.pir                       [nqp]
+compilers/nqp/src/builtins.pir                              [nqp]
+compilers/nqp/t/01-literals.t                               [test]
+compilers/nqp/t/02-if-else.t                                [test]
+compilers/nqp/t/02-if.t                                     [test]
+compilers/nqp/t/03-unless.t                                 [test]
+compilers/nqp/t/04-comments.t                               [test]
+compilers/nqp/t/05-pod.t                                    [test]
+compilers/nqp/t/06-args-pos.t                               [test]
+compilers/nqp/t/07-boolean.t                                [test]
+compilers/nqp/t/08-blocks.t                                 [test]
+compilers/nqp/t/09-var.t                                    [test]
+compilers/nqp/t/10-sub.t                                    [test]
+compilers/nqp/t/11-cmp.t                                    [test]
+compilers/nqp/t/12-list.t                                   [test]
+compilers/nqp/t/13-logical.t                                [test]
+compilers/nqp/t/14-op.t                                     [test]
+compilers/nqp/t/15-module.t                                 [test]
+compilers/nqp/t/16-while.t                                  [test]
+compilers/nqp/t/17-class.t                                  [test]
+compilers/nqp/t/18-inline.t                                 [test]
+compilers/nqp/t/19-hash_access.t                            [test]
+compilers/nqp/t/20-list_access.t                            [test]
+compilers/nqp/t/22-optional_args.t                          [test]
+compilers/nqp/t/23-named_args.t                             [test]
+compilers/nqp/t/24-scalar_context.t                         [test]
+compilers/nqp/t/25-list_context.t                           [test]
+compilers/nqp/t/26-method_ops.t                             [test]
+compilers/nqp/t/27-ternary.t                                [test]
+compilers/nqp/t/28-return.t                                 [test]
+compilers/nqp/t/29-self.t                                   [test]
+compilers/nqp/t/30-subclass.t                               [test]
+compilers/nqp/t/harness                                     [test]
 compilers/opsc/Defines.mak                                  [opsc]
 compilers/opsc/Rules.mak                                    [opsc]
 compilers/opsc/TODO                                         [opsc]
@@ -184,6 +251,8 @@
 config/auto/backtrace/test_dlinfo_c.in                      []
 config/auto/byteorder.pm                                    []
 config/auto/byteorder/test_c.in                             []
+config/auto/cgoto.pm                                        []
+config/auto/cgoto/test_c.in                                 []
 config/auto/cpu.pm                                          []
 config/auto/cpu/i386/auto.pm                                []
 config/auto/cpu/i386/test_gcc_cmpxchg_c.in                  []
@@ -192,6 +261,8 @@
 config/auto/cpu/sun4/auto.pm                                []
 config/auto/cpu/sun4/test_atomic_c.in                       []
 config/auto/cpu/x86_64/auto.pm                              []
+config/auto/crypto.pm                                       []
+config/auto/crypto/crypto_c.in                              []
 config/auto/ctags.pm                                        []
 config/auto/env.pm                                          []
 config/auto/env/test_setenv_c.in                            []
@@ -205,6 +276,8 @@
 config/auto/gc/test_c.in                                    []
 config/auto/gcc.pm                                          []
 config/auto/gcc/test_c.in                                   []
+config/auto/gdbm.pm                                         []
+config/auto/gdbm/gdbm_c.in                                  []
 config/auto/gettext.pm                                      []
 config/auto/gettext/gettext_c.in                            []
 config/auto/glibc.pm                                        []
@@ -262,9 +335,13 @@
 config/gen/config_h/has_header_h.in                         []
 config/gen/config_pm.pm                                     []
 config/gen/config_pm/Config_pm.in                           []
+config/gen/config_pm/config_lib_pasm.in                     []
 config/gen/config_pm/config_pir.in                          []
 config/gen/config_pm/myconfig.in                            []
 config/gen/core_pmcs.pm                                     []
+config/gen/crypto.pm                                        []
+config/gen/crypto/digest_pmc.in                             []
+config/gen/crypto/digest_t.in                               []
 config/gen/makefiles.pm                                     []
 config/gen/makefiles/docs.in                                []
 config/gen/makefiles/dynpmc.in                              []
@@ -309,6 +386,7 @@
 config/gen/platform/openbsd/math.c                          []
 config/gen/platform/openbsd/memexec.c                       []
 config/gen/platform/openbsd/misc.h                          []
+config/gen/platform/platform_interface.h                    []
 config/gen/platform/solaris/math.c                          []
 config/gen/platform/solaris/time.c                          []
 config/gen/platform/win32/begin.c                           []
@@ -874,6 +952,15 @@
 ext/Parrot-Embed/tools/check_embed_coverage.pl              []
 ext/Parrot-Embed/tools/write_typemap.pl                     []
 ext/Parrot-Embed/typemap                                    []
+ext/SQLite3/DBDI.pm                                         []
+ext/SQLite3/DBDI/Driver/SQLite3.pm                          []
+ext/SQLite3/Makefile.PL                                     []
+ext/SQLite3/Makefile.in                                     []
+ext/SQLite3/SQLite3.pir                                     []
+ext/SQLite3/gen_sqlite3.pl                                  []
+ext/SQLite3/t/test.p6                                       [test]
+ext/SQLite3/test.pir                                        []
+ext/nqp-rx/.gitignore                                       []
 ext/nqp-rx/CREDITS                                          []
 ext/nqp-rx/Defines.mak                                      []
 ext/nqp-rx/LICENSE                                          []
@@ -1065,6 +1152,10 @@
 lib/Parrot/Op.pm                                            [devel]lib
 lib/Parrot/OpTrans.pm                                       [devel]lib
 lib/Parrot/OpTrans/C.pm                                     [devel]lib
+lib/Parrot/OpTrans/CGP.pm                                   [devel]lib
+lib/Parrot/OpTrans/CGoto.pm                                 [devel]lib
+lib/Parrot/OpTrans/CPrederef.pm                             [devel]lib
+lib/Parrot/OpTrans/CSwitch.pm                               [devel]lib
 lib/Parrot/Ops2c/Auxiliary.pm                               [devel]lib
 lib/Parrot/Ops2c/Utils.pm                                   [devel]lib
 lib/Parrot/Ops2pm.pm                                        [devel]lib
@@ -1194,6 +1285,7 @@
 runtime/parrot/library/SDL/Sprite.pir                       [library]
 runtime/parrot/library/SDL/StopWatch.pir                    [library]
 runtime/parrot/library/SDL/Surface.pir                      [library]
+runtime/parrot/library/SQLite3.pir                          [library]
 runtime/parrot/library/Stream/Base.pir                      [library]
 runtime/parrot/library/Stream/Combiner.pir                  [library]
 runtime/parrot/library/Stream/Coroutine.pir                 [library]
@@ -1248,15 +1340,16 @@
 src/dynoplibs/math.ops                                      []
 src/dynoplibs/obscure.ops                                   []
 src/dynpmc/README.pod                                       []doc
-src/dynpmc/dynlexpad.pmc                                    []
+src/dynpmc/dynlexpad.pmc                                    [devel]src
 src/dynpmc/ext.pir                                          []
-src/dynpmc/foo.pmc                                          []
-src/dynpmc/foo2.pmc                                         []
+src/dynpmc/foo.pmc                                          [devel]src
+src/dynpmc/foo2.pmc                                         [devel]src
+src/dynpmc/gdbmhash.pmc                                     [devel]src
 src/dynpmc/main.pasm                                        []
-src/dynpmc/pccmethod_test.pmc                               []
-src/dynpmc/rational.pmc                                     []
-src/dynpmc/rotest.pmc                                       []
-src/dynpmc/subproxy.pmc                                     []
+src/dynpmc/pccmethod_test.pmc                               [devel]src
+src/dynpmc/rational.pmc                                     [devel]src
+src/dynpmc/rotest.pmc                                       [devel]src
+src/dynpmc/subproxy.pmc                                     [devel]src
 src/embed.c                                                 []
 src/exceptions.c                                            []
 src/exit.c                                                  []
@@ -1331,90 +1424,92 @@
 src/pbc_dump.c                                              []
 src/pbc_merge.c                                             []
 src/pmc.c                                                   []
-src/pmc/addrregistry.pmc                                    []
-src/pmc/arrayiterator.pmc                                   []
-src/pmc/bigint.pmc                                          []
-src/pmc/bignum.pmc                                          []
-src/pmc/boolean.pmc                                         []
-src/pmc/callcontext.pmc                                     []
-src/pmc/capture.pmc                                         []
-src/pmc/class.pmc                                           []
-src/pmc/codestring.pmc                                      []
-src/pmc/complex.pmc                                         []
-src/pmc/continuation.pmc                                    []
-src/pmc/coroutine.pmc                                       []
-src/pmc/default.pmc                                         []
-src/pmc/env.pmc                                             []
-src/pmc/eval.pmc                                            []
-src/pmc/eventhandler.pmc                                    []
-src/pmc/exception.pmc                                       []
-src/pmc/exceptionhandler.pmc                                []
-src/pmc/exporter.pmc                                        []
-src/pmc/file.pmc                                            []
-src/pmc/filehandle.pmc                                      []
-src/pmc/fixedbooleanarray.pmc                               []
-src/pmc/fixedfloatarray.pmc                                 []
-src/pmc/fixedintegerarray.pmc                               []
-src/pmc/fixedpmcarray.pmc                                   []
-src/pmc/fixedstringarray.pmc                                []
-src/pmc/float.pmc                                           []
-src/pmc/handle.pmc                                          []
-src/pmc/hash.pmc                                            []
-src/pmc/hashiterator.pmc                                    []
-src/pmc/hashiteratorkey.pmc                                 []
-src/pmc/imageio.pmc                                         []
-src/pmc/imageiosize.pmc                                     []
-src/pmc/integer.pmc                                         []
-src/pmc/iterator.pmc                                        []
-src/pmc/key.pmc                                             []
-src/pmc/lexinfo.pmc                                         []
-src/pmc/lexpad.pmc                                          []
-src/pmc/managedstruct.pmc                                   []
-src/pmc/multisub.pmc                                        []
-src/pmc/namespace.pmc                                       []
-src/pmc/nci.pmc                                             []
-src/pmc/null.pmc                                            []
-src/pmc/object.pmc                                          []
-src/pmc/opcode.pmc                                          []
-src/pmc/oplib.pmc                                           []
-src/pmc/orderedhash.pmc                                     []
-src/pmc/orderedhashiterator.pmc                             []
-src/pmc/os.pmc                                              []
-src/pmc/packfile.pmc                                        []
-src/pmc/packfileannotation.pmc                              []
-src/pmc/packfileannotations.pmc                             []
-src/pmc/packfileconstanttable.pmc                           []
-src/pmc/packfiledirectory.pmc                               []
-src/pmc/packfilefixupentry.pmc                              []
-src/pmc/packfilefixuptable.pmc                              []
-src/pmc/packfilerawsegment.pmc                              []
-src/pmc/packfilesegment.pmc                                 []
-src/pmc/parrotinterpreter.pmc                               []
-src/pmc/parrotlibrary.pmc                                   []
-src/pmc/parrotrunningthread.pmc                             []
-src/pmc/parrotthread.pmc                                    []
+src/pmc/addrregistry.pmc                                    [devel]src
+src/pmc/arrayiterator.pmc                                   [devel]src
+src/pmc/bigint.pmc                                          [devel]src
+src/pmc/bignum.pmc                                          [devel]src
+src/pmc/boolean.pmc                                         [devel]src
+src/pmc/callcontext.pmc                                     [devel]src
+src/pmc/capture.pmc                                         [devel]src
+src/pmc/class.pmc                                           [devel]src
+src/pmc/codestring.pmc                                      [devel]src
+src/pmc/complex.pmc                                         [devel]src
+src/pmc/continuation.pmc                                    [devel]src
+src/pmc/coroutine.pmc                                       [devel]src
+src/pmc/cpointer.pmc                                        [devel]src
+src/pmc/default.pmc                                         [devel]src
+src/pmc/env.pmc                                             [devel]src
+src/pmc/eval.pmc                                            [devel]src
+src/pmc/eventhandler.pmc                                    [devel]src
+src/pmc/exception.pmc                                       [devel]src
+src/pmc/exceptionhandler.pmc                                [devel]src
+src/pmc/exporter.pmc                                        [devel]src
+src/pmc/file.pmc                                            [devel]src
+src/pmc/filehandle.pmc                                      [devel]src
+src/pmc/fixedbooleanarray.pmc                               [devel]src
+src/pmc/fixedfloatarray.pmc                                 [devel]src
+src/pmc/fixedintegerarray.pmc                               [devel]src
+src/pmc/fixedpmcarray.pmc                                   [devel]src
+src/pmc/fixedstringarray.pmc                                [devel]src
+src/pmc/float.pmc                                           [devel]src
+src/pmc/handle.pmc                                          [devel]src
+src/pmc/hash.pmc                                            [devel]src
+src/pmc/hashiterator.pmc                                    [devel]src
+src/pmc/hashiteratorkey.pmc                                 [devel]src
+src/pmc/imageio.pmc                                         [devel]src
+src/pmc/imageiosize.pmc                                     [devel]src
+src/pmc/integer.pmc                                         [devel]src
+src/pmc/iterator.pmc                                        [devel]src
+src/pmc/key.pmc                                             [devel]src
+src/pmc/lexinfo.pmc                                         [devel]src
+src/pmc/lexpad.pmc                                          [devel]src
+src/pmc/managedstruct.pmc                                   [devel]src
+src/pmc/multisub.pmc                                        [devel]src
+src/pmc/namespace.pmc                                       [devel]src
+src/pmc/nci.pmc                                             [devel]src
+src/pmc/null.pmc                                            [devel]src
+src/pmc/object.pmc                                          [devel]src
+src/pmc/opcode.pmc                                          [devel]src
+src/pmc/oplib.pmc                                           [devel]src
+src/pmc/orderedhash.pmc                                     [devel]src
+src/pmc/orderedhashiterator.pmc                             [devel]src
+src/pmc/os.pmc                                              [devel]src
+src/pmc/packfile.pmc                                        [devel]src
+src/pmc/packfileannotation.pmc                              [devel]src
+src/pmc/packfileannotations.pmc                             [devel]src
+src/pmc/packfileconstanttable.pmc                           [devel]src
+src/pmc/packfiledirectory.pmc                               [devel]src
+src/pmc/packfilefixupentry.pmc                              [devel]src
+src/pmc/packfilefixuptable.pmc                              [devel]src
+src/pmc/packfilerawsegment.pmc                              [devel]src
+src/pmc/packfilesegment.pmc                                 [devel]src
+src/pmc/parrotinterpreter.pmc                               [devel]src
+src/pmc/parrotlibrary.pmc                                   [devel]src
+src/pmc/parrotrunningthread.pmc                             [devel]src
+src/pmc/parrotthread.pmc                                    [devel]src
 src/pmc/pmc.num                                             []
-src/pmc/pmcproxy.pmc                                        []
-src/pmc/pointer.pmc                                         []
-src/pmc/resizablebooleanarray.pmc                           []
-src/pmc/resizablefloatarray.pmc                             []
-src/pmc/resizableintegerarray.pmc                           []
-src/pmc/resizablepmcarray.pmc                               []
-src/pmc/resizablestringarray.pmc                            []
-src/pmc/role.pmc                                            []
-src/pmc/scalar.pmc                                          []
-src/pmc/scheduler.pmc                                       []
-src/pmc/schedulermessage.pmc                                []
-src/pmc/sockaddr.pmc                                        []
-src/pmc/socket.pmc                                          []
-src/pmc/string.pmc                                          []
-src/pmc/stringhandle.pmc                                    []
-src/pmc/stringiterator.pmc                                  []
-src/pmc/sub.pmc                                             []
-src/pmc/task.pmc                                            []
-src/pmc/timer.pmc                                           []
-src/pmc/undef.pmc                                           []
-src/pmc/unmanagedstruct.pmc                                 []
+src/pmc/pmcproxy.pmc                                        [devel]src
+src/pmc/pointer.pmc                                         [devel]src
+src/pmc/resizablebooleanarray.pmc                           [devel]src
+src/pmc/resizablefloatarray.pmc                             [devel]src
+src/pmc/resizableintegerarray.pmc                           [devel]src
+src/pmc/resizablepmcarray.pmc                               [devel]src
+src/pmc/resizablestringarray.pmc                            [devel]src
+src/pmc/retcontinuation.pmc                                 [devel]src
+src/pmc/role.pmc                                            [devel]src
+src/pmc/scalar.pmc                                          [devel]src
+src/pmc/scheduler.pmc                                       [devel]src
+src/pmc/schedulermessage.pmc                                [devel]src
+src/pmc/sockaddr.pmc                                        [devel]src
+src/pmc/socket.pmc                                          [devel]src
+src/pmc/string.pmc                                          [devel]src
+src/pmc/stringhandle.pmc                                    [devel]src
+src/pmc/stringiterator.pmc                                  [devel]src
+src/pmc/sub.pmc                                             [devel]src
+src/pmc/task.pmc                                            [devel]src
+src/pmc/timer.pmc                                           [devel]src
+src/pmc/undef.pmc                                           [devel]src
+src/pmc/unmanagedstruct.pmc                                 [devel]src
 src/pmc_freeze.c                                            []
 src/runcore/cores.c                                         []
 src/runcore/main.c                                          []
@@ -1516,6 +1611,8 @@
 t/compilers/imcc/syn/symbols.t                              [test]
 t/compilers/imcc/syn/tail.t                                 [test]
 t/compilers/imcc/syn/veracity.t                             [test]
+t/compilers/json/from_parrot.t                              [test]
+t/compilers/json/to_parrot.t                                [test]
 t/compilers/pct/complete_workflow.t                         [test]
 t/compilers/pct/past.t                                      [test]
 t/compilers/pct/pct_hllcompiler.t                           [test]
@@ -1621,11 +1718,13 @@
 t/configure/testlib/verbosefoobar                           [test]
 t/distro/file_metadata.t                                    [test]
 t/distro/manifest.t                                         [test]
+t/distro/meta_yml.t                                         [test]
 t/dynoplibs/math.t                                          [test]
 t/dynoplibs/obscure.t                                       [test]
 t/dynpmc/dynlexpad.t                                        [test]
 t/dynpmc/foo.t                                              [test]
 t/dynpmc/foo2.t                                             [test]
+t/dynpmc/gdbmhash.t                                         [test]
 t/dynpmc/pccmethod_test.t                                   [test]
 t/dynpmc/rational.t                                         [test]
 t/dynpmc/rotest.t                                           [test]
@@ -1804,6 +1903,7 @@
 t/pmc/context.t                                             [test]
 t/pmc/continuation.t                                        [test]
 t/pmc/coroutine.t                                           [test]
+t/pmc/cpointer.t                                            [test]
 t/pmc/default.t                                             [test]
 t/pmc/env.t                                                 [test]
 t/pmc/eval.t                                                [test]
@@ -1877,6 +1977,7 @@
 t/pmc/resizableintegerarray.t                               [test]
 t/pmc/resizablepmcarray.t                                   [test]
 t/pmc/resizablestringarray.t                                [test]
+t/pmc/retcontinuation.t                                     [test]
 t/pmc/ro.t                                                  [test]
 t/pmc/role.t                                                [test]
 t/pmc/scalar.t                                              [test]
@@ -1914,13 +2015,16 @@
 t/steps/auto/attributes-01.t                                [test]
 t/steps/auto/backtrace-01.t                                 [test]
 t/steps/auto/byteorder-01.t                                 [test]
+t/steps/auto/cgoto-01.t                                     [test]
 t/steps/auto/cpu-01.t                                       [test]
+t/steps/auto/crypto-01.t                                    [test]
 t/steps/auto/ctags-01.t                                     [test]
 t/steps/auto/env-01.t                                       [test]
 t/steps/auto/format-01.t                                    [test]
 t/steps/auto/frames-01.t                                    [test]
 t/steps/auto/gc-01.t                                        [test]
 t/steps/auto/gcc-01.t                                       [test]
+t/steps/auto/gdbm-01.t                                      [test]
 t/steps/auto/gettext-01.t                                   [test]
 t/steps/auto/glibc-01.t                                     [test]
 t/steps/auto/gmp-01.t                                       [test]

Modified: branches/ops_pct/MANIFEST.SKIP
==============================================================================
--- branches/ops_pct/MANIFEST.SKIP	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/MANIFEST.SKIP	Wed May  5 08:26:03 2010	(r46301)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Wed Apr 28 02:20:18 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Mon Mar  8 22:07:22 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -65,8 +65,8 @@
 ^all_cstring\.str/
 ^blib$
 ^blib/
-^config_lib\.pir$
-^config_lib\.pir/
+^config_lib\.pasm$
+^config_lib\.pasm/
 ^cover_db$
 ^cover_db/
 ^install_config\.fpmc$
@@ -131,10 +131,6 @@
 ^pirc/
 ^tags$
 ^tags/
-^tapir$
-^tapir/
-^tapir\..*$
-^tapir\..*/
 ^temp\.file$
 ^temp\.file/
 ^test$
@@ -188,6 +184,37 @@
 ^compilers/imcc/imcparser\.h/
 ^compilers/imcc/imcparser\.output$
 ^compilers/imcc/imcparser\.output/
+# generated from svn:ignore of 'compilers/json/'
+^compilers/json/JSON\.pbc$
+^compilers/json/JSON\.pbc/
+# generated from svn:ignore of 'compilers/json/JSON/'
+^compilers/json/JSON/.*\.pbc$
+^compilers/json/JSON/.*\.pbc/
+^compilers/json/JSON/.*\.pir$
+^compilers/json/JSON/.*\.pir/
+# generated from svn:ignore of 'compilers/ncigen/'
+^compilers/ncigen/Makefile$
+^compilers/ncigen/Makefile/
+^compilers/ncigen/ncigen\.pbc$
+^compilers/ncigen/ncigen\.pbc/
+# generated from svn:ignore of 'compilers/ncigen/src/'
+^compilers/ncigen/src/gen_actions\.pir$
+^compilers/ncigen/src/gen_actions\.pir/
+^compilers/ncigen/src/gen_builtins\.pir$
+^compilers/ncigen/src/gen_builtins\.pir/
+^compilers/ncigen/src/gen_grammar\.pir$
+^compilers/ncigen/src/gen_grammar\.pir/
+# generated from svn:ignore of 'compilers/nqp/'
+^compilers/nqp/nqp\.pbc$
+^compilers/nqp/nqp\.pbc/
+# generated from svn:ignore of 'compilers/nqp/bootstrap/'
+^compilers/nqp/bootstrap/gen_actions\.pir$
+^compilers/nqp/bootstrap/gen_actions\.pir/
+^compilers/nqp/bootstrap/nqp\.pbc$
+^compilers/nqp/bootstrap/nqp\.pbc/
+# generated from svn:ignore of 'compilers/nqp/src/'
+^compilers/nqp/src/Grammar_gen\.pir$
+^compilers/nqp/src/Grammar_gen\.pir/
 # generated from svn:ignore of 'compilers/pct/src/PAST/'
 ^compilers/pct/src/PAST/.*\.pbc$
 ^compilers/pct/src/PAST/.*\.pbc/
@@ -437,8 +464,6 @@
 ^include/parrot/feature\.h/
 ^include/parrot/has_header\.h$
 ^include/parrot/has_header\.h/
-^include/parrot/opsenum\.h$
-^include/parrot/opsenum\.h/
 ^include/parrot/pbcversion\.h$
 ^include/parrot/pbcversion\.h/
 ^include/parrot/platform\.h$
@@ -523,9 +548,6 @@
 ^runtime/parrot/include/.*\.pasm/
 ^runtime/parrot/include/.*\.pbc$
 ^runtime/parrot/include/.*\.pbc/
-# generated from svn:ignore of 'runtime/parrot/languages/'
-^runtime/parrot/languages/data_json$
-^runtime/parrot/languages/data_json/
 # generated from svn:ignore of 'runtime/parrot/library/'
 ^runtime/parrot/library/.*\.pbc$
 ^runtime/parrot/library/.*\.pbc/
@@ -577,20 +599,12 @@
 # generated from svn:ignore of 'runtime/parrot/library/Parrot/'
 ^runtime/parrot/library/Parrot/.*\.pbc$
 ^runtime/parrot/library/Parrot/.*\.pbc/
-# generated from svn:ignore of 'runtime/parrot/library/ProfTest/'
-^runtime/parrot/library/ProfTest/.*\.pbc$
-^runtime/parrot/library/ProfTest/.*\.pbc/
-^runtime/parrot/library/ProfTest/.*\.pir$
-^runtime/parrot/library/ProfTest/.*\.pir/
 # generated from svn:ignore of 'runtime/parrot/library/Stream/'
 ^runtime/parrot/library/Stream/.*\.pbc$
 ^runtime/parrot/library/Stream/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/String/'
 ^runtime/parrot/library/String/Utils\.pbc$
 ^runtime/parrot/library/String/Utils\.pbc/
-# generated from svn:ignore of 'runtime/parrot/library/TAP/'
-^runtime/parrot/library/TAP/.*\.pbc$
-^runtime/parrot/library/TAP/.*\.pbc/
 # generated from svn:ignore of 'runtime/parrot/library/Tcl/'
 ^runtime/parrot/library/Tcl/.*\.pbc$
 ^runtime/parrot/library/Tcl/.*\.pbc/
@@ -753,6 +767,8 @@
 # generated from svn:ignore of 'src/gc/'
 ^src/gc/.*\.bundle$
 ^src/gc/.*\.bundle/
+^src/gc/.*\.c$
+^src/gc/.*\.c/
 ^src/gc/.*\.def$
 ^src/gc/.*\.def/
 ^src/gc/.*\.dll$
@@ -862,13 +878,6 @@
 ^t/benchmark/.*\.pasm/
 ^t/benchmark/.*\.pir$
 ^t/benchmark/.*\.pir/
-# generated from svn:ignore of 't/compilers/data_json/'
-^t/compilers/data_json/.*\.pbc$
-^t/compilers/data_json/.*\.pbc/
-^t/compilers/data_json/.*\.pir$
-^t/compilers/data_json/.*\.pir/
-^t/compilers/data_json/.*_pbcexe$
-^t/compilers/data_json/.*_pbcexe/
 # generated from svn:ignore of 't/compilers/imcc/'
 ^t/compilers/imcc/.*\.pbc$
 ^t/compilers/imcc/.*\.pbc/
@@ -899,6 +908,13 @@
 ^t/compilers/imcc/syn/.*\.pir/
 ^t/compilers/imcc/syn/.*_pbcexe.*$
 ^t/compilers/imcc/syn/.*_pbcexe.*/
+# generated from svn:ignore of 't/compilers/json/'
+^t/compilers/json/.*\.pbc$
+^t/compilers/json/.*\.pbc/
+^t/compilers/json/.*\.pir$
+^t/compilers/json/.*\.pir/
+^t/compilers/json/.*_pbcexe$
+^t/compilers/json/.*_pbcexe/
 # generated from svn:ignore of 't/compilers/pct/'
 ^t/compilers/pct/.*\.pbc$
 ^t/compilers/pct/.*\.pbc/

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

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

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

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

Modified: branches/ops_pct/PBC_COMPAT
==============================================================================
--- branches/ops_pct/PBC_COMPAT	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/PBC_COMPAT	Wed May  5 08:26:03 2010	(r46301)
@@ -27,10 +27,6 @@
 
 # please insert tab separated entries at the top of the list
 
-6.9	2010.04.27	bacek	remove deprecated in-place string ops (bitwise, charset, case change)
-6.8	2010.04.27	bacek	remove deprecated in-place substr ops
-6.7	2010.04.22	coke	remove RetContinuation PMC
-6.6	2010.04.17	bacek	add replace op
 6.5	2010.03.09	cotto	remove cpu_ret op
 6.4	2010.03.02	cotto	remove prederef__ and reserved
 6.3	2010.02.16	whiteknight	Add OpLib and Opcode PMCs

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

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

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

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

Modified: branches/ops_pct/VERSION
==============================================================================
--- branches/ops_pct/VERSION	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/VERSION	Wed May  5 08:26:03 2010	(r46301)
@@ -1 +1 @@
-2.3.0
+2.1.0

Modified: branches/ops_pct/compilers/data_json/Defines.mak
==============================================================================
--- branches/ops_pct/compilers/data_json/Defines.mak	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/data_json/Defines.mak	Wed May  5 08:26:03 2010	(r46301)
@@ -1,6 +1,6 @@
-DATA_JSON_LIB_PBCS = runtime/parrot/languages/data_json/data_json.pbc
+DATA_JSON_LIB_PBCS = $(LIBRARY_DIR)/data_json.pbc
 
-DATA_JSON_CLEANUPS = $(DATA_JSON_LIB_PBCS) \
+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	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/data_json/Rules.mak	Wed May  5 08:26:03 2010	(r46301)
@@ -1,5 +1,4 @@
-runtime/parrot/languages/data_json/data_json.pbc: compilers/data_json/data_json.pbc
-	$(MKPATH) runtime/parrot/languages/data_json
+$(LIBRARY_DIR)/data_json.pbc: compilers/data_json/data_json.pbc
 	$(CP) compilers/data_json/data_json.pbc $@
 
 compilers/data_json/data_json.pbc : \

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

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

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

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

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

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

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

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

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

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

Modified: branches/ops_pct/compilers/imcc/pbc.c
==============================================================================
--- branches/ops_pct/compilers/imcc/pbc.c	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/imcc/pbc.c	Wed May  5 08:26:03 2010	(r46301)
@@ -983,32 +983,31 @@
     ASSERT_ARGS(add_const_str)
 
     PackFile_ConstTable *table = interp->code->const_table;
-    STRING * const       s     = IMCC_string_from_reg(interp, r);
+    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)) {
-                return i;
+            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;
             }
         }
     }
-
-    /* otherwise... */
-    {
-        int                k        = add_const_table(interp);
-        PackFile_Constant *constant = table->constants[k];
-        constant->type              = PFC_STRING;
-        constant->u.string          = s;
-
-        return k;
+    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;
 }
 
 
@@ -1065,7 +1064,8 @@
     if (!pcc_sub->multi[0])
         return Parrot_pmc_new(interp, enum_class_FixedIntegerArray);
 
-    multi_sig = Parrot_pmc_new_init_int(interp, enum_class_FixedPMCArray, n);
+    multi_sig = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
+    VTABLE_set_integer_native(interp, multi_sig, n);
     ct        = interp->code->const_table;
 
     for (i = 0; i < n; ++i) {
@@ -1193,6 +1193,7 @@
     ASSERT_ARGS(find_outer)
     subs_t      *s;
     PMC         *current;
+    STRING      *cur_name;
     char        *cur_name_str;
     Parrot_Sub_attributes *sub;
     size_t      len;
@@ -1226,6 +1227,7 @@
                    unit->outer->name);
 
     PMC_get_sub(interp, current, sub);
+    cur_name = sub->name;
 
     cur_name_str = Parrot_str_to_cstring(interp,  sub->name);
     if (strlen(cur_name_str) == len
@@ -1337,10 +1339,8 @@
         unit->subid = r;
     else {
         /* trim the quotes  */
-        char *oldname     = unit->subid->name;
         unit->subid->name = mem_sys_strdup(unit->subid->name + 1);
         unit->subid->name[strlen(unit->subid->name) - 1] = 0;
-        mem_sys_free(oldname);
 
         /* create string constant for it. */
         unit->subid->color = add_const_str(interp, unit->subid);
@@ -1397,7 +1397,7 @@
         STRING *vtable_name;
         INTVAL  vtable_index;
 
-        /* Work out the name of the vtable function. */
+        /* Work out the name of the vtable method. */
         if (unit->vtable_name) {
             vtable_name = Parrot_str_new(interp, unit->vtable_name + 1,
                     strlen(unit->vtable_name) - 2);
@@ -1406,13 +1406,14 @@
         else
             vtable_name = sub->name;
 
-        /* Check this is a valid vtable function to override. */
+        /* Check this is a valid vtable method to override. */
         vtable_index = Parrot_get_vtable_index(interp, vtable_name);
 
-        if (vtable_index == -1)
+        if (vtable_index == -1) {
             IMCC_fatal(interp, 1,
-                "'%S' is not a vtable, but was used with :vtable.\n",
+                "'%S' is not a v-table method, but was used with :vtable.\n",
                 vtable_name);
+        }
 
         /* TODO check for duplicates */
         sub->vtable_index = vtable_index;
@@ -1539,14 +1540,13 @@
 build_key(PARROT_INTERP, ARGIN(SymReg *key_reg))
 {
     ASSERT_ARGS(build_key)
-#define MAX_KEY_LEN 10
-#define MAX_KEYNAME_LEN 20
-    SymReg   *reg = key_reg->set == 'K' ? key_reg->nextkey : key_reg;
+#define KEYLEN 21
+    SymReg   *reg;
 
-    char      s_key[MAX_KEY_LEN * MAX_KEYNAME_LEN];
-    opcode_t  key[MAX_KEY_LEN * 2 + 1];
+    char      s_key[KEYLEN * 10];
+    opcode_t  key[KEYLEN];
     opcode_t  size;
-    int       key_length = 0;     /* P0["hi;there"; S0; 2] has length 3 */
+    int       key_length;     /* P0["hi;there"; S0; 2] has length 3 */
     int       k;
 
     /* 0 is length */
@@ -1556,14 +1556,15 @@
     char     *s  = s_key;
 
     *s           = 0;
+    reg          = key_reg->set == 'K' ? key_reg->nextkey : key_reg;
 
     for (key_length = 0; reg ; reg = reg->nextkey, key_length++) {
         SymReg *r = reg;
         int     type;
 
-        if (key_length >= MAX_KEY_LEN)
+        if ((pc - key - 2) >= KEYLEN)
             IMCC_fatal(interp, 1, "build_key:"
-                    "Key too long, increase MAX_KEY_LEN.\n");
+                    "key too complex increase KEYLEN\n");
 
         /* if key is a register, the original sym is in r->reg */
         type = r->type;

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

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

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

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

Copied: branches/ops_pct/compilers/json/Defines.mak (from r44981, branches/ops_pct/compilers/json/Defines.mak)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/json/Defines.mak	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/json/Defines.mak)
@@ -0,0 +1,6 @@
+JSON_LIB_PBCS = compilers/json/JSON.pbc
+JSON_CLEANUPS = $(JSON_LIB_PBCS) \
+    compilers/json/JSON/grammar.pir \
+    compilers/json/JSON/pge2pir.pir \
+    compilers/json/JSON/grammar.pbc \
+    compilers/json/JSON/pge2pir.pbc

Copied: branches/ops_pct/compilers/json/JSON.pir (from r44981, branches/ops_pct/compilers/json/JSON.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/json/JSON.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/json/JSON.pir)
@@ -0,0 +1,83 @@
+# Copyright (C) 2005-2008, Parrot Foundation.
+# $Id$
+
+=head1 NAME
+
+JSON (JavaScript Object Notation) is a lightweight data-interchange format.
+
+=head1 SYNOPSIS
+
+Given a valid JSON string, the compiler will return a PMC containing the
+appropriate values. For example:
+
+ .local pmc JSON
+ JSON = compreg 'JSON'
+ $P0 = JSON('[1,2,3]')
+
+Will create a pmc that C<does> array, contains the values 1, 2, and 3, and
+store it in register C<$P0>.
+
+For more information about the structure of the JSON representation, see the
+documentation at L<http://www.json.org/>.
+
+=cut
+
+.namespace [ 'JSON' ]
+
+.sub '__onload' :load
+    load_bytecode 'PGE.pbc'
+    load_bytecode 'PGE/Util.pbc'
+    load_bytecode 'TGE.pbc'
+
+    load_bytecode 'compilers/json/JSON/grammar.pbc'
+    load_bytecode 'compilers/json/JSON/pge2pir.pbc'
+
+    $P1 = get_global '__compiler'
+    compreg "JSON", $P1
+
+    $P1 = new 'Hash'
+    $P1['\"'] = '"'
+    $P1['\\'] = "\\"
+    $P1['\/'] = '/'
+    $P1['\b'] = "\b"
+    $P1['\f'] = "\f"
+    $P1['\n'] = "\n"
+    $P1['\r'] = "\r"
+    $P1['\t'] = "\t"
+
+    set_root_global [ 'JSON' ], '$escapes', $P1
+.end
+
+.sub '__compiler'
+    .param string json_string
+
+   .local pmc parse, match
+   parse = get_root_global ['parrot'; 'JSON'], 'value'
+
+   $P0 = get_root_global ['parrot'; 'PGE'], 'Match'
+   match = $P0.'new'(json_string)
+   match.'to'(0)
+   match = parse(match)
+   unless match goto failed
+
+   .local pmc pirgrammar, pirbuilder, pir
+   pirgrammar = new ['JSON'; 'PIR']
+   pirbuilder = pirgrammar.'apply'(match)
+   pir = pirbuilder.'get'('result')
+
+   .local pmc pirc, result
+   pirc = compreg "PIR"
+   result = pirc(pir)
+   .tailcall result()
+
+  failed:
+   $P0 = new 'Exception'
+   $P0[0] = "invalid JSON value"
+   throw $P0
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/json/JSON/grammar.pg (from r44981, branches/ops_pct/compilers/json/JSON/grammar.pg)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/json/JSON/grammar.pg	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/json/JSON/grammar.pg)
@@ -0,0 +1,38 @@
+# From http://www.json.org/
+
+grammar JSON;
+
+rule object { '{' <members>?  '}' }
+rule array  { '[' ']' | '[' <elements> ']' }
+rule string { \"<char>*\" }
+
+rule  members { <string> ':' <value> [',' <string> ':' <value> ]* }
+
+rule  elements { <value> [',' <value> ]* }
+
+token value {
+  | <object>
+  | <array>
+  | <string>
+  | <number>
+  | true
+  | false
+  | null
+  | <?PGE::Util::die 'not a valid JSON value'>
+}
+
+# XXX need to add "except control char" to the final charclass here.
+token char {
+  | \\<["\\/bfnrt]>
+  | \\u<xdigit>**{4}
+  | <-[\\"]>
+}
+
+token number {
+ <.ws>
+ '-'?
+ [ <[1..9]> <[0..9]>+ | <[0..9]> ]
+ [ '.' <[0..9]>+ ]?
+ [ <[Ee]> <[+\-]>? <[0..9]>+ ]?
+ <.ws>
+}

Copied: branches/ops_pct/compilers/json/JSON/pge2pir.tg (from r44981, branches/ops_pct/compilers/json/JSON/pge2pir.tg)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/json/JSON/pge2pir.tg	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/json/JSON/pge2pir.tg)
@@ -0,0 +1,210 @@
+grammar JSON::PIR is TGE::Grammar;
+
+transform result (ROOT) {
+    .local pmc pir
+    .local string result
+
+    $S0 = tree.'get'('pir', node, 'value')
+
+    pir = new 'CodeString'
+    pir.'emit'('.sub anon :anon')
+    pir.'emit'($S0)
+    result = node['ret']
+    pir.'emit'('    .return (%0)',result)
+    pir.'emit'('.end')
+
+   .return(pir)
+}
+
+transform pir (value) {
+
+    .local pmc sub_node, transform_result
+    .local pmc pir, result
+    .local string value, type
+
+    type = 'string'
+    sub_node = node[type]
+    unless null sub_node goto got_type
+
+    type = 'number'
+    sub_node = node[type]
+    unless null sub_node goto got_type
+
+    type = 'object'
+    sub_node = node[type]
+    unless null sub_node goto got_type
+
+    type = 'array'
+    sub_node = node[type]
+    unless null sub_node goto got_type
+
+    value = node
+    if value == 'true'  goto got_true
+    if value == 'false' goto got_false
+    if value == 'null'  goto got_null
+
+    .return ('') # should never reach this.
+
+  got_type:
+    pir = tree.'get'('pir', sub_node, type)
+    $S0 = sub_node['ret']
+    node['ret'] = $S0
+    .return (pir)
+
+  got_true:
+    pir = new 'CodeString'
+    result = pir.'unique'('$P')
+    $S0 = node
+    pir.'emit'("    %0 = new 'Boolean'", result)
+    pir.'emit'('    %0 = 1', result, $S0)
+    node['ret'] = result
+    .return(pir)
+
+  got_false:
+    pir = new 'CodeString'
+    result = pir.'unique'('$P')
+    $S0 = node
+    pir.'emit'("    %0 = new 'Boolean'", result)
+    pir.'emit'('    %0 = 0', result, $S0)
+    node['ret'] = result
+    .return(pir)
+
+  got_null:
+    pir = new 'CodeString'
+    result = pir.'unique'('$P')
+    $S0 = node
+    pir.'emit'('    null %0', result)
+    node['ret'] = result
+    .return(pir)
+}
+
+transform pir (object) {
+    .local pmc pir
+    pir = new 'CodeString'
+    .local string result, child_result, key_result
+    result = pir.'unique'('$P')
+    pir.'emit'("    %0 = new 'Hash'", result)
+
+    .local pmc items
+
+    items = node['members']
+    if null items goto end
+
+    items = items[0]
+
+    .local pmc keys
+    keys  = items['string']
+    items = items['value']
+
+    .local pmc it, key_iter, child, key
+    key_iter = iter keys
+    it       = iter items
+
+    # the two iters should be in lockstep as a result of the PGE grammar
+loop:
+    unless it goto end
+    child = shift it
+    $P0 = tree.'get'('pir', child, 'value')
+    $S0 = $P0
+    pir .= $S0
+    child_result = child['ret']
+
+    key   = shift key_iter
+    $P0 = tree.'get'('pir', key, 'string')
+    $S0 = $P0
+    pir .= $S0
+    key_result = key['ret']
+
+    pir.'emit'('    %0[%1] = %2', result, key_result, child_result)
+
+
+    goto loop
+end:
+    node['ret'] = result
+
+   .return (pir)
+}
+
+transform pir (array) {
+    .local pmc pir
+    pir = new 'CodeString'
+    .local string result, child_result
+    result = pir.'unique'('$P')
+    pir.'emit'("    %0 = new 'ResizablePMCArray'", result)
+
+    .local pmc items
+
+
+    items = node['elements']
+    if null items goto end
+
+    items = items['value']
+
+    .local pmc it, child
+    it = iter items
+loop:
+    unless it goto end
+    child = shift it
+    $P0 = tree.'get'('pir', child, 'value')
+    $S0 = $P0
+    pir .= $S0
+
+    child_result = child['ret']
+    pir.'emit'('    push %0, %1', result, child_result)
+    goto loop
+end:
+    node['ret'] = result
+
+   .return (pir)
+}
+
+transform pir (string) {
+    .local pmc pir, result, children, it, child
+    .local string tmp
+    tmp = ''
+    pir = new 'CodeString'
+    children = node['char']
+    if null children goto loop_end
+    it = iter children
+  loop:
+    push_eh loop_end
+      child = shift it
+    pop_eh
+    unless child goto loop_end
+    $S0 = child
+    $I0 = length $S0
+    if $I0 == 1 goto char
+    if $I0 == 2 goto escape
+  unicode:
+    $P1 = new 'String'
+    $S1 = substr $S0, 2, 4
+    $P1 = $S1
+    $I0 = $P1.'to_int'(16)
+    $S0 = chr $I0
+    goto char
+  escape:
+    $P0 = get_root_global [ 'JSON' ],  '$escapes'
+    $S0 = $P0[$S0]
+  char:
+    tmp .= $S0
+    goto loop
+  loop_end:
+
+    result = pir.'unique'('$P')
+    $S1 = pir.'escape'(tmp)
+    pir.'emit'("    %0 = new 'String'", result)
+    pir.'emit'('    %0 = %1', result, $S1)
+    node['ret'] = result
+   .return(pir)
+}
+
+transform pir (number) {
+    .local pmc pir, result
+    pir = new 'CodeString'
+    result = pir.'unique'('$P')
+    $S0 = node
+    pir.'emit'("    %0 = new 'Integer'", result)
+    pir.'emit'('    %0 = %1', result, $S0)
+    node['ret'] = result
+   .return(pir)
+}

Copied: branches/ops_pct/compilers/json/Rules.mak (from r44981, branches/ops_pct/compilers/json/Rules.mak)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/json/Rules.mak	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/json/Rules.mak)
@@ -0,0 +1,16 @@
+compilers/json/JSON.pbc : \
+    $(LIBRARY_DIR)/PGE.pbc \
+    $(LIBRARY_DIR)/PGE/Util.pbc \
+    $(LIBRARY_DIR)/TGE.pbc \
+    compilers/json/JSON/grammar.pbc \
+    compilers/json/JSON/pge2pir.pbc \
+    compilers/json/JSON.pir
+	$(PARROT) -o $@ compilers/json/JSON.pir
+
+compilers/json/JSON/grammar.pir : compilers/json/JSON/grammar.pg \
+    $(LIBRARY_DIR)/PGE/Perl6Grammar.pbc
+	$(PARROT) $(LIBRARY_DIR)/PGE/Perl6Grammar.pbc --output=$@ compilers/json/JSON/grammar.pg
+
+compilers/json/JSON/pge2pir.pir : compilers/json/JSON/pge2pir.tg \
+    $(LIBRARY_DIR)/TGE.pbc
+	$(PARROT) compilers/tge/tgc.pir --output=$@ compilers/json/JSON/pge2pir.tg

Copied: branches/ops_pct/compilers/ncigen/MAINTAINER (from r44981, branches/ops_pct/compilers/ncigen/MAINTAINER)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/MAINTAINER	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/MAINTAINER)
@@ -0,0 +1,4 @@
+# $Id$
+
+N: Kevin Tew
+E: kevintew at tewk.com

Copied: branches/ops_pct/compilers/ncigen/NCIGEN.TODO (from r44981, branches/ops_pct/compilers/ncigen/NCIGEN.TODO)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/NCIGEN.TODO	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/NCIGEN.TODO)
@@ -0,0 +1,6 @@
+Add option to generate dlfuncs for certain h files not all includes.
+*** Allow typedefs and structs with the same name in the symbol table.
+Generate ManagedStructs definitions for structs and typedefs.
+Generate parrot_builtin_type entries in the AST such as INT NUM STR o PMC
+Add -I include support to ncigen.pl
+Convert ncigen.pl to ncigen.pir

Copied: branches/ops_pct/compilers/ncigen/NCIGENP6.pm (from r44981, branches/ops_pct/compilers/ncigen/NCIGENP6.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/NCIGENP6.pm	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/NCIGENP6.pm)
@@ -0,0 +1,147 @@
+#!/home/tewk/srcs/parrot/perl6
+
+# $Id$
+# Copyright (C) 2008, Parrot Foundation.
+
+use v6;
+class NCIGENAST::FuncDecl {
+}
+
+evalfile('./ncigen.pbc', lang => 'Parrot');
+
+sub parse_ast($fn) {
+    my $pp_fn = mktempfile('ptemp');
+
+    run("gcc -x c -E $fn > $pp_fn");
+    my $compiler = compreg('NCIGEN');
+    my $match = $compiler.parse(slurp($pp_fn));
+    unlink $pp_fn;
+    $match.ast;
+}
+
+sub compreg {
+    my $a = q:PIR { %r = compreg 'NCIGEN' };
+    return $a;
+}
+
+sub mktempfile($prefix) {
+    sub nonce() { ".{$*PID}." ~ int 1000.rand }
+    $prefix ~ nonce;
+}
+
+sub gen_preamble($nsname, $libname) {
+    my $fmt = ".namespace ['$nsname']\n";
+    $fmt ~= ".sub __load_lib_dlfunc_init__ :anon :init :load\n";
+
+    if $libname {
+        $fmt ~= "loadlib \$P1, '$libname'\nif \$P1 goto has_lib\n";
+    }
+    else {
+        $fmt ~= "\$P1 = null\ngoto has_lib\n";
+    }
+
+    $fmt ~=
+        qq{{\$P2 = new 'Exception'
+\$P2[0] = 'error loading $libname - loadlib failed'
+throw \$P2
+has_lib:
+}};
+
+    return $fmt;
+}
+
+sub gen_postamble() {
+    return ".end\n";
+}
+
+sub dump_node($node) {
+    say "====================================================";
+    say $node.perl;
+    for ($node.list) -> $x {
+        say $x.perl;
+    }
+}
+
+=begin
+multi sub pir($node) {
+    say $node.WHAT;
+    return  pir_children($node);
+}
+=end
+
+#multi sub pir(NCIGENAST::TypeDef $node) { return ""; }
+#multi sub pir(NCIGENAST::VarDecl $node) { return ""; }
+multi sub pir(NCIGENAST::FuncDecl $node) {
+## return type
+    my $type = param_to_code($node, 1);
+
+##  get list of arguments to operation
+    for ($node.list()) -> $x {
+        $type ~= param_to_code($x);
+    }
+    return ($node.name, $type, $node.source());
+}
+
+sub format_func_decl($pirname, $cname, $type) {
+    return qq{{dlfunc \$P2, \$P1, '$cname', '$type'
+store_global '$pirname', \$P2}};
+}
+
+sub param_to_code($node, $returncode = 0) {
+    my $pt = $node.'primitive_type'();
+
+    if ($node.pointer()) {
+        if ($node.pointer_cnt() > 1 ) { return "V"; } #out params
+        given $pt {
+          when 'void' {
+            if ($returncode) { return "p"; } #probably should be "V"
+            else { return "p"; }
+          }
+          when 'int'    { return "V"; }
+          when 'long'   { return "V"; }
+          when 'char'   { return "t"; }
+          when 'short'  { return "V"; }
+          when 'double' { return "V"; }
+          when 'floag'  { return "V"; }
+          default {
+=begin
+            say "ERROR";
+            say $node.perl;
+            say "what is this";
+=end
+              return "p";
+          }
+        }
+    }
+    else {
+        given $pt {
+            when 'void' {
+                if ($returncode) { return ""; } # void return code
+                else { return "v"; }
+            }
+            when 'int'      { return "i"; }
+            when 'long'     { return "l"; }
+            when 'char'     { return "c"; }
+            when 'short'    { return "s"; }
+            when 'double'   { return "d"; }
+            when 'floag'    { return "f"; }
+            default         { return "p"; }
+        }
+    }
+}
+
+sub pir_children($node) {
+    my $code = "";
+    for ($node.kv) -> $k, $v {
+        $code ~= pir($v);
+    }
+    return $code;
+}
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab ft=perl6 shiftwidth=2
+
+

Copied: branches/ops_pct/compilers/ncigen/README (from r44981, branches/ops_pct/compilers/ncigen/README)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/README	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/README)
@@ -0,0 +1,9 @@
+./nci_gen.pl is currently written to run on Linux, feel free to add portability if you wish
+
+./nci_gen.pl also requires the perl module IPC::Run3
+
+EXAMPLES:
+perl ./nci_gen.pl postgres/spi.h              - PARSE SUCCESSFUL
+perl ./nci_gen.pl /usr/include/sqlite3.h      - PARSE SUCCESSFUL
+perl ./nci_gen.pl /usr/include/X11/Xlib.h     - PARSE SUCCESSFUL
+perl ./nci_gen.pl /usr/include/mysql/mysql.h  - PARSE SUCCESSFUL

Copied: branches/ops_pct/compilers/ncigen/config/makefiles/ncigen.in (from r44981, branches/ops_pct/compilers/ncigen/config/makefiles/ncigen.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/config/makefiles/ncigen.in	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/config/makefiles/ncigen.in)
@@ -0,0 +1,115 @@
+# Copyright (C) 2008-2009, Parrot Foundation.
+## $Id$
+
+## arguments we want to run parrot with
+PARROT_ARGS =
+
+## configuration settings
+BUILD_DIR     = @build_dir@
+LOAD_EXT      = @load_ext@
+O             = @o@
+
+## Setup some commands
+LN_S          = @lns@
+PERL          = @perl@
+RM_RF         = @rm_rf@
+CP            = @cp@
+PARROT        = ../../parrot at exe@
+CAT           = @cat@
+RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
+
+## places to look for things
+PARROT_DYNEXT = $(BUILD_DIR)/runtime/parrot/dynext
+PGE_LIBRARY   = $(BUILD_DIR)/runtime/parrot/library/PGE
+PERL6GRAMMAR  = $(PGE_LIBRARY)/Perl6Grammar.pbc
+NQP           = $(BUILD_DIR)/compilers/nqp/nqp.pbc
+PCT           = $(BUILD_DIR)/runtime/parrot/library/PCT.pbc
+
+PMC_DIR       = src/pmc
+
+all: ncigen.pbc
+
+SOURCES = ncigen.pir \
+  src/gen_grammar.pir \
+  src/gen_actions.pir \
+  src/gen_builtins.pir \
+  src/NCIGENAST.pir \
+  src/NCIPIR.pir
+
+BUILTINS_PIR = \
+  src/builtins/say.pir \
+
+# PMCS = c
+# PMC_SOURCES = $(PMC_DIR)/c.pmc
+
+# the default target
+ncigen.pbc: $(PARROT) $(SOURCES)
+	$(PARROT) $(PARROT_ARGS) -o ncigen.pbc ncigen.pir
+
+src/gen_grammar.pir: $(PERL6GRAMMAR) src/parser/grammar.pg
+	$(PARROT) $(PARROT_ARGS) $(PERL6GRAMMAR) \
+	    --output=src/gen_grammar.pir \
+	    src/parser/grammar.pg
+
+src/gen_actions.pir: $(NQP) $(PCT) src/parser/actions.pm
+	$(PARROT) $(PARROT_ARGS) $(NQP) --output=src/gen_actions.pir \
+	    --target=pir src/parser/actions.pm
+
+src/gen_builtins.pir: $(BUILTINS_PIR)
+	$(CAT) $(BUILTINS_PIR) >src/gen_builtins.pir
+
+# This is a listing of all targets, that are meant to be called by users
+help:
+	@echo ""
+	@echo "Following targets are available for the user:"
+	@echo ""
+	@echo "  all:               ncigen.pbc"
+	@echo "                     This is the default."
+	@echo "Testing:"
+	@echo "  test:              Run the test suite."
+	@echo "  testclean:         Clean up test results."
+	@echo ""
+	@echo "Cleaning:"
+	@echo "  clean:             Basic cleaning up."
+	@echo "  realclean:         Removes also files generated by 'Configure.pl'"
+	@echo "  distclean:         Removes also anything built, in theory"
+	@echo ""
+	@echo "Misc:"
+	@echo "  help:              Print this help message."
+	@echo ""
+
+test: all
+	$(PERL) t/harness
+
+# this target has nothing to do
+testclean:
+
+CLEANUPS = \
+  ncigen.pbc \
+  src/gen_grammar.pir \
+  src/gen_actions.pir \
+  src/gen_builtins.pir \
+  $(PMC_DIR)/*.h \
+  $(PMC_DIR)/*.c \
+  $(PMC_DIR)/*.dump \
+  $(PMC_DIR)/*$(O) \
+  $(PMC_DIR)/*$(LOAD_EXT) \
+  $(PMC_DIR)/*.exp \
+  $(PMC_DIR)/*.ilk \
+  $(PMC_DIR)/*.manifest \
+  $(PMC_DIR)/*.pdb \
+  $(PMC_DIR)/*.lib \
+
+
+clean:
+	$(RM_RF) $(CLEANUPS)
+
+realclean: clean
+	$(RM_RF) Makefile
+
+distclean: realclean
+
+# Local variables:
+#   mode: makefile
+# End:
+# vim: ft=make:

Copied: branches/ops_pct/compilers/ncigen/lib/Parrot/Test/NCIGENAST.pm (from r44981, branches/ops_pct/compilers/ncigen/lib/Parrot/Test/NCIGENAST.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/lib/Parrot/Test/NCIGENAST.pm	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/lib/Parrot/Test/NCIGENAST.pm)
@@ -0,0 +1,167 @@
+# $Id$
+# Copyright (C) 2006-2008, Parrot Foundation.
+
+package Parrot::Test::NCIGENAST;
+
+
+use strict;
+use warnings;
+
+use Cwd;
+use File::Spec;
+use File::Basename;
+use Parrot::Test;
+use Data::Dumper;
+
+use Parrot::Config;
+
+require Exporter;
+require Test::Builder;
+require Test::More;
+
+our @EXPORT = qw( ast parse plan skip like istypedef ispointer decl_ident_is type_is is_builtin parse_failure parse_success contains);
+our @EXPORT_OK = qw();
+
+use base qw( Exporter );
+
+# Memoize functions with a fixed output
+# Memoize::memoize('path_to_parrot');
+#
+# # Tell parrot it's being tested--disables searching of installed libraries.
+# # (see Parrot_get_runtime_prefix in src/library.c).
+# $ENV{PARROT_TEST} = 1 unless defined $ENV{PARROT_TEST};
+#
+my $builder = Test::Builder->new();
+
+our $ME = new();
+$ME->{builder}        = $builder;
+$ME->{path_to_parrot} = Parrot::Test::path_to_parrot();
+$ME->{parrot}         = File::Spec->join( $ME->{path_to_parrot}, 'parrot' . $PConfig{exe} );
+our $results;
+
+
+sub import {
+    my ( $class, $plan, @args ) = @_;
+
+    $builder->plan( $plan, @args );
+
+    __PACKAGE__->export_to_level( 1, __PACKAGE__ );
+}
+
+*plan = \&Test::More::plan;
+*skip = \&Test::More::skip;
+
+=head1 Parrot::Test::C99
+
+Provide language specific testing routines here...
+
+This is currently alarmingly similar to the generated subs in Parrot::Test.
+Perhaps someone can do a better job of delegation here.
+
+=cut
+
+sub new {
+    return bless {};
+}
+
+sub ast {
+  my ( $code ) = @_;
+  $results = $ME->ncigenit($code, '--target=nci_ast');
+}
+
+sub parse {
+  my ( $code ) = @_;
+  $results = $ME->ncigenit($code, '--target=parse');
+}
+
+sub like {
+    return $ME->testit('like', @$results, @_);
+}
+
+sub istypedef {
+  return like( qr/NCIGENAST;TypeDef/, @_);
+}
+sub ispointer {
+  return like( qr/<pointer> => 1/, @_);
+}
+
+sub decl_ident_is {
+  my $id = shift @_;
+  return like( qr/<name> => \"$id/, @_);
+}
+sub type_is {
+  my $id = shift @_;
+  return like( qr/<type> => \"$id/, @_);
+}
+sub is_builtin{
+  return like( qr/<builtin_type> => 1/, @_);
+}
+
+sub contains {
+  my $it = shift @_;
+  return like( qr/$it/, @_);
+}
+
+sub parse_failure {
+  $ME->{builder}->ok( $results->[3] == 1, @_ );
+}
+
+sub parse_success {
+  my $code = shift @_;
+  $results = $ME->ncigenit($code, '--target=parse');
+  $ME->{builder}->ok( $results->[3] == 0, @_ );
+}
+
+sub ncigenit {
+    my ( $self, $code, $ncigenargs ) = @_;
+
+    my $count = $self->{builder}->current_test + 1;
+    my $parrotdir       = dirname $self->{parrot};
+
+    my @fns = map { File::Spec->rel2abs( Parrot::Test::per_test( $_, $count ) ) } ( '.c', '.out' );
+    my ( $lang_f, $out_f ) = @fns;
+
+    Parrot::Test::write_code_to_file( $code, $lang_f );
+
+    my $args = $ENV{TEST_PROG_ARGS} || '';
+
+    my $cmd       = "$self->{parrot} $args $parrotdir/compilers/ncigen/ncigen.pbc $ncigenargs $lang_f";
+    my $exit_code = Parrot::Test::run_command(
+            $cmd,
+            CD     => $self->{relpath},
+            STDOUT => $out_f,
+            STDERR => $out_f
+            );
+    my $output = Parrot::Test::slurp_file($out_f);
+
+    unless ( $ENV{POSTMORTEM} ) {
+        unlink $lang_f;
+        unlink $out_f;
+    }
+
+    my @results = ($code, $cmd, $output, $exit_code, $count);
+    wantarray ? return @results : return [ @results ];
+}
+
+sub testit {
+    my ( $self, $method, $code, $cmd, $output, $exit_code, $count, $expected, $desc ) = @_;
+    #print "$cmd, $exit_code, $count, $expected, $desc \n";
+
+    $desc = "NCIGENAST Test $count" unless $desc;
+    my $pass = $self->{builder}->$method( $output, $expected, $desc );
+    if ($exit_code or not $pass)  {
+      $self->{builder}->diag("'$cmd' failed with exit code $exit_code") if $exit_code or not $pass;
+      $self->{builder}->diag("CODE:\n$code"."CODE");
+    }
+
+    return $pass;
+}
+
+1;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/ops_pct/compilers/ncigen/ncigen.pir (from r44981, branches/ops_pct/compilers/ncigen/ncigen.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/ncigen.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/ncigen.pir)
@@ -0,0 +1,138 @@
+# $Id$
+# Copyright (C) 2008, Parrot Foundation.
+
+=head1 TITLE
+
+ncigen.pir - A NCI stub compiler.
+
+=head2 Description
+
+This is the base file for the NCI stub compiler.
+
+This file includes the parsing and grammar rules from
+the src/ directory, loads the relevant PGE libraries,
+and registers the compiler under the name 'NCIGEN'.
+
+=head2 Functions
+
+=over 4
+
+=item onload()
+
+Creates the C compiler using a C<PCT::HLLCompiler>
+object.
+
+=cut
+
+.namespace [ 'NCIGEN';'Compiler' ]
+
+.loadlib 'ncigen_group'
+
+.sub 'onload' :anon :load :init
+    load_bytecode 'PCT.pbc'
+
+    .local pmc p6meta
+    p6meta = new 'P6metaclass'
+    p6meta.'new_class'('NCIGEN::Compiler', 'parent'=>'PCT::HLLCompiler')
+.end
+
+=item main(args :slurpy)  :main
+
+Start compilation by passing any command line C<args>
+to the C compiler.
+
+=cut
+
+.sub 'init' :vtable :method
+    self.'language'('NCIGEN')
+    self.'parsegrammar'('C99::Grammar')
+    self.'parseactions'('NCIGEN::Grammar::Actions')
+    $P0 = split ' ', 'parse nci_ast gen_nci_pir'
+    setattribute self, '@stages', $P0
+    $P0 = split ' ', 'e=s help|h target=s trace|t=s encoding=s output|o=s combine version|v libname|l=s nsname|n=s raw|r'
+    setattribute self, '@cmdoptions', $P0
+
+    ##  set the $usage attribute
+    $P0 = new 'String'
+    $P0 = <<'USAGE'
+Usage: ncigen [switches] [--] [preprocessedfile] [arguments]
+  -l, --libname        library to load symbols from
+  -n  --nsname         pir namepsace to place symbols into
+  -r  --raw            dump dlfunc pir statements only
+
+Standard HLLCompiler Options:
+  -e program           one line of program
+  -h, --help           display this help text
+  --target=[stage]     specify compilation stage to emit
+  -t, --trace=[flags]  enable trace flags
+  --encoding=[mode]    specify string encoding mode
+  -o, --output=[name]  specify name of output file
+  -v, --version        display version information
+USAGE
+    setattribute self, '$usage', $P0
+.end
+
+.sub 'main' :main
+    .param pmc args
+    $P0 = compreg 'NCIGEN'
+    $P2 = $P0.'command_line'(args)
+.end
+
+.namespace [ 'PCT';'HLLCompiler' ]
+
+.sub 'nci_ast' :method
+    .param pmc source
+    .param pmc adverbs         :slurpy :named
+
+  compile_match:
+    push_eh err_past
+    .local pmc ast
+    ast = source.'item'()
+    pop_eh
+    $I0 = isa ast, ['NCIGENAST';'Decls']
+    unless $I0 goto err_past
+    .return (ast)
+
+  err_past:
+    $S0 = typeof source
+    .tailcall self.'panic'('Unable to obtain NCIGENAST from ', $S0)
+.end
+
+.sub 'gen_nci_pir' :method
+    .param pmc source
+    .param pmc adverbs         :slurpy :named
+
+    $P0 = compreg 'NCIPIR'
+    $P1 = $P0.'to_pir'(source, adverbs :flat :named)
+    say $P1
+    .return ($P1)
+.end
+
+
+.include 'src/NCIGENAST.pir'
+.include 'src/NCIPIR.pir'
+.include 'src/gen_builtins.pir'
+.include 'src/gen_grammar.pir'
+.include 'src/gen_actions.pir'
+
+
+.namespace [ 'C99';'Grammar' ]
+
+.sub 'debug'
+    .param pmc match
+    .param pmc arg
+    .param pmc attrs :slurpy
+    printerr arg
+    printerr "\n"
+.end
+
+=back
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+

Copied: branches/ops_pct/compilers/ncigen/ncigen.pl (from r44981, branches/ops_pct/compilers/ncigen/ncigen.pl)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/ncigen.pl	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/ncigen.pl)
@@ -0,0 +1,102 @@
+#! perl
+# Copyright (C) 2008, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use Getopt::Long;
+use Pod::Usage;
+use File::Temp;
+use File::Spec;
+use IPC::Run3;
+
+my $man = 0;
+my $help = 0;
+my $PARROT = "../../parrot";
+my ($incpaths,$libname,$nsname);
+
+GetOptions('help|?'   => \$help,
+            man       => \$man,
+            libname   => \$libname,
+            nsname    => \$nsname,
+            "I=s@"    => \$incpaths) or pod2usage(2);
+pod2usage(1) if $help;
+pod2usage(-exitstatus => 0, -verbose => 2) if $man;
+
+#sub usage()
+
+sub cc_preprocess {
+  my ($file) = @_;
+  my ($volume, $directories, $fileonly) = File::Spec->splitpath( $file );
+  print "$fileonly\n";
+
+  my $ofile = mktemp( $fileonly . "_XXXX");
+  #execit("gcc -x c -fdirectives-only -E $file > $ofile");
+  execit("gcc -x c -E $file > $ofile");
+  return $ofile;
+}
+
+sub gen_NCI_signatures {
+  my ( $file, $more_args ) = @_;
+  return execit("make; $PARROT ncigen.pbc $more_args $file");
+}
+
+sub execit {
+  my ($cmd) = @_;
+  print "$cmd\n";
+  my $output = `$cmd`;
+  return $output;
+}
+
+sub main {
+  my $more_args = "";
+  $ARGV[0] = 't/spi.c' unless $ARGV[0];
+  $libname = "libexamplelib"      unless $libname;
+  $nsname  = "CLIB::examplelib"   unless $nsname;
+
+  #$more_args = "--target=parse --libname=fred --nsname=GO::Mojo";
+  $more_args = "--libname=$libname --nsname=$nsname";
+  my $preproc_fn = cc_preprocess($ARGV[0]);
+
+  my $nci_sigs = gen_NCI_signatures($preproc_fn, $more_args);
+  unlink($preproc_fn);
+  print $nci_sigs;
+}
+
+main();
+
+__END__
+
+=head1 NAME
+
+sample - Using nci_gen.pl
+
+=head1 SYNOPSIS
+
+nci_gen [options] [file ...]
+
+Options:
+-help            brief help message
+-man             full documentation
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<-help>
+
+Print a brief help message and exits.
+
+=item B<-man>
+
+Prints the manual page and exits.
+
+=back
+
+=head1 DESCRIPTION
+
+B<nci_gen> will read the given input file c header file and create a pir interface file.
+
+=cut
+

Copied: branches/ops_pct/compilers/ncigen/src/NCIGENAST.pir (from r44981, branches/ops_pct/compilers/ncigen/src/NCIGENAST.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/src/NCIGENAST.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/src/NCIGENAST.pir)
@@ -0,0 +1,332 @@
+# $Id$
+
+=head1 NAME
+
+NCIGENAST - NCIGEN abstract syntax tree
+
+=head1 DESCRIPTION
+
+This file implements the various abstract syntax tree nodes
+for doing syntax analysis on c99 programs.
+
+=cut
+
+.namespace [ 'NCIGENAST';'Node' ]
+
+.sub 'onload' :anon :load :init
+    ##   create the NCIGENAST::Node base class
+    .local pmc p6meta, base, vardecl
+    p6meta = new 'P6metaclass'
+    base = p6meta.'new_class'('NCIGENAST::Node', 'parent'=>'PCT::Node')
+
+    vardecl = p6meta.'new_class'('NCIGENAST::VarDecl', 'parent'=>base)
+    p6meta.'new_class'('NCIGENAST::Decls',     'parent'=>base)
+
+    p6meta.'new_class'('NCIGENAST::TypeDef',   'parent'=>vardecl)
+    p6meta.'new_class'('NCIGENAST::FuncDecl',  'parent'=>vardecl)
+    p6meta.'new_class'('NCIGENAST::Param',     'parent'=>vardecl)
+    p6meta.'new_class'('NCIGENAST::Struct',    'parent'=>vardecl)
+    p6meta.'new_class'('NCIGENAST::Union',     'parent'=>vardecl)
+
+    .return ()
+.end
+
+.sub 'clone' :method
+    $P0 = clone self
+    .return ($P0)
+.end
+
+.sub 'item' :method
+    .return (self)
+.end
+
+=head1 NCIGENAST Node types
+
+=head2 NCIGENAST::Node
+
+C<NCIGENAST::Node> is the base class for all NCIGENAST nodes, and is
+derived from PCT::Node.  A node has an array component to
+hold its children, and a hash component for its attributes.
+However, we tend to use accessor methods for accessing the node's
+attributes instead of accessing the hash directly.
+
+Every NCIGENAST node inherits C<name>, C<source>, and C<pos> attributes
+from C<PCT::Node>.  The C<name> attribute is the node's name, if
+any, while C<source> and C<pos> are used to identify the location
+in the original source code for the node.  The C<source> and C<pos>
+values are generally set by the C<node> method inherited from
+C<PCT::Node>.
+
+Other node attributes are generally defined by subclasses of C<NCIGENAST::Node>.
+
+=over 4
+
+=item returns([value])
+
+Accessor method -- sets/returns the return type for the invocant.
+
+=cut
+
+.sub 'returns' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('returns', value, has_value)
+.end
+
+
+=item arity([value])
+
+Accessor method -- sets/returns the arity (number of expected arguments)
+for the node.
+
+=cut
+
+.sub 'arity' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('arity', value, has_value)
+.end
+
+
+=item named([value])
+
+Accessor method -- for named arguments, sets/returns the name to be
+associated with the argument.
+
+=cut
+
+.sub 'named' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('named', value, has_value)
+.end
+
+
+=item flat([value]
+
+Accessor method -- sets/returns the "flatten" flag on arguments.
+
+=cut
+
+.sub 'flat' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('flat', value, has_value)
+.end
+
+
+=back
+
+=head2 NCIGENAST::TypeDef
+
+C<NCIGENAST::Val> nodes represent constant values in the abstract
+syntax tree.  The C<name> attribute represents the value of the
+node.
+
+=over 4
+
+=item value([value])
+
+Get/set the constant value for this node.
+
+=cut
+
+.namespace [ 'NCIGENAST';'TypeDef' ]
+
+.sub 'value' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('value', value, has_value)
+.end
+
+=back
+
+=head2 NCIGENAST::Var
+
+C<NCIGENAST::Var> nodes represent variables within the abstract
+syntax tree.  The variable name (if any) is given as the node's
+C<name> attribute.
+
+=over 4
+
+=item scope([value])
+
+Get/set the NCIGENAST::Var node's "scope" (i.e., how the variable
+is accessed or set).  Allowable values include "package", "lexical",
+"parameter", and "keyed", representing HLL global, lexical, block
+parameter, and array/hash variables respectively.
+
+=cut
+
+.namespace [ 'NCIGENAST';'VarDecl' ]
+
+.sub 'source' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('source', value, has_value)
+.end
+
+.sub 'type' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('type', value, has_value)
+.end
+
+.sub 'extern' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('extern', value, has_value)
+.end
+
+.sub 'pointer' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('pointer', value, has_value)
+.end
+
+.sub 'builtin_type' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('builtin_type', value, has_value)
+.end
+
+.sub 'complex' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('complex', value, has_value)
+.end
+
+.sub 'primitive_type' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('primitive_type', value, has_value)
+.end
+
+.sub 'pointer_cnt' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('pointer_cnt', value, has_value)
+.end
+
+.sub 'scope' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('scope', value, has_value)
+.end
+
+
+=item isdecl([flag])
+
+Get/set the node's C<isdecl> attribute (for lexical variables) to C<flag>.
+A true value of C<isdecl> indicates that the variable given by
+this node is to be created within the current lexical scope.
+Otherwise, the node refers to a lexical variable from an outer scope.
+
+=cut
+
+.sub 'isdecl' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('isdecl', value, has_value)
+.end
+
+
+=item lvalue([flag])
+
+Get/set the C<lvalue> attribute, which indicates whether this
+variable is being used in an lvalue context.
+
+=cut
+
+.sub 'lvalue' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('lvalue', value, has_value)
+.end
+
+
+=item namespace([namespace])
+
+Get/set the variable's namespace attribute to the array of strings
+given by C<namespace>.  Useful only for variables with a C<scope>
+of 'package'.
+
+=cut
+
+.sub 'namespace' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('namespace', value, has_value)
+.end
+
+
+=item slurpy([flag])
+
+Get/set the node's C<slurpy> attribute (for parameter variables) to C<flag>.
+A true value of C<slurpy> indicates that the parameter variable given by this
+node is to be created as a slurpy parameter (consuming all remaining arguments
+passed in).
+
+=cut
+
+.sub 'slurpy' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('slurpy', value, has_value)
+.end
+
+
+=item viviself([type])
+
+If the variable needs to be instantiated, then C<type> indicates
+either the type of the value to create for the node or (future
+implementation) a NCIGENAST tree to create the value.
+
+=cut
+
+.sub 'viviself' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('viviself', value, has_value)
+.end
+
+
+=item vivibase([type])
+
+For keyed nodes, C<type> indicates the type of aggregate to
+create for the base if the base doesn't specify its own 'viviself'
+attribute.
+
+=cut
+
+.sub 'vivibase' :method
+    .param pmc value           :optional
+    .param int has_value       :opt_flag
+    .tailcall self.'attr'('vivibase', value, has_value)
+.end
+
+
+=back
+
+=head2 NCIGENAST::Op
+
+C<NCIGENAST::Op> nodes represent the operations in an abstract syntax
+tree.  The primary function of the node is given by its C<pasttype>,
+secondary functions may be given by the node's C<name>, C<pirop>,
+or other attributes.
+
+
+=head1 HISTORY
+
+
+=head1 COPYRIGHT
+
+Copyright (C) 2006-2008, Parrot Foundation.
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/ncigen/src/NCIPIR.pir (from r44981, branches/ops_pct/compilers/ncigen/src/NCIPIR.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/src/NCIPIR.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/src/NCIPIR.pir)
@@ -0,0 +1,367 @@
+# $Id$
+
+=head1 NAME
+
+NCIPIR::Compiler - NCI PIR Compiler for NCIGENAST trees.
+
+=head1 DESCRIPTION
+
+NCIPIR::Compiler defines a compiler that converts a NCIGENAST tree into PIR
+
+=head1 METHODS
+
+=over
+
+=cut
+
+.namespace [ 'NCIPIR';'Compiler' ]
+
+.sub '__onload' :load :init
+    .local pmc p6meta, cproto
+    p6meta = new 'P6metaclass'
+    cproto = p6meta.'new_class'('NCIPIR::Compiler', 'parent'=>'PCT::HLLCompiler', 'attr'=>'$!code')
+    cproto.'language'('NCIPIR')
+    $P1 = split ' ', 'pir evalpmc'
+    cproto.'stages'($P1)
+
+    $P0 = new 'String'
+    set_global '$?NAMESPACE', $P0
+    .return ()
+.end
+
+
+.sub 'to_pir' :method
+    .param pmc ast
+    .param pmc adverbs         :slurpy :named
+
+    .local pmc newself
+    newself = new ['NCIPIR';'Compiler']
+
+    ##  start with empty code
+    .local pmc code
+    code = new 'CodeString'
+    newself.'code'(code)
+
+    ##  if the root node isn't a Sub, wrap it
+    $I0 = isa ast, ['NCIGENAST';'Decls']
+    if $I0 goto have_sub
+    $P0 = get_hll_global ['NCIGENAST'], 'Decls'
+    ast = $P0.'new'(ast, 'name'=>'anon')
+  have_sub:
+
+    .local string raw
+
+    raw = adverbs['raw']
+    if raw goto Lgenpir
+    $P0 = newself.'gen_preamble'(adverbs :flat :named)
+  Lgenpir:
+    ##  now generate the pir
+    newself.'pir'(ast)
+
+    ##  and return whatever code was generated
+    .tailcall newself.'code'()
+.end
+
+.sub 'gen_preamble' :method
+    .param pmc adverbs         :slurpy :named
+    .local string nsname
+    .local string libname
+    .local string fmt
+
+    nsname = adverbs['nsname']
+    libname = adverbs['libname']
+
+fmt = <<'FMT'
+.namespace ['%n']
+.sub __load_lib_dlfunc_init__ :anon :init :load
+FMT
+
+    .local pmc code
+    code = new 'CodeString'
+    code.'emit'(fmt, 'n'=>nsname)
+    if null libname goto LNOLIBNAME
+fmt = <<'FMT'
+loadlib $P1, '%l'
+if $P1 goto has_lib
+FMT
+    goto LEMITLIBNAME
+  LNOLIBNAME:
+fmt = <<'FMT'
+$P1 = null
+goto has_lib
+FMT
+  LEMITLIBNAME:
+    code.'emit'(fmt, 'l'=>libname)
+
+
+fmt = <<'FMT'
+$P2 = new 'Exception'
+$P2[0] = 'error loading %l - loadlib failed'
+throw $P2
+has_lib:
+FMT
+    code.'emit'(fmt, 'l'=>libname)
+    $P0 = self.'code'()
+    $P0 .= code
+    .return(code)
+.end
+
+
+=item code([str])
+
+Get/set the code generated by this compiler.
+
+=cut
+
+.sub 'code' :method
+    .param pmc code            :optional
+    .param int has_code        :opt_flag
+
+    if has_code goto set_code
+    code = getattribute self, '$!code'
+    .return (code)
+  set_code:
+    setattribute self, '$!code', code
+    .return (code)
+.end
+
+
+=item pir_children(node)
+
+Return generated PIR for C<node> and all of its children.
+
+=cut
+
+.sub 'pir_children' :method
+    .param pmc node
+    .local pmc code, it
+    code = new 'CodeString'
+    it   = iter node
+  iter_loop:
+    unless it goto iter_end
+    .local string key
+    .local pmc cast
+    key = shift it
+    cast = node[key]
+    $P0 = self.'pir'(cast)
+    code .= $P0
+    goto iter_loop
+  iter_end:
+    .return (code)
+.end
+
+
+=item pir(Any node)
+
+Return generated pir for any POST::Node.  Returns
+the generated pir of C<node>'s children.
+
+=cut
+
+.sub 'pir' :method :multi(_,_)
+    .param pmc node
+    .local string code
+    code = self.'pir_children'(node)
+    $P0 = self.'code'()
+    $P0 .= code
+    .return ($P0)
+.end
+
+
+=item pir(POST::Op node)
+
+Return pir for an operation node.
+
+=cut
+
+.sub 'pir' :method :multi(_,['NCIGENAST';'FuncDecl'])
+    .param pmc node
+
+    ##  get list of arguments to operation
+    .local pmc arglist
+    arglist = node.'list'()
+
+    .local string fmt, name, type
+    type = param_to_code(node, 1)
+
+    .local pmc itera
+    .local pmc param
+    iter itera, arglist
+    LIS:
+    unless itera, LI0
+    param = shift itera
+    $S0 = param_to_code(param)
+    #say $S0
+    type .= $S0
+    goto LIS
+
+    LI0:
+    name = node.'name'()
+    fmt = "dlfunc $P2, $P1, '%n', '%s'\nstore_global '%n', $P2"
+
+    #$S0 = "##"
+    #$S1 = node.'attr'('source', '', 0)
+    #$S0 .= $S1
+    #print $S0
+
+    .local pmc code
+    code = new 'CodeString'
+    code.'emit'(fmt, 's'=>type, 'n'=>name)
+    #$S0 = code
+    #say $S0
+
+    .return (code)
+.end
+
+.sub 'param_to_code'
+  .param pmc node
+  .param int returncode :optional
+  $I0 = node.'pointer'()
+  $I2 = node.'pointer_cnt'()
+  $S0 = node.'primitive_type'()
+
+
+  if $I0, LPOINTER
+
+  iseq $I1, $S0, 'void'
+  unless $I1, LL2
+  if returncode, LL11
+    .return("")
+  LL11:
+    .return("v")
+  LL2:
+  iseq $I1, $S0, 'int'
+  unless $I1, LL3
+    .return("i")
+  LL3:
+  iseq $I1, $S0, 'long'
+  unless $I1, LL4
+    .return("l")
+  LL4:
+  iseq $I1, $S0, 'char'
+  unless $I1, LL5
+    .return("c")
+  LL5:
+  iseq $I1, $S0, 'short'
+  unless $I1, LL6
+    .return("s")
+  LL6:
+    .return("p")
+
+  LPOINTER:
+  isgt $I3, $I2, 1
+  if $I3, LL18 # pointer_cnt > 1
+
+  iseq $I1, $S0, 'void' #void *
+  unless $I1, LL7
+  if returncode, LL111
+    .return("p")
+  LL111:
+    .return("p")
+#    .return("V") #probably should be this
+  LL7:
+  iseq $I1, $S0, 'char' #char *
+  unless $I1, LL8
+    .return("t")
+  LL8:
+  iseq $I1, $S0, 'int' #int *
+  unless $I1, LL13
+    .return("V")
+  LL13:
+  iseq $I1, $S0, 'long' #long *
+  unless $I1, LL14
+    .return("V")
+  LL14:
+  iseq $I1, $S0, 'short' #short *
+  unless $I1, LL15
+    .return("V")
+  LL15: #struct *, typedef *,
+    say "ERROR"
+    say $S0
+    say "what is this"
+    .return("p")
+
+#something **
+  LL18:
+    .return("V")
+.end
+
+=item pir(POST::Label node)
+
+Generate a label.
+
+=cut
+
+.sub 'pir' :method :multi(_, ['NCIGENAST';'TypeDef'])
+    .param pmc node
+    .return ('')
+    .tailcall pir_dump(node)
+.end
+
+=item pir(POST::Label node)
+
+Generate a label.
+
+=cut
+
+.sub 'pir' :method :multi(_, ['NCIGENAST';'VarDecl'])
+    .param pmc node
+    .return ('')
+    .tailcall pir_dump(node)
+.end
+
+=item pir(POST::Label node)
+
+Generate a label.
+
+=cut
+
+.sub 'pir_dump'
+    .param pmc node
+    .local string code
+    code = '#'
+    code .= 'typedef '
+    $S0 = node.'type'()
+    code .= $S0
+    code .= ' '
+    $S0 = node.'name'()
+    code .= $S0
+    $S0 = node.'builtin_type'()
+    unless $S0 goto LN1
+    code .= ' builtin '
+    code .= $S0
+  LN1:
+    $S0 = node.'pointer'()
+    unless $S0 goto LN2
+    code .= ' pointer '
+    code .= $S0
+  LN2:
+    code .= ":\n"
+    print code
+    .return ('')
+.end
+
+
+=back
+
+=head1 AUTHOR
+
+Patrick Michaud <pmichaud at pobox.com> is the author and maintainer.
+Please send patches and suggestions to the Parrot porters or
+Perl 6 compilers mailing lists.
+
+=head1 HISTORY
+
+2007-11-21  Significant refactor as part of Parrot Compiler Toolkit
+
+=head1 COPYRIGHT
+
+Copyright (C) 2006-2008, Parrot Foundation.
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/ncigen/src/builtins/say.pir (from r44981, branches/ops_pct/compilers/ncigen/src/builtins/say.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/src/builtins/say.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/src/builtins/say.pir)
@@ -0,0 +1,85 @@
+# Copyright (C) 2008-2009, Parrot Foundation.
+# $Id$
+
+=head1
+
+say.pir -- simple implementation of a say function
+
+=cut
+
+.namespace []
+
+.sub 'say'
+    .param pmc args            :slurpy
+    .local pmc it
+    it = iter args
+  iter_loop:
+    unless it goto iter_end
+    $P0 = shift it
+    print $P0
+    goto iter_loop
+  iter_end:
+    print "\n"
+    .return ()
+.end
+
+.sub 'printf'
+    .param pmc format
+    .param pmc args   :slurpy
+    .local pmc it
+    it = iter args
+  iter_loop:
+    unless it goto iter_end
+    $P0 = shift it
+    print $P0
+    goto iter_loop
+  iter_end:
+.end
+
+.sub 'puts'
+    .param pmc str
+    print str
+    print "\n"
+.end
+
+.sub 'infix:<'
+    .param pmc a
+    .param pmc b
+    islt $I0, a, b
+    .return ($I0)
+.end
+
+.sub 'postfix:++'
+    .param pmc arg
+    $P0 = clone arg
+    inc $P0
+    .return (arg)
+.end
+
+.sub 'postfix:--'
+    .param pmc arg
+    $P0 = clone arg
+    dec $P0
+    .return (arg)
+.end
+
+.sub 'prefix:++'
+    .param pmc arg
+    inc arg
+    .return (arg)
+.end
+
+.sub 'prefix:--'
+    .param pmc arg
+    dec arg
+    .return (arg)
+.end
+
+
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+

Copied: branches/ops_pct/compilers/ncigen/src/parser/actions.pm (from r44981, branches/ops_pct/compilers/ncigen/src/parser/actions.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/src/parser/actions.pm	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/src/parser/actions.pm)
@@ -0,0 +1,261 @@
+# $Id$
+# Copyright (C) 2008, Parrot Foundation.
+
+=begin comments
+
+NCIGEN::Grammar::Actions - ast transformations for NCIGEN
+
+This file contains the methods that are used by the parse grammar
+to build the PAST representation of an C program.
+Each method below corresponds to a rule in F<src/parser/grammar.pg>,
+and is invoked at the point where C<{*}> appears in the rule,
+with the current match object as the first argument.  If the
+line containing C<{*}> also has a C<#= key> comment, then the
+value of the comment is passed as the second argument to the method.
+
+=end comments
+
+
+class NCIGEN::Grammar::Actions;
+
+our $decls := NCIGENAST::Decls.new();
+our $NCIGENDEBUG :=0;
+
+method TOP($/) {
+    if $NCIGENDEBUG { _dumper($decls); }
+    make $decls;
+}
+
+sub parse_decl_specs($/, $ast) {
+    if $/ {
+        for $/ {
+            $ast.attr( strip_spaces(~$_), 1, 1);
+        }
+    }
+}
+
+sub typedef($/) {
+    if $/ {
+        for $/ {
+            if ('typedef' eq strip_spaces(~$_) ) { return 1; }
+        }
+    }
+    return 0;
+}
+
+method declaration($/) {
+    my $ast := NCIGENAST::VarDecl.new() ;
+    my $type := "";
+
+#    say("=================================================================================================");
+#    _dumper($/);
+#    make $decls;
+#    return 1;
+    my $decl_specs := $<declaration_specifiers><repeatable_declaration_specifiers>;
+    if typedef($decl_specs) {
+        $ast := NCIGENAST::TypeDef.new( );
+        $type := "TypeDef";
+    }
+    elsif $/<init_declarator><init_declarator><declarator><direct_declarator><declarator_suffix><declarator_suffix><parameter_type_list> {
+        $ast := NCIGENAST::FuncDecl.new( );
+        $type := "FuncDecl";
+    }
+#    elsif $<declaration_specifiers><type_specifier><type> {
+#        $ast := NCIGENAST::Struct.new( :node($/) );
+#        $type := "Struct";
+#    }
+    else {
+        $ast := NCIGENAST::VarDecl.new( );
+        $type := "VarDecl";
+    }
+    parse_decl_specs( $<declaration_specifiers><repeatable_declaration_specifiers>, $ast );
+
+    #  TYPE
+    settype($<declaration_specifiers><type_specifier>, $ast);
+
+    if ($type eq "FuncDecl") {
+        if (+$<init_declarator> != 1) {
+            say("ERROR FuncDecl has more than one <init_declarator>");
+        }
+
+        #assert(+$<init_declarator><declarator><direct_declarator><declarator_suffix>  == 1);
+        my $params := $<init_declarator><declarator><declarator><direct_declarator><declarator_suffix><parameter_type_list><parameter_type_list><parameter_list><parameter_declaration>;
+        for $params {
+            my $param := NCIGENAST::Param.new( );
+
+            settype($_<declaration_specifiers><type_specifier>, $param);
+            my $param_ident := $_<declarator>;
+            if $param_ident { setname( $_, $param ); }
+            ispointer($_, $param);
+            $ast.push( $param );
+        }
+        my $declarator := $<init_declarator><declarator>;
+        my $name := setname($declarator, $ast);
+        $decls{ $name } := $ast;
+        ispointer($declarator, $ast);
+        #if $NCIGENDEBUG { _dumper($ast); }
+        #say($name);
+    }
+    #elsif ($type eq "VarDecl") {
+    #elsif $<init_declarator> {
+    else {
+        for $<init_declarator> {
+            my $l_ast := $ast.clone();
+
+            my $name := setname($_, $l_ast);
+            $decls{ $name } := $l_ast;
+            ispointer($_, $l_ast);
+            #if $NCIGENDEBUG { _dumper($l_ast); }
+            #say($name);
+        }
+    }
+    #else {
+    #    say("OPAQUE STRUCT OR UNTION");
+    #    _dumper($/);
+    #}
+
+    make $decls;
+}
+
+sub countpointer($/) {
+    if $<pointer> {
+        return countpointer($<pointer>) + 1;
+    }
+    else {
+        return 0;
+    }
+}
+
+sub ispointer($/, $ast) {
+    if $/ {
+        if ($<declarator><pointer>)  {
+            $ast.pointer(1);
+            $ast.pointer_cnt(countpointer($<declarator><pointer>));
+        }
+        if ($<abstract_declarator><pointer>)  {
+            $ast.pointer(1);
+            $ast.pointer_cnt(countpointer($<abstract_declarator><pointer>));
+        }
+    }
+
+    my $lookup_ast := $ast;
+    repeat {
+=begin comment
+        if $lookup_ast.pointer() {
+            $ast.pointer(1);
+            my $pc := +$ast.pointer_cnt();
+            $pc++;
+            $ast.pointer_cnt($pc);
+        }
+=end comment
+
+        if $lookup_ast.builtin_type() {
+            $ast.primitive_type(~($lookup_ast.type()));
+            return 1;
+        }
+        my $type_name := $lookup_ast.type();
+        my $lookup_ast_name := $lookup_ast.name();
+
+        #FIXME struct or union typedef
+        if ($lookup_ast.name() eq $type_name) {
+            return 1;
+        }
+
+        $lookup_ast := $decls{$type_name};
+        unless $lookup_ast {
+            #say("Parent " ~~ $lookup_ast_name ~~ " " ~~ $type_name ~~ " not defined");
+            return 1;
+        }
+        if $lookup_ast.pointer() {
+            $ast.pointer(1);
+            my $pc := +$ast.pointer_cnt();
+            $pc := $pc + $lookup_ast.pointer_cnt();
+            $ast.pointer_cnt($pc);
+        }
+    } while (1);
+    #_dumper($ast);
+}
+
+sub settype($/, $ast) {
+    if $/ {
+        #is it a struct or union
+        my $struct_or_union := strip_spaces(~$<type>);
+        if $struct_or_union {
+            my $ident := $<struct_or_union_specifier><identifier><identifier>;
+            if $ident {
+                $ident := strip_spaces(~$ident);
+            }
+            else {
+                $ident := $<struct_or_union_specifier><identifier>;
+                if $ident {
+                    $ident := strip_spaces(~$ident);
+                }
+                else {
+                    $ident := "anonymous_" ~~ $struct_or_union~~ "1";
+                }
+            }
+            $ast.type($ident);
+            my $s_or_u := $<struct_or_union_specifier><struct_declaration>;
+            if $s_or_u {
+                my $su;
+                if ($struct_or_union eq "struct" ) {
+                    $su := NCIGENAST::Struct.new( );
+                }
+                else {
+                    $su := NCIGENAST::Union.new( );
+                }
+                $su.name($ident);
+                build_struct_or_union($s_or_u, $su);
+                $ast.complex($su);
+            }
+        }
+        else {
+            $ast.type(strip_spaces(~$/));
+            #  BUILTIN_TYPE
+            if $<builtin_type> { $ast.builtin_type(1); }
+        }
+    }
+    else {
+        say("ERROR no type specifier");
+    }
+}
+
+sub strip_spaces($_) {
+    $_.replace(' ', '');
+    return $_;
+}
+
+sub build_struct_or_union($/, $ast) {
+    for $/ {
+        my $smt := NCIGENAST::VarDecl.new( );
+        settype( $_<specifier_qualifier_list><type_specifier>, $smt );
+        for $_<struct_declarator_list> {
+            my $sm := $smt.clone();
+            my $declarator := $_<struct_declarator><declarator>;
+            $sm.name(strip_spaces(~$declarator));
+            ispointer($declarator, $sm);
+            $ast.push($sm);
+        }
+    }
+}
+
+sub setname($/, $ast) {
+    my $name_node := $<declarator><direct_declarator><declarator_prefix>;
+    if $name_node {
+        $ast.name( ~$name_node );
+        return ~$name_node;
+    }
+    else {
+        say("ERROR node doesn't have <direct_declarator><declarator_prefix>");
+        _dumper($/);
+    }
+}
+
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 syntax=perl6:
+

Copied: branches/ops_pct/compilers/ncigen/src/parser/grammar.pg (from r44981, branches/ops_pct/compilers/ncigen/src/parser/grammar.pg)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/src/parser/grammar.pg	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/src/parser/grammar.pg)
@@ -0,0 +1,775 @@
+# $Id$
+# Copyright (C) 2008, Parrot Foundation.
+
+=begin overview
+
+This is the grammar for C99 written as a sequence of Perl 6 rules.
+
+
+taken from n869.pdf
+google for n869.pdf
+http://std.dkuug.dk/JTC1/SC22/WG14/www/docs/n869/n869.pdf.gz
+
+=end overview
+
+grammar C99::Grammar is PCT::Grammar;
+
+## A.2.4 External definitions
+##
+## {{ _dumper(match) }}
+
+token TOP {
+    ^
+    <external_declaration>+
+    [ $ || <.panic: Syntax error> ]
+    {*}
+}
+
+rule external_declaration {
+    | <declaration> {*}                                   #= declaration
+    | <function_definition> {*}                           #= function_definition
+#    <declaration_specifiers>
+#    [
+#    | <declaration2>
+#    | <func_decl2>
+#    ]
+}
+
+rule func_decl2 {
+    <declarator>
+    <declaration>*
+    <compound_statement>
+    {*}
+}
+
+rule declaration2 {
+    [ <init_declarator> [',' <init_declarator>]* ]?
+    ';'
+    {*}
+}
+
+rule function_definition {
+    <declaration_specifiers>
+    <declarator>
+    <declaration>*
+    <compound_statement>
+    {*}
+}
+
+
+## A.2.2
+##
+
+rule declaration {
+    <declaration_specifiers>
+    [ <init_declarator> [',' <init_declarator>]* ]?
+    ';'
+    {*}
+}
+
+rule declaration_specifiers {
+    <repeatable_declaration_specifiers>*
+    <type_specifier>
+    <repeatable_declaration_specifiers>*
+    {*}
+}
+#rule declaration_specifiers_orig { [ <storage_class_specifier> | <type_specifier> | <type_qualifier> | <function_specifier> ]+ {*} }
+#rule declaration_specifiers { [ <declaration_specifiers_inside> ]+ {*} }
+#rule declaration_specifiers_inside { [ <storage_class_specifier> | <type_specifier> | <type_qualifier> | <function_specifier> ] {{ _dumper(match) }} }
+token builtin_type_specifier { 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | '_Bool' | '_Complex' | '_Imaginary' }
+
+
+rule repeatable_declaration_specifiers {
+    [
+    | <storage_class_specifier>
+    | <type_qualifier>
+    | <function_specifier>
+    ]
+}
+
+rule function_specifier {
+    | 'inline'
+    | '__inline__'
+}
+
+rule init_declarator {
+    <declarator> ['=' <initializer>]?
+    {*}
+}
+
+rule storage_class_specifier {
+    [
+    | $<typedef>=['typedef']                    {*} #= typedef
+    | $<extern>=['extern']                      {*} #= extern
+    | $<static>=['static']                      {*} #= static
+    | $<auto>=['auto']                          {*} #= auto
+    | $<register>=['register']                  {*} #= register
+    | $<__extension__>=['__extension__']        {*} #= __extension__
+    ]
+}
+
+rule type_specifier {
+    #| <builtin_type_specifier>
+    | <builtin_type>
+    | $<type>=[ 'struct' | 'union' ] <struct_or_union_specifier>
+    | 'enum' <enum_specifier>
+    | $<typedef_name>=<identifier>
+}
+
+token builtin_type {
+  [
+    [
+      $<signed>=[ 'signed' | 'unsigned' ] <.ws> 
+    ]?
+    [
+    | 'void'
+    | 'char'
+    | 'short' <.ws> 'int' >>
+    | 'short'
+    | 'int'
+    | 'long' <.ws> 'long' <.ws> 'int' >>
+    | 'long' <.ws> 'long' >>
+    | 'long' <.ws> 'int' >>
+    | 'long' <.ws> 'double' >>
+    | 'long'
+    | 'float'
+    | 'double'
+    | '_Bool'
+    | '_Complex'
+    | '_Imaginary'
+    ]
+    >>
+  | 'unsigned'
+  | 'signed'
+  ]
+}
+
+rule struct_or_union_specifier {
+    | <identifier>? '{' <struct_declaration>+ '}'
+    | <identifier>
+}
+
+rule struct_declaration {
+    <specifier_qualifier_list> <struct_declarator_list>* ';'
+}
+
+rule specifier_qualifier_list {
+    <type_qualifier>*
+    <type_specifier>
+    <type_qualifier>*
+#    [
+#    | <type_specifier>
+#    | <type_qualifier>
+#    ]+
+}
+
+rule struct_declarator_list {
+    <struct_declarator> [',' <struct_declarator>]*
+}
+
+rule struct_declarator {
+    | <declarator>? ':' <constant_expression>
+    | <declarator>
+}
+
+rule enum_specifier {
+    | <identifier>? '{' <enumerator_list> [',']? '}'
+    | <identifier>
+}
+
+rule enumerator_list {
+    <enumerator> [',' <enumerator>]*
+}
+
+rule enumerator {
+    <enumeration_constant> ['=' <constant_expression>]?
+}
+
+rule type_qualifier {
+    $<qualifier>=[
+    |'const'
+    |'restrict'
+    |'volatile'
+    |'__const'       # gcc version of const
+    |'__restrict'    # gcc version of restricted
+    |'__volatile'    # gcc version of volatile
+    |'__extension__' # gcc extension
+    ]
+}
+
+rule declarator {
+    <pointer>?
+    <direct_declarator>
+    {*}
+}
+
+rule direct_declarator {
+    <declarator_prefix>
+    <declarator_suffix>*
+    <gcc_asm>?
+    <gcc_attribute>*
+    {*}
+}
+
+rule declarator_prefix {
+    | '(' <declarator> ')' {*}       #= declarator
+    | <identifier> {*}               #= identifier
+}
+
+rule declarator_suffix {
+    | '(' <parameter_type_list> ')' {*}    #= parameter_type_list
+    | '(' <identifier_list>? ')' {*}       #= identifier_list ## old-style C parameter declarations
+    | '[' <assignment_expression>? ']'
+    | '[' '*' ']'
+}
+
+rule gcc_attribute {
+    '__attribute__' '((' <gcc_attributes_list>'))'
+}
+
+rule gcc_attributes_list {
+    [<gcc_attr> [',' <gcc_attr>]* ]?
+
+}
+
+rule gcc_attr {
+    | 'noreturn'
+    | '__noreturn__'
+    | [ 'format' | '__format__' ] '(' <gcc_attr_formats> ',' <digit>+ ',' <digit>+ ')'
+    | '__const__'
+    | '__const'
+    | '__nothrow__'
+    | '__aligned__' '(' <digit>+ ')'
+    | '__format_arg__' '(' <digit>+ ')'
+    | '__nonnull__' '(' <digit_list_plus> ')'
+    | '__mode__' '(' <gcc_attr_mode> ')'
+    | '__sentinel__' '(' <digit>+ ')'
+    | '__malloc__'
+    | '__pure__'
+    | '__warn_unused_result__'
+}
+
+rule digit_list_plus {
+  <digit>+ [',' <digit>+ ]*
+  {*}
+}
+
+
+token gcc_attr_mode {
+    | '__QI__'
+    | '__DI__'
+    | '__SI__'
+    | '__HI__'
+    | 'byte'
+    | '__byte__'
+    | 'word'
+    | '__word__'
+    | 'pointer'
+    | '__pointer__'
+}
+
+token gcc_attr_formats {
+    | printf
+    | __printf__
+    | scanf
+    | strftime
+    | gnu_printf
+    | gnu_scanf
+    | gnu_strftime
+    | strfmon
+    | __printf__
+    | __scanf__
+    | __strftime__
+    | __strfmon__
+    | ms_printf
+    | ms_scanf
+    | ms_strftime
+}
+
+rule gcc_asm {
+    [ 'asm' | '__asm__' ]
+    '('
+    [<c_string_literal> ]*
+    ')'
+}
+
+rule pointer {
+    |'*' [ <type_qualifier> ]* <pointer>
+    |'*' [ <type_qualifier> ]*
+}
+
+rule parameter_type_list {
+    <parameter_list>  [$<vararg>=[',' '...']]?
+    {*}
+}
+
+rule parameter_list {
+    <parameter_declaration> [',' <parameter_declaration>]*
+    {*}
+}
+
+rule parameter_declaration {
+    <declaration_specifiers>
+    [
+    | <declarator> {*}               #= declarator
+    | <abstract_declarator>? {*}     #= abstract_declarator
+    ]
+    <repeatable_declaration_specifiers>*
+}
+
+rule identifier_list {
+    <identifier> [',' <identifier>]*
+}
+
+rule type_name {
+    <specifier_qualifier_list> <abstract_declarator>?
+}
+
+rule abstract_declarator {
+    | <pointer>
+    | <pointer>? <direct_abstract_declarator>
+}
+
+rule direct_abstract_declarator {
+    [
+    | '(' <abstract_declarator> ')'
+    | '[' <assignment_expression>? ']'
+    | '[' '*' ']'
+    | '(' <parameter_type_list> ')'
+    ]
+    <direct_abstract_declarator_1>*
+}
+
+rule direct_abstract_declarator_1 {
+    | '[' <assignment_expression>? ']'
+    | '[' '*' ']'
+    | '(' <parameter_type_list> ')'
+}
+
+rule typedef_name_DEAD_CODE {
+
+## a typedef name can be a return type specifier. This is ambiguous, because
+## the parser doesn't know if it's a return type thingie or the name of the
+## function. Therefore, typedef'd names must be stored in a %hash, so that
+## this rule is not calling <identifier>, but inspecting the registered
+## typedef'd names. For now, specify 'SOME_TYPEDEF_NAME' as the only typedef'd name.
+##
+    <identifier>
+    #'SOME_TYPEDEF_NAME'
+}
+
+rule initializer {
+    | <assignment_expression>
+    | '{' <initializer_list> [',']? '}'
+}
+
+rule initializer_list {
+    <initializer_item> [',' <initializer_item>]*
+}
+
+rule initializer_item {
+    <designation>? <initializer>
+}
+
+rule designation {
+    <designator>+ '='
+}
+
+rule designator {
+    | '[' <constant_expression> ']'
+    | '.' <identifier>
+}
+
+
+## A.2.3 Statements
+##
+
+rule statement {
+    | <labeled_statement>
+    | <compound_statement> {*}        #= compound_statement
+    | <expression_statement> {*}      #= expression_statement
+    | <if_statement> {*}              #= if_statement
+    | <switch_statement>
+    | <while_statement> {*}           #= while_statement
+    | <do_while_statement> {*}        #= do_while_statement
+    | <for1_statement> {*}            #= for1_statement
+    | <for2_statement> {*}            #= for2_statement
+    | <jump_statement> {*}            #= jump_statement
+}
+
+rule labeled_statement {
+    | <identifier> ':' <statement>
+    | 'case' <constant_expression> ':' <statement>
+    | 'default' ':' <statement>
+}
+
+rule compound_statement {
+    '{' <block_item>* '}'
+    {*}
+}
+
+rule block_item {
+    | <declaration> {*}    #= declaration
+    | <statement> {*}      #= statement
+}
+
+rule expression_statement {
+    <expression>? ';'
+    {*}
+}
+
+rule if_statement {
+    'if' '(' <expression> ')' <statement> ['else' $<else>=<statement>]?
+    {*}
+}
+
+rule switch_statement {
+    'switch' '(' <expression> ')' <statement>
+}
+
+rule while_statement {
+    'while' '(' <expression> ')' <statement>
+    {*}
+}
+
+rule do_while_statement {
+    'do' <statement> 'while' '(' <expression> ')' ';'
+    {*}
+}
+
+rule for1_statement {
+    'for' '(' [$<init>=<expression>]? ';' [$<cond>=<expression>]? ';' [$<step>=<expression>]? ')'
+    <statement>
+    {*}
+}
+
+rule for2_statement {
+    'for' '(' <declaration> [$<cond>=<expression>]? ';' [$<step>=<expression>]? ')' <statement>
+    {*}
+}
+
+rule jump_statement {
+    | 'goto' <identifier> ';' {*}         #= goto
+    | 'continue' ';' {*}                  #= continue
+    | 'break' ';' {*}                     #= break
+    | 'return' <expression>? ';' {*}      #= return
+}
+
+
+## A.1.1 Lexical elements
+##
+##rule token {
+##  | <keyword>
+##  | <identifier>
+##  | <constant>
+##  | <c_string_literal>
+##  | <punctuator>
+##}
+
+## A.1.2 Keywords
+##
+token keyword {
+  [ auto      | enum      | restrict  | unsigned
+  | break     | extern    | return    | void
+  | case      | float     | short     | volatile
+  | char      | for       | signed    | while
+  | const     | goto      | sizeof    | _Bool
+  | continue  | if        | static    | _Complex
+  | default   | inline    | struct    | _Imaginary
+  | do        | int       | switch
+  | double    | long      | typedef
+  | else      | register  | union     ]>>
+
+}
+
+token reserved_word {
+    <keyword>
+}
+
+
+token identifier {
+    <!reserved_word>
+    <.identifier_nondigit> [ <.identifier_nondigit> | <.digit> ]*
+    {*}
+}
+
+token identifier_nondigit {
+    <alpha> | <[_]> | <universal_character_name>
+}
+
+## A.1.4 Universal character names
+##
+token universal_character_name {
+  | '\u' <xdigit>**{4}
+  | '\U' <xdigit>**{8}
+}
+
+
+## A.1.5 Constants
+##
+token constant {
+    | <floating_constant> {*}       #= floating_constant
+    | <integer_constant> {*}        #= integer_constant
+    | <enumeration_constant> {*}    #= enumeration_constant
+    | <character_constant> {*}      #= character_constant
+}
+
+token integer_constant {
+    [ <decimal_constant>
+    | <hexadecimal_constant>
+    | <octal_constant>
+    ]
+    <integer_suffix>?
+    {*}
+}
+
+token decimal_constant {
+    <[1..9]> <digit>*
+}
+
+token octal_constant {
+    0 <[0..7]>*
+}
+
+token hexadecimal_constant {
+    0 <[xX]> <xdigit>+
+}
+
+token integer_suffix {
+    | <[uU]> [ll?|LL?]?
+    | [ll?|LL?] <[uU]>?
+}
+
+token floating_constant {
+    [
+    | <decimal_floating_constant>
+    | <hexadecimal_floating_constant>
+    ]
+    {*}
+}
+
+token decimal_floating_constant {
+    [
+    | <fractional_constant> <exponent_part>?
+    | <digit_sequence> <exponent_part>
+    ]
+    <floating_suffix>?
+}
+
+token hexadecimal_prefix {
+  0 <[xX]>
+}
+
+token hexadecimal_floating_constant {
+  <hexadecimal_prefix>
+  [
+  | <hexadecimal_fractional_constant>
+  | <hexadecimal_digit_sequence>
+  ]
+  <binary_exponent_part> <floating_suffix>?
+}
+
+token fractional_constant {
+  | <digit_sequence>? \. <digit_sequence>
+  | <digit_sequence> \.
+}
+
+token exponent_part {
+  <[eE]> ['+'|'-']? <digit_sequence>
+}
+
+token digit_sequence { <digit>+ }
+
+token hexadecimal_fractional_constant {
+  | <hexadecimal_digit_sequence>? \. <hexadecimal_digit_sequence>
+  | <hexadecimal_digit_sequence> \.
+}
+
+token binary_exponent_part {
+  <[pP]> ['+'|'-']? <digit_sequence>
+}
+
+token hexadecimal_digit_sequence { <xdigit>+ }
+
+token floating_suffix { <[fFlL]> }
+
+token enumeration_constant { <identifier> }
+
+token character_constant { [L]? \' <c_char>+ \' }
+
+token <c_char> { <-['\\\n]> | <escape_sequence> }
+
+token escape_sequence {
+  \\
+  [ <['"?\\abfnrtv]>
+  | <octal_digit>**{1..3}
+  | x <xdigit>+
+  | <universal_character_name>
+  ]
+}
+
+## A.1.6 String literals
+token c_string_literal {
+    [L]? '"' <string_literal: '"'> '"'
+    {*}
+}
+
+##\" <s_char>* \"
+
+token s_char { <-["\\\n]> | <escape_sequence> }
+
+
+## A.2 Phrase structure grammar
+##
+
+## A.2.1 Expressions
+##
+
+rule constant_expression {
+    <conditional_expression>
+    {*}
+}
+
+rule expression {
+    <assignment_expression> [',' <assignment_expression>]*
+    {*}
+}
+
+rule assignment_expression {
+    [<unary_expression> <assign_op>]* <conditional_expression>
+    {*}
+}
+
+rule assign_op { '='|'*='|'/='|'%='|'+='|'-='|'<<='|'>>='|'&='|'^='|'|=' }
+
+rule conditional_expression {
+    <logical_expression> ['?' <expression> ':' <conditional_expression>]?
+    {*}
+}
+
+rule logical_expression is optable { ... }
+
+proto 'infix:||' is precedence('1') { ... }
+
+proto 'infix:&&' is tighter('infix:||') { ... }
+
+proto 'infix:|' is tighter('infix:&&') { ... }
+
+proto 'infix:^' is tighter('infix:|') { ... }
+
+proto 'infix:&' is tighter('infix:^') { ... }
+
+proto 'infix:==' is tighter('infix:&') { ... }
+proto 'infix:!=' is equiv('infix:==') { ... }
+
+proto 'infix:<' is tighter('infix:==') { ... }
+proto 'infix:>' is equiv('infix:<') { ... }
+proto 'infix:>=' is equiv('infix:<') { ... }
+proto 'infix:<=' is equiv('infix:<') { ... }
+
+proto 'infix:<<' is equiv('infix:<') { ... }
+proto 'infix:>>' is equiv('infix:<') { ... }
+
+proto 'infix:+' is tighter('infix:<<') is pirop('n_add') { ... }
+proto 'infix:-' is equiv('infix:+') is pirop('n_sub') { ... }
+
+proto 'infix:*' is tighter('infix:+') is pirop('n_mul') { ... }
+proto 'infix:/' is equiv('infix:*') is pirop('n_div') { ... }
+proto 'infix:%' is equiv('infix:*') is pirop('n_mod') { ... }
+
+proto 'term:' is tighter('infix:*')
+              is parsed(&cast_expression) { ... }
+
+
+rule postfix_expression_prefix {
+    | <primary_expression> {*}                                  #= primary_expression
+    | '(' <type_name> ')' '{' <initializer_list> [',']? '}' {*} #= #type_name
+}
+
+rule postfix_expression {
+    <postfix_expression_prefix>
+    <postfix_expression_suffix>*
+    {*}
+}
+
+rule postfix_expression_suffix {
+    | <index> {*}                           #= index
+    | <arguments>  {*}                      #= arguments
+    | <direct_field> {*}                    #= direct_field
+    | <indirect_field> {*}                  #= indirect_field
+    | <inc_or_dec> {*}                      #= inc_or_dec
+}
+
+rule inc_or_dec {
+    $<op>=['++'|'--']
+    {*}
+}
+
+rule index {
+    '[' <expression> ']'
+    {*}
+}
+
+rule direct_field {
+    '.' <identifier>
+    {*}
+}
+
+rule indirect_field {
+    '->' <identifier>
+    {*}
+}
+
+rule arguments {
+    '(' <argument_expression_list>? ')'
+    {*}
+}
+
+rule argument_expression_list {
+    <assignment_expression> [',' <assignment_expression>]*
+    {*}
+}
+
+rule unary_expression {
+    | <postfix_expression> {*}              #= postfix_expression
+    | <prefix_expression> {*}               #= prefix_expression
+    | <unary_operator> <cast_expression> {*} #= unary_operator
+    | 'sizeof' <unary_expression>        {*} #= sizeof
+    | 'sizeof' '(' <type_name> ')'       {*} #= sizeof_type
+}
+
+rule prefix_expression {
+    $<op>=['++'|'--'] <unary_expression>
+    {*}
+}
+
+rule unary_operator {
+    '&' | '*' | '+' | '-' | '~' | '!'
+}
+
+rule cast_expression {
+    ['(' <type_name> ')']* <unary_expression>
+    {*}
+}
+
+rule primary_expression {
+    | <identifier> {*}             #= identifier
+    | <constant> {*}               #= constant
+    | <c_string_literal> {*}       #= c_string_literal
+    | '(' <expression> ')' {*}     #= expression
+}
+
+token ws {
+  [
+  | '//' \N* \n
+  | '/*' .*? '*/'
+  | \s+
+  | <.gcc_preprocess_id>
+  #| ^^ '#' \N \n
+  #| '#' \N* \n {*} #= origin
+  ]*
+}
+
+token gcc_preprocess_id {
+  ^^ '#' \s+ $<line>=[<.digit>+] \s+ <c_string_literal> $<ilist>=[ \s+ <.digit>+ ]* $$ {*} #= origin
+}

Copied: branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t (from r44981, branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/t/NCIGENAST/struct_00.t)
@@ -0,0 +1,30 @@
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use lib ('./lib', '../../lib');
+use Parrot::Test::NCIGENAST;
+
+plan tests => 1;
+ast(<<'CODE');
+typedef struct SPITupleTable
+{
+  MemoryContext tuptabcxt;  /* memory context of result table */
+  uint32    alloced;    /* # of alloced vals */
+  uint32    free;     /* # of free vals */
+  TupleDesc tupdesc;    /* tuple descriptor */
+  HeapTuple  *vals;     /* tuples */
+} SPITupleTable;
+CODE
+
+contains("<complex> => PMC 'NCIGENAST;Struct'");
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t (from r44981, branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/t/NCIGENAST/typedef_00.t)
@@ -0,0 +1,38 @@
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use lib ('./lib', '../../lib');
+use Parrot::Test::NCIGENAST;
+
+plan tests => 10;
+ast('extern void AtEOSubXact_SPI(bool isCommit, SubTransactionId mySubid);');
+SKIP: {
+skip("This feature is commented out");
+contains("Parent isCommit bool not defined");
+}
+
+ast('typedef void * void_pointer_type;');
+istypedef;
+ispointer;
+decl_ident_is("void_pointer_type");
+type_is("void");
+is_builtin;
+
+ast('typedef int a, b, c;');
+decl_ident_is("a");
+decl_ident_is("b");
+decl_ident_is("c");
+
+parse('int a(), b(), c()');
+parse_failure;
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/ops_pct/compilers/ncigen/t/harness (from r44981, branches/ops_pct/compilers/ncigen/t/harness)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/t/harness	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/t/harness)
@@ -0,0 +1,7 @@
+#!/usr/bin/perl
+
+# $Id$
+
+use FindBin;
+use lib qw( . lib ../lib ../../lib ../../lib );
+use Parrot::Test::Harness language => 'ncigen'

Copied: branches/ops_pct/compilers/ncigen/t/parse_00.t (from r44981, branches/ops_pct/compilers/ncigen/t/parse_00.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/t/parse_00.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/t/parse_00.t)
@@ -0,0 +1,187 @@
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use lib ('./lib', '../../lib');
+use Parrot::Test::NCIGENAST;
+
+plan tests => 20;
+
+parse_success(<<'CODE', '__extension__00.c');
+extern double strtod (__const char *__restrict __nptr, char **__restrict __endptr) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+
+enum { MSG_OOB = 0x01 };
+__extension__ typedef signed long long int __int64_t;
+
+__extension__ typedef struct { int __val[2]; } __fsid_t;
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict, __gnuc_va_list, int *__restrict);
+
+struct random_data
+{
+  int32_t rand_type;
+};
+
+struct _IO_FILE {
+char _unused2[15 * 6];
+char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+};
+
+struct random_data
+{
+  int32_t rand_type;
+};
+
+int a = 8 - sizeof(int);
+char _unused2 = 15 + 6;
+int b = 12;
+int a = 10 * sizeof(int) * 13;
+int a = 8 * 3;
+typedef int Oid;
+int32_t Oid;
+int Oid;
+typedef unsigned int Oid;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_mutexattr_t;
+
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    int __kind;
+    unsigned int __nusers;
+    __extension__ union
+    {
+      int __spins;
+      __pthread_slist_t __list;
+    };
+
+  } __data;
+  char __size[24];
+  long int __align;
+} pthread_mutex_t;
+__extension__ typedef void * __timer_t;
+CODE
+
+parse_success(<<'CODE', '__attribute__.c');
+extern double strtod (__const char *__restrict __nptr, char **__restrict __endptr) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+CODE
+
+parse_success(<<'CODE', 'enums.c');
+enum { MSG_OOB = 0x01 };
+CODE
+
+parse_success(<<'CODE', '__extension__01.c');
+__extension__ typedef signed long long int __int64_t;
+CODE
+
+parse_success(<<'CODE', '__extension__02.c');
+__extension__ typedef struct { int __val[2]; } __fsid_t;
+CODE
+
+parse_success(<<'CODE', 'gnu_va_arg.c');
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict, __gnuc_va_list, int *__restrict);
+CODE
+
+parse_success(<<'CODE', 'int_32_t_declaration.c');
+struct random_data
+{
+  int32_t rand_type;
+};
+CODE
+
+parse_success(<<'CODE', 'struct_declaration_00.c');
+struct _IO_FILE {
+char _unused2[15 * 6];
+char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+};
+CODE
+
+parse_success(<<'CODE', 'struct_declaration_01.c' );
+struct random_data
+{
+  int32_t rand_type;
+};
+CODE
+
+parse_success(<<'CODE', 'times_01.c');
+int a = 8 - sizeof(int);
+CODE
+
+parse_success(<<'CODE', 'times_02.c');
+char _unused2 = 15 + 6;
+CODE
+
+parse_success(<<'CODE', 'times_03.c');
+int b = 12;
+int a = 10 * sizeof(int) * 13;
+CODE
+
+parse_success(<<'CODE', 'times_04.c');
+int a = 8 * 3;
+CODE
+
+parse_success(<<'CODE', 'typedef_01.c');
+typedef int Oid;
+CODE
+
+parse_success(<<'CODE', 'typedef_02.c');
+int32_t Oid;
+CODE
+
+parse_success(<<'CODE', 'typedef_03.c');
+int Oid;
+CODE
+
+parse_success(<<'CODE', 'typedef.c');
+typedef unsigned int Oid;
+CODE
+
+parse_success(<<'CODE', 'typedef_union_00.c');
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_mutexattr_t;
+CODE
+
+parse_success(<<'CODE', 'typedef_union_01.c');
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    int __kind;
+    unsigned int __nusers;
+    __extension__ union
+    {
+      int __spins;
+      __pthread_slist_t __list;
+    };
+
+  } __data;
+  char __size[24];
+  long int __align;
+} pthread_mutex_t;
+CODE
+
+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:

Copied: branches/ops_pct/compilers/ncigen/t/parse_01.t (from r44981, branches/ops_pct/compilers/ncigen/t/parse_01.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/t/parse_01.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/t/parse_01.t)
@@ -0,0 +1,40 @@
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use lib ('./lib', '../../lib');
+use Parrot::Test::NCIGENAST;
+
+plan tests => 5;
+
+parse_success(<<'CODE', 'typedef.c');
+typedef int (*sqlite3_callbackkk)(void*,int,char*, char*);
+CODE
+
+parse_success(<<'CODE', 'typedef.c');
+int sqlite3_callbackk(void*,int,char*, char*);
+CODE
+
+parse_success(<<'CODE', 'typedef.c');
+typedef int (*sqlite3_callback)(void*,int,char**, char**);
+CODE
+
+parse_success(<<'CODE', 'typedef.c');
+typedef struct sqlite3 sqlite3;
+CODE
+
+parse_success(<<'CODE', 'typedefstartstar.c');
+typedef struct sqlite3 sqlite3;
+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:

Copied: branches/ops_pct/compilers/ncigen/t/parse_02.t (from r44981, branches/ops_pct/compilers/ncigen/t/parse_02.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/ncigen/t/parse_02.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/ncigen/t/parse_02.t)
@@ -0,0 +1,84 @@
+#!perl
+# Copyright (C) 2008-2010, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+
+use lib ('./lib', '../../lib');
+use Parrot::Test::NCIGENAST;
+
+plan tests => 2;
+
+parse_success(<<'CODE', 'Xlib.h');
+typedef struct
+
+
+
+{
+ XExtData *ext_data;
+ struct _XPrivate *private1;
+ int fd;
+ int private2;
+ int proto_major_version;
+ int proto_minor_version;
+ char *vendor;
+        XID private3;
+ XID private4;
+ XID private5;
+ int private6;
+ XID (*resource_alloc)(
+  struct _XDisplay*
+ );
+ int byte_order;
+ int bitmap_unit;
+ int bitmap_pad;
+ int bitmap_bit_order;
+ int nformats;
+ ScreenFormat *pixmap_format;
+ int private8;
+ int release;
+ struct _XPrivate *private9, *private10;
+ int qlen;
+ unsigned long last_request_read;
+ unsigned long request;
+ XPointer private11;
+ XPointer private12;
+ XPointer private13;
+ XPointer private14;
+ unsigned max_request_size;
+ struct _XrmHashBucketRec *db;
+ int (*private15)(
+  struct _XDisplay*
+  );
+ char *display_name;
+ int default_screen;
+ int nscreens;
+ Screen *screens;
+ unsigned long motion_buffer;
+ unsigned long private16;
+ int min_keycode;
+ int max_keycode;
+ XPointer private17;
+ XPointer private18;
+ int private19;
+ char *xdefaults;
+
+}
+
+
+
+*_XPrivDisplay;
+CODE
+
+
+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:

Copied: branches/ops_pct/compilers/nqp/Defines.mak (from r44981, branches/ops_pct/compilers/nqp/Defines.mak)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/Defines.mak	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/Defines.mak)
@@ -0,0 +1,7 @@
+NQP_LIB_PBCS = compilers/nqp/nqp.pbc
+
+NQP_CLEANUPS = \
+    compilers/nqp/nqp.pbc \
+    compilers/nqp/src/Grammar_gen.pir \
+    compilers/nqp/bootstrap/gen_actions.pir \
+    compilers/nqp/bootstrap/nqp.pbc

Copied: branches/ops_pct/compilers/nqp/README.pod (from r44981, branches/ops_pct/compilers/nqp/README.pod)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/README.pod	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/README.pod)
@@ -0,0 +1,95 @@
+## $Id$
+
+=head1 NQP - Not Quite Perl (6)
+
+This is "Not Quite Perl" -- a compiler for quickly generating PIR
+routines from Perl6-like code.  The key feature of NQP is that it's
+designed to be a very small compiler (as compared with, say, perl6
+or Rakudo) and is focused on being a high-level way to create 
+transformers for Parrot (especially hll compilers).  In addition, 
+unlike Rakudo, NQP attempts to restrict itself to generating code 
+that can run in Parrot without the existence of any NQP-specific 
+runtime libraries.
+
+One way that NQP aims to be a lighter version of Perl 6 is by
+avoiding syntactic sugar and "dwimminess" that isn't needed
+for the types of routines that are written.  Sometimes this
+makes coding a bit more work, but it also lowers the learning
+curve somewhat.
+
+
+=head2 Things that NQP has (or should have)
+
+This list isn't exhaustive; for now it's intended to identify the
+language constructs that we explicitly know will be supported
+
+=over 4
+
+=item * scalars
+
+=item * binding
+
+=item * lexical 'my', package 'our'
+
+=item * method calls (including named, optional, and slurpy arguments)
+
+=item * subroutine calls (including named, optional, and slurpy arguments)
+
+=item * method definitions
+
+=item * subroutine definitions
+
+=item * '...'                 # string constants
+
+=item * "..."                 # string value with escapes (non-interpolating)
+
+=item * postcircumfix:<[ ]>   # array subscript
+
+=item * postcircumfix:<{ }>   # hash subscript
+
+=item * postcircumfix:«< >»   # constant hash subscript
+
+=item * $<...>                # constant hash subscript of $/
+
+=item * $(...)                # scalar context
+
+=item * prefix:~              # string context
+
+=item * prefix:+              # numeric context
+
+=item * say(), print()        # output
+
+=item * if/unless             # conditional
+
+=item * for                   # iterative loop
+
+=item * PIR q<>, PIR q:to:<END> # inline PIR
+
+=back
+
+=head2 Things that aren't in NQP
+
+There are a large number of Perl 6 constructs and idioms that
+aren't supported or expected to be supported in NQP.  This
+is by design -- the point of NQP is to provide a lightweight
+HLL for generating PIR subroutines while adhering to a Perl 6
+syntax.
+
+Some items not planned for NQP:
+
+=over 4
+
+=item * string interpolation
+
+=item * listops
+
+=item * quoted lists
+
+=item * array and hash slices
+
+=back
+
+Of course, if we later decide that some item is vitally
+important for NQP programs, we can add it -- but for now
+the point is to maintain a minimal set of constructs.
+

Copied: branches/ops_pct/compilers/nqp/Rules.mak (from r44981, branches/ops_pct/compilers/nqp/Rules.mak)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/Rules.mak	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/Rules.mak)
@@ -0,0 +1,21 @@
+compilers/nqp/nqp.pbc : compilers/nqp/src/builtins.pir \
+    compilers/nqp/src/Grammar/Actions.pir \
+    compilers/nqp/src/Grammar_gen.pir \
+    $(LIBRARY_DIR)/PCT.pbc \
+    $(LIBRARY_DIR)/PGE.pbc
+
+compilers/nqp/src/Grammar_gen.pir : $(PARROT) $(LIBRARY_DIR)/PGE/Perl6Grammar.pir compilers/nqp/src/Grammar.pg $(LIBRARY_DIR)/PCT/HLLCompiler.pbc $(LIBRARY_DIR)/PGE.pbc
+	$(PARROT) $(LIBRARY_DIR)/PGE/Perl6Grammar.pir --output=$@ compilers/nqp/src/Grammar.pg
+
+# Developer target to regnerate bootstrap. Unused?
+nqp-boot: \
+    compilers/nqp/bootstrap/nqp.pir \
+    compilers/nqp/bootstrap/gen_actions.pir
+
+compilers/nqp/bootstrap/gen_actions.pir : $(PARROT) \
+    compilers/nqp/nqp.pbc \
+    compilers/nqp/bootstrap/actions.pm
+	$(PARROT) compilers/nqp/nqp.pbc --output=$@ --target=pir \
+	    compilers/nqp/bootstrap/actions.pm
+
+compilers/nqp/bootstrap/nqp.pbc : $(LIBRARY)/PCT.pbc

Copied: branches/ops_pct/compilers/nqp/TODO.pod (from r44981, branches/ops_pct/compilers/nqp/TODO.pod)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/TODO.pod	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/TODO.pod)
@@ -0,0 +1,84 @@
+## $Id$
+
+=head1 Things that NQP needs
+
+This list is based on discussions with pmichaud and unimplemented
+items in the grammar, C<src/Grammar.pg>.
+
+Last updated: 2007-11-24
+
+=head2 Code
+
+=over 4
+
+=item * C<&> sigil
+
+Handle the mapping between C<&foo> and 'foo' subroutines.
+
+=item * C<return> statement
+
+While it seems like implementing C<return> would be a simple
+matter of generating PIR C<.return> statements, it's not quite
+that simple, because C<return> statements can occur inside of
+nested blocks.
+
+So, we need an NQP C<return> statement to throw a "return exception",
+which is then caught by the outermost block of the currently
+executing subroutine and then used as the argument to C<.return>.
+
+Fortunately, the new design of S05 means that we don't really need
+return statements for developing action grammars, so this is no
+longer as much of a priority as it was.
+
+=back
+
+=head2 Tests
+
+=over 4
+
+=item * More tests for method ops
+
+We should be able to load an external module (Pm suggests Test.pbc)
+and exercise methods using that.
+
+=item * Match variable access C<$/>
+
+=item * More tests for scalar context $( ... )
+
+=item * More tests for list context @( ... )
+
+=item * Variables with twigils
+
+=item * More tests for optional arguments and parameters
+
+=item * More tests for named arguments and parameters
+
+=back
+
+=head2 Bootstrap
+
+The directory C<bootstrap> contains the necessary files to implement NPQ
+in NQP. While this is not a major goal, it is interesting to compare the
+speed of NQP implemented in PIR and in NQP. For this to work, some things
+must be fixed. The bootstrap version can be tested with
+
+  cd bootstrap && perl t/harness
+
+=over 4
+
+=item * it seems that the action for the C<for-statement> is broken.
+
+=item * NQP should not have a runtime containing support routines. The
+original NQP (in PIR) implements all operators as PIR instructions. This
+should also be the case for the bootstrapped NQP. Currently, the optable
+action does not handle the "inline" specifications.
+
+=item * Some actions are not complete. For instance, the action method
+C<package_declarator>, where classes can be defined.
+
+=item * the NQP compiler driver should accept a commandline option indicating
+which Actions object should be used: the PIR or NQP version. HLLCompiler
+has support for adding commandline options, this could be used.
+
+=back
+

Copied: branches/ops_pct/compilers/nqp/bootstrap/actions.pm (from r44981, branches/ops_pct/compilers/nqp/bootstrap/actions.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/bootstrap/actions.pm	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/bootstrap/actions.pm)
@@ -0,0 +1,1035 @@
+# Copyright (C) 2008-2008, Parrot Foundation.
+# $Id$
+
+
+
+
+class NQP::Grammar::Actions;
+
+
+method TOP($/) {
+    my $past := $($<statement_block>);
+    $past.blocktype('declaration');
+    make $past;
+}
+##.sub 'TOP' :method
+##    .param pmc match
+##    .local pmc past
+##    $P0 = match['statement_block']
+##    past = $P0.'get_scalar'()
+##    past.'blocktype'('declaration')
+##    match.'result_object'(past)
+##.end
+
+
+#### Blocks and Statements ####
+
+method statement_block($/, $key) {
+    our $?BLOCK;
+    our @?BLOCK;
+    if ($key eq 'open') {
+        $?BLOCK := PAST::Block.new( PAST::Stmts.new( :node($/) ),
+                                    :blocktype('immediate'),
+                                    :node($/) );
+        @?BLOCK.unshift($?BLOCK);
+    }
+    else {
+        my $past := @?BLOCK.shift();
+        $?BLOCK := @?BLOCK[0];
+        $past.push($($<statement_list>));
+        make $past;
+    }
+}
+##.sub 'statement_block' :method
+##    .param pmc match
+##    .param string key
+##    if key == 'close' goto block_close
+##  block_open:
+##    .local pmc past
+##    $P1 = get_hll_global ['PAST'], 'Stmts'
+##    $P2 = $P1.'new'()
+##    $P0 = get_hll_global ['PAST'], 'Block'
+##    past = $P0.'new'($P2, 'blocktype'=>'immediate', 'node'=>match)
+##    set_global '$?BLOCK', past
+##    $P0 = get_global '@?BLOCK'
+##    unshift $P0, past
+##    .return ()
+##  block_close:
+##    $P0 = get_global '@?BLOCK'
+##    past = shift $P0
+##    $P1 = $P0[0]
+##    set_global '$?BLOCK', $P1
+##    $P2 = match['statement_list']
+##    $P3 = $P2.'get_scalar'()
+##    past.'push'($P3)
+##    match.'result_object'(past)
+##.end
+
+
+method statement_list($/) {
+    my $past := PAST::Stmts.new(:node($/));
+    for $<statement> {
+        $past.push($($_));
+    }
+    make $past;
+}
+##.sub 'statement_list' :method
+##    .param pmc match
+##    .local pmc past
+##    $P0 = get_hll_global ['PAST'], 'Stmts'
+##    past = $P0.'new'('node'=>match)
+##    $P1 = match['statement']
+##    if null $P1 goto iter_end
+##    .local pmc iter
+##    iter = new 'Iterator', $P1
+##  iter_loop:
+##    unless iter goto iter_end
+##    $P2 = shift iter
+##    $P2 = $P2.'get_scalar'()
+##    past.'push'($P2)
+##    goto iter_loop
+##  iter_end:
+##    match.'result_object'(past)
+##.end
+
+
+method statement($/, $key) {
+    make $($/{$key});
+}
+
+##.sub 'statement' :method
+##    .param pmc match
+##    .param string key
+##    $P0 = match[key]
+##    $P1 = $P0.'get_scalar'()
+##    match.'result_object'($P1)
+##.end
+
+
+method if_statement($/) {
+    my $cond := +$<EXPR> - 1;
+    my $past := PAST::Op.new( $( $<EXPR>[$cond] ),
+                              $( $<block>[$cond] ),
+                              :pasttype('if'),
+                              :node( $/ )
+                            );
+    if ( $<else> ) {
+        $past.push( $( $<else>[0] ) );
+    }
+    while ($cond != 0) {
+        $cond := $cond - 1;
+        $past := PAST::Op.new( $( $<EXPR>[$cond] ),
+                               $( $<block>[$cond] ),
+                               $past,
+                               :pasttype('if'),
+                               :node( $/ )
+                             );
+    }
+    make $past;
+}
+##.sub 'if_statement' :method
+##    .param pmc match
+##    .local pmc expr, block, past
+##    .local int cond
+##    cond = match['EXPR']
+##    cond -= 1
+##    bsr get_expr
+##    bsr get_block
+##    $P2 = get_hll_global ['PAST'], 'Op'
+##    past = $P2.'new'(expr, block, 'pasttype'=>'if', 'node'=>match)
+##
+##    $I0 = exists match['else']
+##    unless $I0 goto while
+##    block = match['else']
+##    block = block[0]
+##    block = block.'get_scalar'()
+##    past.'push'( block )
+##
+##  while:
+##    unless cond != 0 goto end_while
+##    cond -= 1
+##    bsr get_expr
+##    bsr get_block
+##    past = $P2.'new'(expr, block, past, 'pasttype'=>'if', 'node'=>match)
+##    goto while
+##
+##  end_while:
+##    goto end
+##
+##  get_expr:
+##    expr = match['EXPR']
+##    expr = expr[cond]
+##    expr = expr.'get_scalar'()
+##    ret
+##  get_block:
+##    block = match['block']
+##    block = block[cond]
+##    block = block.'get_scalar'()
+##    ret
+##  end:
+##    match.'result_object'(past)
+##.end
+
+
+method unless_statement($/) {
+    my $past := PAST::Op.new( $( $<EXPR> ),
+                              $( $<block> ),
+                              :pasttype('unless'),
+                              :node( $/ )
+                            );
+    make $past;
+}
+##.sub 'unless_statement' :method
+##    .param pmc match
+##    .local pmc expr, block, past
+##    expr = match['EXPR']
+##    expr = expr
+##    expr = expr.'get_scalar'()
+##    block = match['block']
+##    block = block
+##    block = block.'get_scalar'()
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    past = $P0.'new'(expr, block, 'pasttype'=>'unless', 'node'=>match)
+##    match.'result_object'(past)
+##.end
+
+
+method repeat_statement($/) {
+    make PAST::Op.new( $($<EXPR>),
+                       $($<block>),
+                       :pasttype( 'repeat_' ~ $<sym> ),
+                       :node( $/ )
+                     );
+}
+##.sub 'repeat_statement' :method
+##    .param pmc match
+##    $P1 = match['EXPR']
+##    $P1 = $P1.'get_scalar'()
+##    $P2 = match['block']
+##    $P2 = $P2.'get_scalar'()
+##    $S0 = match['sym']
+##    $S0 = concat 'repeat_', $S0
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    $P5 = $P0.'new'( $P1, $P2, 'pasttype'=>$S0, 'node'=>match)
+##    match.'result_object'($P5)
+##.end
+
+
+method while_statement($/) {
+    make PAST::Op.new( $($<EXPR>),
+                       $($<block>),
+                       :pasttype( ~$<sym> ),
+                       :node( $/ )
+                     );
+}
+##.sub 'while_statement' :method
+##    .param pmc match
+##    $P1 = match['EXPR']
+##    $P1 = $P1.'get_scalar'()
+##    $P2 = match['block']
+##    $P2 = $P2.'get_scalar'()
+##    $S0 = match['sym']
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    $P5 = $P0.'new'( $P1, $P2, 'pasttype'=>$S0, 'node'=>match)
+##    match.'result_object'($P5)
+##.end
+
+
+method for_statement($/) {
+    my $block := $( $<block> );
+    $block.blocktype('declaration');
+    $block.symbol( '$_', :scope('lexical'));
+    my $topic_var := PAST::Var.new(:name('$_'), :scope('parameter'));
+    $block[0].push($topic_var);
+    my $past := PAST::Op.new($($<EXPR>),
+                             $($<block>),
+                             :pasttype(~$<sym>),
+                             :node($/));
+    make $past;
+}
+##.sub 'for_statement' :method
+##    .param pmc match
+##    .local pmc block, past
+##    $P0  = match['EXPR']
+##    $P0  = $P0.'get_scalar'()
+##    $P1  = match['block']
+##    block = $P1.'get_scalar'()
+##    block.'blocktype'('sub')
+##    .local pmc params, topic_var
+##    params = block[0]
+##    $P3 = get_hll_global ['PAST'], 'Var'
+##    topic_var = $P3.'new'('name'=>'$_', 'scope'=>'parameter')
+##    params.'push'(topic_var)
+##    block.'symbol'('$_', 'scope'=>'lexical')
+##    $P2  = get_hll_global ['PAST'], 'Op'
+##    $S1  = match['sym']
+##    past = $P2.'new'($P0, block, 'pasttype'=>$S1, 'node'=>match)
+##    match.'result_object'(past)
+##.end
+
+
+method make_statement($/) {
+    make PAST::Op.new( PAST::Var.new( :name('$/'),
+                                      :scope('lexical') ),
+                       $($<EXPR>),
+                       :name('result_object'),
+                       :pasttype('callmethod') );
+}
+##.sub 'make_statement' :method
+##    .param pmc match
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = $P0.'new'( 'name'=>'$/', 'scope'=>'lexical' )
+##    $P2 = match['EXPR']
+##    $P3 = $P2.'get_scalar'()
+##    $P4 = get_hll_global ['PAST'], 'Op'
+##    $P5 = $P4.'new'($P1, $P3, 'name'=>'result_object', 'pasttype'=>'callmethod')
+##    match.'result_object'($P5)
+##.end
+
+
+method inline_pir_statement($/, $key) {
+    my $inline;
+    if ($key eq 'quote')   { $inline := ~$($<quote><string_literal>) }
+    if ($key eq 'heredoc') { $inline := ~$/<text> }
+
+    make PAST::Op.new( :inline( $inline ),
+                       :pasttype('inline'),
+                       :node( $/ )
+                     );
+}
+##.sub 'inline_pir_statement' :method
+##    .param pmc match
+##    .param pmc key
+##    .local pmc inline
+##    if key != 'quote' goto not_quote
+##    $P0 = match['quote']
+##    $P0 = $P0['string_literal']
+##    inline = $P0.'get_scalar'()
+##    goto make
+##  not_quote:
+##    if key != 'heredoc' goto not_heredoc
+##    $P0 = match['text']
+##    inline = $P0.'text'()
+##  not_heredoc:
+##  make:
+##    $P1 = get_hll_global ['PAST'], 'Op'
+##    $P2 = $P1.'new'( 'inline'=>inline, 'pasttype'=>'inline', 'node'=>match)
+##    match.'result_object'($P2)
+##.end
+
+
+method block($/) {
+    make $($<statement_block>);
+}
+##.sub 'block' :method
+##    .param pmc match
+##    $P0 = match['statement_block']
+##    $P0 = $P0.'get_scalar'()
+##    match.'result_object'($P0)
+##.end
+
+
+#### Subroutine and method definitions ####
+
+method routine_def($/) {
+    my $past := $($<block>);
+    $past.name(~$<ident>);
+    $past.node($/);
+    $past.blocktype('declaration');
+    my $params := $past[0];
+    if $<declarator> eq 'method' {
+        $past.blocktype('method');
+        unshift $past, PAST::Op.new('inline'=>'.lex "self", self',
+            'pasttype'=>'inline');
+    }
+    for $<signature>[0] {
+        my $parameter := $($_<parameter>);
+        $past.symbol($parameter.name(), :scope('lexical'));
+        $params.push($parameter);
+    }
+    make $past;
+}
+##.sub 'routine_def' :method
+##    .param pmc match
+##    .local pmc past
+##    $P0 = match['block']
+##    past = $P0.'get_scalar'()
+##    $S0 = match['ident']
+##    past.'name'($S0)
+##    past.'node'(match)
+##    past.'blocktype'('declaration')
+##    .local pmc params
+##    params = past[0]
+##    $S0 = match['declarator']
+##    if $S0 != 'method' goto add_signature
+##    past.'blocktype'('method')
+##  add_signature:
+##    $P0 = match['signature']
+##    $P0 = $P0[0]
+##    unless $P0 goto param_end
+##    .local pmc iter
+##    iter = new 'Iterator', $P0
+##  param_loop:
+##    unless iter goto param_end
+##    $P1 = shift iter
+##    .local pmc parameter
+##    $P2 = $P1['parameter']
+##    parameter = $P2.'get_scalar'()
+##    $S0 = parameter.'name'()
+##    past.'symbol'($S0, 'scope'=>'lexical')
+##    params.'push'(parameter)
+##    goto param_loop
+##  param_end:
+##    match.'result_object'(past)
+##.end
+
+
+method parameter($/, $key) {
+    my $past := $( $<param_var> );
+    my $sigil := $<param_var><sigil>;
+    if $key eq 'slurp' {              # slurpy
+        $past.slurpy( $sigil eq '@' || $sigil eq '%' );
+        $past.named( $sigil eq '%' );
+    }
+    else {
+        if $<named> eq ':' {          # named
+            $past.named(~$<param_var><ident>);
+            if $<quant> ne '!' {      #  required (optional is default)
+                $past.viviself('Undef');
+            }
+        }
+        else {                        # positional
+            if $<quant> eq '?' {      #  optional (required is default)
+                $past.viviself('Undef');
+            }
+        }
+    }
+    make $past;
+}
+##.sub 'parameter' :method
+##    .param pmc match
+##    .param pmc key
+##    .local pmc past, sigil
+##    past = match['param_var']
+##    past = past.'get_scalar'()
+##    sigil = match['param_var';'sigil']
+##    if key != 'slurp' goto not_slurp
+##    if sigil != '@' goto not_slurpy_array
+##    past.'slurpy'(1)
+##  not_slurpy_array:
+##    if sigil != '%' goto not_slurpy_hash
+##    past.'slurpy'(1)
+##  not_slurpy_hash:
+##    if sigil != '%' goto not_slurp
+##    past.'named'(1)
+##    goto make_past
+##  not_slurp:
+##    $S0 = match['named']
+##    if $S0 != ':' goto not_named
+##    $S0 = match['param_var';'ident']
+##    past.'named'($S0)
+##    $S0 = match['quant']
+##    if $S0 == '!' goto not_named
+##    past.'viviself'('Undef')
+##  not_named:
+##    $S0 = match['quant']
+##    if $S0 != '?' goto make_past
+##    past.'viviself'('Undef')
+##  make_past:
+##    match.'result_object'(past)
+##.end
+
+
+method param_var($/) {
+    make PAST::Var.new(:name(~$/),
+                       :scope('parameter'),
+                       :node($/) );
+}
+##.sub 'param_var' :method
+##    .param pmc match
+##    $S0 = match
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = $P0.'new'('name'=>$S0, 'scope'=>'parameter', 'node'=>match)
+##    match.'result_object'($P1)
+##.end
+
+
+#### Terms and expressions ####
+
+method term($/, $key) {
+    my $past := $($<noun>);
+    for $<postfix> {
+        my $term := $past;
+        $past := $($_);
+        #print("term()");
+        $past.unshift($term);
+    }
+    make $past;
+}
+##.sub 'term' :method
+##    .param pmc match
+##    .param pmc key
+##    .local pmc past
+##    $P0 = match['noun']
+##    past = $P0.'get_scalar'()
+##    $P1 = match['postfix']
+##    if null $P1 goto end
+##    .local pmc iter, term
+##    iter = new 'Iterator', $P1
+##  iter_loop:
+##    unless iter goto end
+##    $P2 = shift iter
+##    term = past
+##    past = $P2.'get_scalar'()
+##    past.'unshift'(term)
+##    goto iter_loop
+##  end:
+##    match.'result_object'(past)
+##.end
+
+
+method postfix($/, $key) {
+    make $($/{$key});
+}
+##.sub 'postfix' :method
+##    .param pmc match
+##    .param string key
+##    $P0 = match[key]
+##    $P1 = $P0.'get_scalar'()
+##    match.'result_object'($P1)
+##.end
+
+
+method methodop($/, $key) {
+    my $past := $($<arglist>);
+    $past.name(~$<ident>);
+    $past.pasttype('callmethod');
+    $past.node($/);
+    make $past;
+}
+##.sub 'methodop' :method
+##    .param pmc match
+##    .param string key
+##    .local pmc past
+##    $P0 = match['arglist']
+##    past = $P0.'get_scalar'()
+##    $S0 = match['ident']
+##    past.'name'($S0)
+##    past.'pasttype'('callmethod')
+##    past.'node'(match)
+##    match.'result_object'(past)
+##.end
+
+
+method postcircumfix($/, $key) {
+    if $key eq '( )' {
+        my $past := $($<arglist>);
+        $past.pasttype('call');
+        $past.node($/);
+        make $past;
+    }
+    elsif $key eq '< >' {
+        my $value := PAST::Val.new( :value( $($<string_literal>) ) );
+        make PAST::Var.new( $value,
+                            :scope('keyed'),
+                            :vivibase('Hash'),
+                            :viviself('Undef'),
+                            :node( $/ ) );
+    }
+    else {
+        my $vivibase; ## := ($key eq '{ }') ? 'Hash' : 'ResizablePMCArray';
+        if $key eq '{ }' {
+            $vivibase := 'Hash';
+        }
+        else {
+            $vivibase := 'ResizablePMCArray';
+        }
+        make PAST::Var.new( $($<EXPR>),
+                            :scope('keyed'),
+                            :vivibase($vivibase),
+                            :viviself('Undef'),
+                            :node($/) );
+    }
+}
+##.sub 'postcircumfix' :method
+##    .param pmc match
+##    .param string key
+##    .local pmc past
+##    if key == '( )' goto subcall
+##    if key == '< >' goto keyed_const
+##  keyed_var:
+##    .local string vivibase
+##    vivibase = 'ResizablePMCArray'
+##    if key != '{ }' goto keyed_array
+##    vivibase = 'Hash'
+##  keyed_array:
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = match['EXPR']
+##    $P2 = $P1.'get_scalar'()
+##    $P3 = $P0.'new'( $P2, 'scope'=>'keyed', 'vivibase'=>vivibase, 'viviself'=>'Undef', 'node'=>match )
+##    match.'result_object'($P3)
+##    .return ()
+##  subcall:
+##    $P0 = match['arglist']
+##    past = $P0.'get_scalar'()
+##    past.'pasttype'('call')
+##    past.'node'(match)
+##    match.'result_object'(past)
+##    .return ()
+##  keyed_const:
+##    $P0 = get_hll_global ['PAST'], 'Val'
+##    $P1 = match['string_literal']
+##    $P2 = $P1.'get_scalar'()
+##    .local pmc value
+##    value = $P0.'new'( 'value' => $P2, 'node'=> $P1 )
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = $P0.'new'( value, 'scope'=>'keyed', 'vivibase'=>'Hash', 'viviself'=>'Undef', 'node'=>match)
+##    match.'result_object'($P1)
+##.end
+
+
+method circumfix($/, $key) {
+    my $expr := $($<EXPR>[0]);
+    if $key eq '@( )' {
+        make PAST::Op.new( $expr,
+                           :name('get_array'),
+                           :pasttype('callmethod'),
+                           :node($/) );
+    }
+    if $key eq '$( )' {
+        make PAST::Op.new( $expr,
+                           :name('get_scalar'),
+                           :pasttype('callmethod'),
+                           :node($/) );
+    }
+    make $expr;
+}
+##.sub 'circumfix' :method
+##    .param pmc match
+##    .param string key
+##    .local pmc past
+##    $P0 = match['EXPR']
+##    unless null $P0 goto have_expr
+##    $P1 = match
+##    goto get_past
+##  have_expr:
+##    $P1 = $P0[0]
+##  get_past:
+##    $P1 = $P1.'get_scalar'()
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    if key == '@( )' goto list_context
+##    if key == '$( )' goto scalar_context
+##  parenthetical:
+##    match.'result_object'($P1)
+##    .return ()
+##  list_context:
+##    past = $P0.'new'($P1, 'name' => 'get_array',  'pasttype'=>'callmethod', 'node'=>match)
+##    match.'result_object'(past)
+##    .return ()
+##  scalar_context:
+##    past = $P0.'new'($P1, 'name' => 'get_scalar', 'pasttype'=>'callmethod', 'node'=>match)
+##    match.'result_object'(past)
+##.end
+
+#sub callarg($arg) {
+#        if $arg.returns() eq 'Pair' {
+#            $arg[1].named($arg[0]);
+#            $arg := $arg[1];
+#        }
+#        return $arg;
+#}
+
+method arglist($/) {
+    my $past := PAST::Op.new( :node($/) );
+    if ($<EXPR>) {
+        my $expr := $($<EXPR>[0]);
+        if ($expr.name() eq 'infix:,') {
+            for @($expr) {
+                if $_.returns() eq 'Pair' {
+                    $_[1].named($_[0]);
+                    $_ := $_[1];
+                }
+                $past.push( $_ );
+            }
+        }
+        else {
+            if $expr.returns() eq 'Pair' {
+                $expr[1].named($expr[0]);
+                $expr := $expr[1];
+            }
+            $past.push( $expr );
+        }
+    }
+    make $past;
+}
+##.sub 'arglist' :method
+##    .param pmc match
+##    .local pmc past
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    past = $P0.'new'( 'node'=>match )
+##    $P1 = match['EXPR']
+##    if null $P1 goto end
+##    .local pmc expr, iter
+##    $P2 = $P1[0]
+##    expr = $P2.'get_scalar'()
+##    $S0 = expr.'name'()
+##    if $S0 != 'infix:,' goto one_arg
+##  comma_arg:
+##    .local pmc iter
+##    iter = expr.'iterator'()
+##  iter_loop:
+##    unless iter goto end
+##    $P0 = shift iter
+##    $P0 = 'callarg'($P0)
+##    past.'push'($P0)
+##    goto iter_loop
+##  one_arg:
+##    $P0 = 'callarg'(expr)
+##    past.'push'($P0)
+##  end:
+##    match.'result_object'(past)
+##.end
+
+
+##.sub 'callarg'
+##    .param pmc arg
+##    $S0 = arg.'returns'()
+##    unless $S0 == 'Pair' goto end
+##    $P0 = arg[0]
+##    $P1 = arg[1]
+##    $P1.'named'($P0)
+##    arg = $P1
+##  end:
+##    .return (arg)
+##.end
+
+
+method noun($/, $key) {
+    if $key eq 'self' {
+        make PAST::Var.new('name'=>'self', 'node'=>$/);
+    }
+    else {
+        make $($/{$key});
+    }
+}
+##.sub 'noun' :method
+##    .param pmc match
+##    .param pmc key
+##    $P0 = match[key]
+##    $P1 = $P0.'get_scalar'()
+##    match.'result_object'($P1)
+##.end
+
+
+method colonpair($/) {
+    make PAST::Op.new( PAST::Val.new( :value(~$<ident>),
+                                      :node($<ident>)),
+                       $($<EXPR>),
+                       :name('infix:=>'),
+                       :returns('Pair'),
+                       :node($/)
+                     );
+}
+##.sub 'colonpair' :method
+##    .param pmc match
+##    $S0 = match['ident']
+##    $P0 = match['ident']
+##    $P9 = get_hll_global ['PAST'], 'Val'
+##    $P1 = $P9.'new'('value'=>$S0, 'node'=>$P0)
+##    $P2 = match['EXPR']
+##    $P2 = $P2.'get_scalar'()
+##    $P9 = get_hll_global ['PAST'], 'Op'
+##    $P3 = $P9.'new'($P1, $P2, 'name'=>'infix:=>', 'returns'=>'Pair', 'node'=>match)
+##    match.'result_object'($P3)
+##.end
+
+
+method package_declarator($/, $key) {
+    my $past := $($/{$key});
+    $past.namespace($<name><ident>);
+    $past.blocktype('declaration');
+    $past.pirflags(':init :load');
+    $past.lexical(0);
+
+    #if ($<sym> eq 'class') { ...code to make class... }
+
+    make $past;
+ #    PIR q< $P0 = get_hll_global ['NQP';'Grammar';'Actions'], 'package_declarator_helper' >;
+ #    PIR q< $P1 = find_lex '$/'                          >;
+ #    PIR q< $P2 = find_lex '$key'                        >;
+ #    PIR q< $P0($P1, $P2)                                >;
+}
+#
+##.sub 'package_declarator' :method
+##    .param pmc match
+##    .param pmc key
+##    .local pmc past
+##    $P0 = match[key]
+##    past = $P0.'get_scalar'()
+##    $P1 = match['name']
+##    $P1 = $P1['ident']
+##    past.'namespace'($P1)
+##    past.'blocktype'('declaration')
+##    past.'pirflags'(':init :load')
+##    past.'lexical'(0)
+##    $S0 = match['sym']
+##    if $S0 != 'class' goto class_done
+##    .local string inline
+##    inline = <<'        INLINE'
+##        $P0 = get_hll_global 'Protomaker'
+##        $P1 = split '::', '%s'
+##        push_eh subclass_done
+##        $P2 = $P0.'new_subclass'('Protoobject', $P1)
+##        pop_eh
+##      subclass_done:
+##        INLINE
+##    $S0 = match['name']
+##    $I0 = index inline, '%s'
+##    substr inline, $I0, 2, $S0
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    $P1 = $P0.'new'('inline'=>inline, 'pasttype'=>'inline')
+##    $P2 = past[0]
+##    $P2.'push'($P1)
+##  class_done:
+##    match.'result_object'(past)
+##.end
+
+
+method scope_declarator($/) {
+     my $past := $($<variable>);
+     my $name := $past.name();
+     our $?BLOCK;
+     unless $?BLOCK.symbol($name) {
+         $past.isdecl(1);
+         #my $scope := ($<declarator> eq 'my') ? 'lexical' : 'package';
+         my $scope;
+         if $<declarator> eq 'my' {
+             $scope := 'lexical';
+         }
+         else {
+             $scope := 'package';
+         }
+         $?BLOCK.symbol($name, :scope($scope));
+     }
+     make $past;
+}
+##.sub 'scope_declarator' :method
+##    .param pmc match
+##    .local pmc past, block
+##    .local string name
+##    $P0 = match['variable']
+##    past = $P0.'get_scalar'()
+##    name = past.'name'()
+##    block = get_global '$?BLOCK'
+##    $P0 = block.'symbol'(name)
+##    if $P0 goto end
+##    past.'isdecl'(1)
+##    .local string scope
+##    scope = 'package'
+##    $S0 = match['declarator']
+##    if $S0 != 'my' goto have_scope
+##    scope = 'lexical'
+##  have_scope:
+##    block.'symbol'(name, 'scope'=>scope)
+##  end:
+##    match.'result_object'(past)
+##.end
+
+
+method variable($/, $key) {
+    if ($key eq '$< >') {
+        say("variable", ~$/[0]);
+        make PAST::Var.new(
+                 PAST::Var.new(:scope('lexical'), :name('$/')),
+                 PAST::Val.new(:value(~$/[0])),
+                 :scope('keyed'),
+                 :viviself('Undef') );
+    }
+    else {
+        make PAST::Var.new(:node($/), :name(~$/) );
+    }
+}
+##.sub 'variable' :method
+##    .param pmc match
+##    .param pmc key
+##    if key != '$< >' goto past_var
+##  past_match_keyed:
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = $P0.'new'('scope'=>'lexical', 'name'=>'$/')
+##    $P2 = get_hll_global ['PAST'], 'Val'
+##    $S0 = match[0]
+##    $P3 = $P2.'new'('value'=>$S0)
+##    $P4 = $P0.'new'($P1, $P3, 'scope'=>'keyed', 'viviself'=>'Undef')
+##    match.'result_object'($P4)
+##    .return ()
+##  past_var:
+##    $S0 = match
+##    $S1 = match['sigil']
+##    $S2 = 'Undef'
+##    if $S1 != '%' goto past_sigil_is_array
+##    $S2 = 'Hash'
+##    goto past_sigil
+##  past_sigil_is_array:
+##    if $S1 != '@' goto past_sigil
+##    $S2 = 'ResizablePMCArray'
+##    goto past_sigil
+##  past_sigil:
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = $P0.'new'('node'=>match, 'name'=>$S0, 'viviself'=>$S2)
+##    match.'result_object'($P1)
+##.end
+
+
+method value($/, $key) {
+    make $($/{$key});
+}
+###.sub 'value' :method
+###    .param pmc match
+###    .param pmc key
+###    $P0 = match[key]
+###    $P1 = $P0.'get_scalar'()
+###    match.'result_object'($P1)
+###.end
+
+
+method quote($/) {
+    make PAST::Val.new(:node($/), :value(~($<string_literal>)));
+}
+##.sub 'quote' :method
+##    .param pmc match
+##    .param pmc key             :optional
+##    .local string value
+##    $P0 = match['string_literal']
+##    value = $P0.'get_scalar'()
+##    $P0 = get_hll_global ['PAST'], 'Val'
+##    $P1 = $P0.'new'('node'=>match, 'value'=>value)
+##    match.'result_object'($P1)
+##.end
+
+
+
+
+method typename($/, $key) {
+    my $ns := $<name><ident>;
+    my $shortname;
+    PIR q<    $P0 = find_lex '$ns'         >;
+    PIR q<    $P0 = clone $P0              >;
+    PIR q<    $P1 = pop $P0                >;
+    PIR q<    store_lex '$ns', $P0         >;
+    PIR q<    store_lex '$shortname', $P1  >;
+    make PAST::Var.new( :name($shortname),
+                        :namespace($ns),
+                        :scope('package'),
+                        :node($/)
+                      );
+}
+
+
+##.sub 'typename' :method
+##    .param pmc match
+##    .param pmc key
+##    .local pmc ns, name
+##    $P0 = match['name']
+##    $P0 = $P0['ident']
+##    ns = clone $P0
+##    name = pop ns
+##    $P0 = get_hll_global ['PAST'], 'Var'
+##    $P1 = $P0.'new'('node'=>match, 'scope'=>'package', 'name'=>name, 'namespace'=>ns)
+##    match.'result_object'($P1)
+##.end
+
+
+method number($/    ) {
+    make PAST::Val.new(:node($/), :value(~$/), :returns('Integer'));
+}
+##.sub 'number' :method
+##    .param pmc match
+##    .param pmc key             :optional
+##    .local pmc past
+##    $I0 = match
+##    $P0 = get_hll_global ['PAST'], 'Val'
+##    past = $P0.'new'('node'=>match, 'value'=>$I0)
+##    match.'result_object'(past)
+##.end
+
+
+method subcall($/) {
+    my $past := $($<arglist>);
+    $past.name(~$<ident>);
+    $past.pasttype('call');
+    $past.node($/);
+    make $past;
+}
+##.sub 'subcall' :method
+##    .param pmc match
+##    .param pmc key             :optional
+##    .local pmc past
+##    $P0 = match['arglist']
+##    past = $P0.'get_scalar'()
+##    $S0 = match['ident']
+##    past.'name'($S0)
+##    past.'pasttype'('call')
+##    past.'node'(match)
+##    match.'result_object'(past)
+##.end
+
+
+#### Expressions and operators ####
+method EXPR($/, $key) {
+    if ($key eq 'end') {
+        make $($<expr>);
+    }
+    else {
+        my $past := PAST::Op.new( :name($<type>),
+                                  :pasttype($<top><pasttype>),
+                                  :pirop($<top><pirop>),
+                                  :inline($<top><inline>),
+                                  :lvalue($<top><lvalue>),
+                                  :node($/)
+                                );
+        for @($/) {
+            $past.push( $($_) );
+        }
+        make $past;
+    }
+}
+
+
+##.sub 'EXPR' :method
+##    .param pmc match
+##    .param pmc key
+##    if key != 'end' goto expr_reduce
+##  expr_end:
+##    $P0 = match['expr']
+##    $P1 = $P0.'get_scalar'()
+##    match.'result_object'($P1)
+##    .return ()
+##  expr_reduce:
+##    .local pmc past
+##    .local string name, pirop, pasttype, inline, lvalue
+##    name = match['type']
+##    pirop = match['top';'pirop']
+##    pasttype = match['top'; 'pasttype']
+##    inline = match['top'; 'inline']
+##    lvalue = match['top'; 'lvalue']
+##    $P0 = get_hll_global ['PAST'], 'Op'
+##    past = $P0.'new'('node'=>match, 'name'=>name, 'pirop'=>pirop, 'pasttype'=>pasttype, 'inline'=>inline, 'lvalue'=>lvalue)
+##    $P1 = match.'get_array'()
+##    if null $P1 goto iter_end
+##    .local pmc iter
+##    iter = new 'Iterator', $P1
+##  iter_loop:
+##    unless iter goto iter_end
+##    $P2 = shift iter
+##    $P2 = $P2.'get_scalar'()
+##    past.'push'($P2)
+##    goto iter_loop
+##  iter_end:
+##    match.'result_object'(past)
+##.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/nqp/bootstrap/nqp.pir (from r44981, branches/ops_pct/compilers/nqp/bootstrap/nqp.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/bootstrap/nqp.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/bootstrap/nqp.pir)
@@ -0,0 +1,212 @@
+# Copyright (C) 2008-2009, Parrot Foundation.
+# $Id$
+
+=head1 TITLE
+
+nqp.pir - A nqp compiler.
+
+=head2 Description
+
+This is the base file for the nqp compiler.
+
+This file includes the parsing and grammar rules from
+the src/ directory, loads the relevant PGE libraries,
+and registers the compiler under the name 'nqp'.
+
+=head2 Functions
+
+=over 4
+
+=item onload()
+
+Creates the nqp compiler using a C<PCT::HLLCompiler>
+object.
+
+=cut
+
+.namespace [ 'NQP';'Compiler' ]
+
+.loadlib 'nqp_group'
+
+.sub 'onload' :anon :load :init
+    load_bytecode 'PCT.pbc'
+
+    $P0 = get_hll_global ['PCT'], 'HLLCompiler'
+    $P1 = $P0.'new'()
+    $P1.'language'('NQP')
+    $P1.'parsegrammar'('NQP::Grammar')
+    $P1.'parseactions'('NQP::Grammar::Actions')
+.end
+
+=item main(args :slurpy)  :main
+
+Start compilation by passing any command line C<args>
+to the nqp compiler.
+
+=cut
+
+.sub 'main' :main
+    .param pmc args
+
+    $P0 = compreg 'NQP'
+    $P1 = $P0.'command_line'(args)
+.end
+
+.include 'compilers/nqp/src/builtins.pir'
+.include 'compilers/nqp/src/Grammar_gen.pir'
+.include 'compilers/nqp/bootstrap/gen_actions.pir'
+
+
+.namespace []
+
+.sub 'initlist' :anon :load :init
+    subclass $P0, 'ResizablePMCArray', 'List'
+    $P0 = new 'List'
+    set_hll_global ['NQP';'Grammar';'Actions'], '@?BLOCK', $P0
+.end
+
+
+.namespace [ 'List' ]
+
+.sub 'unshift' :method
+    .param pmc obj
+    unshift self, obj
+.end
+
+.sub 'shift' :method
+    shift $P0, self
+    .return ($P0)
+.end
+
+.sub 'push' :method
+    .param pmc obj
+    push self, obj
+.end
+
+
+#.namespace [ 'NQP';'Grammar';'Actions' ]
+#
+#.sub 'package_declarator_helper'
+#    .param pmc match
+#    .param pmc key
+#    .local pmc past
+#    $P0 = match[key]
+#    past = $P0.'get_scalar'()
+#    $P1 = match['name']
+#    $P1 = $P1['ident']
+#    past.'namespace'($P1)
+#    past.'blocktype'('declaration')
+#    past.'pirflags'(':init :load')
+#    past.'lexical'(0)
+#    $S0 = match['sym']
+#    if $S0 != 'class' goto class_done
+#    .local string inline
+#    inline = <<'        INLINE'
+#        $P0 = get_hll_global 'Protomaker'
+#        $P1 = split '::', '%s'
+#        push_eh subclass_done
+#        $P2 = $P0.'new_subclass'('Protoobject', $P1)
+#        pop_eh
+#      subclass_done:
+#        INLINE
+#    $S0 = match['name']
+#    $I0 = index inline, '%s'
+#    substr inline, $I0, 2, $S0
+#    $P0 = get_hll_global ['PAST'], 'Op'
+#    $P1 = $P0.'new'('inline'=>inline, 'pasttype'=>'inline')
+#    $P2 = past[0]
+#    $P2.'push'($P1)
+#  class_done:
+#    match.'result_object'(past)
+#.end
+
+
+
+.sub '__onload' :init :load
+
+    ##  initialize optable with inline PIR
+    .local pmc optable
+    optable = get_hll_global [ 'NQP';'Grammar' ], '$optable'
+    optable['prefix:~'; 'inline'] = <<"        END"
+        ##  inline prefix:~
+        $S0 = %0
+        %r = new 'String'
+        %r = $S0
+        END
+
+    optable['prefix:+'; 'inline'] = <<"        END"
+        ##  inline prefix:+
+        $N0 = %0
+        %r = new 'Float'
+        %r = $N0
+        END
+
+    optable['infix:=='; 'inline'] = <<"        END"
+        ##  inline infix:==
+        $I0 = cmp_num %0, %1
+        $I0 = iseq $I0, 0
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    optable['infix:!='; 'inline'] = <<"        END"
+        ##  inline infix:!=
+        $I0 = cmp_num %0, %1
+        $I0 = isne $I0, 0
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    optable['infix:eq'; 'inline'] = <<"        END"
+        ##  inline infix:eq
+        $S0 = %0
+        $S1 = %1
+        $I0 = iseq $S0, $S1
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    optable['infix:ne'; 'inline'] = <<"        END"
+        ##  inline infix:ne
+        $S0 = %0
+        $S1 = %1
+        $I0 = isne $S0, $S1
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    optable['infix:=:='; 'inline'] = <<"        END"
+        ##  inline infix:=:=
+        $I0 = issame %0, %1
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    optable['prefix:!'; 'inline'] = <<"        END"
+        ##  inline prefix:!
+        $I0 = isfalse %0
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    optable['prefix:?'; 'inline'] = <<"        END"
+        ##  inline prefix:?
+        $I0 = istrue %0
+        %r = new 'Integer'
+        %r = $I0
+        END
+
+    .return ()
+.end
+
+
+=back
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:
+

Copied: branches/ops_pct/compilers/nqp/bootstrap/t/harness (from r44981, branches/ops_pct/compilers/nqp/bootstrap/t/harness)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/bootstrap/t/harness	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/bootstrap/t/harness)
@@ -0,0 +1,14 @@
+#! perl
+
+# $Id$
+
+use strict;
+use warnings;
+
+use FindBin;
+use lib "$FindBin::Bin/../../../../lib";
+
+use Parrot::Test::Harness
+    language => 'nqp',
+    exec     => [ '../../../parrot', 'nqp.pbc' ],
+    files    => [ '../t/*.t' ];

Copied: branches/ops_pct/compilers/nqp/nqp.pir (from r44981, branches/ops_pct/compilers/nqp/nqp.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/nqp.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/nqp.pir)
@@ -0,0 +1,35 @@
+# Copyright (C) 2007-2008, Parrot Foundation.
+# $Id$
+
+.namespace [ 'NQP';'Compiler' ]
+
+.sub '__onload' :load :init
+    load_bytecode 'PGE.pbc'
+    load_bytecode 'PCT.pbc'
+
+    $P0 = new [ 'PCT';'HLLCompiler' ]
+    $P0.'language'('NQP')
+    $P0.'parsegrammar'('NQP::Grammar')
+    $P0.'parseactions'('NQP::Grammar::Actions')
+
+    $P0 = new 'Integer'
+    set_hll_global ['NQP';'Grammar'], '$!endstmt', $P0
+.end
+
+.sub 'main' :main
+    .param pmc args
+    $P0 = compreg 'NQP'
+    .tailcall $P0.'command_line'(args, 'encoding'=>'utf8', 'transcode'=>'ascii')
+.end
+
+.include 'compilers/nqp/src/Grammar_gen.pir'
+
+.include 'compilers/nqp/src/Grammar/Actions.pir'
+
+.include 'compilers/nqp/src/builtins.pir'
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/nqp/src/Grammar.pg (from r44981, branches/ops_pct/compilers/nqp/src/Grammar.pg)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/src/Grammar.pg	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/src/Grammar.pg)
@@ -0,0 +1,507 @@
+# Copyright (C) 2007-2009, Parrot Foundation.
+# $Id$
+
+
+=begin overview
+
+The following is the grammar for nqp written as a sequence of
+Perl 6 rules.  In each of the rules, the special notation C<{*}>
+marks a point in the rule where the corresponding action in
+NQP::Grammar::Actions is to be invoked (see F<src/Grammar/Actions.pir>).
+These actions are then used to construct the AST nodes for
+the program.
+
+The C<#=> markers at the ends of lines are used to distinguish
+among multiple C<{*}> actions within a rule, by passing the value
+after the marker as a 'key' argument to the action method.
+
+=end overview
+
+grammar NQP::Grammar is PCT::Grammar;
+
+
+token TOP {
+  <statement_block>
+  [ $ || <panic: 'Syntax error'> ]
+  {*}
+}
+
+##  The <ws> and <pod_comment> rules handle whitespace and comments.
+##  These are taken from an earlier draft of Perl 6, so they do not
+##  yet handle all valid forms of Perl 6 whitespace.
+token ws {
+    {{  $P0 = match.'to'()
+        $P1 = get_hll_global [ 'NQP';'Grammar' ], '$!ws'
+        if null $P1 goto set_new_ws
+        $P2 = $P1.'to'()
+        if $P0 != $P2 goto set_new_ws
+        .return (1)
+      set_new_ws:
+        set_hll_global [ 'NQP';'Grammar' ], '$!ws', match
+    }}
+    [ \s+
+    | ^^ [ \# \N*
+         | <.pod_comment>
+         ]
+    | \# \N*
+    ]*
+}
+
+
+token afterws {
+    ##  <?{ $¢ == $!ws_to != $!ws_from }>
+    {{  $P0 = match.'to'()
+        $P1 = get_hll_global [ 'NQP';'Grammar' ], '$!ws'
+        $P2 = $P1.'to'()
+        if $P0 != $P2 goto end
+        $P2 = $P1.'from'()
+        if $P0 == $P1 goto end
+        .return (1)
+      end:
+    }}
+    <!>
+}
+
+
+regex pod_comment {
+    ^^ '=' [ [ 'cut' \h*: | 'end' [\h\N*]? ]
+           | 'for' [ \h\N+: ] \n [ \N+\n ]*:
+           | \w\N*: \n .*? \n '=' [ 'cut' \h*: | 'end' [\h\N*:]? ]
+           ]
+           [\n|$]
+}
+
+
+#### Blocks and Statements ####
+
+##  A <statement_block> is a statement list that is returned as
+##  a PAST::Block node.
+rule statement_block {
+    {*}                                                    #= open
+    <statement_list>
+    {*}                                                    #= close
+}
+
+##  Parse a list of statements.
+rule statement_list {
+    [ <statement>
+        [  <.statement_end> || <panic: 'Statement not terminated properly'> ]
+    ]*
+    {*}
+}
+
+
+##  Parse a single statement, which may be either a bare block
+##  or an expression.  Any statement termination is handled by
+##  the calling rule.
+rule statement {
+    | <if_statement> {*}                         #= if_statement
+    | <unless_statement> {*}                     #= unless_statement
+    | <while_statement> {*}                      #= while_statement
+    | <repeat_statement> {*}                     #= repeat_statement
+    | <for_statement> {*}                        #= for_statement
+    | <return_statement> {*}                     #= return_statement
+    | <make_statement> {*}                       #= make_statement
+    | <inline_pir_statement> {*}                 #= inline_pir_statement
+    | <block> {*}                                #= block
+    | <EXPR> {*}                                 #= EXPR
+}
+
+
+##  The statement_end rule detects when we're at valid statement
+##  termination point.  A semicolon always acts as a valid
+##  statement ending point, as does the presence of any expression
+##  terminator.  The MARK_STATEMENT_END subrule is used by other
+##  rules to indicate a valid statement end even when a terminator
+##  isn't present (e.g., the closing '}' at the end of a line for
+##  a <block> ).
+
+token terminator { <[ } \] ) ]> | $ }
+
+token statement_end {
+     || ';'
+     || <?before <terminator>>
+     || {{  $P0 = get_hll_global ['NQP';'Grammar'], '$!endstmt'
+            $P1 = get_hll_global ['NQP';'Grammar'], '$!ws'
+            $P2 = $P1.'from'()
+            if $P0 != $P2 goto end
+            .return (1)
+            end:
+        }} <!>
+}
+
+token MARK_STATEMENT_END {
+    {{  $P0 = match.'to'()
+        $P0 = clone $P0
+        set_hll_global ['NQP';'Grammar'], '$!endstmt', $P0
+    }}
+    <.ws>
+}
+
+
+##  The if_statement handles conditional statements such as 'if' and
+##  'unless'.
+
+rule if_statement {
+    $<sym>=['if']
+    <EXPR> <block>
+    [ 'elsif' <EXPR> <block> ]*
+    [ 'else' $<else>=<block> ]?
+    {*}
+}
+
+rule unless_statement {
+    $<sym>=['unless']
+    <EXPR> <block>
+    {*}
+}
+
+rule while_statement {
+    $<sym>=['while'|'until'] <EXPR> <block>
+    {*}
+}
+
+rule repeat_statement {
+    'repeat' <block> $<sym>=['while'|'until'] <EXPR>
+    {*}
+}
+
+rule for_statement {
+    $<sym>=['for'] <EXPR> <block>
+    {*}
+}
+
+
+rule return_statement {
+    $<sym>=['return']
+    [ <EXPR> || <panic: 'Unable to parse argument to "return"'> ]
+    {*}
+}
+
+rule make_statement {
+    $<sym>=['make']
+    [ <EXPR> || <panic: 'Unable to parse argument to "make"'> ]
+    {*}
+}
+
+rule inline_pir_statement {
+    'PIR'
+    [ <quote> {*}                              #= quote
+    | 'q:to:' [ \' (<-['\n]>+) \' | \" (<-["\n]>+) \" | \< (<-[\>\n]>+) \> ]
+      [:sigspace(0):ratchet(0)
+        ';' \h*: \n
+        $<text>=[ [\N*:\n]*? ]
+        ^^ \h*: $0 \h*: \n
+        <.MARK_STATEMENT_END>
+      ] {*}                                    #= heredoc
+    ]
+}
+
+
+##  Parse a block.  If the closing brace is at the end of a line,
+##  then we call <.MARK_STATEMENT_END> so that any following
+##  <statement_end> rule can succeed.
+
+token block {
+    '{'
+    <statement_block>
+    [ '}' || <panic: 'Missing "}"'> ]
+    [ \h* [ \# \N* ]? \n  <.MARK_STATEMENT_END> ]?
+    {*}
+}
+
+
+#### Subroutine and method definitions ####
+
+rule routine_def {
+    $<declarator>=['sub'|'method']
+    $<name>=[<ident>[':sym<'<-[>]>+'>']?]
+    '(' <signature> ')'
+    <block>
+    {*}
+}
+
+rule signature {
+    ( <parameter> ( ',' | <?before ')'> ) )*
+    {*}
+}
+
+token parameter {
+    | [
+        $<named>=[':'?]
+        <param_var>
+        $<quant>=[ <[ ? ! ]>? ]
+      ] {*}                                                #= non-slurp
+    | $<quant>=['*'?] <param_var> {*}                      #= slurp
+}
+
+token param_var {
+    [
+    | '$/'
+    | <sigil> <ident>
+    ]
+    {*}
+}
+
+
+#### Terms ####
+
+token term {
+    <noun>
+    <postfix>*
+    {*}                                                    #= end
+}
+
+token postfix {
+    <!afterws>
+    [ <methodop> {*}                                       #= methodop
+    | <postcircumfix> {*}                                  #= postcircumfix
+    ]
+}
+
+token methodop {
+    '.' <ident>
+    [
+    | '(' ~ ')' <arglist> {*}                              #= arglist
+    | {*}                                                  #= null
+    ]
+}
+
+token postcircumfix {
+    | '(' <arglist> ')' {*}                                #= ( )
+    | '[' <EXPR> <.ws> ']' {*}                             #= [ ]
+    | '{' <EXPR> <.ws> '}' {*}                             #= { }
+    | '<' <string_literal: '>' > '>' {*}                   #= < >
+}
+
+rule arglist {
+    <EXPR>?
+    {*}
+}
+
+token noun {
+    | <colonpair> {*}                                      #= colonpair
+    | <package_declarator> {*}                             #= package_declarator
+    | <scope_declarator> {*}                               #= scope_declarator
+    | <routine_def> {*}                                    #= routine_def
+    | <circumfix> {*}                                      #= circumfix
+    | <variable> {*}                                       #= variable
+    | <subcall> {*}                                        #= subcall
+    | 'self' >> {*}                                        #= self
+    | <value> {*}                                          #= value
+    | <name> {*}                                           #= name
+}
+
+
+token colonpair {
+    | ':' <ident> [ '(' <EXPR> <.ws> ')' ] {*}
+}
+
+
+rule package_declarator {
+    $<sym>=[module|class]
+    <name>
+    [ 'is' <parent=name> ]?
+    [
+    || ';' <statement_block> {*}                           #= statement_block
+    || <block> {*}                                         #= block
+    ]
+}
+
+
+rule scope_declarator {
+    $<declarator>=[my|our]
+    <variable>
+    {*}
+}
+
+
+token circumfix {
+    | '(' <EXPR>? <.ws> ')' {*}                            #= ( )
+    | '$(' <EXPR>? <.ws> ')' {*}                           #= $( )
+    | '@(' <EXPR>? <.ws> ')' {*}                           #= @( )
+}
+
+
+token variable {
+    | '$<' ( <-[\>]>* ) '>' {*}                            #= $< >
+    | '$/' {*}                                             #= $/
+    | <sigil> <twigil>? <ident> {*}                        #= $var
+}
+
+token sigil { <[$@%&]> }
+
+token twigil { <[.!^*+?=]> }
+
+token value {
+    | <quote> {*}                                          #= quote
+    | <number> {*}                                         #= number
+    | <typename> {*}                                       #= typename
+}
+
+token quote {
+    [ \'  <string_literal: '\''> \' {*}                    #= string
+    | '"' <string_literal: '"'> '"' {*}                    #= string
+    | 'q' <.ws> '<' <string_literal: '>'> '>' {*}          #= string
+    | 'Q' <.ws> ':PIR' <.ws>
+        [:ratchet(0) '{{' (.*?) '}}' | '{' (.*?) '}' ] {*} #= PIR
+    ]
+}
+
+
+token typename {
+    <name> {*}                                             #= name
+}
+
+
+token name {
+    <ident> [ '::' <ident> ]*
+    {*}
+}
+
+
+token number { \d+ {*} }
+
+
+token subcall {
+    <ident> '(' <arglist> ')'
+    {*}
+}
+
+
+
+#### Expressions and operators ####
+
+rule EXPR is optable { ... }
+
+## Terms
+proto 'term:' is precedence('z=')
+    is parsed(&term)
+    { ... }
+
+## Postfix operators
+proto postfix:<++> is looser('term:')
+    is pasttype('inline')
+    { ... }
+proto postfix:<--> is equiv(postfix:<++>)
+    is pasttype('inline')
+    { ... }
+
+## Unary prefix operators
+proto prefix:<+> is looser(postfix:<++>)
+    is pirop('set N*')
+    { ... }
+proto prefix:<~> is equiv(prefix:<+>)
+    is pirop('set S*')
+    { ... }
+proto prefix:<-> is equiv(prefix:<+>)
+    is pirop('neg')
+    { ... }
+proto prefix:<!> is equiv(prefix:<+>)
+    is pirop('isfalse')
+    { ... }
+proto prefix:<?> is equiv(prefix:<+>)
+    is pirop('istrue')
+    { ... }
+
+## Multiplicative operators
+proto infix:<*> is looser(prefix:<+>)
+    is pirop('mul')
+    { ... }
+proto infix:</> is equiv(infix:<*>)
+    is pirop('div')
+    { ... }
+proto infix:<%> is equiv(infix:<*>)
+    is pirop('mod')
+    { ... }
+
+
+## Additive operators
+proto infix:<+> is looser(infix:<*>)
+    is pirop('add')
+    { ... }
+proto infix:<-> is equiv(infix:<+>)
+    is pirop('sub')
+    { ... }
+
+## Concatenation operators
+proto infix:<~> is looser(infix:<+>)
+    is pirop('concat')
+    { ... }
+
+## Comparison operators
+proto infix:<==> is looser(infix:<+>)
+    is pirop('iseq INn')
+    { ... }
+proto infix:<!=> is equiv(infix:<==>)
+    is pirop('isne INn')
+    { ... }
+proto infix:«>=» is equiv(infix:<==>)
+    is pirop('isge INn')
+    { ... }
+proto infix:«<=» is equiv(infix:<==>)
+    is pirop('isle INn')
+    { ... }
+proto infix:«>» is equiv(infix:<==>)
+    is pirop('isgt INn')
+    { ... }
+proto infix:«<» is equiv(infix:<==>)
+    is pirop('islt INn')
+    { ... }
+
+proto infix:<eq> is equiv(infix:<==>)
+    is pirop('iseq ISs')
+    { ... }
+proto infix:<ne> is equiv(infix:<==>)
+    is pirop('isne ISs')
+    { ... }
+proto infix:<lt> is equiv(infix:<==>)
+    is pirop('islt ISs')
+    { ... }
+proto infix:<le> is equiv(infix:<==>)
+    is pirop('isle ISs')
+    { ... }
+proto infix:<gt> is equiv(infix:<==>)
+    is pirop('isgt ISs')
+    { ... }
+proto infix:<ge> is equiv(infix:<==>)
+    is pirop('isge ISs')
+    { ... }
+proto infix:<=:=> is equiv(infix:<==>)
+    is pirop('issame')
+    { ... }
+
+## Tight logical operators
+proto infix:<&&> is looser(infix:<==>)
+    is pasttype('if')
+    { ... }
+proto infix:<||> is looser(infix:<&&>)
+    is pasttype('unless')
+    { ... }
+
+## Conditional
+proto ternary:<?? !!> is looser(infix:<||>)
+    is pasttype('if')
+    { ... }
+
+## Binding
+proto infix:<:=> is looser(ternary:<?? !!>)
+    is lvalue(1)
+    is pasttype('bind')
+    { ... }
+
+## Comma
+proto infix:<,> is looser(infix:<:=>)
+    is assoc('list')
+    is pasttype('list')
+    is nullterm
+    { ... }
+
+## loose logical operators
+proto infix:<and> is looser(infix:<,>)
+    is pasttype('if')
+    { .... }
+
+proto infix:<or> is looser(infix:<and>)
+    is pasttype('unless')
+    { ... }

Copied: branches/ops_pct/compilers/nqp/src/Grammar/Actions.pir (from r44981, branches/ops_pct/compilers/nqp/src/Grammar/Actions.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/src/Grammar/Actions.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/src/Grammar/Actions.pir)
@@ -0,0 +1,1075 @@
+# Copyright (C) 2007-2009, Parrot Foundation.
+# $Id$
+
+.sub '__onload' :init :load
+    $P0 = get_hll_global 'P6metaclass'
+    $P0 = $P0.'new_class'('NQP::Grammar::Actions')
+
+    ##  create the stack for nested lexical blocks
+    $P0 = new 'ResizablePMCArray'
+    set_hll_global ['NQP';'Grammar';'Actions'], '@?BLOCK', $P0
+
+    ##  initialize optable with inline PIR
+    .local pmc optable
+    optable = get_hll_global [ 'NQP';'Grammar' ], '$optable'
+
+    optable['postfix:++'; 'inline'] = <<"        END"
+        ##  inline postfix:++
+        clone %r, %0
+        inc %0
+        END
+
+    optable['postfix:--'; 'inline'] = <<"        END"
+        ##  inline postfix:--
+        clone %r, %0
+        dec %0
+        END
+
+    .return ()
+.end
+
+.namespace [ 'NQP';'Grammar';'Actions' ]
+
+
+##    method TOP($/, $key) {
+##        my $past := $($<statement_block>);
+##        $past.blocktype('declaration');
+##        make $past;
+##    }
+.sub 'TOP' :method
+    .param pmc match
+    .local pmc past
+    $P0 = match['statement_block']
+    past = $P0.'ast'()
+    past.'blocktype'('declaration')
+    match.'!make'(past)
+.end
+
+
+#### Blocks and Statements ####
+
+##    method statement_block($/, $key) {
+##        our $?BLOCK, @?BLOCK;
+##        if ($key ne 'close') {
+##            $?BLOCK := PAST::Block.new( PAST::Stmts.new(),
+##                                        :blocktype('immediate'),
+##                                        :node($/) );
+##            @?BLOCK.unshift($?BLOCK);
+##        }
+##        else {
+##            my $past := @?BLOCK.shift();
+##            $?BLOCK := @?BLOCK[0];
+##            $past.push($($<statement_list>));
+##            make $past;
+##        }
+##    }
+.sub 'statement_block' :method
+    .param pmc match
+    .param string key
+    if key == 'close' goto block_close
+  block_open:
+    .local pmc past
+    $P1 = get_hll_global ['PAST'], 'Stmts'
+    $P2 = $P1.'new'()
+    $P0 = get_hll_global ['PAST'], 'Block'
+    past = $P0.'new'($P2, 'blocktype'=>'immediate', 'node'=>match)
+    set_global '$?BLOCK', past
+    $P0 = get_global '@?BLOCK'
+    unshift $P0, past
+    .return ()
+  block_close:
+    $P0 = get_global '@?BLOCK'
+    past = shift $P0
+    $P1 = $P0[0]
+    set_global '$?BLOCK', $P1
+    $P2 = match['statement_list']
+    $P3 = $P2.'ast'()
+    past.'push'($P3)
+    match.'!make'(past)
+.end
+
+
+##    method statement_list($/) {
+##        my $past := PAST::Stmts.new(:node($/))
+##        for $<statement> {
+##            $past.push($($_));
+##        }
+##        make $past;
+##    }
+.sub 'statement_list' :method
+    .param pmc match
+    .local pmc past
+    $P0 = get_hll_global ['PAST'], 'Stmts'
+    past = $P0.'new'('node'=>match)
+    $P1 = match['statement']
+    if null $P1 goto iter_end
+    .local pmc it
+    it = iter $P1
+  iter_loop:
+    unless it goto iter_end
+    $P2 = shift it
+    $P2 = $P2.'ast'()
+    past.'push'($P2)
+    goto iter_loop
+  iter_end:
+    match.'!make'(past)
+.end
+
+
+##    method statement($/, $key) {
+##        make $($/{$key});
+##    }
+.sub 'statement' :method
+    .param pmc match
+    .param string key
+    $P0 = match[key]
+    $P1 = $P0.'ast'()
+    match.'!make'($P1)
+.end
+
+
+##    method if_statement($/) {
+##        my $cond := +$<EXPR> - 1;
+##        my $past := PAST::Op.new( $( $<EXPR>[$cond] ),
+##                                  $( $<block>[$cond] ),
+##                                  :pasttype('if'),
+##                                  :node( $/ )
+##                                );
+##        if ( $<else> ) {
+##            $past.push( $( $<else>[0] ) );
+##        }
+##        while ($cond != 0) {
+##            $cond := $cond - 1;
+##            $past := PAST::Op.new( $( $<EXPR>[$cond] ),
+##                                   $( $<block>[$cond] ),
+##                                   $past,
+##                                   :pasttype('if'),
+##                                   :node( $/ )
+##                                 );
+##        }
+##        make $past;
+.sub 'if_statement' :method
+    .param pmc match
+    .local pmc expr, block, past
+    .local int cond
+    .local pmc jmpstack
+    jmpstack = new 'ResizableIntegerArray'
+    cond = match['EXPR']
+    cond -= 1
+    local_branch jmpstack, get_expr
+    local_branch jmpstack, get_block
+    $P2 = get_hll_global ['PAST'], 'Op'
+    past = $P2.'new'(expr, block, 'pasttype'=>'if', 'node'=>match)
+
+    $I0 = exists match['else']
+    unless $I0 goto while
+    block = match['else']
+    block = block[0]
+    block = block.'ast'()
+    past.'push'( block )
+
+  while:
+    unless cond != 0 goto end_while
+    cond -= 1
+    local_branch jmpstack, get_expr
+    local_branch jmpstack, get_block
+    past = $P2.'new'(expr, block, past, 'pasttype'=>'if', 'node'=>match)
+    goto while
+
+  end_while:
+    goto end
+
+  get_expr:
+    expr = match['EXPR']
+    expr = expr[cond]
+    expr = expr.'ast'()
+    local_return jmpstack
+  get_block:
+    block = match['block']
+    block = block[cond]
+    block = block.'ast'()
+    local_return jmpstack
+  end:
+    match.'!make'(past)
+.end
+
+
+##    method unless_statement($/) {
+##        my $past := PAST::Op.new( $( $<EXPR> ),
+##                                  $( $<block> ),
+##                                  :pasttype('unless'),
+##                                  :node( $/ )
+##                                );
+##        make $past;
+##    }
+.sub 'unless_statement' :method
+    .param pmc match
+    .local pmc expr, block, past
+    expr = match['EXPR']
+    expr = expr
+    expr = expr.'ast'()
+    block = match['block']
+    block = block
+    block = block.'ast'()
+    $P0 = get_hll_global ['PAST'], 'Op'
+    past = $P0.'new'(expr, block, 'pasttype'=>'unless', 'node'=>match)
+    match.'!make'(past)
+.end
+
+
+##    method repeat_statement($/) {
+##        make PAST::Op.new( $($<EXPR>),
+##                           $($<block>),
+##                           :pasttype( 'repeat_' ~ $<sym> ),
+##                           :node( $/ )
+##                         );
+##    }
+.sub 'repeat_statement' :method
+    .param pmc match
+    $P1 = match['EXPR']
+    $P1 = $P1.'ast'()
+    $P2 = match['block']
+    $P2 = $P2.'ast'()
+    $S0 = match['sym']
+    $S0 = concat 'repeat_', $S0
+    $P0 = get_hll_global ['PAST'], 'Op'
+    $P5 = $P0.'new'( $P1, $P2, 'pasttype'=>$S0, 'node'=>match)
+    match.'!make'($P5)
+.end
+
+
+##    method while_statement($/) {
+##        make PAST::Op.new( $($<EXPR>),
+##                           $($<block>),
+##                           :pasttype( ~$<sym> ),
+##                           :node( $/ )
+##                         );
+##    }
+.sub 'while_statement' :method
+    .param pmc match
+    $P1 = match['EXPR']
+    $P1 = $P1.'ast'()
+    $P2 = match['block']
+    $P2 = $P2.'ast'()
+    $S0 = match['sym']
+    $P0 = get_hll_global ['PAST'], 'Op'
+    $P5 = $P0.'new'( $P1, $P2, 'pasttype'=>$S0, 'node'=>match)
+    match.'!make'($P5)
+.end
+
+
+##    method for_statement($/) {
+##        my $block := $<block>;
+##        $block.blocktype('immediate');
+##        $block.symbol('$_', :scope('lexical'));
+##        my $topic_var := PAST::Var.new( :name('$_'), :scope('parameter') );
+##        push @($block[0]), $topic_var;
+##        my $past := PAST::Op.new($($<EXPR>),
+##                                 $($<block>),
+##                                 :pasttype(~$<sym>),
+##                                 :node($/) );
+##        make $past;
+.sub 'for_statement' :method
+    .param pmc match
+    .local pmc block, past
+    $P0  = match['EXPR']
+    $P0  = $P0.'ast'()
+    $P1  = match['block']
+    block = $P1.'ast'()
+    block.'blocktype'('immediate')
+    .local pmc params, topic_var
+    params = block[0]
+    $P3 = get_hll_global ['PAST'], 'Var'
+    topic_var = $P3.'new'('name'=>'$_', 'scope'=>'parameter')
+    params.'push'(topic_var)
+    block.'symbol'('$_', 'scope'=>'lexical')
+    block.'arity'(1)
+    $P2  = get_hll_global ['PAST'], 'Op'
+    $S1  = match['sym']
+    past = $P2.'new'($P0, block, 'pasttype'=>$S1, 'node'=>match)
+    match.'!make'(past)
+.end
+
+
+##    method return_statement($/) {
+##        make PAST::Op.new( $($<EXPR>),
+##                           :pasttype('return'),
+##                           :node($/) );
+##    }
+.sub 'return_statement' :method
+    .param pmc match
+    $P0 = match['EXPR']
+    $P0 = $P0.'ast'()
+
+    $P1 = get_hll_global ['PAST'], 'Op'
+    $P1 = $P1.'new'( $P0, 'pasttype'=>'return', 'node'=>match)
+    match.'!make'($P1)
+.end
+
+
+##    method make_statement($/) {
+##        make PAST::Op.new( PAST::Var.new( :name('$/'),
+##                                          :scope('lexical') ),
+##                           $($<EXPR>),
+##                           :name('!make'),
+##                           :pasttype('callmethod') );
+##    }
+.sub 'make_statement' :method
+    .param pmc match
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P0.'new'( 'name'=>'$/', 'scope'=>'lexical' )
+    $P2 = match['EXPR']
+    $P3 = $P2.'ast'()
+    $P4 = get_hll_global ['PAST'], 'Op'
+    $P5 = $P4.'new'($P1, $P3, 'name'=>'!make', 'pasttype'=>'callmethod')
+    match.'!make'($P5)
+.end
+
+
+##    method inline_pir_statement($/, $key) {
+##        my $inline;
+##        if ($key eq 'quote')   { $inline := ~$($<quote><string_literal>) }
+##        if ($key eq 'heredoc') { $inline := ~$/<text> }
+##
+##        make PAST::Op.new( :inline( $inline ),
+##                           :pasttype('inline'),
+##                           :node( $/ )
+##                         );
+##    }
+.sub 'inline_pir_statement' :method
+    .param pmc match
+    .param pmc key
+    .local pmc inline
+    if key != 'quote' goto not_quote
+    $P0 = match['quote']
+    $P0 = $P0['string_literal']
+    inline = $P0.'ast'()
+    goto make
+  not_quote:
+    if key != 'heredoc' goto not_heredoc
+    $P0 = match['text']
+    inline = $P0.'Str'()
+  not_heredoc:
+  make:
+    $P1 = get_hll_global ['PAST'], 'Op'
+    $P2 = $P1.'new'( 'inline'=>inline, 'pasttype'=>'inline', 'node'=>match)
+    match.'!make'($P2)
+.end
+
+
+##    method block($/) {
+##        make $($<statement_block>);
+##    }
+.sub 'block' :method
+    .param pmc match
+    $P0 = match['statement_block']
+    $P0 = $P0.'ast'()
+    match.'!make'($P0)
+.end
+
+
+#### Subroutine and method definitions ####
+
+##    method routine_def($/) {
+##        my $past := $($<block>);
+##        $past.name(~$<name>);
+##        $past.node($/);
+##        $past.blocktype('declaration');
+##        $past.control('return_pir');
+##        my $params := $past[0];
+##        if $<declarator> eq 'method' {
+##            $past.blocktype('method');
+##            $past.push(PAST::Op.new('inline'=>'.lex 'self', self);
+##            $past.symbol('self', :scope('lexical'));
+##        }
+##        for $<signature>[0] {
+##            my $parameter := $($_<parameter>);
+##            $past.symbol($parameter.name(), :scope('lexical'));
+##            $params.push($parameter);
+##        }
+##        make $past;
+##    }
+.sub 'routine_def' :method
+    .param pmc match
+    .local pmc past
+    $P0 = match['block']
+    past = $P0.'ast'()
+    $S0 = match['name']
+    past.'name'($S0)
+    past.'node'(match)
+    past.'blocktype'('declaration')
+    past.'control'('return_pir')
+    .local pmc params
+    params = past[0]
+    $S0 = match['declarator']
+    if $S0 != 'method' goto add_signature
+    past.'blocktype'('method')
+    $P3 = get_hll_global ['PAST'], 'Op'
+    $P4 = $P3.'new'('inline'=>'    .lex "self", self', 'pasttype'=>'inline')
+    unshift past, $P4
+    past.'symbol'('self', 'scope'=>'lexical')
+  add_signature:
+    $P0 = match['signature']
+    $P0 = $P0[0]
+    if null $P0 goto param_end
+    unless $P0 goto param_end
+    .local pmc it
+    it = iter $P0
+  param_loop:
+    unless it goto param_end
+    $P1 = shift it
+    .local pmc parameter
+    $P2 = $P1['parameter']
+    parameter = $P2.'ast'()
+    $S0 = parameter.'name'()
+    past.'symbol'($S0, 'scope'=>'lexical')
+    params.'push'(parameter)
+    goto param_loop
+  param_end:
+    match.'!make'(past)
+.end
+
+
+##    method parameter($/, $key) {
+##        my $past := $( $<param_var> );
+##        my $sigil := $<param_var><sigil>;
+##        if $key eq 'slurp' {              # slurpy
+##            $past.slurpy( $sigil eq '@' || $sigil eq '%' );
+##            $past.named( $sigil eq '%' );
+##        }
+##        else {
+##            if $<named> eq ':' {          # named
+##                $past.named(~$<param_var><ident>);
+##                if $<quant> ne '!' {      #  required (optional is default)
+##                    $past.viviself('Undef');
+##                }
+##            }
+##            else {                        # positional
+##                if $<quant> eq '?' {      #  optional (required is default)
+##                    $past.viviself('Undef');
+##                }
+##            }
+##        }
+##        make $past;
+##    }
+.sub 'parameter' :method
+    .param pmc match
+    .param pmc key
+    .local pmc past, sigil
+    past = match['param_var']
+    past = past.'ast'()
+    sigil = match['param_var';'sigil']
+    if key != 'slurp' goto not_slurp
+    if sigil != '@' goto not_slurpy_array
+    past.'slurpy'(1)
+  not_slurpy_array:
+    if sigil != '%' goto not_slurpy_hash
+    past.'slurpy'(1)
+  not_slurpy_hash:
+    if sigil != '%' goto not_slurp
+    past.'named'(1)
+    goto make_past
+  not_slurp:
+    $S0 = match['named']
+    if $S0 != ':' goto not_named
+    $S0 = match['param_var';'ident']
+    past.'named'($S0)
+    $S0 = match['quant']
+    if $S0 == '!' goto not_named
+    past.'viviself'('Undef')
+  not_named:
+    $S0 = match['quant']
+    if $S0 != '?' goto make_past
+    past.'viviself'('Undef')
+  make_past:
+    match.'!make'(past)
+.end
+
+
+##    method param_var($/) {
+##        make PAST::Var.new(:name(~$/),
+##                           :scope('parameter'),
+##                           :node($/) );
+##    }
+.sub 'param_var' :method
+    .param pmc match
+    $S0 = match
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P0.'new'('name'=>$S0, 'scope'=>'parameter', 'node'=>match)
+    match.'!make'($P1)
+.end
+
+
+#### Terms and expressions ####
+
+##    method term($/, $key) {
+##        my $past := $($<noun>);
+##        for $<postfix> {
+##            my $term := $past;
+##            $past := $($_);
+##            $past.unshift($term);
+##        }
+##        make $past;
+##    }
+.sub 'term' :method
+    .param pmc match
+    .param pmc key
+    .local pmc past
+    $P0 = match['noun']
+    past = $P0.'ast'()
+    $P1 = match['postfix']
+    if null $P1 goto end
+    .local pmc it, term
+    it = iter $P1
+  iter_loop:
+    unless it goto end
+    $P2 = shift it
+    term = past
+    past = $P2.'ast'()
+    past.'unshift'(term)
+    goto iter_loop
+  end:
+    match.'!make'(past)
+.end
+
+
+##    method postfix($/, $key) {
+##        make $($/{$key});
+##    }
+.sub 'postfix' :method
+    .param pmc match
+    .param string key
+    $P0 = match[key]
+    $P1 = $P0.'ast'()
+    match.'!make'($P1)
+.end
+
+
+##    method methodop($/, $key) {
+##        my $past := $key eq 'null'
+##                        ?? PAST::Op.new
+##                        !! $<arglist>.ast;
+##        $past.name(~$<ident>);
+##        $past.pasttype('callmethod');
+##        $past.node($/);
+##        make $past;
+##    }
+.sub 'methodop' :method
+    .param pmc match
+    .param string key
+    .local pmc past
+    unless key == 'null' goto arglist
+    $P0 = get_hll_global ['PAST'], 'Op'
+    past = $P0.'new'()
+    goto have_past
+  arglist:
+    $P0 = match['arglist']
+    past = $P0.'ast'()
+  have_past:
+    $S0 = match['ident']
+    past.'name'($S0)
+    past.'pasttype'('callmethod')
+    past.'node'(match)
+    match.'!make'(past)
+.end
+
+
+##    method postcircumfix($/, $key) {
+##        if $key eq '( )' {
+##            my $past := $($<arglist>);
+##            $past.pasttype('call');
+##            $past.node($/);
+##            make $past;
+##        }
+##        elseif $key eq '< >' {
+##            my $value := PAST::Val.new( :value( $($<string_literal>) ) );
+##            make PAST::Var.new( $value,
+##                                :scope('keyed'),
+##                                :vivibase('Hash'),
+##                                :viviself('Undef'),
+##                                :node( $/ ) );
+##        }
+##        else {
+##            my $vivibase := ($key eq '{ }') ?? 'Hash' !! 'ResizablePMCArray';
+##            make PAST::Var.new( $($<EXPR>),
+##                                :scope('keyed'),
+##                                :vivibase($vivibase),
+##                                :viviself('Undef'),
+##                                :node($/) );
+##        }
+##    }
+.sub 'postcircumfix' :method
+    .param pmc match
+    .param string key
+    .local pmc past
+    if key == '( )' goto subcall
+    if key == '< >' goto keyed_const
+  keyed_var:
+    .local string vivibase, scope
+    vivibase = 'Hash'
+    scope = 'keyed'
+    if key != '[ ]' goto keyed_hash
+    vivibase = 'ResizablePMCArray'
+    scope = 'keyed_int'
+  keyed_hash:
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = match['EXPR']
+    $P2 = $P1.'ast'()
+    $P3 = $P0.'new'( $P2, 'scope'=>scope, 'vivibase'=>vivibase, 'viviself'=>'Undef', 'node'=>match )
+    match.'!make'($P3)
+    .return ()
+  subcall:
+    $P0 = match['arglist']
+    past = $P0.'ast'()
+    past.'pasttype'('call')
+    past.'node'(match)
+    match.'!make'(past)
+    .return ()
+  keyed_const:
+    $P0 = get_hll_global ['PAST'], 'Val'
+    $P1 = match['string_literal']
+    $P2 = $P1.'ast'()
+    .local pmc value
+    value = $P0.'new'( 'value' => $P2, 'node'=> $P1 )
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P0.'new'( value, 'scope'=>'keyed', 'vivibase'=>'Hash', 'viviself'=>'Undef', 'node'=>match)
+    match.'!make'($P1)
+.end
+
+
+##method circumfix($/, $key) {
+##    my $expr := $($<EXPR>[0]);
+##    if $key eq '@( )' {
+##        make PAST::Op.new( $expr,
+##                           :name('list'),
+##                           :pasttype('callmethod'),
+##                           :node($/) );
+##    }
+##    if $key eq '$( )' {
+##        make PAST::Op.new( $expr,
+##                           :name('ast'),
+##                           :pasttype('callmethod'),
+##                           :node($/) );
+##    }
+##    make $expr;
+##}
+.sub 'circumfix' :method
+    .param pmc match
+    .param string key
+    .local pmc past
+    $P0 = match['EXPR']
+    unless null $P0 goto have_expr
+    $P1 = match
+    goto get_past
+  have_expr:
+    $P1 = $P0[0]
+  get_past:
+    $P1 = $P1.'ast'()
+    $P0 = get_hll_global ['PAST'], 'Op'
+    if key == '@( )' goto list_context
+    if key == '$( )' goto scalar_context
+  parenthetical:
+    match.'!make'($P1)
+    .return ()
+  list_context:
+    past = $P0.'new'($P1, 'name' => 'list',  'pasttype'=>'callmethod', 'node'=>match)
+    match.'!make'(past)
+    .return ()
+  scalar_context:
+    past = $P0.'new'($P1, 'name' => 'ast', 'pasttype'=>'callmethod', 'node'=>match)
+    match.'!make'(past)
+.end
+
+
+##    method arglist($/) {
+##        sub callarg($arg) {
+##            if $arg.returns() eq 'Pair' {
+##                $arg[1].named($arg[0]);
+##                $arg := $arg[1];
+##            }
+##            return $arg;
+##        }
+##
+##        my $past := PAST::Op.new( :node($/) );
+##        if ($<EXPR>) {
+##            my $expr := $($<EXPR>[0]);
+##            if ($expr.name() eq 'infix:,') {
+##                for @($expr) {
+##                    $past.push( callarg($_) );
+##                }
+##            }
+##            else {
+##                $past.push( callarg($expr) );
+##            }
+##        }
+##        make $past;
+##    }
+.sub 'arglist' :method
+    .param pmc match
+    .local pmc past
+    $P0 = get_hll_global ['PAST'], 'Op'
+    past = $P0.'new'( 'node'=>match )
+    $P1 = match['EXPR']
+    if null $P1 goto end
+    .local pmc expr, iter
+    $P2 = $P1[0]
+    expr = $P2.'ast'()
+    $S0 = expr.'name'()
+    if $S0 != 'infix:,' goto one_arg
+  comma_arg:
+    iter = expr.'iterator'()
+  iter_loop:
+    unless iter goto end
+    $P0 = shift iter
+    $P0 = 'callarg'($P0)
+    past.'push'($P0)
+    goto iter_loop
+  one_arg:
+    $P0 = 'callarg'(expr)
+    past.'push'($P0)
+  end:
+    match.'!make'(past)
+.end
+
+.sub 'callarg'
+    .param pmc arg
+    $S0 = arg.'returns'()
+    unless $S0 == 'Pair' goto end
+    $P0 = arg[0]
+    $P1 = arg[1]
+    $P1.'named'($P0)
+    arg = $P1
+  end:
+    .return (arg)
+.end
+
+
+##    method noun($/, $key) {
+##        if $key eq 'self' {
+##            make PAST::Var.new(:name('self'), :scope('lexical'), :node($/));
+##        }
+##        else {
+##            make $($/{$key});
+##        }
+##    }
+.sub 'noun' :method
+    .param pmc match
+    .param pmc key
+
+    $P0 = match[key]
+    if key == 'self' goto make_self
+    $P1 = $P0.'ast'()
+    match.'!make'($P1)
+    .return()
+  make_self:
+    $P9 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P9.'new'('scope'=>'lexical', 'name'=>'self', 'node'=>$P0)
+    match.'!make'($P1)
+.end
+
+
+##    method colonpair($/) {
+##        make PAST::Op.new( PAST::Val.new( :value(~$<ident>),
+##                                          :node($<ident>)),
+##                           $($<EXPR>),
+##                           :name('infix:=>'),
+##                           :returns('Pair'),
+##                           :node($/)
+##                         );
+##    }
+.sub 'colonpair' :method
+    .param pmc match
+    $S0 = match['ident']
+    $P0 = match['ident']
+    $P9 = get_hll_global ['PAST'], 'Val'
+    $P1 = $P9.'new'('value'=>$S0, 'node'=>$P0)
+    $P2 = match['EXPR']
+    $P2 = $P2.'ast'()
+    $P9 = get_hll_global ['PAST'], 'Op'
+    $P3 = $P9.'new'($P1, $P2, 'name'=>'infix:=>', 'returns'=>'Pair', 'node'=>match)
+    match.'!make'($P3)
+.end
+
+
+##    method package_declarator($/, $key) {
+##        my $past := $($/{$key});
+##        $past.namespace($<name><ident>);
+##        $past.blocktype('declaration');
+##        $past.pirflags(':init :load');
+##        if ($<sym> eq 'class') {
+##            my $classpast :=
+##                PAST::Op.new(
+##                    ...P6metaclass...,
+##                    ~$<name>,
+##                    :pasttype('callmethod'), :name('new_class')
+##                );
+##            if $<parent> {
+##                $classpast.push(
+##                    PAST::Val.new( ~$<parent>[0] , :named('parent') )
+##                );
+##            }
+##            $past.push($classpast);
+##        }
+##        make $past;
+##    }
+.sub 'package_declarator' :method
+    .param pmc match
+    .param pmc key
+    .local pmc past
+    $P0 = match[key]
+    past = $P0.'ast'()
+    $P1 = match['name']
+    $P1 = $P1['ident']
+    past.'namespace'($P1)
+    past.'blocktype'('declaration')
+    past.'pirflags'(':init :load')
+    past.'lexical'(0)
+    $S0 = match['sym']
+    if $S0 != 'class' goto class_done
+    .local pmc classvar, classop
+    $P0 = get_hll_global ['PAST'], 'Op'
+    classvar = $P0.'new'( 'inline'=>'%r = get_root_global ["parrot"], "P6metaclass"' )
+    $P0 = get_hll_global ['PAST'], 'Op'
+    $S0 = match['name']
+    classop = $P0.'new'( classvar, $S0, 'pasttype'=>'callmethod', 'name'=>'new_class')
+    $P2 = past[0]
+    .local pmc parent
+    parent = match['parent']
+    if null parent goto parent_done
+    $S0 = parent[0]
+    $P0 = get_hll_global ['PAST'], 'Val'
+    $P1 = $P0.'new'( 'value'=>$S0, 'named'=>'parent' )
+    classop.'push'($P1)
+  parent_done:
+    $P2.'push'(classop)
+  class_done:
+    match.'!make'(past)
+.end
+
+
+##    method scope_declarator($/) {
+##        my $past := $($<variable>);
+##        my $name := $past.name();
+##        our $?BLOCK;
+##        unless $?BLOCK.symbol($name) {
+##            $past.isdecl(1);
+##            my $scope := ($<declarator> eq 'my') ? 'lexical' : 'package';
+##            $?BLOCK.symbol($name, :scope($scope));
+##        }
+##        make $past;
+##   }
+.sub 'scope_declarator' :method
+    .param pmc match
+    .local pmc past, block
+    .local string name
+    $P0 = match['variable']
+    past = $P0.'ast'()
+    name = past.'name'()
+    block = get_global '$?BLOCK'
+    $P0 = block.'symbol'(name)
+    if $P0 goto end
+    past.'isdecl'(1)
+    .local string scope
+    scope = 'package'
+    $S0 = match['declarator']
+    if $S0 != 'my' goto have_scope
+    scope = 'lexical'
+  have_scope:
+    block.'symbol'(name, 'scope'=>scope)
+  end:
+    match.'!make'(past)
+.end
+
+
+##    method variable($/, $key) {
+##        if ($key eq '$< >') {
+##            make PAST::Var.new(
+##                     PAST::Var.new(:scope('lexical'), :name('$/') ),
+##                     PAST::Val.new(:value(~$/[0])),
+##                     :scope('keyed'),
+##                     :viviself('Undef') );
+##        }
+##        else {
+##            make PAST::Var.new( :node($/), :name(~$/) )
+##        }
+##    }
+.sub 'variable' :method
+    .param pmc match
+    .param pmc key
+    if key != '$< >' goto past_var
+  past_match_keyed:
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P0.'new'('scope'=>'lexical', 'name'=>'$/')
+    $P2 = get_hll_global ['PAST'], 'Val'
+    $S0 = match[0]
+    $P3 = $P2.'new'('value'=>$S0)
+    $P4 = $P0.'new'($P1, $P3, 'scope'=>'keyed', 'viviself'=>'Undef')
+    match.'!make'($P4)
+    .return ()
+  past_var:
+    $S0 = match
+    $S1 = match['sigil']
+    $S2 = 'Undef'
+    if $S1 != '%' goto past_sigil_is_array
+    $S2 = 'Hash'
+    goto past_sigil
+  past_sigil_is_array:
+    if $S1 != '@' goto past_sigil
+    $S2 = 'ResizablePMCArray'
+    goto past_sigil
+  past_sigil:
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P0.'new'('node'=>match, 'name'=>$S0, 'viviself'=>$S2)
+    match.'!make'($P1)
+.end
+
+
+##    method value($/, $key) {
+##        make $($/{$key});
+##    }
+.sub 'value' :method
+    .param pmc match
+    .param pmc key
+    $P0 = match[key]
+    $P1 = $P0.'ast'()
+    match.'!make'($P1)
+.end
+
+
+##    method quote($/, $key) {
+##        if $key eq 'PIR' {
+##            make PAST::Op.new( :node($/), :inline(~($[0])) );
+##        }
+##        else {
+##            make PAST::Val.new( :node($/), :value(~($<string_literal>)) );
+##        }
+##    }
+.sub 'quote' :method
+    .param pmc match
+    .param pmc key             :optional
+    .local string value
+    unless key == 'PIR' goto quote_string
+  quote_pir:
+    $S0 = match[0]
+    $P0 = get_hll_global ['PAST'], 'Op'
+    $P1 = $P0.'new'('node'=>match, 'inline'=>$S0)
+    goto end
+  quote_string:
+    $P0 = match['string_literal']
+    value = $P0.'ast'()
+    $P0 = get_hll_global ['PAST'], 'Val'
+    $P1 = $P0.'new'('node'=>match, 'value'=>value)
+  end:
+    match.'!make'($P1)
+.end
+
+
+##    method typename($/, $key) {
+##        my $ns := $<name><ident>.clone();
+##        my $name := $ns.pop();
+##        make PAST::Var.new( :node($/),
+##                            :scope('package'),
+##                            :name($name),
+##                            :namespace($ns)
+##                          );
+##    }
+.sub 'typename' :method
+    .param pmc match
+    .param pmc key
+    .local pmc ns, name
+    $P0 = match['name']
+    $P0 = $P0['ident']
+    ns = clone $P0
+    name = pop ns
+    $P0 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P0.'new'('node'=>match, 'scope'=>'package', 'name'=>name, 'namespace'=>ns)
+    match.'!make'($P1)
+.end
+
+
+##    method number($/, $key?) {
+##        make PAST::Val.new( :node($/), :name(~$/), :returns("Integer") );
+##    }
+.sub 'number' :method
+    .param pmc match
+    .param pmc key             :optional
+    .local pmc past
+    $I0 = match
+    $P0 = get_hll_global ['PAST'], 'Val'
+    past = $P0.'new'('node'=>match, 'value'=>$I0)
+    match.'!make'(past)
+.end
+
+
+##    method subcall($/, $key?) {
+##        my $past := $($<arglist>);
+##        $past.name(~$<ident>);
+##        $past.pasttype('call');
+##        $past.node($/);
+##        make $past;
+##    }
+.sub 'subcall' :method
+    .param pmc match
+    .param pmc key             :optional
+    .local pmc past
+    $P0 = match['arglist']
+    past = $P0.'ast'()
+    $S0 = match['ident']
+    past.'name'($S0)
+    past.'pasttype'('call')
+    past.'node'(match)
+    match.'!make'(past)
+.end
+
+
+#### Expressions and operators ####
+
+##    method EXPR($/, $key) {
+##        if ($key eq 'end') { make $($<expr>); }
+##        my $past := PAST::Op.new( :node($/),
+##                                  :name($<type>),
+##                                  :opattr($<top>),
+##                                );
+##        for @($/) {
+##            $past.push($($_));
+##        }
+##        make $past;
+##    }
+.sub 'EXPR' :method
+    .param pmc match
+    .param pmc key
+    if key != 'end' goto expr_reduce
+  expr_end:
+    $P0 = match['expr']
+    $P1 = $P0.'ast'()
+    match.'!make'($P1)
+    .return ()
+  expr_reduce:
+    .local pmc past, opattr
+    .local string name
+    name = match['type']
+    opattr = match['top']
+    $P0 = get_hll_global ['PAST'], 'Op'
+    past = $P0.'new'('node'=>match, 'name'=>name, 'opattr'=>opattr)
+    $P1 = match.'list'()
+    if null $P1 goto iter_end
+    .local pmc it
+    it = iter $P1
+  iter_loop:
+    unless it goto iter_end
+    $P2 = shift it
+    $I0 = $P2.'from'()
+    $I1 = $P2.'to'()
+    if $I0 == $I1 goto iter_loop
+    $P2 = $P2.'ast'()
+    past.'push'($P2)
+    goto iter_loop
+  iter_end:
+    match.'!make'(past)
+.end
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/nqp/src/builtins.pir (from r44981, branches/ops_pct/compilers/nqp/src/builtins.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/src/builtins.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/src/builtins.pir)
@@ -0,0 +1,156 @@
+# Copyright (C) 2007-2009, Parrot Foundation.
+# $Id$
+
+.namespace []
+
+=over 4
+
+=item C<print(...)>
+
+Implementing a Perl 6 style print statement.
+
+=cut
+
+.sub 'print'
+    .param pmc list            :slurpy
+    .local pmc it
+
+    it = iter list
+  iter_loop:
+    unless it goto iter_end
+    $P0 = shift it
+    print $P0
+    goto iter_loop
+  iter_end:
+    .return (1)
+.end
+
+
+=item C<say(...)>
+
+Implementing a Perl 6 style say statement, which automatically appends
+a newline to the end of what is printed.
+
+=cut
+
+.sub 'say'
+    .param pmc list            :slurpy
+    .tailcall 'print'(list :flat, "\n")
+.end
+
+
+=item C<infix:,>
+
+Build a list from the arguments sent to the operator.
+
+=cut
+
+.sub 'infix:,'
+    .param pmc args            :slurpy
+    .local pmc list
+    list = new 'ResizablePMCArray'
+  args_loop:
+    unless args goto end
+    $P0 = shift args
+    push list, $P0
+    goto args_loop
+  end:
+    .return (list)
+.end
+
+=item C<ok(...)>
+
+Internal implementation of the Test::More 'ok'.  It increments
+the internal test counter and handles making test output.
+
+=cut
+
+.sub 'ok'
+    .param pmc    condition
+    .param string description :optional
+    .param int    has_desc    :opt_flag
+    if condition goto it_was_ok
+        print "not "
+  it_was_ok:
+    print "ok "
+    $P0 = get_global "$test_counter"
+    $P0 += 1
+    print $P0
+    unless has_desc goto no_description
+        print " # "
+        print description
+  no_description:
+    print "\n"
+    .return (1)
+.end
+
+
+=item C<plan(...)>
+
+Internal implementation of the Test::More 'plan'.  It sets the internal
+test counter to 0 and outputs the TAP plan line.
+
+=cut
+
+.sub 'plan'
+    .param int quantity
+    $P0 = new 'Integer'
+    $P0 = 0
+    set_global "$test_counter", $P0
+    print "1.."
+    print quantity
+    print "\n"
+.end
+
+.sub 'onload' :init :load
+    #Initialize on load, in case they do not call plan.
+    $P0 = new 'Integer'
+    $P0 = 0
+    set_global "$test_counter", $P0
+.end
+
+=item C<load_bytecode(string)>
+
+=cut
+
+.sub 'load_bytecode'
+    .param string str
+    load_bytecode str
+    .return ()
+.end
+
+=item C<sleep(sec)>
+
+=cut
+
+.sub 'sleep'
+    .param int sec
+    sleep sec
+    .return ()
+.end
+
+=item C<eval(lang,code)>
+
+=cut
+
+.sub 'eval'
+    .param string text
+    .param string lang
+    .local pmc c, code
+    lang = downcase lang
+    load_language lang
+    c = compreg lang
+    code = c.'compile'(text)
+    $P0 = code()
+    .return ($P0)
+.end
+
+=back
+
+=cut
+
+# Local Variables:
+#   mode: pir
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4 ft=pir:

Copied: branches/ops_pct/compilers/nqp/t/01-literals.t (from r44981, branches/ops_pct/compilers/nqp/t/01-literals.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/01-literals.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/01-literals.t)
@@ -0,0 +1,18 @@
+# check literals
+
+say('1..8');
+
+print("ok ");
+print(1);
+print("\n");
+
+print('ok ');
+say(2);
+
+print("ok 3\n");
+say('ok 4');
+say("ok 5");
+say(q<ok 6>);
+say(q  <ok 7>);
+
+say("\x6f\x6b 8");

Copied: branches/ops_pct/compilers/nqp/t/02-if-else.t (from r44981, branches/ops_pct/compilers/nqp/t/02-if-else.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/02-if-else.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/02-if-else.t)
@@ -0,0 +1,130 @@
+# check control structure 'if ... else'
+
+say('1..14');
+
+if 1 { say("ok 1 # on one line with else"); } else { say("not ok 1 # on one line with else")}
+
+say("ok 2 # statements following if with else are okay");
+
+if 1 {
+    print("ok 3");
+}
+else {
+    print("not ok 3");
+}
+say(" # multi-line if with else");
+
+if 0 {
+    print("not ok 4");
+}
+else {
+    print("ok 4");
+}
+say(" # multi-line if, else branch");
+
+if 0 {
+}
+else {
+    print("ok 5");
+}
+say(" # empty if-block");
+
+if 0 {
+    print("not ok 6");
+}
+else {
+}
+print("ok 6");
+say(" # empty else-block");
+
+if 0 {
+}
+else {
+}
+print("ok 7");
+say(" # empty if- and else-block");
+
+if 0 {
+}
+elsif 0 {
+}
+elsif 0 {
+}
+else {
+}
+print("ok 8");
+say(" # empty if-, elsif-, and else-block");
+
+if 1 {
+    print("ok 9");
+}
+elsif 0 {
+    print("not ok 9 # elsif 1");
+}
+elsif 0 {
+    print("not ok 9 # elsif 2");
+}
+else {
+    print("not ok 9 # else");
+}
+say(" # if expr true in if/elsif/elsif/else");
+
+if 0 {
+    print("not ok 10 # if");
+}
+elsif 1 {
+    print("ok 10");
+}
+elsif 0 {
+    print("not ok 10 # elsif 2");
+}
+else {
+    print("not ok 10 # else");
+}
+say(" # first elsif expr true in if/elsif/elsif/else");
+
+if 0 {
+    print("not ok 11 # if");
+}
+elsif 0 {
+    print("not ok 11 # elsif 1");
+}
+elsif 1 {
+    print("ok 11");
+}
+else {
+    print("not ok 11 # else");
+}
+say(" # second elsif expr true in if/elsif/elsif/else");
+
+if 0 {
+    print("not ok 12 # if");
+}
+elsif 1 {
+    print("ok 12");
+}
+elsif 1 {
+    print("not ok 12 # elsif 2");
+}
+else {
+    print("not ok 12 # else");
+}
+say(" # first and second elsif expr true in if/elsif/elsif/else");
+
+if 0 {
+    print("not ok 13 # if");
+}
+elsif 0 {
+    print("not ok 13 # elsif 1");
+}
+elsif 0 {
+    print("not ok 13 # elsif 2");
+}
+else {
+    print("ok 13");
+}
+say(" # else expr true in if/elsif/elsif/else");
+
+if 0 { } elsif 0 { }
+print("ok 14");
+say(" # no else block in if/elsif")

Copied: branches/ops_pct/compilers/nqp/t/02-if.t (from r44981, branches/ops_pct/compilers/nqp/t/02-if.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/02-if.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/02-if.t)
@@ -0,0 +1,16 @@
+# check control structure 'if'
+
+say('1..4');
+
+if 1 { say("ok 1 # on one line"); }
+
+say("ok 2 # statements following if are okay");
+
+if 1 {
+    say("ok 3 # multi-line if");
+}
+
+if 0 {
+    print("not ");
+}
+say("ok 4 # multi-line if, false condition causes block not to execute");

Copied: branches/ops_pct/compilers/nqp/t/03-unless.t (from r44981, branches/ops_pct/compilers/nqp/t/03-unless.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/03-unless.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/03-unless.t)
@@ -0,0 +1,16 @@
+# check control structure 'unless'
+
+say('1..4');
+
+unless 0 { say("ok 1 # on one line"); }
+
+say("ok 2 # statements following unless are okay");
+
+unless 0 {
+    say("ok 3 # multi-line unless");
+}
+
+unless 1 {
+    print("not ");
+}
+say("ok 4 # testing conditional");

Copied: branches/ops_pct/compilers/nqp/t/04-comments.t (from r44981, branches/ops_pct/compilers/nqp/t/04-comments.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/04-comments.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/04-comments.t)
@@ -0,0 +1,11 @@
+# check comments
+
+say('1..2');
+
+#Comment preceding
+say("ok 1");
+
+say("ok 2"); #Comment following
+
+#say("not ok 3");
+#          say("not ok 4");

Copied: branches/ops_pct/compilers/nqp/t/05-pod.t (from r44981, branches/ops_pct/compilers/nqp/t/05-pod.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/05-pod.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/05-pod.t)
@@ -0,0 +1,25 @@
+# check pod
+
+say('1..4');
+
+say("ok 1");
+
+=head1 POD comment
+
+This next line should not be executed because it is inside
+of a valid pod statement.
+
+print("not ");
+
+=cut
+
+say("ok 2 # POD comments end");
+
+=for comment
+
+say("ok 3 # = for terminated by a new line");
+
+=for comment
+print("not ");
+
+say("ok 4 # actually comment out something");

Copied: branches/ops_pct/compilers/nqp/t/06-args-pos.t (from r44981, branches/ops_pct/compilers/nqp/t/06-args-pos.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/06-args-pos.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/06-args-pos.t)
@@ -0,0 +1,8 @@
+# positional arguments
+
+say('1..2');
+
+say("ok ", 1);
+
+print('o', 'k', ' ', 2, "\n");
+

Copied: branches/ops_pct/compilers/nqp/t/07-boolean.t (from r44981, branches/ops_pct/compilers/nqp/t/07-boolean.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/07-boolean.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/07-boolean.t)
@@ -0,0 +1,25 @@
+# Testing boolean context operators, ! and ?
+
+plan(8);
+
+##Negation
+ok(!0,   'prefix negation on integer 0');
+ok(!"0", 'prefix negation on string 0');
+
+if !1 {
+    print("not");
+}
+ok(1, "negating integer 1");
+
+ok(!!1, 'double negation on 1');
+
+##Boolean context
+ok(?1,    'prefix negation on integer 1');
+ok(?"10", 'prefix negation on string 10');
+
+if ?0 {
+    print("not");
+}
+ok(1, "boolean integer 0");
+
+ok(!?!?1, 'spaghetti chaining');

Copied: branches/ops_pct/compilers/nqp/t/08-blocks.t (from r44981, branches/ops_pct/compilers/nqp/t/08-blocks.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/08-blocks.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/08-blocks.t)
@@ -0,0 +1,31 @@
+# check blocks and statement enders
+
+say('1..7');
+
+{
+    say("ok 1 # blocks are okay");
+}
+
+{
+    print("ok ");
+    say("2 # last statement in a block does not need a semi-colon")
+}
+
+
+{
+    say("ok 3 # statements can precede blocks");
+    {
+        say("ok 4 # blocks can nest");
+    }
+    say("ok 5 # statements can follow blocks");
+}
+
+
+{ print("ok ") }; { say("6 # multiple blocks on one line need a semi-colon") }
+
+{
+    print("ok ")
+}; {
+    say("7 # blocks following an end brace must be separated by a semicolon")
+}
+

Copied: branches/ops_pct/compilers/nqp/t/09-var.t (from r44981, branches/ops_pct/compilers/nqp/t/09-var.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/09-var.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/09-var.t)
@@ -0,0 +1,82 @@
+# check variables
+
+say('1..14');
+
+my $o1 := 'ok 1'; print($o1); say(" # direct binding and scoping");
+
+my $o2; $o2 := 'ok 2'; print($o2); say(" # first scope and declare, then bind");
+
+my $o3 := 'ok 3';
+my $p3 := $o3;
+print($p3); say(" # bind to another variable");
+
+my $o4 := 'ok 4';
+my $p4 := $o4;
+$o4 := 'not ok 4';
+print($p4); say(" # rebind the original, the bound one does not change");
+
+my $o5 := 'ok 5';
+my $p5 := $o5;
+my $o5 := 'not ok 5';
+unless $p5 {
+    print("not ");
+}
+say("ok 5 # rebind and redeclare the original.  The value is lost");
+
+my $r1 := 'not ok 6';
+my $r2 := 'ok 6';
+my $r3;
+$r3 := $r1;
+$r3 := $r2;
+print($r3); say(' # variables can be rebound');
+
+my $b1 := 'ok 8';
+
+{
+    my $b1 := 'ok 7';
+    print($b1); say(' # my scoping works inside a block');
+}
+
+print($b1); say(' # block does not stomp on out scope');
+
+my $b2 := 'ok 9';
+
+{
+    print($b2); say(' # variables scoped outside of block persists inside the block');
+}
+
+my $b3;
+{
+    my $b4 := 'ok 10';
+    $b3 := $b4;
+}
+print($b3); say(' # variable is bound to the value, not the symbol in the block');
+
+my $b5 := '';
+{
+    my $b5 := 'not ';
+}
+print($b5);say('ok 11 # $b5, defined inside block, does not exist outside');
+
+{
+    our $m1 := 'ok 12 ';
+}
+
+our $m1;
+unless $m1 {
+    print('not ');
+}
+say('ok 12 # our variables have package scope, exists outside of block');
+
+our $m2;
+$m2 := 'ok 13';
+{
+    print($m2); say(' # our variables exist inside blocks');
+}
+
+our $m3;
+$m3 := 'not ok 14';
+{
+    $m3 := 'ok 14';
+}
+print($m3); say(' # our variables written inside block keep their values outside');

Copied: branches/ops_pct/compilers/nqp/t/10-sub.t (from r44981, branches/ops_pct/compilers/nqp/t/10-sub.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/10-sub.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/10-sub.t)
@@ -0,0 +1,74 @@
+# check subs
+
+say('1..11');
+
+sub one ( ) {
+    say("ok 1 # sub def and call");
+}
+
+one();
+
+{
+    sub two ( ) {
+        say("ok 2 # sub def and call inside block");
+    }
+    two();
+}
+
+sub three ( ) { say("ok 3 # sub def; sub call on same line"); }; three();
+
+sub four_five ($arg1) {
+    say($arg1);
+}
+four_five('ok 4 # passed in 1 arg');
+
+{
+    four_five('ok 5 # calling sub in outer scope');
+}
+
+{
+    sub six ( ) {
+        say("ok 6 # def in inner scope, called from outer scope");
+    }
+}
+six();
+
+sub seven () {
+    "ok 7 # return string literal from sub";
+}
+
+say(seven());
+
+sub eight () {
+    "ok 8 # bind sub return to variable";
+}
+
+my $retVal := eight();
+
+unless $retVal {
+    print("not ");
+}
+say($retVal);
+
+sub add_stomp ($first, $last) {
+    my $sum := $first + $last;
+    $first  := $last - $first;
+    $sum;
+}
+
+print("ok "); print(add_stomp(3,6)); say(" # returning the result of operating on arguments");
+
+my $five  := 5;
+my $seven := 7;
+
+add_stomp($five, $seven);
+
+if $five != 5 {
+    print("not ");
+}
+say("ok 10 # subroutines that operate on args do not affect the original arg outside the sub");
+
+sub eleven ($arg) {
+    say("ok 11 # parameter with a trailing comma");
+}
+eleven( 'dummy', ); 

Copied: branches/ops_pct/compilers/nqp/t/11-cmp.t (from r44981, branches/ops_pct/compilers/nqp/t/11-cmp.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/11-cmp.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/11-cmp.t)
@@ -0,0 +1,96 @@
+# check comparisons
+
+say('1..19');
+
+##Integers, positive and negative
+
+if 1 == 1 { say("ok 1 # numeric equality, integers"); }
+
+unless 1 == 2 {
+    say("ok 2 # numeric equality, integers, not equal");
+}
+
+if -3 == -3 { say("ok 3 # numeric equality, negative integers"); }
+
+if 1 != 2 { say("ok 4 # numeric inequality, integers"); }
+
+unless 1 != 1 {
+    say("ok 5 # numeric inequality, equal, integers");
+}
+
+unless -2 != -2 {
+    say("ok 6 # numeric inequality, equal, negative integers");
+}
+
+##Strings
+
+if "eq" eq "eq" { say("ok 7 # string equality"); }
+
+unless "one" eq "two" {
+    say("ok 8 # string equality, not equal");
+}
+
+if "ONE" ne "TWO" { say("ok 9 # string inequality"); }
+
+unless "STRING" ne "STRING" {
+    say("ok 10 # string inequality, equal");
+}
+
+##Coerce strings into integers
+
+if "11" ne ~11 {
+    print("not ");
+}
+say("ok 11 # coerce integer 11 into string eleven");
+
+if "-12" ne ~-12 {
+    print("not ");
+}
+say("ok 12 # coerce integer -12 into string twelve");
+
+##Coerce integers into strings
+
+if 13 ne +"13" {
+    print("not ");
+}
+say("ok 13 # coerce string 13 into an integer");
+
+if -14 ne +"-14" {
+    print("not ");
+}
+say("ok 14 # coerce string -14 into an integer");
+
+##Containers
+
+if (1,2) =:= (1,2) {
+    print("not ");
+}
+say("ok 15 # container equality, unnamed arrays");
+
+my @a := (1, 2);
+
+unless @a =:= @a {
+    print("not ");
+}
+say("ok 16 # container equality, self");
+
+my @b := @a;
+
+unless @a =:= @b {
+    print("not ");
+}
+say("ok 17 # container equality, named arrays");
+  
+my $x := 'foo';
+my $y := $x;
+my $z := 'foo';
+
+unless $x =:= $y {
+    print("not ");
+}
+say("ok 18 # container equality, string binding");
+
+if $x =:= $z {
+    print("not ");
+}
+say("ok 19 # container equality, string value");

Copied: branches/ops_pct/compilers/nqp/t/12-list.t (from r44981, branches/ops_pct/compilers/nqp/t/12-list.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/12-list.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/12-list.t)
@@ -0,0 +1,10 @@
+# lists and for
+
+plan(3);
+
+my $list := (1,2,3);
+my $indexer := 0;
+
+for $list {
+    print("ok "); print($_); say(" checking loop via indices");
+}

Copied: branches/ops_pct/compilers/nqp/t/13-logical.t (from r44981, branches/ops_pct/compilers/nqp/t/13-logical.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/13-logical.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/13-logical.t)
@@ -0,0 +1,19 @@
+# check '||' and '&&'
+
+plan(4);
+
+my $or_no_branch := 1;
+$or_no_branch || ( $or_no_branch := 0 );
+ok($or_no_branch, "logical || shortcuts, branch not taken");
+
+my $or_branch := 0;
+0 || ( $or_branch := 1 );
+ok($or_branch, "logical || shortcuts, branch taken");
+
+my $and_no_branch := 0;
+$and_no_branch && ( $and_no_branch := 1 );
+ok(!$and_no_branch, "logical && shortcuts, branch not taken");
+
+my $and_branch := 0;
+1 && ( $and_branch := 1 );
+ok($and_branch, "logicl && shortcuts, branch taken");

Copied: branches/ops_pct/compilers/nqp/t/14-op.t (from r44981, branches/ops_pct/compilers/nqp/t/14-op.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/14-op.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/14-op.t)
@@ -0,0 +1,46 @@
+# checking basic operands and circumfix:( )
+
+plan(29);
+
+##Additive operators
+ok(      1+2  == 3, 'Checking addition 1+2');
+ok(     10-9  == 1, 'Checking subtraction 10-9');
+ok(   10-3+2  == 9, 'Checking compound statements 10-3+2');
+ok(  10-(3+2) == 5, 'Checking parenthesized statement 10-(3+2)');
+
+##Multiplicative operators
+ok(      6*7  == 42, 'Checking multiplication 6*7');
+ok(     36/6  ==  6, 'Checking division 36/6');
+ok(    4*3+5  == 17, 'Checking compound statements 4*3+5');
+ok(   4*(3+5) == 32, 'Checking parenthesized statements 4*(3+5)');
+ok(   12/4*3  ==  9, 'Checking compound statements 12/4*3');
+ok( 12/(4*3)  ==  1, 'Checking compound statements 12/(4*3)');
+ok(   5-3*2   == -1, 'Checking compound statements 5-3*2');
+
+##Modulo operator
+ok(      8%3  == 2, 'Checking modulo 8%3');
+ok(    8%3+2  == 4, 'Checking compound statement 8%3+2');
+ok(  8%(3+2)  == 3, 'Checking compound statement 8%(3+2)');
+
+##Concatenation operator
+ok( 'a' ~ 'b' eq 'ab', 'Checking concatenation "a" ~ "b"');
+ok(  1  ~ 'b' eq '1b', 'Checking concatenation  1  ~ "b"');
+ok( 'a' ~  2  eq 'a2', 'Checking concatenation "a" ~  2 ');
+
+##Postfix operators
+my $x := 0;
+ok( $x++ == 0 );
+ok( $x   == 1 );
+ok( $x-- == 1 );
+ok( $x   == 0 );
+
+##Relational operators
+ok( ?(1 <  2) );
+ok( !(2 <  1) );
+ok( ?(2 <= 2) );
+ok( !(3 <= 2) );
+ok( ?(2 >  1) );
+ok( !(2 >  3) );
+ok( ?(2 >= 1) );
+ok( !(2 >= 3) );
+

Copied: branches/ops_pct/compilers/nqp/t/15-module.t (from r44981, branches/ops_pct/compilers/nqp/t/15-module.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/15-module.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/15-module.t)
@@ -0,0 +1,16 @@
+# check module
+
+XYZ::sayfoo();
+XYZ::foo('ok 3');
+XYZ::sayfoo();
+
+module XYZ {
+    our $value := 'ok 1';
+    sub foo($x) { $value := $x; }
+    sub sayfoo() { say($value); }
+    say('1..3');
+    sayfoo();
+    foo('ok 2');
+}
+
+

Copied: branches/ops_pct/compilers/nqp/t/16-while.t (from r44981, branches/ops_pct/compilers/nqp/t/16-while.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/16-while.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/16-while.t)
@@ -0,0 +1,61 @@
+# while, until statements
+
+plan(8);
+
+my $a; my $sum;
+
+$a := 1; $sum := 0;
+while $a != 10 {
+    $sum := $sum + $a;
+    $a := $a + 1;
+}
+ok($sum == 45, 'basic while loop test');
+
+$a := 1; $sum := 0;
+until $a == 10 {
+    $sum := $sum + $a;
+    $a := $a + 1;
+}
+ok($sum == 45, 'basic until loop test');
+
+$a := 1; $sum := 0;
+while $a != 1 {
+    $sum := 99;
+    $a := 1;
+}
+ok($sum == 0, 'while loop exits initial false immediately');
+
+$a := 1; $sum := 0;
+until $a == 1 {
+    $sum := 99;
+    $a := 1;
+}
+ok($sum == 0, 'until loop exits initial true immediately');
+
+$a := 1; $sum := 0;
+repeat {
+    $sum := $sum + $a;
+    $a := $a + 1;
+} while $a != 10;
+ok($sum == 45, 'basic repeat_while loop');
+
+$a := 1; $sum := 0;
+repeat {
+    $sum := $sum + $a;
+    $a := $a + 1;
+} until $a == 10;
+ok($sum == 45, 'basic repeat_until loop');
+
+$a := 1; $sum := 0;
+repeat {
+    $sum := 99;
+} while $a != 1;
+ok($sum == 99, 'repeat_while always executes at least once');
+
+$a := 1; $sum := 0;
+repeat {
+    $sum := 99;
+} until $a == 1;
+ok($sum == 99, 'repeat_until always executes at least once');
+
+

Copied: branches/ops_pct/compilers/nqp/t/17-class.t (from r44981, branches/ops_pct/compilers/nqp/t/17-class.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/17-class.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/17-class.t)
@@ -0,0 +1,14 @@
+# class
+
+plan(1);
+
+class XYZ {
+    method foo($x) {
+        say($x);
+    }
+}
+
+
+my $xyz := XYZ.new();
+
+$xyz.foo('ok 1');

Copied: branches/ops_pct/compilers/nqp/t/18-inline.t (from r44981, branches/ops_pct/compilers/nqp/t/18-inline.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/18-inline.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/18-inline.t)
@@ -0,0 +1,22 @@
+# inline
+
+plan(7);
+
+PIR q<    say 'ok 1' >;
+PIR q:to:'OK2';
+    say 'ok 2'
+OK2
+
+PIR q:to:<OK4>;
+        say 'ok 3'
+        say 'ok 4'
+    OK4    
+
+PIR q:to:"OK5";
+    say 'ok 5'
+OK5
+
+Q:PIR { say 'ok 6' };
+my $x := Q:PIR { %r = box 'ok 7' };
+say($x);
+

Copied: branches/ops_pct/compilers/nqp/t/19-hash_access.t (from r44981, branches/ops_pct/compilers/nqp/t/19-hash_access.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/19-hash_access.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/19-hash_access.t)
@@ -0,0 +1,25 @@
+# check hash access methods
+
+plan(7);
+
+my %h;
+
+%h<a> := 1;
+say("ok 1 # hash assignment with numeric value works");
+
+say('ok ', %h<a> + 1, ' # hash access to numeric value');
+
+%h<a> := 'ok 3';
+say(%h<a>, ' # hash access to string value');
+
+%h{1} := '4';
+say('ok ', %h{1}, ' # numeric hash access');
+
+say('ok ', %h<1> + 1, ' # numbers stringify');
+
+%h{'b'} := 'ok 6 # curly braces and single quotes work';
+say(%h{'b'});
+
+%h{"foo"} := "ok 7 # curly braces and double quotes work";
+say(%h{"foo"});
+

Copied: branches/ops_pct/compilers/nqp/t/20-list_access.t (from r44981, branches/ops_pct/compilers/nqp/t/20-list_access.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/20-list_access.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/20-list_access.t)
@@ -0,0 +1,21 @@
+# check list access methods
+
+plan(7);
+
+my @l := (1,2,3,4,5);
+
+say("ok 1 # list assignment didn't barf");
+say('ok ', @l[1], ' # numeric subscript');
+say('ok ', @l['2'], ' # string subscript');
+
+my $idx := 3;
+
+say('ok ', @l[$idx], ' # variable subscript');
+say('ok ', @l[$idx + 1], ' # expression in subscript');
+
+ at l[0] := 'ok 6 # string array element';
+say(@l[0]);
+
+ at l[10] := 'ok 7 # automatic expansion';
+say(@l[10]);
+

Copied: branches/ops_pct/compilers/nqp/t/22-optional_args.t (from r44981, branches/ops_pct/compilers/nqp/t/22-optional_args.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/22-optional_args.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/22-optional_args.t)
@@ -0,0 +1,28 @@
+# test optional arguments and parameters
+
+plan(3);
+
+sub f1 ($x, $y!, $z?) {
+  $x;
+}
+say('ok ', f1(1, 2), ' # optional args ignorable');
+say('ok ', f1(2, 2, 2), ' # optional args passable');
+
+sub f2 ($x?, $y?) { 'ok 3 # only optional args'; }
+say(f2());
+
+# TODO we can't parse .defined() yet - jg
+#sub f3 ($x, $y?, $text?) {
+#  if ! $y.defined() && ! $text.defined() {
+#    say('ok 4 # unpassed optional args are undef');
+#  } else {
+#    say('ok ', $x - $y, $text);
+#  }
+#}
+#f3(2);
+#f3(8, 3, ' # optional args get passed values');
+#f3(8, :text(' # optional args specifiable by name'), :y(2));
+
+# XXX: need to be able to test that the following is illegal
+#sub f4 ($x?, $y) { $y; }
+

Copied: branches/ops_pct/compilers/nqp/t/23-named_args.t (from r44981, branches/ops_pct/compilers/nqp/t/23-named_args.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/23-named_args.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/23-named_args.t)
@@ -0,0 +1,18 @@
+# test named parameters and arguments
+
+plan(4);
+
+sub f1 ($x, :$y) { $x - $y; }
+say('ok ', f1(2, :y(1)), ' # named args passable');
+
+sub f2 ($x, :$y) { $x; }
+say('ok ', f2(2), ' # named args ignorable');
+
+sub f3 (:$x, :$y) { $x - $y; }
+say('ok ', f3(:y(2), :x(5)), ' # args reorderable');
+
+sub f4 ($w, $x, :$y, :$z) { $w + $x + $y + $z; }
+say('ok ', f4(:z(2), -3, :y(1), 4), ' # named/positional intermixable');
+
+
+# XXX: test mandatory named args are actually mandatory

Copied: branches/ops_pct/compilers/nqp/t/24-scalar_context.t (from r44981, branches/ops_pct/compilers/nqp/t/24-scalar_context.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/24-scalar_context.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/24-scalar_context.t)
@@ -0,0 +1,14 @@
+# scalar context
+
+plan(1);
+
+class XYZ {
+    method ast() {
+        'ok 1';
+    }
+}
+
+
+my $xyz := XYZ.new();
+
+say( $( $xyz ) );

Copied: branches/ops_pct/compilers/nqp/t/25-list_context.t (from r44981, branches/ops_pct/compilers/nqp/t/25-list_context.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/25-list_context.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/25-list_context.t)
@@ -0,0 +1,17 @@
+# list context
+
+plan(1);
+
+class XYZ {
+    method list() {
+        'ok ', '1';
+    }
+}
+
+
+my $xyz := XYZ.new();
+
+for @( $xyz ) {
+    print( $_ );
+}
+print( "\n" );

Copied: branches/ops_pct/compilers/nqp/t/26-method_ops.t (from r44981, branches/ops_pct/compilers/nqp/t/26-method_ops.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/26-method_ops.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/26-method_ops.t)
@@ -0,0 +1,28 @@
+# method ops (just method calls for now)
+
+plan(3);
+
+class Foo {
+  method blarg() {
+    'ok 1 # method calls work';
+  }
+  method blargless() {
+    'ok 3 # argument-less method calls work'
+  }
+}
+
+class Bar {
+  method blarg() {
+    'not ok 1';
+  }
+}
+
+sub blarg() {
+  'ok 2 # regular subs aren\'t confused with methods';
+}
+
+my $foo := Foo.new();
+
+say($foo.blarg());
+say(blarg());
+say($foo.blargless);

Copied: branches/ops_pct/compilers/nqp/t/27-ternary.t (from r44981, branches/ops_pct/compilers/nqp/t/27-ternary.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/27-ternary.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/27-ternary.t)
@@ -0,0 +1,21 @@
+# the ternary ?? !! operator
+
+plan(8);
+
+ok( 1 ?? 1 !! 0 );
+ok( 0 ?? 0 !! 1 );
+
+my $a := 1 ?? 'yes' !! 'no';
+ok( $a eq 'yes' );
+
+my $b := 0 ?? 'yes' !! 'no';
+ok( $b eq 'no' );
+
+my $c := 1 ?? 'yes' !! ( $a := 'no' );
+ok( $c eq 'yes' );
+ok( $a eq 'yes' );
+
+my $d := 0 ?? ( $a := 'no' ) !! 'yes';
+ok( $d eq 'yes' );
+ok( $a eq 'yes' );
+

Copied: branches/ops_pct/compilers/nqp/t/28-return.t (from r44981, branches/ops_pct/compilers/nqp/t/28-return.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/28-return.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/28-return.t)
@@ -0,0 +1,21 @@
+# implicit and explicit returns from subs
+
+plan(3);
+
+sub foo() { 1; }
+
+
+sub bar() {
+    return 2;
+    0;
+}
+
+sub baz() {
+    if (1) { return 3; }
+    0;
+}
+
+ok( foo() == 1 , 'last value in block' );
+ok( bar() == 2 , 'explicit return value in block');
+ok( baz() == 3 , 'explicit return from nested block');
+

Copied: branches/ops_pct/compilers/nqp/t/29-self.t (from r44981, branches/ops_pct/compilers/nqp/t/29-self.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/29-self.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/29-self.t)
@@ -0,0 +1,26 @@
+plan(3);
+
+class Foo {
+    method foo() { 1 };
+
+    method uno() {
+        self.foo();
+    };
+    
+    method des() {
+        if 1 {
+            self.foo();
+        }
+    };
+    
+    method tres($a) {
+        if 1 {
+            self.foo();
+        }
+    };
+};
+
+ok(Foo.new.uno, "Can access self within method");
+ok(Foo.new.des, "Can access self within sub-block");
+ok(Foo.new.tres(42), "Can access self within method with signature");
+

Copied: branches/ops_pct/compilers/nqp/t/30-subclass.t (from r44981, branches/ops_pct/compilers/nqp/t/30-subclass.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/30-subclass.t	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/30-subclass.t)
@@ -0,0 +1,32 @@
+# class inheritance
+
+plan(6);
+
+class ABC {
+    method foo() {
+        say('ok 1');
+    }
+
+    method bar() {
+        say('ok 3');
+    }
+}
+
+class XYZ is ABC {
+    method foo() {
+        say('ok 2');
+    }
+}
+
+
+my $abc := ABC.new();
+my $xyz := XYZ.new();
+
+$abc.foo();
+$xyz.foo();
+$xyz.bar();
+my $xyzhow := $xyz.HOW;
+if $xyzhow.isa($xyz, ABC) { say('ok 4') }
+if $xyzhow.isa($xyz, XYZ) { say('ok 5') }
+say( $xyzhow.isa($abc, XYZ) ?? 'not ok 6' !! 'ok 6' );
+

Copied: branches/ops_pct/compilers/nqp/t/harness (from r44981, branches/ops_pct/compilers/nqp/t/harness)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/compilers/nqp/t/harness	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/compilers/nqp/t/harness)
@@ -0,0 +1,13 @@
+#! perl
+
+# $Id$
+
+use FindBin;
+use lib qw( . lib ../lib ../../lib ../../../lib );
+use Parrot::Test::Harness
+    language  => 'nqp',
+    exec      => [ './parrot', 'compilers/nqp/nqp.pbc' ],
+    files     => [ 'compilers/nqp/t/*.t' ];
+
+    #arguments => [ '--files' ],
+    #verbosity => 1,

Modified: branches/ops_pct/compilers/opsc/src/Ops/File.pm
==============================================================================
--- branches/ops_pct/compilers/opsc/src/Ops/File.pm	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/opsc/src/Ops/File.pm	Wed May  5 08:26:03 2010	(r46301)
@@ -192,10 +192,10 @@
     self<compiler>:= pir::compreg__Ps('Ops');
     self<compiler>.set_oplib($oplib);
 
-    for @files { self.read_ops( $_, $nolines ) }
-
     self._set_version();
 
+    for @files { self.read_ops( $_, $nolines ) }
+
     self;
 }
 
@@ -209,6 +209,8 @@
 
     self._set_version();
 
+    self._set_version();
+
     self.compile_ops($str);
 
     self;

Modified: branches/ops_pct/compilers/opsc/t/06-opsfile.t
==============================================================================
--- branches/ops_pct/compilers/opsc/t/06-opsfile.t	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/opsc/t/06-opsfile.t	Wed May  5 08:26:03 2010	(r46301)
@@ -20,7 +20,7 @@
 # 116 math
 # We can generate more than 1 Ops::Op per op due args expansion.
 say( "# Parsed " ~ + at ops);
-ok(+ at ops == 319, "Ops parsed correctly");
+ok(+ at ops == 313, "Ops parsed correctly");
 
 my $op := @ops[0];
 #_dumper($op);

Modified: branches/ops_pct/compilers/pct/src/PAST/Compiler.pir
==============================================================================
--- branches/ops_pct/compilers/pct/src/PAST/Compiler.pir	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/pct/src/PAST/Compiler.pir	Wed May  5 08:26:03 2010	(r46301)
@@ -1150,7 +1150,7 @@
     name = node.'name'()
     if name goto call_by_name
     ##  our first child is the thing to be invoked, so make sure it's a PMC
-    signature = replace signature, 1, 0, 'P'
+    substr signature, 1, 0, 'P'
     (ops, posargs, namedargs) = self.'post_children'(node, 'signature'=>signature)
     goto children_done
   call_by_name:

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

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

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

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

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

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

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

Modified: branches/ops_pct/compilers/pirc/src/pircompiler.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pircompiler.c	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/pirc/src/pircompiler.c	Wed May  5 08:26:03 2010	(r46301)
@@ -33,10 +33,9 @@
 PARROT_WARN_UNUSED_RESULT
 static allocated_mem_ptrs * new_mem_ptrs_block(void);
 
-static void register_ptr(ARGMOD(lexer_state *lexer), ARGIN(void *ptr))
+static void register_ptr(ARGIN(lexer_state *lexer), ARGIN(void *ptr))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*lexer);
+        __attribute__nonnull__(2);
 
 static void store_string(
     ARGIN(lexer_state * const lexer),
@@ -99,7 +98,7 @@
 
 */
 static void
-register_ptr(ARGMOD(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;
@@ -107,7 +106,7 @@
     PARROT_ASSERT(ptrs);
 
     if (ptrs->allocs_in_this_block == NUM_MEM_ALLOCS_PER_BLOCK) {
-        allocated_mem_ptrs * const newblock = new_mem_ptrs_block();
+        allocated_mem_ptrs *newblock = new_mem_ptrs_block();
         newblock->next               = ptrs;
         lexer->mem_allocations       = newblock;
         ptrs                         = newblock;
@@ -119,7 +118,8 @@
 
 /*
 
-=item C<void * pir_mem_allocate_zeroed(lexer_state *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
@@ -135,9 +135,9 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 void *
-pir_mem_allocate_zeroed(ARGMOD(lexer_state *lexer), size_t numbytes)
+pir_mem_allocate_zeroed(ARGIN(lexer_state * const lexer), size_t numbytes)
 {
-    void * const ptr = mem_sys_allocate_zeroed(numbytes);
+    void *ptr = mem_sys_allocate_zeroed(numbytes);
 
     totalmem += numbytes;
 

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

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

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

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

Modified: branches/ops_pct/compilers/pirc/src/pirparser.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirparser.c	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/pirc/src/pirparser.c	Wed May  5 08:26:03 2010	(r46301)
@@ -411,39 +411,31 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 static void check_first_arg_direction(
-    ARGMOD(lexer_state *lexer),
-    ARGIN(char const *opname))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*lexer);
+    lexer_state * const lexer,
+    NOTNULL(char const * const opname))
+        __attribute__nonnull__(2);
 
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-PARROT_MALLOC
 static char * concat_strings(
-    ARGMOD(lexer_state *lexer),
-    ARGIN(const char * a),
-    ARGIN(const char * b))
+    NOTNULL(lexer_state * const lexer),
+    NOTNULL(char const * a),
+    NOTNULL(char const * b))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*lexer);
+        __attribute__nonnull__(3);
 
 static void create_if_instr(
-    ARGMOD(lexer_state *lexer),
+    NOTNULL(lexer_state * const lexer),
     int invert,
     int hasnull,
-    ARGIN(const char *name),
-    ARGIN(const char *label))
+    NOTNULL(char const * const name),
+    NOTNULL(char const * const label))
         __attribute__nonnull__(1)
         __attribute__nonnull__(4)
-        __attribute__nonnull__(5)
-        FUNC_MODIFIES(*lexer);
-
-static void do_strength_reduction(ARGMOD(lexer_state *lexer))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*lexer);
+        __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);
 
@@ -454,11 +446,8 @@
 static int evaluate_n_i(double a, pir_rel_operator op, int b);
 
 static void undeclared_symbol(
-    ARGMOD(lexer_state *lexer),
-    ARGIN(char const *symbol))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*lexer);
+    lexer_state * const lexer,
+    char const * const symbol);
 
 static void yy_reduce_print (
     YYSTYPE *yyvsp,
@@ -494,8 +483,7 @@
 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(lexer) \
-    , PARROT_ASSERT_ARG(opname))
+       PARROT_ASSERT_ARG(opname))
 #define ASSERT_ARGS_concat_strings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(lexer) \
     , PARROT_ASSERT_ARG(a) \
@@ -504,14 +492,11 @@
        PARROT_ASSERT_ARG(lexer) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(label))
-#define ASSERT_ARGS_do_strength_reduction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(lexer))
+#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 = (\
-       PARROT_ASSERT_ARG(lexer) \
-    , PARROT_ASSERT_ARG(symbol))
+#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)
@@ -5525,8 +5510,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static constant *
-fold_s_s(yyscan_t yyscanner, ARGIN(const char *a), pir_math_operator op, ARGIN(char const *b)) {
-    lexer_state * const lexer = (lexer_state *)yypirget_extra(yyscanner);
+fold_s_s(yyscan_t yyscanner, NOTNULL(char const *a), pir_math_operator op, NOTNULL(char const *b)) {
+    lexer_state *lexer = (lexer_state *)yypirget_extra(yyscanner);
     switch (op) {
         case OP_CONCAT:
             return new_const(lexer, STRING_VAL, concat_strings(lexer, a, b));
@@ -5665,8 +5650,8 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-evaluate_s_s(ARGIN(const char *a), pir_rel_operator op, ARGIN(const char *b)) {
-    const int result = strcmp(a, b); /* do /not/ use STREQ; we're interested in the result. */
+evaluate_s_s(NOTNULL(char const * const a), pir_rel_operator op, NOTNULL(char const * const b)) {
+    int result = strcmp(a, b); /* do /not/ use STREQ; we're interested in the result. */
 
     switch (op) {
         case OP_NE:
@@ -5700,8 +5685,8 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-evaluate_s(ARGIN(char const *s)) {
-    const size_t strlen_s = strlen(s);
+evaluate_s(NOTNULL(char const * const s)) {
+    int strlen_s = strlen(s);
 
     if (strlen_s > 0) {
         if (strlen_s <= 3) { /* if strlen > 3, (max. nr of characters to represent "0")
@@ -5732,7 +5717,7 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-evaluate_c(ARGIN(lexer_state * const lexer), ARGIN(const constant *c)) {
+evaluate_c(NOTNULL(lexer_state * const lexer), NOTNULL(constant * const c)) {
     switch (c->type) {
         case INT_VAL:
             return (c->val.ival != 0);
@@ -5750,8 +5735,8 @@
 
 /*
 
-=item C<static char * concat_strings(lexer_state *lexer, const char * a, const
-char * 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.
 
@@ -5760,13 +5745,12 @@
 */
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-PARROT_MALLOC
 static char *
-concat_strings(ARGMOD(lexer_state *lexer), ARGIN(const char * a),
-               ARGIN(const char * b))
+concat_strings(NOTNULL(lexer_state * const lexer), NOTNULL(char const * a),
+               NOTNULL(char const * b))
 {
-    const size_t strlen_a = strlen(a);
-    const char * const newstr = (char *)pir_mem_allocate_zeroed(lexer, (strlen_a + strlen(b) + 1)
+    int strlen_a = strlen(a);
+    char *newstr = (char *)pir_mem_allocate_zeroed(lexer, (strlen_a + strlen(b) + 1)
                                                           * sizeof (char));
     strcpy(newstr, a);
     strcpy(newstr + strlen_a, b);
@@ -5777,8 +5761,8 @@
 
 /*
 
-=item C<static void create_if_instr(lexer_state *lexer, int invert, int hasnull,
-const char *name, const char *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>.
@@ -5792,8 +5776,9 @@
 
 */
 static void
-create_if_instr(ARGMOD(lexer_state *lexer), int invert, int hasnull,
-                ARGIN(const char *name), ARGIN(const char *label))
+create_if_instr(NOTNULL(lexer_state * const lexer), int invert, int hasnull,
+                NOTNULL(char const * const name),
+                NOTNULL(char const * const label))
 {
     /* try to find the symbol; if it was declared it will be found; otherwise emit an error. */
     symbol *sym = find_symbol(lexer, name);
@@ -6024,7 +6009,7 @@
 
 /*
 
-=item C<static void do_strength_reduction(lexer_state *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
@@ -6049,7 +6034,7 @@
 
 */
 static void
-do_strength_reduction(ARGMOD(lexer_state *lexer)) {
+do_strength_reduction(lexer_state * const lexer) {
     instruction *instr;
     expression  *arg1;
     expression  *arg2;
@@ -6153,13 +6138,13 @@
             break;
     }
 
-    return;
+
 }
 
 /*
 
-=item C<static void check_first_arg_direction(lexer_state *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
@@ -6179,7 +6164,7 @@
 
 */
 static void
-check_first_arg_direction(ARGMOD(lexer_state *lexer), ARGIN(char const *opname)) {
+check_first_arg_direction(lexer_state * const lexer, NOTNULL(char const * const opname)) {
     int dir_first_arg;
 
     /* op_count also counts the instruction itself, so must be at least 2 */
@@ -6189,7 +6174,7 @@
     if (!CURRENT_INSTRUCTION(lexer)->opinfo->dirs)
         fprintf(stderr, "no opinfo->dirs!\n");
     else {
-        const op_info_t * const opinfo = CURRENT_INSTRUCTION(lexer)->opinfo;
+        op_info_t *opinfo = CURRENT_INSTRUCTION(lexer)->opinfo;
 
         if (opinfo)
             dir_first_arg = CURRENT_INSTRUCTION(lexer)->opinfo->dirs[0];
@@ -6203,6 +6188,7 @@
     if (dir_first_arg != PARROT_ARGDIR_OUT)
         yypirerror(lexer->yyscanner, lexer, "cannot write first arg of op '%s' as a target "
                                             "(direction of argument is IN/INOUT).", opname);
+
 }
 
 
@@ -6228,10 +6214,12 @@
 */
 PARROT_WARN_UNUSED_RESULT
 static int
-check_op_args_for_symbols(ARGMOD(lexer_state *lexer)) {
+check_op_args_for_symbols(lexer_state * const lexer) {
     struct op_info_t  * opinfo;
     unsigned short      i;
     short               opcount;
+    unsigned            num_operands;
+    char               *fullopname;
     int                 opcode;
     int                 result;
     int                 label_bitmask = 0; /* an int is at least 32 bits;
@@ -6241,10 +6229,9 @@
                                             */
 
     /* iterate over all operands to set the type and PASM register on all target nodes, if any */
-    const unsigned int num_operands = get_operand_count(lexer);
-
+    num_operands = get_operand_count(lexer);
     for (i = 0; i < num_operands; i++) {
-        expression * const operand = get_operand(lexer, i + 1); /* get_operand counts from 1 */
+        expression *operand = get_operand(lexer, i + 1); /* get_operand counts from 1 */
 
         if (operand->type == EXPR_IDENT) { /* op_arg ::= identifier */
             /* the operand is an identifier, check now whether it was a symbol. If so,
@@ -6330,7 +6317,8 @@
 
 /*
 
-=item C<static void undeclared_symbol(lexer_state *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
@@ -6340,7 +6328,7 @@
 
 */
 static void
-undeclared_symbol(ARGMOD(lexer_state *lexer), ARGIN(char const *symbol)) {
+undeclared_symbol(lexer_state * const lexer, char const * const symbol) {
     if (TEST_FLAG(lexer->flags, LEXER_FLAG_PASMFILE)) {
         yypirerror(lexer->yyscanner, lexer,
                    "cannot use symbols in PASM mode ('%s')", symbol);

Modified: branches/ops_pct/compilers/pirc/src/pirsymbol.c
==============================================================================
--- branches/ops_pct/compilers/pirc/src/pirsymbol.c	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/compilers/pirc/src/pirsymbol.c	Wed May  5 08:26:03 2010	(r46301)
@@ -73,11 +73,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static pir_reg * new_pir_reg(
-    ARGMOD(lexer_state *lexer),
+    ARGIN(lexer_state * const lexer),
     pir_type type,
     int regno)
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*lexer);
+        __attribute__nonnull__(1);
 
 static int next_register(ARGIN(lexer_state * const lexer), pir_type type)
         __attribute__nonnull__(1);
@@ -387,7 +386,8 @@
 
 /*
 
-=item C<symbol * find_symbol(lexer_state *lexer, const char *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,
@@ -400,7 +400,8 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 symbol *
-find_symbol(ARGMOD(lexer_state *lexer), ARGIN(const char *name))
+find_symbol(ARGIN(lexer_state * const lexer),
+        ARGIN(char const * const name))
 {
     ASSERT_ARGS(find_symbol)
     hashtable    *table    = &CURRENT_SUB(lexer)->symbols;
@@ -410,7 +411,7 @@
 
 
     while (buck) {
-        symbol * const sym = bucket_symbol(buck);
+        symbol *sym = bucket_symbol(buck);
 
         if (STREQ(sym->info.id.name, name)) {
 
@@ -440,8 +441,8 @@
 
 /*
 
-=item C<static pir_reg * new_pir_reg(lexer_state *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>.
@@ -452,7 +453,7 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static pir_reg *
-new_pir_reg(ARGMOD(lexer_state *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);

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

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

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

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

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

Copied: branches/ops_pct/config/auto/cgoto/test_c.in (from r44981, branches/ops_pct/config/auto/cgoto/test_c.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/config/auto/cgoto/test_c.in	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/config/auto/cgoto/test_c.in)
@@ -0,0 +1,28 @@
+/*
+Copyright (C) 2002-2009, Parrot Foundation.
+$Id$
+
+figure out if we can use computed goto
+*/
+
+int
+main(int argc, char **argv)
+{
+    static void *ptr = &&LABEL;
+    int a;
+
+    goto *ptr;
+
+LABEL: {
+    a = 1;
+}
+
+    return 0;
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

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

Copied: branches/ops_pct/config/auto/crypto/crypto_c.in (from r44981, branches/ops_pct/config/auto/crypto/crypto_c.in)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/config/auto/crypto/crypto_c.in	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/config/auto/crypto/crypto_c.in)
@@ -0,0 +1,26 @@
+/*
+  Copyright (C) 2008, Parrot Foundation.
+  $Id$
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <openssl/opensslv.h>
+#include <openssl/err.h>
+
+int
+main(int argc, char *argv[])
+{
+    unsigned long dummy = ERR_get_error();
+
+    printf("%s\n", OPENSSL_VERSION_TEXT);
+
+    return EXIT_SUCCESS;
+}
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/ops_pct/config/gen/makefiles.pm
==============================================================================
--- branches/ops_pct/config/gen/makefiles.pm	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/config/gen/makefiles.pm	Wed May  5 08:26:03 2010	(r46301)
@@ -48,6 +48,8 @@
             conditioned_lines => 1,
         },
 
+        'compilers/ncigen/Makefile'  =>
+            { SOURCE => 'compilers/ncigen/config/makefiles/ncigen.in' },
         'src/dynpmc/Makefile'        =>
             { SOURCE => 'config/gen/makefiles/dynpmc.in' },
         'editor/Makefile'            =>

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

Modified: branches/ops_pct/config/gen/makefiles/dynpmc.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/dynpmc.in	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/config/gen/makefiles/dynpmc.in	Wed May  5 08:26:03 2010	(r46301)
@@ -1,4 +1,4 @@
-# Copyright (C) 2003-2010, Parrot Foundation.
+# Copyright (C) 2003-2009, Parrot Foundation.
 # $Id$
 
 PERL          = @perl@
@@ -14,7 +14,7 @@
 LD            = @ld@
 LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@
 LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @gc_flag@ @optimize@
+CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
 LIBPARROT     = @libparrot_ldflags@
 
 BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
@@ -32,10 +32,31 @@
   foo_group$(LOAD_EXT) \
   pccmethod_test$(LOAD_EXT) \
   rotest$(LOAD_EXT) \
+#IF(has_gdbm):  gdbmhash$(LOAD_EXT) \
   rational$(LOAD_EXT) \
-#IF(has_zlib):  gziphandle$(LOAD_EXT) \
+#IF(has_crypto):  digest_group$(LOAD_EXT) \
   subproxy$(LOAD_EXT)
 
+PMCS_DIGEST = \
+  md2.pmc \
+  md4.pmc \
+  md5.pmc \
+  ripemd160.pmc \
+  sha.pmc \
+  sha1.pmc \
+  sha256.pmc \
+  sha512.pmc
+
+OBJS_DIGEST = \
+  md2$(O) \
+  md4$(O) \
+  md5$(O) \
+  ripemd160$(O) \
+  sha$(O) \
+  sha1$(O) \
+  sha256$(O) \
+  sha512$(O)
+
 PMCS_FOO = \
   foo.pmc \
   foo2.pmc
@@ -44,9 +65,13 @@
   foo$(O) \
   foo2$(O)
 
-#IF(win32 and cc==gcc):LIB_ZLIB = -lz
-#ELSIF(win32):LIB_ZLIB = zlib.lib
-#ELSE:LIB_ZLIB = -lz
+#IF(win32 and cc==gcc):LIB_GDBM = -llibgdbm
+#ELSIF(win32):LIB_GDBM = libgdbm.lib
+#ELSE:LIB_GDBM = -lgdbm
+
+#IF(win32 and cc==gcc):LIB_CRYPTO = -lcrypto
+#ELSIF(win32):LIB_CRYPTO = libcrypto.lib
+#ELSE:LIB_CRYPTO = -lcrypto
 
 CLEANUPS = \
   "*.c" \
@@ -140,6 +165,19 @@
 rotest.dump: rotest.pmc
 	$(PMC2CD) rotest.pmc
 
+gdbmhash$(LOAD_EXT): gdbmhash$(O)
+	$(LD) @ld_out at gdbmhash$(LOAD_EXT) gdbmhash$(O) $(LINKARGS) $(LIB_GDBM)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+
+gdbmhash$(O): gdbmhash.c
+	$(CC) -c @cc_o_out at gdbmhash$(O) $(INCLUDES) $(CFLAGS) gdbmhash.c
+
+gdbmhash.c: gdbmhash.dump
+	$(PMC2CC) gdbmhash.pmc
+
+gdbmhash.dump: gdbmhash.pmc
+	$(PMC2CD) gdbmhash.pmc
+
 rational$(LOAD_EXT): rational$(O)
 	$(LD) @ld_out at rational$(LOAD_EXT) rational$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -153,6 +191,88 @@
 rational.dump: rational.pmc
 	$(PMC2CD) rational.pmc
 
+digest_group$(LOAD_EXT): $(OBJS_DIGEST) lib-digest_group$(O)
+	$(LD) @ld_out at digest_group$(LOAD_EXT) lib-digest_group$(O) $(OBJS_DIGEST) $(LINKARGS) $(LIB_CRYPTO)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+
+lib-digest_group$(O): digest_group.c
+	$(CC) -c @cc_o_out at lib-digest_group$(O) $(INCLUDES) $(CFLAGS) digest_group.c
+
+digest_group.c: $(OBJS_DIGEST)
+	$(PMC2C) --library digest_group --c $(PMCS_DIGEST)
+
+md2$(O): md2.c
+	$(CC) -c @cc_o_out at md2$(O) $(INCLUDES) $(CFLAGS) md2.c
+
+md2.c: md2.dump
+	$(PMC2CC) md2.pmc
+
+md2.dump: md2.pmc
+	$(PMC2CD) md2.pmc
+
+md4$(O): md4.c
+	$(CC) -c @cc_o_out at md4$(O) $(INCLUDES) $(CFLAGS) md4.c
+
+md4.c: md4.dump
+	$(PMC2CC) md4.pmc
+
+md4.dump: md4.pmc
+	$(PMC2CD) md4.pmc
+
+md5$(O): md5.c
+	$(CC) -c @cc_o_out at md5$(O) $(INCLUDES) $(CFLAGS) md5.c
+
+md5.c: md5.dump
+	$(PMC2CC) md5.pmc
+
+md5.dump: md5.pmc
+	$(PMC2CD) md5.pmc
+
+ripemd160$(O): ripemd160.c
+	$(CC) -c @cc_o_out at ripemd160$(O) $(INCLUDES) $(CFLAGS) ripemd160.c
+
+ripemd160.c: ripemd160.dump
+	$(PMC2CC) ripemd160.pmc
+
+ripemd160.dump: ripemd160.pmc
+	$(PMC2CD) ripemd160.pmc
+
+sha$(O): sha.c
+	$(CC) -c @cc_o_out at sha$(O) $(INCLUDES) $(CFLAGS) sha.c
+
+sha.c: sha.dump
+	$(PMC2CC) sha.pmc
+
+sha.dump: sha.pmc
+	$(PMC2CD) sha.pmc
+
+sha1$(O): sha1.c
+	$(CC) -c @cc_o_out at sha1$(O) $(INCLUDES) $(CFLAGS) sha1.c
+
+sha1.c: sha1.dump
+	$(PMC2CC) sha1.pmc
+
+sha1.dump: sha1.pmc
+	$(PMC2CD) sha1.pmc
+
+sha256$(O): sha256.c
+	$(CC) -c @cc_o_out at sha256$(O) $(INCLUDES) $(CFLAGS) sha256.c
+
+sha256.c: sha256.dump
+	$(PMC2CC) sha256.pmc
+
+sha256.dump: sha256.pmc
+	$(PMC2CD) sha256.pmc
+
+sha512$(O): sha512.c
+	$(CC) -c @cc_o_out at sha512$(O) $(INCLUDES) $(CFLAGS) sha512.c
+
+sha512.c: sha512.dump
+	$(PMC2CC) sha512.pmc
+
+sha512.dump: sha512.pmc
+	$(PMC2CD) sha512.pmc
+
 subproxy$(LOAD_EXT): subproxy$(O)
 	$(LD) @ld_out at subproxy$(LOAD_EXT) subproxy$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -166,19 +286,6 @@
 subproxy.dump: subproxy.pmc
 	$(PMC2CD) subproxy.pmc
 
-gziphandle$(LOAD_EXT): gziphandle$(O)
-	$(LD) @ld_out at gziphandle$(LOAD_EXT) gziphandle$(O) $(LINKARGS) $(LIB_ZLIB)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-gziphandle$(O): gziphandle.c
-	$(CC) -c @cc_o_out at gziphandle$(O) $(INCLUDES) $(CFLAGS) gziphandle.c
-
-gziphandle.c: gziphandle.dump
-	$(PMC2CC) gziphandle.pmc
-
-gziphandle.dump: gziphandle.pmc
-	$(PMC2CD) gziphandle.pmc
-
 
 test : all
 	cd ../.. && $(PERL) -Ilib t/harness t/dynpmc/*.t

Modified: branches/ops_pct/config/gen/makefiles/root.in
==============================================================================
--- branches/ops_pct/config/gen/makefiles/root.in	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/config/gen/makefiles/root.in	Wed May  5 08:26:03 2010	(r46301)
@@ -84,7 +84,7 @@
 CC_SHARED        = @cc_shared@
 CC_O_OUT         = @cc_o_out@
 CC_WARN          = @ccwarn@
-CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @gc_flag@ @clock_best@ $(CC_SHARED)
+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@
@@ -118,11 +118,13 @@
 include compilers/imcc/Defines.mak
 include compilers/pirc/Defines.mak
 include compilers/tge/Defines.mak
+include compilers/nqp/Defines.mak
 include compilers/pge/Defines.mak
 include compilers/pct/Defines.mak
 include compilers/opsc/Defines.mak
 include ext/nqp-rx/Defines.mak
 include compilers/data_json/Defines.mak
+include compilers/json/Defines.mak
 
 ###############################################################################
 #
@@ -139,6 +141,7 @@
 GEN_MAKEFILES = \
     Makefile \
     docs/Makefile \
+    compilers/ncigen/Makefile \
     editor/Makefile \
     ext/Makefile \
     src/dynoplibs/Rules.mak \
@@ -149,6 +152,7 @@
 GEN_CONFIGS = \
     $(INC_DIR)/config.h \
     $(INC_DIR)/platform.h \
+    $(INC_DIR)/platform_interface.h \
     $(INC_DIR)/platform_limits.h \
     $(INC_DIR)/has_header.h \
     $(INC_DIR)/feature.h \
@@ -164,11 +168,28 @@
 #IF(has_opengl):    src/glut_nci_thunks.nci \
 #IF(has_glut):    src/glut_callbacks.c \
     src/core_pmcs.c \
-    config_lib.pir \
+#IF(has_crypto):    src/dynpmc/md2.pmc \
+#IF(has_crypto):    src/dynpmc/md4.pmc \
+#IF(has_crypto):    src/dynpmc/md5.pmc \
+#IF(has_crypto):    src/dynpmc/ripemd160.pmc \
+#IF(has_crypto):    src/dynpmc/sha.pmc \
+#IF(has_crypto):    src/dynpmc/sha1.pmc \
+#IF(has_crypto):    src/dynpmc/sha256.pmc \
+#IF(has_crypto):    src/dynpmc/sha512.pmc \
+#IF(has_crypto):    t/dynpmc/md2.t \
+#IF(has_crypto):    t/dynpmc/md4.t \
+#IF(has_crypto):    t/dynpmc/md5.t \
+#IF(has_crypto):    t/dynpmc/ripemd160.t \
+#IF(has_crypto):    t/dynpmc/sha.t \
+#IF(has_crypto):    t/dynpmc/sha1.t \
+#IF(has_crypto):    t/dynpmc/sha256.t \
+#IF(has_crypto):    t/dynpmc/sha512.t \
+    config_lib.pasm \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
     compilers/imcc/imcc.l.flag \
-    src/ops/core_ops.c
+    src/ops/core_ops.c \
+    src/ops/core_ops_switch.c
 
 GEN_PASM_INCLUDES = \
 	runtime/parrot/include/cclass.pasm \
@@ -189,7 +210,6 @@
 	runtime/parrot/include/stdio.pasm \
 	runtime/parrot/include/socket.pasm \
 	runtime/parrot/include/libpaths.pasm \
-	runtime/parrot/include/dlopenflags.pasm \
 	runtime/parrot/include/longopt.pasm \
 	runtime/parrot/include/packfile_segments.pasm \
 	runtime/parrot/include/packfile_constants.pasm \
@@ -233,12 +253,14 @@
 GEN_HEADERS = \
     $(INC_DIR)/vtable.h \
     $(INC_DIR)/oplib/ops.h \
+    $(INC_DIR)/oplib/core_ops_switch.h \
     $(INC_DIR)/extend_vtable.h \
     $(INC_DIR)/pbcversion.h
 
 GEN_SOURCES = \
     src/nci.c \
     src/glut_nci_thunks.c \
+    src/core_ops_switch.c \
     src/parrot_config.c \
     src/null_config.c \
     src/install_config.c \
@@ -271,13 +293,7 @@
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL.pbc \
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL_funcs.pbc \
 #IF(has_opengl):    $(LIBRARY_DIR)/OpenGL/Math.pbc \
-    $(LIBRARY_DIR)/osutils.pbc \
     $(LIBRARY_DIR)/P6object.pbc \
-    $(LIBRARY_DIR)/ProfTest.pbc \
-    $(LIBRARY_DIR)/ProfTest/PIRProfile.pir \
-    $(LIBRARY_DIR)/ProfTest/NQPProfile.pir \
-    $(LIBRARY_DIR)/ProfTest/Matcher.pir \
-    $(LIBRARY_DIR)/ProfTest/Want.pir \
     $(LIBRARY_DIR)/parrotlib.pbc \
     $(LIBRARY_DIR)/pcore.pbc \
     $(LIBRARY_DIR)/pcre.pbc \
@@ -300,9 +316,6 @@
     $(LIBRARY_DIR)/Stream/Sub.pbc \
     $(LIBRARY_DIR)/Stream/Writer.pbc \
     $(LIBRARY_DIR)/String/Utils.pbc \
-    $(LIBRARY_DIR)/TAP/Formatter.pbc \
-    $(LIBRARY_DIR)/TAP/Harness.pbc \
-    $(LIBRARY_DIR)/TAP/Parser.pbc \
     $(LIBRARY_DIR)/Test/Builder/Output.pbc \
     $(LIBRARY_DIR)/Test/Builder/Test.pbc \
     $(LIBRARY_DIR)/Test/Builder/Tester.pbc \
@@ -328,10 +341,6 @@
 
 FLUID_FILES_2 = \
     $(GEN_LIBRARY) \
-    $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
-    $(LIBRARY_DIR)/ProfTest/NQPProfile.pbc \
-    $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
-    $(LIBRARY_DIR)/ProfTest/Want.pbc \
     runtime/parrot/include/parrotlib.pbc
 
 
@@ -397,10 +406,12 @@
         $(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) \
+#IF(cg_flag): $(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h
 
 
 CHARSET_O_FILES   = @TEMP_charset_o@
@@ -424,7 +435,10 @@
 
 INTERP_O_FILES = \
     src/string/api$(O) \
+    \
     src/ops/core_ops$(O) \
+    src/ops/core_ops_switch$(O) \
+    \
 #IF(i386_has_gcc_cmpxchg):    src/atomic/gcc_x86$(O) \
     src/byteorder$(O) \
     src/string/charset$(O) \
@@ -488,6 +502,7 @@
     @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)
@@ -510,7 +525,6 @@
 PIRC                = . at slash@pirc$(EXE)
 NQP_RX              = . at slash@parrot-nqp$(EXE)
 NCI_THUNK_GEN       = . at slash@parrot_nci_thunk_gen$(EXE)
-TAPIR               = . at slash@tapir$(EXE)
 
 # Installable executables
 INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
@@ -522,7 +536,6 @@
 INSTALLABLECONFIG    = . at slash@installable_parrot_config$(EXE)
 INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
 INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
-INSTALLABLETAPIR    = . at slash@installable_tapir$(EXE)
 
 # Libraries
 LIBPARROT_STATIC    = @blib_dir@/@libparrot_static@
@@ -532,7 +545,7 @@
 
 # This line controls whether a static or shared library is built
 # by Parrot's make.  It is not useful otherwise (e.g., in
-# lib/Parrot/Config/Generated.pm or config_lib.pir).
+# lib/Parrot/Config/Generated.pm or config_lib.pasm).
 LIBPARROT           = @libparrot_for_makefile_only@
 
 #IF(has_icu):ICU_SHARED  = @icu_shared@
@@ -563,8 +576,10 @@
 .c$(O) : # suffix rule (limited support)
 	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
-#UNLESS(win32):.s$(O) : # suffix rule (limited support)
-#UNLESS(win32):	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
+.s$(O) : # suffix rule (limited support)
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32).S$(O) : # suffix rule (limited support)
+#UNLESS(win32)	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .pir.pbc : # suffix rule (limited support)
 	$(PARROT) -o $@ $<
@@ -602,6 +617,7 @@
     $(TGE_LIB_PBCS) \
     $(PGE_LIB_PBCS) \
     $(PCT_LIB_PBCS) \
+    $(JSON_LIB_PBCS) \
     $(DATA_JSON_LIB_PBCS) \
     $(NQP_LIB_PBCS) \
     $(GEN_LIBRARY) \
@@ -786,9 +802,9 @@
 
 world : all parrot_utils
 
-parrot_utils : $(PDUMP) $(DIS) $(PDB) $(PBC_MERGE) $(PBC_TO_EXE) $(PARROT_CONFIG) src/install_config$(O) $(TAPIR)
+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) $(INSTALLABLENCITHUNKGEN) $(INSTALLABLETAPIR)
+installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
 
 bootstrap-ops : opsc
 	$(NQP_RX) compilers/opsc/ops2c.nqp
@@ -801,9 +817,8 @@
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
 
-runtime/parrot/include/config.fpmc : myconfig config_lib.pir \
-    runtime/parrot/include/datatypes.pasm $(MINIPARROT)
-	$(MINIPARROT) -Iruntime/parrot/include config_lib.pir > $@
+runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
+	$(MINIPARROT) config_lib.pasm > $@
 
 $(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
@@ -823,12 +838,6 @@
 $(NCI_THUNK_GEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc
 
-tapir.pbc : tools/dev/tapir.pir $(PARROT)
-	$(PARROT) -o tapir.pbc tools/dev/tapir.pir
-
-$(TAPIR) : tapir.pbc $(PARROT) $(PBC_TO_EXE)
-	$(PBC_TO_EXE) tapir.pbc
-
 $(PARROT_CONFIG) : tools/util/parrot-config.pir $(PARROT) $(PBC_TO_EXE)
 	$(PARROT) -o parrot_config.pbc tools/util/parrot-config.pir
 	$(PARROT) pbc_to_exe.pbc parrot_config.pbc
@@ -849,7 +858,7 @@
 
 $(INC_DIR)/context.h : include/pmc/pmc_callcontext.h
 
-$(INC_DIR)/pbcversion.h : PBC_COMPAT
+$(INC_DIR)/pbcversion.h :
 	$(PERL) $(BUILD_TOOLS_DIR)/pbcversion_h.pl > $(INC_DIR)/pbcversion.h
 
 src/parrot_config.c :  runtime/parrot/include/config.fpmc \
@@ -866,37 +875,32 @@
 	$(PERL) $(BUILD_TOOLS_DIR)/parrot_config_c.pl --mini > \
     src/null_config.c
 
-install_config.fpmc : myconfig config_lib.pir $(PARROT)
+install_config.fpmc : myconfig config_lib.pasm $(PARROT)
 	@echo "Invoking Parrot to generate install_config.fpmc"
-	$(PARROT) config_lib.pir --install > $@
+	$(PARROT) config_lib.pasm --install > $@
 
-src/parrot_config$(O) : $(PARROT_H_HEADERS) src/parrot_config.c
+src/parrot_config$(O) : $(PARROT_H_HEADERS)
 
-src/install_config$(O) : $(PARROT_H_HEADERS) src/install_config.c
+src/install_config$(O) : $(PARROT_H_HEADERS)
 
-src/null_config$(O) : $(PARROT_H_HEADERS) src/null_config.c
+src/null_config$(O) : $(PARROT_H_HEADERS)
 
-src/oo$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_class.h src/oo.c \
-    include/pmc/pmc_object.h src/oo.str $(INC_DIR)/oo_private.h
+src/oo$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_class.h include/pmc/pmc_object.h src/oo.str $(INC_DIR)/oo_private.h
 
-src/scheduler$(O) : $(PARROT_H_HEADERS) src/scheduler.str src/scheduler.c \
+src/scheduler$(O) : $(PARROT_H_HEADERS) src/scheduler.str \
         include/pmc/pmc_scheduler.h include/pmc/pmc_task.h \
         include/pmc/pmc_timer.h \
-        $(INC_DIR)/scheduler_private.h \
-        $(INC_DIR)/runcore_api.h
+        $(INC_DIR)/scheduler_private.h
 
-src/io/core$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/core.c
+src/io/core$(O) : $(PARROT_H_HEADERS) src/io/io_private.h
 
-src/io/socket_api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
-    src/io/api.str include/pmc/pmc_socket.h src/io/socket_api.c
+src/io/socket_api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/api.str include/pmc/pmc_socket.h
 
-src/io/socket_unix$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_socket.h \
-    src/io/io_private.h src/io/socket_unix.c
+src/io/socket_unix$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_socket.h src/io/io_private.h
 
 src/io/socket_win32$(O) : $(PARROT_H_HEADERS) \
         src/io/io_private.h \
-        include/pmc/pmc_socket.h \
-        src/io/socket_win32.c
+        include/pmc/pmc_socket.h
 
 O_FILES = \
     $(INTERP_O_FILES) \
@@ -949,15 +953,11 @@
 $(INSTALLABLENCITHUNKGEN) : parrot_nci_thunk_gen.pbc $(PBC_TO_EXE) src/install_config$(O)
 	$(PBC_TO_EXE) parrot_nci_thunk_gen.pbc --install
 
-$(INSTALLABLETAPIR) : tapir.pbc $(PBC_TO_EXE) src/install_config$(O)
-	$(PBC_TO_EXE) tapir.pbc --install
-
 #
 # Parrot Debugger
 #
 
 src/parrot_debugger$(O) : $(INC_DIR)/embed.h \
-        src/parrot_debugger.c \
         $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h $(PARROT_H_HEADERS) compilers/imcc/parser.h \
         compilers/imcc/cfg.h \
@@ -987,8 +987,7 @@
 # Parrot Disassembler
 #
 
-src/pbc_disassemble$(O) : $(INC_DIR)/embed.h $(PARROT_H_HEADERS) \
-    src/pbc_disassemble.c
+src/pbc_disassemble$(O) : $(INC_DIR)/embed.h $(PARROT_H_HEADERS)
 
 $(DIS) : src/pbc_disassemble$(O) $(LIBPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1006,8 +1005,7 @@
 #
 # Parrot Dump
 #
-src/packdump$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_sub.h \
-    include/pmc/pmc_key.h src/packdump.c
+src/packdump$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_sub.h include/pmc/pmc_key.h
 
 $(PDUMP) : src/pbc_dump$(O) src/packdump$(O) $(LIBPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1016,7 +1014,7 @@
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
 src/pbc_dump$(O) : $(INC_DIR)/embed.h  $(INC_DIR)/oplib/ops.h \
-        $(PARROT_H_HEADERS) src/pbc_dump.c
+        $(PARROT_H_HEADERS)
 
 $(INSTALLABLEPDUMP) : src/pbc_dump$(O) src/packdump$(O) \
 	src/install_config$(O) $(LIBPARROT)
@@ -1046,46 +1044,6 @@
     @rpath_lib@ $(ALL_PARROT_LIBS) $(LINKFLAGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
-#
-# Profiling runcore test supporting code
-#
-
-$(LIBRARY_DIR)/ProfTest.pbc: $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
-	$(LIBRARY_DIR)/ProfTest/NQPProfile.pbc $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
-	$(LIBRARY_DIR)/ProfTest/Want.pbc
-	$(PBC_MERGE) -o $@ $(LIBRARY_DIR)/ProfTest/PIRProfile.pbc \
-	$(LIBRARY_DIR)/ProfTest/NQPProfile.pbc $(LIBRARY_DIR)/ProfTest/Matcher.pbc \
-	$(LIBRARY_DIR)/ProfTest/Want.pbc
-
-
-$(LIBRARY_DIR)/ProfTest/PIRProfile.pbc: $(LIBRARY_DIR)/ProfTest/PIRProfile.pir
-	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/PIRProfile.pir
-
-$(LIBRARY_DIR)/ProfTest/PIRProfile.pir: $(LIBRARY_DIR)/ProfTest/PIRProfile.nqp $(NQP_RX)
-	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/PIRProfile.nqp > $@
-
-
-$(LIBRARY_DIR)/ProfTest/NQPProfile.pbc: $(LIBRARY_DIR)/ProfTest/NQPProfile.pir
-	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/NQPProfile.pir
-
-$(LIBRARY_DIR)/ProfTest/NQPProfile.pir: $(LIBRARY_DIR)/ProfTest/NQPProfile.nqp $(NQP_RX)
-	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/NQPProfile.nqp > $@
-
-
-$(LIBRARY_DIR)/ProfTest/Want.pbc: $(LIBRARY_DIR)/ProfTest/Want.pir
-	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/Want.pir
-
-$(LIBRARY_DIR)/ProfTest/Want.pir: $(LIBRARY_DIR)/ProfTest/Want.nqp $(NQP_RX)
-	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/Want.nqp > $@
-
-
-$(LIBRARY_DIR)/ProfTest/Matcher.pbc: $(LIBRARY_DIR)/ProfTest/Matcher.pir
-	$(PARROT) -o $@ $(LIBRARY_DIR)/ProfTest/Matcher.pir
-
-$(LIBRARY_DIR)/ProfTest/Matcher.pir: $(LIBRARY_DIR)/ProfTest/Matcher.nqp $(NQP_RX)
-	$(NQP_RX) --target=pir $(LIBRARY_DIR)/ProfTest/Matcher.nqp > $@
-
-
 
 ###############################################################################
 #
@@ -1136,9 +1094,6 @@
 runtime/parrot/include/libpaths.pasm : $(INC_DIR)/library.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/library.h $@
 
-runtime/parrot/include/dlopenflags.pasm : $(INC_DIR)/platform_interface.h $(H2INC)
-	$(PERL) $(H2INC) $(INC_DIR)/platform_interface.h $@
-
 runtime/parrot/include/datatypes.pasm : $(INC_DIR)/datatypes.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/datatypes.h $@
 
@@ -1224,59 +1179,59 @@
 #
 ###############################################################################
 
-src/byteorder$(O) : $(PARROT_H_HEADERS) src/byteorder.c
+src/byteorder$(O) : $(PARROT_H_HEADERS)
 
-src/datatypes$(O) : $(PARROT_H_HEADERS) src/datatypes.c
+src/datatypes$(O) : $(PARROT_H_HEADERS)
 
 src/extend_vtable$(O) : $(PARROT_H_HEADERS) \
-        $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h src/extend_vtable.c
+        $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h
 
-src/global_setup$(O) : $(PARROT_H_HEADERS) src/global_setup.str src/global_setup.c
+src/global_setup$(O) : $(PARROT_H_HEADERS) src/global_setup.str
 
-src/global$(O) : $(PARROT_H_HEADERS) src/global.str src/global.c \
+src/global$(O) : $(PARROT_H_HEADERS) src/global.str \
 	include/pmc/pmc_sub.h
 
-src/pmc$(O) : include/pmc/pmc_class.h src/pmc.c \
+src/pmc$(O) : include/pmc/pmc_class.h \
 	src/pmc.str $(PARROT_H_HEADERS)
 
-src/pmc_freeze$(O) : $(PARROT_H_HEADERS) src/pmc_freeze.str src/pmc_freeze.c
+src/pmc_freeze$(O) : $(PARROT_H_HEADERS) src/pmc_freeze.str
 
-src/hash$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/hash.c
+src/hash$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h
 
-src/library$(O) : $(PARROT_H_HEADERS) src/library.str src/library.c\
+src/library$(O) : $(PARROT_H_HEADERS) src/library.str \
         $(INC_DIR)/dynext.h
 
 $(INC_DIR)/extend_vtable.h src/extend_vtable.c src/vtable.h : src/vtable.tbl $(BUILD_TOOLS_DIR)/vtable_extend.pl lib/Parrot/Vtable.pm
 	$(PERL) $(BUILD_TOOLS_DIR)/vtable_extend.pl
 
-src/key$(O) : $(PARROT_H_HEADERS) src/key.str src/key.c \
+src/key$(O) : $(PARROT_H_HEADERS) src/key.str \
         include/pmc/pmc_key.h
 
-src/gc/mark_sweep$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/mark_sweep.c
+src/gc/mark_sweep$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
 
-src/gc/gc_ms$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/gc_ms.c
+src/gc/gc_ms$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
 
-src/gc/gc_inf$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/gc_inf.c
+src/gc/gc_inf$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
 
-src/gc/api$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h src/gc/api.c
+src/gc/api$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
 
 src/gc/alloc_resources$(O) : $(PARROT_H_HEADERS) \
-        src/gc/gc_private.h src/gc/alloc_resources.c
+        src/gc/gc_private.h
 
-src/hll$(O) : $(PARROT_H_HEADERS) src/hll.str $(INC_DIR)/dynext.h src/hll.c
+src/hll$(O) : $(PARROT_H_HEADERS) src/hll.str $(INC_DIR)/dynext.h
 
-src/platform$(O) : $(PARROT_H_HEADERS) src/platform.c
+src/platform$(O) : $(PARROT_H_HEADERS)
 
 #IF(platform_asm):src/platform_asm$(O) : $(PARROT_H_HEADERS)
 #IF(platform_asm):
-src/core_pmcs$(O) : $(PARROT_H_HEADERS) src/core_pmcs.c
+src/core_pmcs$(O) : $(PARROT_H_HEADERS)
 
-src/runcore/trace$(O) : include/pmc/pmc_sub.h src/runcore/trace.c \
+src/runcore/trace$(O) : include/pmc/pmc_sub.h \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
 src/debug$(O) : $(INC_DIR)/embed.h $(INC_DIR)/extend.h \
-        $(PARROT_H_HEADERS) src/debug.c \
+        $(PARROT_H_HEADERS) \
         $(INC_DIR)/oplib/ops.h \
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         src/debug.str include/pmc/pmc_key.h \
@@ -1284,27 +1239,26 @@
         $(INC_DIR)/extend_vtable.h
 
 src/sub$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
-        src/sub.str src/sub.c \
+        src/sub.str \
 	include/pmc/pmc_sub.h include/pmc/pmc_continuation.h
 
 src/string/api$(O) : $(PARROT_H_HEADERS) src/string/api.str \
-        src/string/private_cstring.h src/string/api.c
+        src/string/private_cstring.h
 
-src/string/primitives$(O) : $(PARROT_H_HEADERS) src/string/primitives.c
+src/string/primitives$(O) : $(PARROT_H_HEADERS)
 
-src/longopt$(O) : $(PARROT_H_HEADERS) src/longopt.c
+src/longopt$(O) : $(PARROT_H_HEADERS)
 
 src/dynext$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/dynext.h \
-        src/dynext.str include/pmc/pmc_parrotlibrary.h src/dynext.c
+        src/dynext.str include/pmc/pmc_parrotlibrary.h
 
 src/exceptions$(O) : $(PARROT_H_HEADERS) \
-        src/exceptions.str src/exceptions.c \
+        src/exceptions.str \
 	include/pmc/pmc_continuation.h
 
-src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h src/thread.c \
+src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h \
         include/pmc/pmc_sub.h \
-	include/pmc/pmc_parrotinterpreter.h \
-	$(INC_DIR)/runcore_api.h
+	include/pmc/pmc_parrotinterpreter.h
 
 ## SUFFIX OVERRIDE - dynloaded files need cc_shared
 src/extend$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
@@ -1312,15 +1266,14 @@
 	$(CC) $(CFLAGS) @optimize::src/extend.c@ @ccwarn::src/extend.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extend.c
 
 src/runcore/main$(O) : \
-	src/runcore/main.c \
 	src/runcore/main.str \
 	include/pmc/pmc_parrotlibrary.h \
         $(INC_DIR)/dynext.h $(INC_DIR)/oplib/core_ops.h \
-        $(INC_DIR)/oplib/ops.h \
+        $(INC_DIR)/oplib/core_ops_switch.h $(INC_DIR)/oplib/ops.h \
         $(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h \
         $(INC_DIR)/runcore_profiling.h
 
-src/runcore/profiling$(O) : src/runcore/profiling.str src/runcore/profiling.c \
+src/runcore/profiling$(O) : src/runcore/profiling.str \
 	include/pmc/pmc_sub.h \
 	include/pmc/pmc_namespace.h \
         $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h \
@@ -1329,30 +1282,25 @@
 
 src/call/args$(O) : \
         $(PARROT_H_HEADERS) $(INC_DIR)/oplib/ops.h \
-	src/call/args.c \
 	src/call/args.str \
 	include/pmc/pmc_key.h \
 	include/pmc/pmc_fixedintegerarray.h
 
-src/call/context_accessors$(O): $(PARROT_H_HEADERS) \
-        src/call/context_accessors.c
+src/call/context_accessors$(O): $(PARROT_H_HEADERS)
 
 src/call/pcc$(O) : $(INC_DIR)/oplib/ops.h \
         $(PARROT_H_HEADERS) \
         $(INC_DIR)/runcore_api.h \
-	src/call/pcc.c \
 	src/call/pcc.str \
 	include/pmc/pmc_key.h include/pmc/pmc_continuation.h
 
 src/call/context$(O) : $(PARROT_H_HEADERS) \
-	include/pmc/pmc_sub.h src/call/context.c
+	include/pmc/pmc_sub.h
 
 src/interp/inter_cb$(O) : $(PARROT_H_HEADERS) \
-        include/pmc/pmc_parrotinterpreter.h \
-	src/interp/inter_cb.str src/interp/inter_cb.c
+	src/interp/inter_cb.str
 
 src/interp/inter_misc$(O) : $(PARROT_H_HEADERS) \
-        src/interp/inter_misc.c \
         src/interp/inter_misc.str \
 	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
@@ -1366,8 +1314,6 @@
 
 src/interp/inter_create$(O) : $(PARROT_H_HEADERS) \
 	$(INC_DIR)/oplib/core_ops.h \
-	src/gc/gc_private.h \
-        src/interp/inter_create.c \
         src/interp/inter_create.str \
 	compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
@@ -1380,43 +1326,33 @@
         $(INC_DIR)/runcore_api.h
 
 src/call/ops$(O) : $(INC_DIR)/oplib/ops.h \
-	$(PARROT_H_HEADERS) include/pmc/pmc_continuation.h \
-        $(INC_DIR)/runcore_api.h src/call/ops.c
+	$(PARROT_H_HEADERS) include/pmc/pmc_continuation.h
 
 src/io/api$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
-        src/io/api.c \
         src/io/api.str include/pmc/pmc_filehandle.h \
-        include/pmc/pmc_stringhandle.h \
-        $(INC_DIR)/extend.h \
-        $(INC_DIR)/extend_vtable.h
+        include/pmc/pmc_stringhandle.h
 
-src/io/buffer$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/buffer.c
+src/io/buffer$(O) : $(PARROT_H_HEADERS) src/io/io_private.h
 
-src/io/portable$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/io/portable.c
+src/io/portable$(O) : $(PARROT_H_HEADERS) src/io/io_private.h
 
-src/io/unix$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
-    include/pmc/pmc_filehandle.h src/io/unix.c
+src/io/unix$(O) : $(PARROT_H_HEADERS) src/io/io_private.h include/pmc/pmc_filehandle.h
 
-src/io/utf8$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/string/unicode.h \
-    src/io/utf8.c
+src/io/utf8$(O) : $(PARROT_H_HEADERS) src/io/io_private.h src/string/unicode.h
 
-src/io/win32$(O) : $(PARROT_H_HEADERS) src/io/io_private.h \
-    include/pmc/pmc_filehandle.h src/io/win32.c
+src/io/win32$(O) : $(PARROT_H_HEADERS) src/io/io_private.h include/pmc/pmc_filehandle.h
 
-src/gc/alloc_memory$(O) : $(PARROT_H_HEADERS) src/gc/alloc_memory.c
+src/gc/alloc_memory$(O) : $(PARROT_H_HEADERS)
 
 src/main$(O) : $(INC_DIR)/imcc.h $(PARROT_H_HEADERS) \
-        $(INC_DIR)/embed.h $(INC_DIR)/runcore_api.h src/gc/gc_private.h \
-        src/main.c
+        $(INC_DIR)/embed.h
 
 src/multidispatch$(O) : \
-        src/multidispatch.c \
         src/multidispatch.str \
         $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS) \
 	include/pmc/pmc_nci.h include/pmc/pmc_sub.h
 
 src/packfile$(O) : src/packfile.str \
-        src/packfile.c \
 	include/pmc/pmc_sub.h include/pmc/pmc_key.h \
         compilers/imcc/imc.h \
 	compilers/imcc/cfg.h \
@@ -1429,22 +1365,20 @@
         $(INC_DIR)/embed.h $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h \
         $(PARROT_H_HEADERS) $(INC_DIR)/runcore_api.h
 
-src/packfile/pf_items$(O) : $(PARROT_H_HEADERS) src/packfile/pf_items.c
+src/packfile/pf_items$(O) : $(PARROT_H_HEADERS)
 
-src/packout$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h src/packout.c
+src/packout$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_key.h
 
 src/parrot$(O) : $(GENERAL_H_FILES)
 
 src/runcore/cores$(O) : src/runcore/cores.str \
-        src/runcore/cores.c \
 	include/pmc/pmc_sub.h \
         $(INC_DIR)/dynext.h $(INC_DIR)/embed.h $(INC_DIR)/oplib/core_ops.h \
-        $(INC_DIR)/oplib/ops.h \
+        $(INC_DIR)/oplib/core_ops_switch.h $(INC_DIR)/oplib/ops.h \
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
-        src/embed.c \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h \
         compilers/imcc/cfg.h \
@@ -1457,55 +1391,55 @@
 
 src/dataypes$(O) : $(GENERAL_H_FILES) src/dataypes.c
 
-src/exit$(O) : $(PARROT_H_HEADERS) src/exit.c
+src/exit$(O) : $(PARROT_H_HEADERS)
 
 src/nci/api$(O) : src/nci/api.str \
-        src/nci/api.c \
-        $(PARROT_H_HEADERS)
+        $(PARROT_H_HEADERS) \
+        include/pmc/pmc_unmanagedstruct.h \
+        include/pmc/pmc_nci.h
 
-src/nci/core_thunks$(O) : src/nci/core_thunks.c \
+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$(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 \
-        src/frame_builder.c \
         include/pmc/pmc_fixedintegerarray.h \
         include/pmc/pmc_unmanagedstruct.h \
         include/pmc/pmc_managedstruct.h \
         $(INC_DIR)/oplib/ops.h
 
-src/vtables$(O) : $(PARROT_H_HEADERS) src/vtables.c
+src/vtables$(O) : $(PARROT_H_HEADERS)
 
 ## SUFFIX OVERRIDE
-src/gc/system$(O) : $(PARROT_H_HEADERS)  src/gc/gc_private.h src/gc/system.c
+src/gc/system$(O) : $(PARROT_H_HEADERS)  src/gc/gc_private.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/gc/gc_private.h : $(INC_DIR)/settings.h
 
-src/gc/malloc$(O) : src/gc/malloc.c
+src/warnings$(O) : $(PARROT_H_HEADERS)
 
-src/warnings$(O) : $(PARROT_H_HEADERS) src/warnings.c
+src/misc$(O) : $(PARROT_H_HEADERS)
 
-src/misc$(O) : $(PARROT_H_HEADERS) src/misc.c
-
-src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h src/utils.c
+src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h
 
 ## SUFFIX OVERRIDE
-src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str src/spf_render.c
+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 src/spf_vtable.c
+src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str
 
-src/string/encoding$(O) : $(PARROT_H_HEADERS) src/string/encoding.c
+src/string/encoding$(O) : $(PARROT_H_HEADERS)
 
-src/string/charset$(O) : $(PARROT_H_HEADERS) src/string/charset.c \
+src/string/charset$(O) : $(PARROT_H_HEADERS) \
         src/string/encoding/fixed_8.h \
         src/string/encoding/utf8.h \
         src/string/encoding/utf16.h \
@@ -1515,11 +1449,10 @@
         src/string/charset/iso-8859-1.h \
         src/string/charset/unicode.h
 
-src/pbc_merge$(O) : $(INC_DIR)/embed.h src/pbc_merge.c \
+src/pbc_merge$(O) : $(INC_DIR)/embed.h \
 	include/pmc/pmc_sub.h $(INC_DIR)/oplib/ops.h $(PARROT_H_HEADERS)
 
-src/io/filehandle$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_filehandle.h \
-    src/io/io_private.h src/io/filehandle.c
+src/io/filehandle$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_filehandle.h src/io/io_private.h
 
 src/dynpmc/subproxy$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
   $(INC_DIR)/dynext.h include/pmc/pmc_subproxy.h \
@@ -1527,12 +1460,11 @@
   include/pmc/pmc_continuation.h include/pmc/pmc_callcontext.h \
   include/pmc/pmc_default.h
 
-src/gc/malloc_trace$(O) : src/gc/malloc.c src/gc/malloc_trace.c
+src/gc/malloc_trace$(O) : src/gc/malloc.c
 
-src/packfile/pf_items$(O) : $(PARROT_H_HEADERS) src/packfile/pf_items.c
+src/packfile/pf_items$(O) : $(PARROT_H_HEADERS)
 
-src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h \
-    src/atomic/gcc_x86.c
+src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h
 
 # core_ops depends upon config.h so that it gets updated along with
 # updates to config.h's version numbers
@@ -1552,6 +1484,41 @@
 	include/pmc/pmc_continuation.h
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
 
+## SUFFIX OVERRIDE
+src/ops/core_ops_switch$(O) : $(GENERAL_H_FILES) src/ops/core_ops_switch.c \
+	include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_switch.c@ @ccwarn::src/ops/core_ops_switch.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_switch.c
+
+$(INC_DIR)/oplib/core_ops_switch.h : src/ops/core_ops_switch.c
+
+src/ops/core_ops_switch.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl \
+	lib/Parrot/OpsFile.pm lib/Parrot/Op.pm $(INC_DIR)/config.h \
+	lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CSwitch.pm \
+	lib/Parrot/OpTrans/CPrederef.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --core @no_lines_flag@
+
+## SUFFIX OVERRIDE
+src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cg.c@ @ccwarn::src/ops/core_ops_cg.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cg.c
+
+## SUFFIX OVERRIDE
+src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cgp.c@ @ccwarn::src/ops/core_ops_cgp.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cgp.c
+
+src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
+
+$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
+
+src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
+
+$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
+
+src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
+
 @TEMP_gc_c@
 
 @TEMP_pmc_build@
@@ -1608,12 +1575,6 @@
 htmlhelp-clean :
 	$(MAKE) docs htmlhelp-clean
 
-#UNLESS(win32):pdf:
-#UNLESS(win32):	$(MAKE) docs pdf
-
-pdf-clean:
-	$(MAKE) docs pdf-clean
-
 ###############################################################################
 #
 # dynamic PMC targets:
@@ -1708,12 +1669,16 @@
 # integrating them in a single run is difficult.
 
 # Normal test package
-test : test_core
+test : test_core nqp_test
 
 # Test Parrot core.
 test_core: test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS)
 
+# Test the NQP compiler
+nqp_test : test_prep compilers/nqp/nqp.pbc
+	$(PERL) compilers/nqp/t/harness
+
 # run the test suite, create a TAP archive and send it off to smolder
 smolder_test : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) --archive --send-to-smolder
@@ -1731,17 +1696,20 @@
 check : test
 
 # Test various run cores and other stuff
-# 'testg' and 'testj' are tested only
+# 'testC', 'testg' and 'testj' are tested only
 # when the needed runcores are available
 fulltest :
 	- at make@ testb \
+#IF(cg_flag):	testC \
 	testf \
+#IF(cg_flag):	testg \
 	testr \
+	testS \
 	src_tests \
 	run_tests \
-	buildtools_tests \
 	perl_tests \
 	library_tests \
+	nqp_test \
 	codetest \
 	benchmark_tests \
 	manifest_tests \
@@ -1752,6 +1720,10 @@
 testb : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) -b $(RUNCORE_TEST_FILES)
 
+# CGP core
+testC : test_prep
+	$(PERL) t/harness $(EXTRA_TEST_ARGS) -C $(RUNCORE_TEST_FILES)
+
 # fast core
 testf : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) -f $(RUNCORE_TEST_FILES)
@@ -1772,6 +1744,18 @@
 testr : test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) -r $(RUNCORE_TEST_FILES)
 
+# switched core
+testS : test_prep
+	$(PERL) t/harness $(EXTRA_TEST_ARGS) -S $(RUNCORE_TEST_FILES)
+
+# Computed goto jitted core - target retained, but falls back to standard core
+testCj : test_prep
+	$(PERL) t/harness $(EXTRA_TEST_ARGS) $(RUNCORE_TEST_FILES)
+
+# switched jitted core - target retained, but falls back to standard core
+testSj : test_prep
+	$(PERL) t/harness $(EXTRA_TEST_ARGS) $(RUNCORE_TEST_FILES)
+
 # test the EXEC stuff
 testexec: test_prep
 	$(PERL) t/harness $(EXTRA_TEST_ARGS) --run-exec $(RUNCORE_TEST_FILES)
@@ -1845,12 +1829,13 @@
     ext-clean \
 #UNLESS(win32):    cover-clean \
     editor-clean
-	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c
+	$(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)
+	$(RM_F) $(NQP_CLEANUPS) $(PGE_CLEANUPS) $(TGE_CLEANUPS) $(JSON_CLEANUPS)
 	$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS) $(DATA_JSON_CLEANUPS)
 	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES) $(DYNOPLIBS_CLEANUPS)
 
@@ -1869,10 +1854,8 @@
     $(INSTALLABLECONFIG) \
     $(INSTALLABLENQP) \
     $(INSTALLABLENCITHUNKGEN) \
-    $(INSTALLABLETAPIR) \
     pbc_to_exe.pbc pbc_to_exe.c pbc_to_exe$(O) pbc_to_exe$(EXE) \
     $(NCI_THUNK_GEN) parrot_nci_thunk_gen.c parrot_nci_thunk_gen$(O) parrot_nci_thunk_gen.pbc \
-    tapir.pbc tapir.c tapir$(O) tapir$(EXE) \
     parrot_config$(EXE) parrot_config.c parrot_config$(O) parrot_config.pbc \
     compilers/imcc/main$(O) \
     $(PDUMP) src/pbc_dump$(O) src/packdump$(O) \
@@ -2109,8 +2092,7 @@
 	rm -f *.ln
 	$(LINT) $(CC_INC) "-Iinclude/pmc" $(BSD_LINT_FLAGS) $(BSD_LINT_EXCLUSIONS) $(LINTABLE_CFILES)
 
-# For checking with splint see also
-# http:////trac.parrot.org/parrot/wiki/splint
+# For checking with splint see also http:////www.perlfoundation.org//parrot//index.cgi?splint
 # Splint: http:////splint.org
 SPLINT = splint
 
@@ -2122,7 +2104,7 @@
 # The dashes in the names don't make any difference to Splint, but I've
 # made them match how they are in the manual.  Otherwise, you might be
 # looking for "declundef", except that it's "decl-undef" in the docs.
-SPLINTFLAGS_BASE = \
+SPLINTFLAGS = \
     +standard \
     -hints \
     \
@@ -2144,16 +2126,14 @@
     +show-scan \
     +time-dist \
     \
-    +cpp-names \
     +ansi-reserved \
     +ansi-reserved-internal \
     -iso-reserved \
     -iso-reserved-internal \
-    -include-nest 10 \
+    -include-nest 10
 
 # Memory safety checks
-# Transfer errors (-mem-trans) are too tough for us right now
-SPLINTFLAGS_MEMORY_SAFETY = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +bufferoverflow \
     +bufferoverflowhigh \
     +read-only-strings \
@@ -2161,19 +2141,9 @@
     +strict-destroy \
     +strict-use-released \
     +use-released \
-    -must-free \
-    -mustfreefresh \
-    -mustfreeonly \
-    +null \
-    +nullptrarith \
-    +nullret \
-    -ptr-arith \
-    +ptr-negate \
-    -zero-ptr \
-    -mem-trans
 
 # Macro safety checks
-SPLINTFLAGS_MACRO_SAFETY = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +macro-assign \
     +macro-empty \
     +macro-parens \
@@ -2182,44 +2152,63 @@
     +macro-unrecog \
 
 # Watch for unsafe comparisons
-SPLINTFLAGS_UNSAFE_COMPARISONS = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +bool-compare \
     +ptr-compare \
     +real-compare \
     +unsigned-compare
 
 # But allow us some slop in boolean comparisons
-SPLINTFLAGS_BOOLEAN_SLOP = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     -pred-bool-int \
     -pred-bool-ptr \
     -pred-bool-others \
     -boolops \
 
-# const and other qualifiers
-# Report qualifier mismatches only if dangerous (+relax-quals)
-SPLINTFLAGS_QUALIFIERS = \
+# Report qualifier mismatches only if dangerous
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +relax-quals
 
+# Memory checking
+SPLINTFLAGS = $(SPLINTFLAGS) \
+    -must-free \
+    -mustfreefresh \
+    -mustfreeonly \
+    +null \
+    +nullptrarith \
+    +nullret \
+    -ptr-arith \
+    +ptr-negate \
+    -zero-ptr \
+
+# Transfer errors are too tough for us right now
+SPLINTFLAGS = $(SPLINTFLAGS) \
+    -mem-trans
+
 # Symbol definitions
-SPLINTFLAGS_SYMBOL_DEFINITIONS = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +decl-undef \
     +incon-defs \
     +incon-defs-lib \
 
+# Check for conflicts with C++ compilers
+SPLINTFLAGS = $(SPLINTFLAGS) \
+    +cpp-names \
+
 # Format codes
-SPLINTFLAGS_FORMAT = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +format-code \
     +format-type \
 
 # Problems with evaluation and control structions
-SPLINTFLAGS_EVALUATION = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +controlnestdepth 15 \
-    +duplicate-quals \
+    +duplicate-case \
     +eval-order \
     +eval-order-uncon \
 
 # Types and stuff
-SPLINTFLAGS_TYPES = \
+SPLINTFLAGS = $(SPLINTFLAGS) \
     +char-index \
     +char-int \
     +enum-members \
@@ -2238,27 +2227,13 @@
 # added to splint target to simplify experimentation,
 # example: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
 
-SPLINTFLAGS_TEST =
-
-SPLINTFLAGS = \
-	$(SPLINTFLAGS_BASE) \
-	$(SPLINTFLAGS_MEMORY_SAFETY) \
-	$(SPLINTFLAGS_MACRO_SAFETY) \
-	$(SPLINTFLAGS_UNSAFE_COMPARISONS) \
-	$(SPLINTFLAGS_BOOLEAN_SLOP) \
-	$(SPLINTFLAGS_QUALIFIERS) \
-	$(SPLINTFLAGS_SYMBOL_DEFINITIONS) \
-	$(SPLINTFLAGS_FORMAT) \
-	$(SPLINTFLAGS_EVALUATION) \
-	$(SPLINTFLAGS_TYPES) \
-
 SPLINT_SOURCE = `echo $(O_FILES) | $(PERL) -pe @PQ at s/\.o/\.c/g at PQ@`
 
 splint-all : $(PARROT)
 	$(MKPATH) $(SPLINT_TMP)
-	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) \
+	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) \
 	$(SPLINT_SOURCE) \
-	$(SPLINT) $(CC_INC) $(SPLINTFLAGS) compilers/imcc/main.c
+	$(SPLINT) $(CC_INC) $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) compilers/imcc/main.c
 
 # "splint" is the less-thorough splint target.  For cage cleaning work,
 # you'll probably want to specify SPLINT_SOURCE rather than work on the
@@ -2267,7 +2242,7 @@
 
 splint : all
 	$(MKPATH) $(SPLINT_TMP)
-	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) \
+	$(SPLINT) $(CC_INC) "-Iinclude/pmc" "-Icompilers/ast" $(SPLINTFLAGS) $(SPLINTFLAGS_TEST) \
 	+partial -DNDEBUG \
 	$(SPLINT_SOURCE) \
 		| grep -v 'Source code error generation point'
@@ -2295,12 +2270,16 @@
 cover: \
     cover.dummy \
     cover-testb \
+#IF(cg_flag):    cover-testC \
     cover-testf \
+#IF(cg_flag):    cover-testg \
     cover-testr \
+    cover-testS \
     cover-src \
     cover-run \
     cover-perl \
     cover-extra \
+    cover-nqp \
     cover-codingstd \
     cover-benchmark \
     cover-manifest \
@@ -2323,6 +2302,9 @@
 cover-testb: cover.dummy
 	- at make@ testb
 
+cover-testC: cover.dummy
+	- at make@ testC
+
 cover-testf: cover.dummy
 	- at make@ testf
 
@@ -2335,6 +2317,9 @@
 cover-testr: cover.dummy
 	- at make@ testr
 
+cover-testS: cover.dummy
+	- at make@ testS
+
 cover-src: cover.dummy
 	- at make@ src_tests
 
@@ -2347,6 +2332,9 @@
 cover-extra: cover.dummy
 	- at make@ library_tests
 
+cover-nqp: cover.dummy
+	- at make@ nqp_test
+
 cover-codingstd: cover.dummy
 	- at make@ codingstd_tests
 
@@ -2385,7 +2373,6 @@
     --destdir=$(DESTDIR) \
     --docdir=$(DOC_DIR) \
     --versiondir=$(VERSION_DIR) \
-    --pkgconfigdir=@PKGCONFIG_DIR@ \
     MANIFEST MANIFEST.generated
 
 install-dev-only: installable
@@ -2425,8 +2412,6 @@
 	grep -v DEVELOPING MANIFEST.real > MANIFEST
 	$(PERL) -lane 'print"parrot-$(VERSION)/$$F[0]"unless!length||/#/' MANIFEST | \
     tar -zcv -T - -f parrot-$(VERSION).tar.gz
-	$(PERL) -lane 'print"parrot-$(VERSION)/$$F[0]"unless!length||/#/' \
-             MANIFEST | tar -jcv -T - -f parrot-$(VERSION).tar.bz2
 	mv MANIFEST.real MANIFEST
 	rm parrot-$(VERSION)
 
@@ -2455,8 +2440,7 @@
     @ld_out@$@ src/nci_test$(O) $(C_LIBS)
 
 # for use by runtime/parrot/library/OpenGL.pir
-src/glut_callbacks$(O): $(PARROT_H_HEADERS) \
-    $(INC_DIR)/extend.h $(INC_DIR)/extend_vtable.h src/glut_callbacks.c
+src/glut_callbacks$(O): $(GENERAL_H_FILES)
 
 src/glut_nci_thunks.c: $(NCI_THUNK_GEN)
 	$(NCI_THUNK_GEN) \
@@ -2465,9 +2449,7 @@
 	    --output=src/glut_nci_thunks.c \
 	    <src/glut_nci_thunks.nci
 
-src/glut_nci_thunks$(O) : $(PARROT_H_HEADERS) \
-    src/glut_nci_thunks.c \
-    include/pmc/pmc_nci.h
+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) \
@@ -2479,8 +2461,7 @@
 	    --output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
 
 ## SUFFIX OVERRIDE
-src/extra_nci_thunks$(O) : $(PARROT_H_HEADERS) src/extra_nci_thunks.c \
-    include/pmc/pmc_nci.h
+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)
@@ -2497,7 +2478,7 @@
         --links=no --totals \
         -R --exclude=blib --exclude=.svn  \
         --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
+        -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK \
         .
 
 # this works with an old etags (XEmacs 21.5*)
@@ -2514,11 +2495,11 @@
 tags-vi: tags.vi.dummy
 	$(RM_F) tags
 	@ctags@ \
-	--links=no --totals \
-	-R --exclude=blib --exclude=.svn  \
-	--languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
-	-I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK,ARGFREE,ARGFREE_NOTNULL \
-	.
+    --links=no --totals \
+    -R --exclude=blib --exclude=.svn  \
+    --languages=c,perl --langmap=c:+.h,c:+.pmc,c:+.ops \
+    -I NOTNULL,NULLOK,ARGIN,ARGMOD,ARGOUT,ARGINOUT,ARGIN_NULLOK,ARGOUT_NULLOK,ARGMOD_NULLOK \
+    .
 	$(PERL) $(BUILD_TOOLS_DIR)/addopstags.pl $(OPS_FILES)
 
 tags.vi.dummy:
@@ -2530,7 +2511,6 @@
 
 # Andy's extra-cranky Perl::Critic checking for cage cleaners
 cagecritic:
-	@perl -MPerl::Critic::Bangs -e'$$min=q{1.04};die qq{You need Bangs $$min} unless $$Perl::Critic::Bangs::VERSION ge $$min'
 	perlcritic -1 --profile tools/util/perlcritic-cage.conf $(CRITIC_FILES)
 
 # This target will eventually create all the headers automatically.  If you
@@ -2540,7 +2520,6 @@
 
 HEADERIZER_O_FILES = \
     $(O_FILES) \
-    src/main$(O) \
     src/packdump$(O) \
     src/pbc_merge$(O) \
     $(PIRC_O_FILES)
@@ -2558,11 +2537,13 @@
 include runtime/parrot/library/Rules.mak
 include compilers/imcc/Rules.mak
 include compilers/pirc/Rules.mak
+include compilers/nqp/Rules.mak
 include compilers/pge/Rules.mak
 include compilers/pct/Rules.mak
 include compilers/opsc/Rules.mak
 include compilers/tge/Rules.mak
 include compilers/data_json/Rules.mak
+include compilers/json/Rules.mak
 include ext/nqp-rx/Rules.mak
 
 # Local variables:

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

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

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

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

Modified: branches/ops_pct/config/gen/platform/generic/env.c
==============================================================================
--- branches/ops_pct/config/gen/platform/generic/env.c	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/config/gen/platform/generic/env.c	Wed May  5 08:26:03 2010	(r46301)
@@ -74,7 +74,7 @@
 void
 Parrot_unsetenv(PARROT_INTERP, STRING *str_name)
 {
-    char * const name = Parrot_str_to_cstring(interp, str_name);
+    char *name = Parrot_str_to_cstring(interp, str_name);
 #ifdef PARROT_HAS_UNSETENV
     unsetenv(name);
 #else

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

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/ops_pct/docs/configuration.pod
==============================================================================
--- branches/ops_pct/docs/configuration.pod	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/docs/configuration.pod	Wed May  5 08:26:03 2010	(r46301)
@@ -123,6 +123,10 @@
 
 =over 4
 
+=item F<config/auto/cgoto.pm>
+
+    Does your compiler support computed goto...
+
 =item F<gen/config_h.pm>
 
     Generate C headers...
@@ -132,7 +136,7 @@
 Note that on non-interactive steps, the text I<done> will be printed after the
 description when the step finishes executing; for example, the user will see:
 
-    Determine flags for building shared libraries.....-fPIC
+    Does your compiler support computed goto..............done.
 
 =item C<result>
 

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

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

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

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

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

Modified: branches/ops_pct/docs/embed.pod
==============================================================================
--- branches/ops_pct/docs/embed.pod	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/docs/embed.pod	Wed May  5 08:26:03 2010	(r46301)
@@ -145,6 +145,12 @@
 
 =item PARROT_FAST_CORE
 
+=item PARROT_SWITCH_CORE
+
+=item PARROT_CGP_CORE
+
+=item PARROT_CGOTO_CORE
+
 =item PARROT_EXEC_CORE
 
 =item PARROT_GC_DEBUG_CORE
@@ -230,7 +236,7 @@
 Creates a "dummy" packfile in lieu of actually creating one from a bytecode
 file on disk.
 
-=item C<void Parrot_load_bytecode(PARROT_INTERP, STRING *path)>
+=item C<void Parrot_load_bytecode(PARROT_INTERP, const char *path)>
 
 Reads and load Parrot bytecode or PIR from the file referenced by C<path>.
 You should create a dummy packfile beforehand; see C<PackFile_new_dummy> for
@@ -1545,6 +1551,8 @@
 
 =item C<Parrot_store_sub_in_namespace>
 
+=item C<Parrot_str_append>
+
 =item C<Parrot_str_boolean>
 
 =item C<Parrot_str_byte_length>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Modified: branches/ops_pct/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/ops_pct/docs/pdds/pdd17_pmc.pod	Wed May  5 03:58:50 2010	(r46300)
+++ branches/ops_pct/docs/pdds/pdd17_pmc.pod	Wed May  5 08:26:03 2010	(r46301)
@@ -1,17 +1,17 @@
-# Copyright (C) 2001-2010, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 
 =head1 PDD 17: Polymorphic Containers
 
+=head2 Version
+
+$Revision$
+
 =head2 Abstract
 
 This PDD describes the internal structure and behavior of the Polymorphic
 Container (PMC) data type.
 
-=head2 Version
-
-$Revision$
-
 =head2 Description
 
 PMCs implement all internal data types more complex than a simple integer,
@@ -1656,8 +1656,8 @@
 =head4 Array types
 
 Note that for the following types you can set the size of the array by using
-the VTABLE_set_integer_native() function. Assigning an integer to the array
-as a whole sets the array to that size.
+the VTABLE_set_integer_native() method. Assigning an integer to the array as a
+whole sets the array to that size.
 
 Size-changing operations (such as push, pop, shift, unshift, and splice)
 on statically-sized arrays will throw an exception.
@@ -1809,9 +1809,17 @@
 
 =back
 
+=head2 Attachments
+
+None.
+
+=head2 Footnotes
+
+None.
+
 =head2 References
 
-F<docs/pmc2c.pod>
+  docs/pmc2c.pod
 
 =cut
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Copied: branches/ops_pct/ext/SQLite3/DBDI.pm (from r44981, branches/ops_pct/ext/SQLite3/DBDI.pm)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/ext/SQLite3/DBDI.pm	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/ext/SQLite3/DBDI.pm)
@@ -0,0 +1,41 @@
+# Basic Perl 6 database layer
+# $Id$
+# Copyright (C) 2008, Parrot Foundation.
+
+use v6;
+
+class DBDI::DriverManager {
+    method getConnection($url, $login, $password) {
+        my $c1 = $url.index(":");
+        my $schema = substr($url, 0, $c1);
+        if ($schema ne "dbdi") { die "Unknown schema "~$schema }
+        my $rurl = substr($url, $c1+1);
+        #say "Remainder was "~$rurl;
+
+        my $c2 = $rurl.index(":");
+        my $driver = "DBDI::Driver::"~substr($rurl, 0, $c2);
+        eval "use "~$driver;
+        if ($!) { die "Couldn't load "~$driver~": "~$!; }
+
+        my $r = substr($rurl, $c2+1);
+        return (eval $driver).getConnection($r, $login, $password);
+        #return ::($driver).getConnection($r, $login, $password);
+    }
+}
+
+class DBDI::Driver { }
+class DBDI::Statement { }
+class DBDI::PreparedStatement { }
+
+class DBDI::ResultSet {
+    has $.statement;
+    method next() { return $.statement.next(); }
+    multi method getCol(Num $col) {
+        $.statement.getCol($col);
+    }
+    multi method getCol(Str $col) {
+        my $n = $.statement.lookupCol($col);
+        if ($n > -1) { return self.getCol($n) }
+        die "Couldn't find column "~$col;
+    }
+}

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

Copied: branches/ops_pct/ext/SQLite3/Makefile.PL (from r44981, branches/ops_pct/ext/SQLite3/Makefile.PL)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/ext/SQLite3/Makefile.PL	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/ext/SQLite3/Makefile.PL)
@@ -0,0 +1,5 @@
+use lib '../../lib';
+use Parrot::Configure;
+my $pc = Parrot::Configure->new();
+$pc->data->get_PConfig();
+$pc->genfile("Makefile.in" => "Makefile");

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

Copied: branches/ops_pct/ext/SQLite3/SQLite3.pir (from r44981, branches/ops_pct/ext/SQLite3/SQLite3.pir)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/ops_pct/ext/SQLite3/SQLite3.pir	Wed May  5 08:26:03 2010	(r46301, copy of r44981, branches/ops_pct/ext/SQLite3/SQLite3.pir)
@@ -0,0 +1,135 @@
+# Copyright (C) 2008-2009, Parrot Foundation.
+# $Id$
+
+.namespace ['SQLite3']
+
+.const int SQLITE_OK         =   0   # Successful result
+# beginning-of-error-codes
+.const int SQLITE_ERROR      =   1   # SQL error or missing database
+.const int SQLITE_INTERNAL   =   2   # Internal logic error in SQLite
+.const int SQLITE_PERM       =   3   # Access permission denied
+.const int SQLITE_ABORT      =   4   # Callback routine requested an abort
+.const int SQLITE_BUSY       =   5   # The database file is locked
+.const int SQLITE_LOCKED     =   6   # A table in the database is locked
+.const int SQLITE_NOMEM      =   7   # A malloc() failed
+.const int SQLITE_READONLY   =   8   # Attempt to w