[svn:parrot] r44975 - in branches/pcc_hackathon_6Mar10: . compilers/imcc compilers/pirc/src config/auto config/auto/warnings config/gen config/gen/makefiles config/init config/init/hints config/inter docs docs/pdds docs/project include/parrot lib/Parrot lib/Parrot/Configure lib/Parrot/Configure/Step lib/Parrot/Docs lib/Parrot/Docs/Section lib/Parrot/Ops2c lib/Parrot/Pmc2c runtime/parrot/library/Config runtime/parrot/library/HTTP src src/call src/dynoplibs src/dynpmc src/gc src/interp src/io src/nci src/ops src/pmc src/runcore src/string t/codingstd t/configure t/dynoplibs t/native_pbc t/oo t/op t/pmc t/steps/auto t/steps/gen t/steps/init/hints tools/build tools/dev tools/util

chromatic at svn.parrot.org chromatic at svn.parrot.org
Tue Mar 16 22:37:14 UTC 2010


Author: chromatic
Date: Tue Mar 16 22:37:03 2010
New Revision: 44975
URL: https://trac.parrot.org/parrot/changeset/44975

Log:
Resynchronized branch with trunk.

Added:
   branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.in
      - copied, changed from r44974, branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak
   branches/pcc_hackathon_6Mar10/src/dynoplibs/Defines.in
   branches/pcc_hackathon_6Mar10/src/dynoplibs/Rules.in
   branches/pcc_hackathon_6Mar10/tools/dev/faces.pl
Deleted:
   branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak
   branches/pcc_hackathon_6Mar10/config/gen/makefiles/CFLAGS.in
   branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynoplibs.in
   branches/pcc_hackathon_6Mar10/include/parrot/events.h
   branches/pcc_hackathon_6Mar10/include/parrot/tsq.h
   branches/pcc_hackathon_6Mar10/src/events.c
   branches/pcc_hackathon_6Mar10/src/tsq.c
   branches/pcc_hackathon_6Mar10/t/dynoplibs/random-range.t
   branches/pcc_hackathon_6Mar10/tools/build/cc_flags.pl
Modified:
   branches/pcc_hackathon_6Mar10/CREDITS
   branches/pcc_hackathon_6Mar10/ChangeLog
   branches/pcc_hackathon_6Mar10/DEPRECATED.pod
   branches/pcc_hackathon_6Mar10/MANIFEST
   branches/pcc_hackathon_6Mar10/MANIFEST.SKIP
   branches/pcc_hackathon_6Mar10/MANIFEST.generated
   branches/pcc_hackathon_6Mar10/META.yml
   branches/pcc_hackathon_6Mar10/NEWS
   branches/pcc_hackathon_6Mar10/PBC_COMPAT
   branches/pcc_hackathon_6Mar10/PLATFORMS
   branches/pcc_hackathon_6Mar10/README
   branches/pcc_hackathon_6Mar10/VERSION
   branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l
   branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y
   branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c
   branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c
   branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c
   branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h
   branches/pcc_hackathon_6Mar10/compilers/imcc/main.c
   branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c
   branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h
   branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c
   branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c
   branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c
   branches/pcc_hackathon_6Mar10/config/auto/cgoto.pm
   branches/pcc_hackathon_6Mar10/config/auto/gcc.pm
   branches/pcc_hackathon_6Mar10/config/auto/icu.pm
   branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm
   branches/pcc_hackathon_6Mar10/config/auto/pmc.pm
   branches/pcc_hackathon_6Mar10/config/auto/warnings.pm
   branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in
   branches/pcc_hackathon_6Mar10/config/gen/makefiles.pm
   branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in
   branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in
   branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in
   branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm
   branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm
   branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm
   branches/pcc_hackathon_6Mar10/config/init/optimize.pm
   branches/pcc_hackathon_6Mar10/config/inter/charset.pm
   branches/pcc_hackathon_6Mar10/config/inter/encoding.pm
   branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm
   branches/pcc_hackathon_6Mar10/docs/parrothist.pod
   branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod
   branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod
   branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod
   branches/pcc_hackathon_6Mar10/docs/tests.pod
   branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h
   branches/pcc_hackathon_6Mar10/include/parrot/hash.h
   branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h
   branches/pcc_hackathon_6Mar10/include/parrot/oplib.h
   branches/pcc_hackathon_6Mar10/include/parrot/parrot.h
   branches/pcc_hackathon_6Mar10/include/parrot/pmc.h
   branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h
   branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h
   branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h
   branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm
   branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm
   branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir
   branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir
   branches/pcc_hackathon_6Mar10/src/call/args.c
   branches/pcc_hackathon_6Mar10/src/call/context.c
   branches/pcc_hackathon_6Mar10/src/debug.c
   branches/pcc_hackathon_6Mar10/src/dynoplibs/README
   branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc
   branches/pcc_hackathon_6Mar10/src/embed.c
   branches/pcc_hackathon_6Mar10/src/extend.c
   branches/pcc_hackathon_6Mar10/src/frame_builder.c
   branches/pcc_hackathon_6Mar10/src/gc/api.c
   branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c
   branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c
   branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c
   branches/pcc_hackathon_6Mar10/src/global.c
   branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c
   branches/pcc_hackathon_6Mar10/src/interp/inter_create.c
   branches/pcc_hackathon_6Mar10/src/io/buffer.c
   branches/pcc_hackathon_6Mar10/src/io/unix.c
   branches/pcc_hackathon_6Mar10/src/main.c
   branches/pcc_hackathon_6Mar10/src/multidispatch.c
   branches/pcc_hackathon_6Mar10/src/nci/api.c
   branches/pcc_hackathon_6Mar10/src/ops/core.ops
   branches/pcc_hackathon_6Mar10/src/ops/experimental.ops
   branches/pcc_hackathon_6Mar10/src/ops/ops.num
   branches/pcc_hackathon_6Mar10/src/ops/var.ops
   branches/pcc_hackathon_6Mar10/src/packfile.c
   branches/pcc_hackathon_6Mar10/src/parrot_debugger.c
   branches/pcc_hackathon_6Mar10/src/pbc_merge.c
   branches/pcc_hackathon_6Mar10/src/pmc.c
   branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/file.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/null.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/os.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc
   branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc
   branches/pcc_hackathon_6Mar10/src/runcore/main.c
   branches/pcc_hackathon_6Mar10/src/string/api.c
   branches/pcc_hackathon_6Mar10/src/thread.c
   branches/pcc_hackathon_6Mar10/src/vtable.tbl
   branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t
   branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t
   branches/pcc_hackathon_6Mar10/t/configure/034-step.t
   branches/pcc_hackathon_6Mar10/t/native_pbc/annotations.pbc
   branches/pcc_hackathon_6Mar10/t/native_pbc/integer_1.pbc
   branches/pcc_hackathon_6Mar10/t/native_pbc/number_1.pbc
   branches/pcc_hackathon_6Mar10/t/native_pbc/string_1.pbc
   branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t
   branches/pcc_hackathon_6Mar10/t/op/arithmetics.t
   branches/pcc_hackathon_6Mar10/t/op/sprintf.t
   branches/pcc_hackathon_6Mar10/t/op/trans.t
   branches/pcc_hackathon_6Mar10/t/op/trans_old.t
   branches/pcc_hackathon_6Mar10/t/pmc/complex.t
   branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t
   branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t
   branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t
   branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t
   branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t
   branches/pcc_hackathon_6Mar10/t/pmc/float.t
   branches/pcc_hackathon_6Mar10/t/pmc/nci.t
   branches/pcc_hackathon_6Mar10/t/pmc/signal.t
   branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t
   branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t
   branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t
   branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t
   branches/pcc_hackathon_6Mar10/tools/dev/branch_status.pl
   branches/pcc_hackathon_6Mar10/tools/util/release.json

Modified: branches/pcc_hackathon_6Mar10/CREDITS
==============================================================================
--- branches/pcc_hackathon_6Mar10/CREDITS	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/CREDITS	Tue Mar 16 22:37:03 2010	(r44975)
@@ -922,6 +922,11 @@
 N: Stefan Lidman
 D: sqrt ops
 
+N: Stefan O'Rear
+E: stefanor at cox.net
+D: Perl 5 interoperability, Blizkost
+U: sorear
+
 N: Stéphane Payrard
 D: Various code fixes and improvements
 

Modified: branches/pcc_hackathon_6Mar10/ChangeLog
==============================================================================
--- branches/pcc_hackathon_6Mar10/ChangeLog	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/ChangeLog	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,9 @@
 #1 $Id$
 
+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/pcc_hackathon_6Mar10/DEPRECATED.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/DEPRECATED.pod	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/DEPRECATED.pod	Tue Mar 16 22:37:03 2010	(r44975)
@@ -214,6 +214,18 @@
 All STRING modification functions will return a STRING pointer; capture and use
 this rather than relying on in-place modification of an existing pointer.
 
+=item STRING_is_null function [eligible in 2.4]
+
+renamed to Parrot_str_is_null
+
+=item Parrot_string_* [eligible in 2.4]
+
+rename Parrot_string_cstring to Parrot_str_cstring
+
+=item STRING functions which don't have Parrot_str_ prefix
+
+The string subsytem is gradually getting an overhaul.
+
 =back
 
 =head1 Compiler tools

Modified: branches/pcc_hackathon_6Mar10/MANIFEST
==============================================================================
--- branches/pcc_hackathon_6Mar10/MANIFEST	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/MANIFEST	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Fri Feb 26 18:33:15 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Mon Mar 15 13:04:03 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -34,7 +34,7 @@
 compilers/data_json/data_json/grammar.pg                    [data_json]
 compilers/data_json/data_json/pge2pir.tg                    [data_json]
 compilers/imcc/Defines.mak                                  [imcc]
-compilers/imcc/Rules.mak                                    [imcc]
+compilers/imcc/Rules.in                                     [imcc]
 compilers/imcc/cfg.c                                        [imcc]
 compilers/imcc/cfg.h                                        [imcc]
 compilers/imcc/debug.c                                      [imcc]
@@ -317,9 +317,7 @@
 config/gen/crypto/digest_pmc.in                             []
 config/gen/crypto/digest_t.in                               []
 config/gen/makefiles.pm                                     []
-config/gen/makefiles/CFLAGS.in                              []
 config/gen/makefiles/docs.in                                []
-config/gen/makefiles/dynoplibs.in                           []
 config/gen/makefiles/dynpmc.in                              []
 config/gen/makefiles/editor.in                              []
 config/gen/makefiles/ext.in                                 []
@@ -1019,7 +1017,6 @@
 include/parrot/embed.h                                      [main]include
 include/parrot/encoding.h                                   [main]include
 include/parrot/enums.h                                      [main]include
-include/parrot/events.h                                     [main]include
 include/parrot/exceptions.h                                 [main]include
 include/parrot/exit.h                                       [main]include
 include/parrot/extend.h                                     [main]include
@@ -1064,7 +1061,6 @@
 include/parrot/thr_pthread.h                                [main]include
 include/parrot/thr_windows.h                                [main]include
 include/parrot/thread.h                                     [main]include
-include/parrot/tsq.h                                        [main]include
 include/parrot/vtables.h                                    [main]include
 include/parrot/warnings.h                                   [main]include
 include/pmc/dummy                                           [main]include
@@ -1310,7 +1306,9 @@
 src/datatypes.c                                             []
 src/debug.c                                                 []
 src/dynext.c                                                []
+src/dynoplibs/Defines.in                                    []
 src/dynoplibs/README                                        []doc
+src/dynoplibs/Rules.in                                      []
 src/dynoplibs/math.ops                                      []
 src/dynoplibs/obscure.ops                                   []
 src/dynpmc/README.pod                                       []doc
@@ -1325,7 +1323,6 @@
 src/dynpmc/rotest.pmc                                       [devel]src
 src/dynpmc/subproxy.pmc                                     [devel]src
 src/embed.c                                                 []
-src/events.c                                                []
 src/exceptions.c                                            []
 src/exit.c                                                  []
 src/extend.c                                                []
@@ -1517,7 +1514,6 @@
 src/string/unicode.h                                        []
 src/sub.c                                                   []
 src/thread.c                                                []
-src/tsq.c                                                   []
 src/utils.c                                                 []
 src/vtable.tbl                                              [devel]src
 src/vtables.c                                               []
@@ -1696,7 +1692,6 @@
 t/distro/meta_yml.t                                         [test]
 t/dynoplibs/math.t                                          [test]
 t/dynoplibs/obscure.t                                       [test]
-t/dynoplibs/random-range.t                                  [test]
 t/dynpmc/dynlexpad.t                                        [test]
 t/dynpmc/foo.t                                              [test]
 t/dynpmc/foo2.t                                             [test]
@@ -2137,7 +2132,6 @@
 t/tools/testdata                                            [test]
 tools/build/addopstags.pl                                   []
 tools/build/c2str.pl                                        []
-tools/build/cc_flags.pl                                     []
 tools/build/fixup_gen_file.pl                               []
 tools/build/h2inc.pl                                        []
 tools/build/headerizer.pl                                   []
@@ -2155,6 +2149,7 @@
 tools/dev/checkdepend.pl                                    []
 tools/dev/create_language.pl                                [devel]
 tools/dev/debian_docs.sh                                    []
+tools/dev/faces.pl                                          []
 tools/dev/fetch_languages.pl                                []
 tools/dev/gen_charset_tables.pl                             []
 tools/dev/gen_class.pl                                      []

Modified: branches/pcc_hackathon_6Mar10/MANIFEST.SKIP
==============================================================================
--- branches/pcc_hackathon_6Mar10/MANIFEST.SKIP	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/MANIFEST.SKIP	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Mar  4 09:57:17 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
@@ -172,8 +172,8 @@
 ^compilers/imcc/.*\.obj/
 ^compilers/imcc/.*\.tmp$
 ^compilers/imcc/.*\.tmp/
-^compilers/imcc/CFLAGS$
-^compilers/imcc/CFLAGS/
+^compilers/imcc/Rules\.mak$
+^compilers/imcc/Rules\.mak/
 ^compilers/imcc/imcc$
 ^compilers/imcc/imcc/
 ^compilers/imcc/imclexer\.c$
@@ -709,8 +709,10 @@
 ^src/dynoplibs/.*\.pdb/
 ^src/dynoplibs/.*\.so$
 ^src/dynoplibs/.*\.so/
-^src/dynoplibs/Makefile$
-^src/dynoplibs/Makefile/
+^src/dynoplibs/Defines\.mak$
+^src/dynoplibs/Defines\.mak/
+^src/dynoplibs/Rules\.mak$
+^src/dynoplibs/Rules\.mak/
 # generated from svn:ignore of 'src/dynpmc/'
 ^src/dynpmc/.*\.bundle$
 ^src/dynpmc/.*\.bundle/

Modified: branches/pcc_hackathon_6Mar10/MANIFEST.generated
==============================================================================
--- branches/pcc_hackathon_6Mar10/MANIFEST.generated	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/MANIFEST.generated	Tue Mar 16 22:37:03 2010	(r44975)
@@ -2,10 +2,10 @@
 # See tools/dev/install_files.pl for documentation on the
 # format of this file.
 # Please re-sort this file after *EVERY* modification
-blib/lib/libparrot.2.1.0.dylib                    [main]lib
+blib/lib/libparrot.2.2.0.dylib                    [main]lib
 blib/lib/libparrot.a                              [main]lib
 blib/lib/libparrot.dylib                          [main]lib
-blib/lib/libparrot.so.2.1.0                       [main]lib
+blib/lib/libparrot.so.2.2.0                       [main]lib
 blib/lib/libparrot.so                             [main]lib
 compilers/data_json/data_json.pbc                 [data_json]
 compilers/json/JSON.pbc                           [json]

Modified: branches/pcc_hackathon_6Mar10/META.yml
==============================================================================
--- branches/pcc_hackathon_6Mar10/META.yml	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/META.yml	Tue Mar 16 22:37:03 2010	(r44975)
@@ -4,7 +4,7 @@
 # See http://module-build.sourceforge.net/META-spec-current.html for details.
 ---
 name: parrot
-version: 2.1.0
+version: 2.2.0
 author: parrot-dev at lists.parrot.org
 abstract: a virtual machine designed for dynamic languages
 license: artistic2

Modified: branches/pcc_hackathon_6Mar10/NEWS
==============================================================================
--- branches/pcc_hackathon_6Mar10/NEWS	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/NEWS	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,19 @@
 # $Id$
 
+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/pcc_hackathon_6Mar10/PBC_COMPAT
==============================================================================
--- branches/pcc_hackathon_6Mar10/PBC_COMPAT	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/PBC_COMPAT	Tue Mar 16 22:37:03 2010	(r44975)
@@ -27,6 +27,7 @@
 
 # please insert tab separated entries at the top of the list
 
+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
 6.2	2010.01.31	cotto	serialization-related changes to ParrotInterpreter

Modified: branches/pcc_hackathon_6Mar10/PLATFORMS
==============================================================================
--- branches/pcc_hackathon_6Mar10/PLATFORMS	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/PLATFORMS	Tue Mar 16 22:37:03 2010	(r44975)
@@ -46,6 +46,8 @@
 linux-ppc-gcc_4.4.2               Y    Y     Y   Y   Y    Y     Y  20100118
 linux-ppc64-gcc_4.4.2             Y    Y     Y   Y   Y    Y     Y  20100118
 linux-arm-gcc_4.4.2               Y    Y     Y   Y   Y    Y     Y  20100118
+linux-x86-icc_11.1            4   Y    ?     Y   Y   Y    Y     Y  20100209
+linux-amd64-icc_11.1          8   Y    ?     Y   Y   Y    Y     Y  20100209
 netbsd3.1-ppc-gcc-3.3.3       B   Y    ?     Y   Y   Y    Y     ?  20090419
 netbsd4.0-alpha-gcc-4.1.2     8   Y    ?     Y   Y   Y    Y     ?  20090518
 netbsd4.0-arm-gcc-4.1.2           Y    ?     Y   Y   Y    Y     ?  20090518

Modified: branches/pcc_hackathon_6Mar10/README
==============================================================================
--- branches/pcc_hackathon_6Mar10/README	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/README	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.1.0
+This is Parrot, version 2.2.0
 ------------------------------
 
 Parrot is Copyright (C) 2001-2010, Parrot Foundation.

Modified: branches/pcc_hackathon_6Mar10/VERSION
==============================================================================
--- branches/pcc_hackathon_6Mar10/VERSION	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/VERSION	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1 +1 @@
-2.1.0
+2.2.0

Copied and modified: branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.in (from r44974, branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak)
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak	Tue Mar 16 21:59:54 2010	(r44974, copy source)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -90,7 +90,9 @@
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE - Warnings (This is generated code)
 compilers/imcc/imclexer$(O) : \
+    compilers/imcc/imclexer.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -102,8 +104,11 @@
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/imclexer.c@ @ccwarn::compilers/imcc/imclexer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imclexer.c
 
+## SUFFIX OVERRIDE - Warnings (This is generated code)
 compilers/imcc/imcparser$(O) : \
+    compilers/imcc/imcparser.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -118,6 +123,7 @@
     $(INC_DIR)/dynext.h \
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/imcparser.c@ @ccwarn::compilers/imcc/imcparser.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imcparser.c
 
 compilers/imcc/main$(O) : \
     compilers/imcc/cfg.h \
@@ -136,7 +142,9 @@
     $(INC_DIR)/runcore_api.h \
     $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE - Warnings (This is generated code)
 compilers/imcc/optimizer$(O) : \
+    compilers/imcc/optimizer.c \
     compilers/imcc/cfg.h \
     compilers/imcc/debug.h \
     compilers/imcc/imc.h \
@@ -148,6 +156,7 @@
     compilers/imcc/unit.h \
     $(INC_DIR)/oplib/ops.h \
     $(PARROT_H_HEADERS)
+	$(CC) $(CFLAGS) @optimize::compilers/imcc/optimizer.c@ @ccwarn::compilers/imcc/optimizer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/optimizer.c
 
 compilers/imcc/reg_alloc$(O) : \
     compilers/imcc/cfg.h \

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

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1019,7 +1019,6 @@
     }
 
     while (c != ENDM) {
-        char *old_s = valp->s;
         int   elem_len;
 
         if (c <= 0) {

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y	Tue Mar 16 22:37:03 2010	(r44975)
@@ -5,7 +5,7 @@
  * Intermediate Code Compiler for Parrot.
  *
  * Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  *
  * Grammar of the PIR language parser.
  *
@@ -28,7 +28,7 @@
 
 /* prevent declarations of malloc() and free() in the generated parser. */
 #define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
 
 #ifndef YYENABLE_NLS
 #  define YYENABLE_NLS 0

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -5441,7 +5441,6 @@
     }
 
     while (c != ENDM) {
-        char *old_s = valp->s;
         int   elem_len;
 
         if (c <= 0) {

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -87,7 +87,7 @@
  * Intermediate Code Compiler for Parrot.
  *
  * Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  *
  * Grammar of the PIR language parser.
  *
@@ -110,7 +110,7 @@
 
 /* prevent declarations of malloc() and free() in the generated parser. */
 #define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
 
 #ifndef YYENABLE_NLS
 #  define YYENABLE_NLS 0

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -50,7 +50,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(4);
 
-static int e_file_open(PARROT_INTERP, ARGIN(void *param))
+static int e_file_open(PARROT_INTERP, ARGIN(const char *param))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -782,7 +782,7 @@
 
 /*
 
-=item C<static int e_file_open(PARROT_INTERP, void *param)>
+=item C<static int e_file_open(PARROT_INTERP, const char *param)>
 
 Prints a message to STDOUT.
 
@@ -791,19 +791,19 @@
 */
 
 static int
-e_file_open(PARROT_INTERP, ARGIN(void *param))
+e_file_open(PARROT_INTERP, ARGIN(const char *param))
 {
     ASSERT_ARGS(e_file_open)
-    char * const file = (char *) param;
+    DECL_CONST_CAST;
 
-    if (!STREQ(file, "-")) {
-        FILE *newfile = freopen(file, "w", stdout);
+    if (!STREQ(param, "-")) {
+        FILE *newfile = freopen(param, "w", stdout);
         if (!newfile)
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 "Cannot reopen stdout: %s'\n", strerror(errno));
     }
 
-    output = file;
+    output = PARROT_const_cast(char *, param);
     Parrot_io_printf(interp, "# IMCC does produce b0rken PASM files\n");
     Parrot_io_printf(interp, "# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392\n");
     return 1;
@@ -859,7 +859,7 @@
 
 /*
 
-=item C<int emit_open(PARROT_INTERP, int type, void *param)>
+=item C<int emit_open(PARROT_INTERP, int type, const char *param)>
 
 Opens the emitter function C<open> of the given C<type>. Passes
 the C<param> to the open function.
@@ -870,7 +870,7 @@
 
 PARROT_EXPORT
 int
-emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
 {
     ASSERT_ARGS(emit_open)
     IMCC_INFO(interp)->emitter       = type;

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,6 +1,6 @@
 /*
  * $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  */
 
 #ifndef PARROT_IMCC_INSTRUCTIONS_H_GUARD
@@ -79,7 +79,7 @@
 /* Globals */
 
 typedef struct _emittert {
-    int (*open)(PARROT_INTERP, void *param);
+    int (*open)(PARROT_INTERP, const char *param);
     int (*emit)(PARROT_INTERP, void *param, const IMC_Unit *, const Instruction *ins);
     int (*new_sub)(PARROT_INTERP, void *param, IMC_Unit *);
     int (*end_sub)(PARROT_INTERP, void *param, IMC_Unit *);
@@ -103,7 +103,7 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
-int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/main.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/main.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/main.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -646,7 +646,7 @@
     IMCC_push_parser_state(interp);
     IMCC_INFO(interp)->state->file = mem_sys_strdup(sourcefile);
 
-    emit_open(interp, per_pbc, per_pbc ? NULL : (void*)output_file);
+    emit_open(interp, per_pbc, per_pbc ? NULL : output_file);
 
     IMCC_info(interp, 1, "Starting parse...\n");
 

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -420,7 +420,7 @@
 
 /*
 
-=item C<int e_pbc_open(PARROT_INTERP, void *param)>
+=item C<int e_pbc_open(PARROT_INTERP, const char *param)>
 
 Opens a compilation unit to emit PBC.
 
@@ -429,7 +429,7 @@
 */
 
 int
-e_pbc_open(PARROT_INTERP, SHIM(void *param))
+e_pbc_open(PARROT_INTERP, SHIM(const char *param))
 {
     ASSERT_ARGS(e_pbc_open)
     code_segment_t * const cs = mem_gc_allocate_zeroed_typed(interp, code_segment_t);

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -28,7 +28,7 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-int e_pbc_open(PARROT_INTERP, SHIM(void *param))
+int e_pbc_open(PARROT_INTERP, SHIM(const char *param))
         __attribute__nonnull__(1);
 
 PARROT_WARN_UNUSED_RESULT

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -613,8 +613,8 @@
 reg_sort_f(ARGIN(const void *a), ARGIN(const void *b))
 {
     ASSERT_ARGS(reg_sort_f)
-    const SymReg * const ra = *(SymReg**)a;
-    const SymReg * const rb = *(SymReg**)b;
+    const SymReg * const ra = *(const SymReg * const *)a;
+    const SymReg * const rb = *(const SymReg * const *)b;
 
     if (ra->first_ins->index < rb->first_ins->index)
         return -1;

Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
  * $Id$
  */
 
@@ -1004,7 +1004,7 @@
         const char * const sub_name = (uniq == U_add_uniq_sub)
                        /* remember to free this name; add_ns malloc()s it */
                        ? (aux_name = add_ns(interp, name))
-                       : (char *)name;
+                       : name;
 
         r = _get_sym(hsh, sub_name);
 

Modified: branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -180,6 +180,7 @@
 parse_string(PARROT_INTERP, ARGIN(char *pirstring), int flags, int pasminput,
     unsigned macro_size)
 {
+    ASSERT_ARGS(parse_string)
     yyscan_t            yyscanner;
     lexer_state        *lexer = NULL;
     char                name[64];

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

Modified: branches/pcc_hackathon_6Mar10/config/auto/gcc.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/gcc.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/gcc.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -85,14 +85,15 @@
     $gccversion .= ".$minor" if defined $minor;
     $self->set_result("yes, $gccversion");
 
-    my $ccwarn = $conf->data->get('ccwarn');
-
     $conf->data->set( sym_export => '__attribute__ ((visibility("default")))' )
         if $gccversion >= 4.0 && !$conf->data->get('sym_export');
 
+    # sneaky check for g++
+    my $gpp = (index($conf->data->get('cc'), '++') > 0) ? 1 : 0;
+
     $conf->data->set(
-        ccwarn              => "$ccwarn",
-        gccversion          => $gccversion,
+        gccversion => $gccversion,
+        'g++'      => $gpp,
     );
     return 1;
 }

Modified: branches/pcc_hackathon_6Mar10/config/auto/icu.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/icu.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/icu.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -339,8 +339,7 @@
         if (! -d $icuheaders) {
             $without = 1;
         }
-        my $slash = $conf->data->get('slash');
-        $icuheaders .= "${slash}include";
+        $icuheaders .= "/include";
         if (! -d $icuheaders) {
             $without = 1;
         }

Modified: branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -36,7 +36,8 @@
 sub runstep {
     my ( $self, $conf ) = @_;
 
-    my $cmd = $conf->data->get('scriptdirexp_provisional') . q{/perldoc};
+    my $slash = $conf->data->get('slash');
+    my $cmd = $conf->data->get('scriptdirexp_provisional') . $slash . q{perldoc};
     my ( $fh, $filename ) = tempfile( UNLINK => 1 );
     my $content = capture_output("$cmd -ud $filename perldoc") || undef;
 
@@ -59,7 +60,6 @@
     my $TEMP_pod = join q{ } =>
         map { my $t = $_; $t =~ s/\.ops$/.pod/; "ops/$t" } @ops;
 
-    my $slash       = $conf->data->get('slash');
     my $new_perldoc = $conf->data->get('new_perldoc');
 
     foreach my $ops (@ops) {
@@ -67,17 +67,17 @@
         $pod =~ s/\.ops$/.pod/;
         if ( $new_perldoc ) {
             $TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC_BIN) -ud ops${slash}$pod ..${slash}src${slash}ops${slash}$ops
-\t\$(CHMOD) 0644 ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -ud ops/$pod ../src/ops/$ops
+\t\$(CHMOD) 0644 ops/$pod
 
 END
         }
         else {
             $TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC_BIN) -u ..${slash}ops${slash}$ops > ops${slash}$pod
-\t\$(CHMOD) 0644 ..${slash}ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -u ../ops/$ops > ops/$pod
+\t\$(CHMOD) 0644 ../ops/$pod
 
 END
         }

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

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

Modified: branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -6,11 +6,10 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include "parrot/compiler.h"
 
 /* as long as the file compiles, everything is okay */
 int
-main()
+main(void)
 {
     return EXIT_SUCCESS;
 }

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

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

Deleted: branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynoplibs.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynoplibs.in	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,153 +0,0 @@
-# Copyright (C) 2003-2009, Parrot Foundation.
-# $Id$
-
-PERL          = @perl@
-RM_F          = @rm_f@
-CP            = @cp@
-CHMOD         = @chmod@
-LOAD_EXT      = @load_ext@
-BUILD_DIR     = @build_dir@
-RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR   = $(BUILD_DIR)/runtime/parrot/dynext
-O             = @o@
-CC            = @cc@
-LD            = @ld@
-LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@ @linkflags@
-LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
-LIBPARROT     = @libparrot_ldflags@
-
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-OPS2C           = $(PERL) -I$(BUILD_DIR)@slash at lib $(BUILD_TOOLS_DIR)@slash at ops2c.pl
-INCLUDES        = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at src@slash at pmc
-LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
-
-OPS_TARGETS = \
-#IF(cg_flag):  obscure_ops_cg$(LOAD_EXT) \
-#IF(cg_flag):  obscure_ops_cgp$(LOAD_EXT) \
-  obscure_ops$(LOAD_EXT) \
-  obscure_ops_switch$(LOAD_EXT) \
-#IF(cg_flag):  math_ops_cg$(LOAD_EXT) \
-#IF(cg_flag):  math_ops_cgp$(LOAD_EXT) \
-  math_ops$(LOAD_EXT) \
-  math_ops_switch$(LOAD_EXT)
-
-CLEANUPS = \
-  "*.c" \
-  "*.h" \
-#IF(o):  "*@o@" \
-#IF(win32):  "*.lib" \
-#IF(win32):  "*.pdb" \
-#IF(win32):  "*.ilk" \
-#IF(win32):  "*.exp" \
-#IF(win32):  "*.def" \
-#IF(win32):  "*.manifest" \
-#IF(load_ext):  "*@load_ext@"
-
-
-all : $(OPS_TARGETS)
-#IF(cygwin or hpux):	$(CHMOD) 0775 *$(LOAD_EXT)
-	$(CP) *$(LOAD_EXT) $(INSTALL_DIR)
-#IF(cygwin or hpux):	$(CHMOD) 0775 $(INSTALL_DIR)/*$(LOAD_EXT)
-
-Makefile: ../../config/gen/makefiles/dynoplibs.in
-	cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::makefiles --target=src/dynoplibs/Makefile
-
-obscure_ops$(LOAD_EXT): obscure_ops$(O)
-	$(LD) @ld_out at obscure_ops$(LOAD_EXT) obscure_ops$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops$(O): obscure_ops.c
-	$(CC) -c @cc_o_out at obscure_ops$(O) $(INCLUDES) $(CFLAGS) obscure_ops.c
-
-obscure_ops.c: obscure.ops
-	$(OPS2C) C --dynamic obscure.ops
-
-obscure_ops_switch$(LOAD_EXT): obscure_ops_switch$(O)
-	$(LD) @ld_out at obscure_ops_switch$(LOAD_EXT) obscure_ops_switch$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops_switch$(O): obscure_ops_switch.c
-	$(CC) -c @cc_o_out at obscure_ops_switch$(O) $(INCLUDES) $(CFLAGS) obscure_ops_switch.c
-
-obscure_ops_switch.c: obscure.ops
-	$(OPS2C) CSwitch --dynamic obscure.ops
-
-obscure_ops_cg$(LOAD_EXT): obscure_ops_cg$(O)
-	$(LD) @ld_out at obscure_ops_cg$(LOAD_EXT) obscure_ops_cg$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops_cg$(O): obscure_ops_cg.c
-	$(CC) -c @cc_o_out at obscure_ops_cg$(O) $(INCLUDES) $(CFLAGS) obscure_ops_cg.c
-
-obscure_ops_cg.c: obscure.ops
-	$(OPS2C) CGoto --dynamic obscure.ops
-
-obscure_ops_cgp$(LOAD_EXT): obscure_ops_cgp$(O)
-	$(LD) @ld_out at obscure_ops_cgp$(LOAD_EXT) obscure_ops_cgp$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops_cgp$(O): obscure_ops_cgp.c
-	$(CC) -c @cc_o_out at obscure_ops_cgp$(O) $(INCLUDES) $(CFLAGS) obscure_ops_cgp.c
-
-obscure_ops_cgp.c: obscure.ops
-	$(OPS2C) CGP --dynamic obscure.ops
-
-math_ops$(LOAD_EXT): math_ops$(O)
-	$(LD) @ld_out at math_ops$(LOAD_EXT) math_ops$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops$(O): math_ops.c
-	$(CC) -c @cc_o_out at math_ops$(O) $(INCLUDES) $(CFLAGS) math_ops.c
-
-math_ops.c: math.ops
-	$(OPS2C) C --dynamic math.ops
-
-math_ops_switch$(LOAD_EXT): math_ops_switch$(O)
-	$(LD) @ld_out at math_ops_switch$(LOAD_EXT) math_ops_switch$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops_switch$(O): math_ops_switch.c
-	$(CC) -c @cc_o_out at math_ops_switch$(O) $(INCLUDES) $(CFLAGS) math_ops_switch.c
-
-math_ops_switch.c: math.ops
-	$(OPS2C) CSwitch --dynamic math.ops
-
-math_ops_cg$(LOAD_EXT): math_ops_cg$(O)
-	$(LD) @ld_out at math_ops_cg$(LOAD_EXT) math_ops_cg$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops_cg$(O): math_ops_cg.c
-	$(CC) -c @cc_o_out at math_ops_cg$(O) $(INCLUDES) $(CFLAGS) math_ops_cg.c
-
-math_ops_cg.c: math.ops
-	$(OPS2C) CGoto --dynamic math.ops
-
-math_ops_cgp$(LOAD_EXT): math_ops_cgp$(O)
-	$(LD) @ld_out at math_ops_cgp$(LOAD_EXT) math_ops_cgp$(O) $(LINKARGS)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops_cgp$(O): math_ops_cgp.c
-	$(CC) -c @cc_o_out at math_ops_cgp$(O) $(INCLUDES) $(CFLAGS) math_ops_cgp.c
-
-math_ops_cgp.c: math.ops
-	$(OPS2C) CGP --dynamic math.ops
-
-test : all
-	cd ../.. && $(PERL) -Ilib t/harness t/dynoplibs/*.t
-
-testclean :
-	$(RM_F) "../../t/dynoplibs/*.pir" "../../t/dynoplibs/*.pasm"
-
-clean :
-	$(RM_F) $(CLEANUPS)
-
-realclean:
-	$(RM_F) $(CLEANUPS) Makefile
-
-distclean: realclean
-
-# Local variables:
-#   mode: makefile
-# End:
-# vim: ft=make:

Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -8,19 +8,19 @@
 LOAD_EXT      = @load_ext@
 BUILD_DIR     = @build_dir@
 RECONFIGURE   = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR   = $(BUILD_DIR)@slash at runtime@slash at parrot@slash at dynext
+INSTALL_DIR   = $(BUILD_DIR)/runtime/parrot/dynext
 O             = @o@
 CC            = @cc@
 LD            = @ld@
 LDFLAGS       = @ldflags@ @ld_debug@ @rpath_blib@
 LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
+CFLAGS        = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
 LIBPARROT     = @libparrot_ldflags@
 
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-BUILD_LIB_DIR   = $(BUILD_DIR)@slash at blib@slash at lib
-PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)@slash at pmc2c.pl
-INCLUDES        = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at include@slash at pmc
+BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
+BUILD_LIB_DIR   = $(BUILD_DIR)/blib/lib
+PMC2C           = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl
+INCLUDES        = -I$(BUILD_DIR)/include -I at build_dir@/include/pmc
 LINKARGS        = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
 
 PMC2CD = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --dump

Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -7,4 +7,4 @@
 Description: virtual machine to execute bytecode for interpreted languages
 Version: @VERSION@
 Libs: -L${libdir} -lparrot @icu_shared@ @libs@
-Cflags: -I${includedir}
+Cflags: -I${includedir}@versiondir@

Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -82,7 +82,9 @@
 CC_INC           = @cc_inc@
 C_LIBS           = @libs@
 CC_SHARED        = @cc_shared@
-CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @ccwarn@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
+CC_O_OUT         = @cc_o_out@
+CC_WARN          = @ccwarn@
+CFLAGS           = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
 LINK_DYNAMIC     = @link_dynamic@
 LINK             = @link@
 LINKFLAGS        = @linkflags@ @link_debug@ @ld_debug@
@@ -107,10 +109,12 @@
 A                = @a@
 LD_SHARE_FLAGS   = @ld_share_flags@
 LD_LOAD_FLAGS    = @ld_load_flags@
+LINKARGS         = $(LDFLAGS) $(LD_LOAD_FLAGS) @libparrot_ldflags@ @icu_shared@ @libs@
 
 # generated by config/init/headers.pm
 NONGEN_HEADERS   = @TEMP_nongen_headers@
 
+include src/dynoplibs/Defines.mak
 include compilers/imcc/Defines.mak
 include compilers/pirc/Defines.mak
 include compilers/tge/Defines.mak
@@ -139,8 +143,10 @@
     compilers/ncigen/Makefile \
     editor/Makefile \
     ext/Makefile \
-    src/dynoplibs/Makefile \
-    src/dynpmc/Makefile
+    src/dynoplibs/Rules.mak \
+    src/dynoplibs/Defines.mak \
+    src/dynpmc/Makefile \
+    compilers/imcc/Rules.mak
 
 GEN_CONFIGS = \
     $(INC_DIR)/config.h \
@@ -177,8 +183,6 @@
 #IF(has_crypto):    t/dynpmc/sha1.t \
 #IF(has_crypto):    t/dynpmc/sha256.t \
 #IF(has_crypto):    t/dynpmc/sha512.t \
-    CFLAGS \
-    compilers/imcc/CFLAGS \
     config_lib.pasm \
     parrot.pc \
     compilers/imcc/imcc.y.flag \
@@ -191,7 +195,6 @@
 	runtime/parrot/include/datatypes.pasm \
 	runtime/parrot/include/iterator.pasm \
 	runtime/parrot/include/call_bits.pasm \
-	runtime/parrot/include/io_thr_msg.pasm \
 	runtime/parrot/include/timer.pasm \
 	runtime/parrot/include/except_types.pasm \
 	runtime/parrot/include/except_severity.pasm \
@@ -375,7 +378,6 @@
         $(INC_DIR)/io.h \
         $(INC_DIR)/op.h \
         $(INC_DIR)/pmc.h \
-        $(INC_DIR)/events.h \
         $(INC_DIR)/gc_api.h \
         $(INC_DIR)/string_funcs.h \
         $(INC_DIR)/misc.h \
@@ -386,7 +388,6 @@
         $(INC_DIR)/nci.h \
         $(INC_DIR)/thread.h \
         $(INC_DIR)/scheduler.h \
-        $(INC_DIR)/tsq.h \
         $(INC_DIR)/longopt.h \
         $(INC_DIR)/oo.h \
         $(INC_DIR)/vtables.h \
@@ -410,7 +411,9 @@
         include/pmc/pmc_parrotinterpreter.h
 
 # generated list of header files
-GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) @TEMP_cg_h@
+GENERAL_H_FILES   = $(NONGEN_HEADERS) $(GEN_HEADERS) \
+#IF(cg_flag): $(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h
+
 
 CHARSET_O_FILES   = @TEMP_charset_o@
 CLASS_PMC_FILES   = @TEMP_pmc_classes_pmc@
@@ -446,7 +449,6 @@
     src/dynext$(O) \
     src/embed$(O) \
     src/string/encoding$(O) \
-    src/events$(O) \
     src/exceptions$(O) \
     src/exit$(O) \
     src/extend$(O) \
@@ -494,17 +496,15 @@
     src/sub$(O) \
     src/thread$(O) \
     src/runcore/trace$(O) \
-    src/tsq$(O) \
     src/utils$(O) \
     src/vtables$(O) \
     src/warnings$(O) \
-    \
     src/packfile/pf_items$(O) \
-    \
-    @TEMP_cg_o@ \
     @TEMP_atomic_o@ \
     @TEMP_gc_o@ \
 #IF(platform_asm):    src/platform_asm$(O) \
+#IF(cg_flag):     src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O) \
+
 
 OPS_FILES = @ops@ $(GEN_OPSFILES)
 
@@ -515,28 +515,28 @@
 ###############################################################################
 
 # Executables
-PARROT              = ./@test_prog@$(EXE)
-MINIPARROT          = ./miniparrot$(EXE)
-DIS                 = ./pbc_disassemble$(EXE)
-PDUMP               = ./pbc_dump$(EXE)
-PBC_MERGE           = ./pbc_merge$(EXE)
-PDB                 = ./parrot_debugger$(EXE)
-PBC_TO_EXE          = ./pbc_to_exe$(EXE)
-PARROT_CONFIG       = ./parrot_config$(EXE)
-PIRC                = ./pirc$(EXE)
-NQP_RX              = ./parrot-nqp$(EXE)
-NCI_THUNK_GEN       = ./parrot_nci_thunk_gen$(EXE)
+PARROT              = . at slash@@test_prog@$(EXE)
+MINIPARROT          = . at slash@miniparrot$(EXE)
+DIS                 = . at slash@pbc_disassemble$(EXE)
+PDUMP               = . at slash@pbc_dump$(EXE)
+PBC_MERGE           = . at slash@pbc_merge$(EXE)
+PDB                 = . at slash@parrot_debugger$(EXE)
+PBC_TO_EXE          = . at slash@pbc_to_exe$(EXE)
+PARROT_CONFIG       = . at slash@parrot_config$(EXE)
+PIRC                = . at slash@pirc$(EXE)
+NQP_RX              = . at slash@parrot-nqp$(EXE)
+NCI_THUNK_GEN       = . at slash@parrot_nci_thunk_gen$(EXE)
 
 # Installable executables
-INSTALLABLEPARROT    = ./installable_parrot$(EXE)
-INSTALLABLEDIS       = ./installable_pbc_disassemble$(EXE)
-INSTALLABLEPDUMP     = ./installable_pbc_dump$(EXE)
-INSTALLABLEPBC_MERGE = ./installable_pbc_merge$(EXE)
-INSTALLABLEPBCTOEXE  = ./installable_pbc_to_exe$(EXE)
-INSTALLABLEPDB       = ./installable_parrot_debugger$(EXE)
-INSTALLABLECONFIG    = ./installable_parrot_config$(EXE)
-INSTALLABLENQP       = ./installable_parrot-nqp$(EXE)
-INSTALLABLENCITHUNKGEN = ./installable_parrot_nci_thunk_gen$(EXE)
+INSTALLABLEPARROT    = . at slash@installable_parrot$(EXE)
+INSTALLABLEDIS       = . at slash@installable_pbc_disassemble$(EXE)
+INSTALLABLEPDUMP     = . at slash@installable_pbc_dump$(EXE)
+INSTALLABLEPBC_MERGE = . at slash@installable_pbc_merge$(EXE)
+INSTALLABLEPBCTOEXE  = . at slash@installable_pbc_to_exe$(EXE)
+INSTALLABLEPDB       = . at slash@installable_parrot_debugger$(EXE)
+INSTALLABLECONFIG    = . at slash@installable_parrot_config$(EXE)
+INSTALLABLENQP       = . at slash@installable_parrot-nqp$(EXE)
+INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
 
 # Libraries
 LIBPARROT_STATIC    = @blib_dir@/@libparrot_static@
@@ -574,24 +574,27 @@
 
 .SUFFIXES : .c .S .s .pmc .dump $(O) .str .pir .pbc
 
-# Passing an empty argument in @ARGV to cc_flags.pl to indicate where extra -Is
-# (etc) should go. Otherwise it will insert them after the first space, which
-# makes life go horribly wrong if $(CC) contains spaces but can't have -I
-# arguments (etc) injected in the middle.
-# There is probably a better way to do this, but I can't work it out right now.
 .c$(O) : # suffix rule (limited support)
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
-
-# XXX probably should detect assembler, but right now this is only used on Sparc
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .s$(O) : # suffix rule (limited support)
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 #UNLESS(win32).S$(O) : # suffix rule (limited support)
-#UNLESS(win32)	@$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32)	$(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
 
 .pir.pbc : # suffix rule (limited support)
 	$(PARROT) -o $@ $<
 
+# Note: Several rules in this makefile are tagged with a "SUFFIX OVERRIDE"
+# comment; this indicates that we have an explicit compilation rule for
+# that particular C file; this is done so that we override various
+# options for that file - to change optimization levels, or twiddle
+# warnings. Each of those overrides should use the most specific settings
+# possible for that file. When file-specific overrides are added during
+# Configure, the override must be allowed for in this file.
+# These will eventually be automatically generated.
+
+
 ###############################################################################
 #
 # USER TARGETS:
@@ -618,18 +621,18 @@
     $(JSON_LIB_PBCS) \
     $(DATA_JSON_LIB_PBCS) \
     $(NQP_LIB_PBCS) \
-    $(GEN_LIBRARY)
+    $(GEN_LIBRARY) \
+    $(LIBNCI_TEST_SO)
 
 corevm : \
-    flags_dummy \
     $(GEN_PM_INCLUDES) \
     PARROT_LIBS \
     $(PARROT) \
     runtime/parrot/include/parrotlib.pbc \
     runtime/parrot/include/config.fpmc \
-    $(LIBNCI_TEST_SO) \
+    $(LIBRARY_DIR)/Test/More.pbc \
     dynpmc \
-    dynoplibs
+    $(DYNOPLIBS_TARGETS)
 
 $(GEN_LIBRARY) : $(PARROT) $(GEN_PASM_INCLUDES)
 
@@ -640,7 +643,6 @@
 STR_FILES = \
     src/debug.str \
     src/dynext.str \
-    src/events.str \
     src/exceptions.str \
     src/global.str \
     src/global_setup.str \
@@ -772,11 +774,6 @@
 	@echo "  dynpmc-test:       Proxy for target 'test' of src/dynpmc/Makefile"
 	@echo "  dynpmc-clean:      Proxy for target 'clean' of src/dynpmc/Makefile"
 	@echo ""
-	@echo "Dynamic oplibs:"
-	@echo "  dynoplibs:         Proxy for default target of src/dynoplibs/Makefile"
-	@echo "  dynoplibs-test:    Proxy for target 'test' of src/dynoplibs/Makefile"
-	@echo "  dynoplibs-clean:   Proxy for target 'clean' of src/dynoplibs/Makefile"
-	@echo ""
 	@echo "Fetch from source repository:"
 	@echo "  update:            svn update."
 	@echo "  status:            svn status."
@@ -811,17 +808,13 @@
 installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
 
 
-flags_dummy :
-	@echo "Compiling with:"
-	@$(PERL) tools/build/cc_flags.pl ./CFLAGS echo $(CC) $(CFLAGS) -I$(@D) @cc_o_out@ xx$(O) -c xx.c
-
 runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
 	$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
 
 runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
 	$(MINIPARROT) config_lib.pasm > $@
 
-$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) CFLAGS \
+$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
     lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
     $(MINIPARROT)
 	$(LINK) @ld_out@$@ \
@@ -1082,9 +1075,6 @@
 runtime/parrot/include/socket.pasm : $(INC_DIR)/io.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/io.h $@
 
-runtime/parrot/include/io_thr_msg.pasm : $(INC_DIR)/events.h $(H2INC)
-	$(PERL) $(H2INC) $(INC_DIR)/events.h $@
-
 runtime/parrot/include/hash_key_type.pasm : $(INC_DIR)/hash.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/hash.h $@
 
@@ -1137,6 +1127,8 @@
 # ops.h is built by ops2pm.pl after it builds core.pm
 $(INC_DIR)/oplib/ops.h:  lib/Parrot/OpLib/core.pm
 
+$(BUILD_TOOLS_DIR)/ops2c.pl: lib/Parrot/OpLib/core.pm
+
 lib/Parrot/OpLib/core.pm : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2pm.pl \
     lib/Parrot/OpsFile.pm lib/Parrot/Op.pm src/ops/ops.num src/ops/ops.skip
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2pm.pl @no_lines_flag@ $(OPS_FILES)
@@ -1157,7 +1149,7 @@
 
 # hello
 hello: test_prep examples/pasm/hello$(EXE)
-	./examples/pasm/hello$(EXE) "from your friendly makefile"
+	. at slash@examples at slash@pasm at slash@hello$(EXE) "from your friendly makefile"
 
 examples/pasm/hello.pbc: examples/pasm/hello.pasm
 	$(PARROT) -o examples/pasm/hello.pbc examples/pasm/hello.pasm
@@ -1258,14 +1250,14 @@
         src/exceptions.str \
 	include/pmc/pmc_continuation.h
 
-src/events$(O) : $(PARROT_H_HEADERS) src/events.str
-
 src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h \
         include/pmc/pmc_sub.h \
 	include/pmc/pmc_parrotinterpreter.h
 
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
 src/extend$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
-	include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h
+    include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h src/extend.c
+	$(CC) $(CFLAGS) @optimize::src/extend.c@ @ccwarn::src/extend.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extend.c
 
 src/runcore/main$(O) : \
 	src/runcore/main.str \
@@ -1380,8 +1372,6 @@
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
-src/tsq$(O) : $(PARROT_H_HEADERS)
-
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h \
@@ -1407,10 +1397,13 @@
         include/pmc/pmc_unmanagedstruct.h \
         include/pmc/pmc_nci.h
 
+## SUFFIX OVERRIDE
 src/nci/extra_thunks$(O) : src/nci/extra_thunks.str \
-        $(PARROT_H_HEADERS) \
-        include/pmc/pmc_unmanagedstruct.h \
-        include/pmc/pmc_nci.h
+    $(PARROT_H_HEADERS) \
+    include/pmc/pmc_unmanagedstruct.h \
+    include/pmc/pmc_nci.h \
+    src/nci/extra_thunks.c
+	$(CC) $(CFLAGS) @optimize::src/nci/extra_thunks.c@ @ccwarn::src/nci/extra_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci/extra_thunks.c
 
 src/frame_builder$(O) : $(PARROT_H_HEADERS) src/frame_builder.h \
         include/pmc/pmc_fixedintegerarray.h \
@@ -1420,7 +1413,10 @@
 
 src/vtables$(O) : $(PARROT_H_HEADERS)
 
+## SUFFIX OVERRIDE
 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/warnings$(O) : $(PARROT_H_HEADERS)
@@ -1429,7 +1425,9 @@
 
 src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h
 
+## SUFFIX OVERRIDE
 src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str
+	$(CC) $(CFLAGS) @optimize::src/spf_render.c@ @ccwarn::src/spf_render.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/spf_render.c
 
 src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str
 
@@ -1462,15 +1460,14 @@
 
 src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h
 
-src/ops/core_ops$(O) : src/ops/core_ops.c \
-	include/pmc/pmc_callcontext.h \
-	include/pmc/pmc_continuation.h \
-        include/pmc/pmc_parrotlibrary.h \
-        src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
-        $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
-
 # core_ops depends upon config.h so that it gets updated along with
 # updates to config.h's version numbers
+src/ops/core_ops$(O) : src/ops/core_ops.c \
+    include/pmc/pmc_callcontext.h \
+    include/pmc/pmc_continuation.h \
+    include/pmc/pmc_parrotlibrary.h \
+    src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
+    $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
 
 # .h files are built along with .c
 $(INC_DIR)/oplib/core_ops.h: src/ops/core_ops.c
@@ -1481,8 +1478,10 @@
 	include/pmc/pmc_continuation.h
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
 
+## SUFFIX OVERRIDE
 src/ops/core_ops_switch$(O) : $(GENERAL_H_FILES) src/ops/core_ops_switch.c \
 	include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_switch.c@ @ccwarn::src/ops/core_ops_switch.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_switch.c
 
 $(INC_DIR)/oplib/core_ops_switch.h : src/ops/core_ops_switch.c
 
@@ -1492,7 +1491,27 @@
 	lib/Parrot/OpTrans/CPrederef.pm
 	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --core @no_lines_flag@
 
- at TEMP_cg_c@
+## SUFFIX OVERRIDE
+src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cg.c@ @ccwarn::src/ops/core_ops_cg.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cg.c
+
+## SUFFIX OVERRIDE
+src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
+        include/pmc/pmc_parrotlibrary.h
+	$(CC) $(CFLAGS) @optimize::src/ops/core_ops_cgp.c@ @ccwarn::src/ops/core_ops_cgp.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cgp.c
+
+src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
+
+$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
+
+src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
+
+$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
+
+src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
 
 @TEMP_gc_c@
 
@@ -1570,24 +1589,6 @@
 
 ###############################################################################
 #
-# dynamic oplibs targets:
-#
-###############################################################################
-
-dynoplibs : dynoplibs.dummy
-
-# XXX this dependancy is too broad, and should be narrowed down
-dynoplibs.dummy : $(PARROT) $(INC_DIR)/dynext.h
-	$(MAKE) src/dynoplibs
-
-dynoplibs-test : $(PARROT) $(INC_DIR)/dynext.h
-	$(MAKE) src/dynoplibs test
-
-dynoplibs-clean :
-	$(MAKE) src/dynoplibs clean
-
-###############################################################################
-#
 # compiler implementation targets:
 #
 ###############################################################################
@@ -1818,19 +1819,19 @@
 #IF(has_perldoc):    docs-clean \
 #IF(has_perldoc):    html-clean \
     dynpmc-clean \
-    dynoplibs-clean \
     examples-clean \
     ext-clean \
 #UNLESS(win32):    cover-clean \
     editor-clean
-	@TEMP_cg_r@
+	$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
+    $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c
 	$(RM_F) chartypes "*.s" "*~"
 	$(RM_F) $(FLUID_FILES_1)
 	$(RM_F) $(FLUID_FILES_2)
 	$(RM_RF) lib/Parrot/OpLib
 	$(RM_F) $(NQP_CLEANUPS) $(PGE_CLEANUPS) $(TGE_CLEANUPS) $(JSON_CLEANUPS)
 	$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS) $(DATA_JSON_CLEANUPS)
-	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES)
+	$(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES) $(DYNOPLIBS_CLEANUPS)
 
 prog-clean :
 	$(RM_F) \
@@ -1874,7 +1875,7 @@
     src/string/private_cstring.h "src/pmc/*.c" "include/pmc/pmc_*.h" \
     "src/pmc/*.dump" vtable.dump "*.def" "*.lib" "*.exp"
 
-archclean: dynoplibs-clean dynpmc-clean dynext-clean
+archclean: dynpmc-clean dynext-clean
 	$(RM_F) \
     $(O_FILES) \
     $(GEN_CONFIGS) \
@@ -2218,7 +2219,7 @@
 # +redef, +redecl: Ops currently have tons of redefinitions
 
 # added to splint target to simplify experimentation,
-# ex: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
+# example: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
 
 SPLINT_SOURCE = `echo $(O_FILES) | $(PERL) -pe @PQ at s/\.o/\.c/g at PQ@`
 
@@ -2424,7 +2425,9 @@
 ###### OS depend targets ##########
 
 # for use by t/pmc/nci.t
-src/nci_test$(O): $(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
+src/nci_test$(O): $(PARROT_H_HEADERS) src/nci_test.c
+	$(CC) $(CFLAGS) @optimize::src/nci_test.c@ @ccwarn::src/nci_test.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci_test.c
 
 $(LIBNCI_TEST_SO): src/nci_test$(O) $(LIBPARROT)
 	$(LD) $(LD_LOAD_FLAGS) @ncilib_link_extra@ $(LDFLAGS) \
@@ -2451,7 +2454,9 @@
 	$(NCI_THUNK_GEN) --dynext --no-warn-dups \
 	    --output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
 
-src/extra_nci_thunks$(O) : $(GENERAL_H_FILES)
+## SUFFIX OVERRIDE
+src/extra_nci_thunks$(O) : $(GENERAL_H_FILES) src/extra_nci_thunks.c
+	$(CC) $(CFLAGS) @optimize::src/extra_nci_thunks.c@ @ccwarn::src/extra_nci_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extra_nci_thunks.c
 
 $(EXTRANCITHUNKS_SO) : $(LIBPARROT) src/extra_nci_thunks$(O)
 	$(LD) $(LD_LOAD_FLAGS) $(LDFLAGS) \
@@ -2522,6 +2527,7 @@
 malloclist: src/core_pmcs.c
 	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl --macro=PARROT_MALLOC $(HEADERIZER_O_FILES)
 
+include src/dynoplibs/Rules.mak
 include runtime/parrot/library/Rules.mak
 include compilers/imcc/Rules.mak
 include compilers/pirc/Rules.mak

Modified: branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -90,8 +90,7 @@
         rpath                  => "-L",
         libparrot_soname       => "-install_name "
             . $lib_dir
-            . $conf->data->get('slash')
-            . "libparrot"
+            . '/libparrot'
             . $conf->data->get('share_ext')
     );
 }

Modified: branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -98,70 +98,14 @@
 sub _handle_icc_ccflags {
     my ($ccflags, $verbose) = @_;
 
-    # suppress sprintf warnings that don't apply
-    $ccflags .= ' -wd269';
-
-    # suppress remarks about floating point comparisons
-    $ccflags .= ' -wd1572';
-
-    # suppress remarks about hiding of parameter declarations
-    $ccflags .= ' -wd1599';
-
-    # suppress remarks about "argument is incompatible with corresponding
-    # format string conversion"
-    $ccflags .= ' -wd181';
-
-    # gcc is currently not looking for unused variables, so should icc
-    # for the time being (this will reduce the noise somewhat)
-    $ccflags .= ' -wd869';
-
-    # ignore "operands are evaluated in unspecified order" warning
-    $ccflags .= ' -wd981';
-
-    # ignore "external declaration in primary source file"
-    # (only done temporarily to reduce noise)
-    $ccflags .= ' -wd1419';
-
-    # ignore "function 'xxx' was declared but never referenced"
-    # (only done temporarily to reduce noise)
-    $ccflags .= ' -wd117';
-
-    # ignore "conversion from "" to "" may lose significant bits"
-    # warnings (only done temporarily to reduce noise)
-    $ccflags .= ' -wd810';
-
-    # ignore "function "" was declared but never referenced"
-    # warnings (only done temporarily to reduce noise)
-    $ccflags .= ' -wd177';
-
-    # ignore warnings springing from problems with computed goto
-    # statements.  If someone can find out how to make icc play nicely
-    # in these situations, that would be good.
-    $ccflags .= ' -wd1296';
-
-    $ccflags .= ' -Wall -Wcheck -w2';
-
-    $ccflags .= ' -Wabi';
-    $ccflags .= ' -Wcomment';
-    $ccflags .= ' -Wdeprecated';
-    $ccflags .= ' -Wmain';
-    $ccflags .= ' -Wmissing-prototypes';
-
-    #$ccflags .= ' -Wp64';
-    $ccflags .= ' -Wpointer-arith';
-    $ccflags .= ' -Wreturn-type';
-    $ccflags .= ' -Wstrict-prototypes';
-
-    #$ccflags .= ' -Wtrigraphs';
-    $ccflags .= ' -Wuninitialized';
-    $ccflags .= ' -Wunknown-pragmas';
-    $ccflags .= ' -Wunused-function';
-    $ccflags .= ' -Wunused-variable';
-
     # enable correct floating point behavior
     # which is *not* the default behavior. ahem.
     $ccflags .= ' -we147';
 
+    # TT #1488. ICC optimizes floating-point too aggressively and loses support
+    # for negative zero without this.
+    $ccflags .= ' -fp-model source';
+
     $verbose and print " ccflags: $ccflags\n";
     return $ccflags;
 }

Modified: branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -101,7 +101,6 @@
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
             ccflags             => $ccflags,
             ccwarn              => $ccwarn,
             has_dynamic_linking => 1,
@@ -153,7 +152,6 @@
             ar_flags            => '',
             ar_out              => '-out:',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
             ccflags             => $ccflags,
             ccwarn              => '',
             has_dynamic_linking => 1
@@ -200,7 +198,6 @@
             ar_out   => '',
             ar_extra => '',
             slash    => '\\',
-            blib_dir => 'blib\\lib',
             make_and => "\n\t",
         );
     }
@@ -261,7 +258,6 @@
             sym_export          => '__declspec(dllexport)',
             sym_import          => '__declspec(dllimport)',
             slash               => '\\',
-            blib_dir            => 'blib\\lib',
         );
     }
 }

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

Modified: branches/pcc_hackathon_6Mar10/config/inter/charset.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/inter/charset.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/inter/charset.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -75,8 +75,7 @@
     }
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    $TEMP_charset_o =~ s/^| / src${slash}string${slash}charset${slash}/g;
+    $TEMP_charset_o =~ s{^| }{ src/string/charset/}g;
 
     $conf->data->set(
         charset            => $charset_list,

Modified: branches/pcc_hackathon_6Mar10/config/inter/encoding.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/inter/encoding.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/inter/encoding.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -75,8 +75,7 @@
     }
 
     # build list of libraries for link line in Makefile
-    my $slash = $conf->data->get('slash');
-    $TEMP_encoding_o =~ s/^| / src${slash}string${slash}encoding${slash}/g;
+    $TEMP_encoding_o =~ s{^| }{ src/string/encoding/}g;
 
     $conf->data->set(
         encoding            => $encoding_list,

Modified: branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -105,7 +105,7 @@
                                      && $conf->data->get('rpath') )
         ? $conf->data->get('rpath')
             . $conf->data->get('build_dir')
-            . $conf->data->get('slash')
+            . '/'
             . $conf->data->get('blib_dir')
         : ''
     );
@@ -144,7 +144,7 @@
         $conf->data->set(libparrot_linkflags =>
         '-L'
         . $conf->data->get('build_dir')
-        . $conf->data->get('slash')
+        . '/'
         . $conf->data->get('blib_dir')
         . ' -lparrot'
         );

Modified: branches/pcc_hackathon_6Mar10/docs/parrothist.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/parrothist.pod	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/docs/parrothist.pod	Tue Mar 16 22:37:03 2010	(r44975)
@@ -104,4 +104,5 @@
 
  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"
 =cut

Modified: branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod	Tue Mar 16 22:37:03 2010	(r44975)
@@ -626,9 +626,9 @@
 Unsafe, and behavior handled by Parrot_str_to_cstring.
 
 
-=head4 Parrot_string_split
+=head4 Parrot_str_split
 
-Is the same as Parrot_str_split.
+Splits the string C<str> at the delimiter C<delim>.
 
 =head4 Parrot_str_free (was string_free)
 

Modified: branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod	Tue Mar 16 22:37:03 2010	(r44975)
@@ -115,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>version/tools>. These tools will generally not be
+F</usr/lib/parrot/E<lt>versionE<gt>/tools>. These tools will generally not be
 included in the default C<parrot> package on most systems, languages will
 require a C<parrot-dev> package to be installed before they can be built.
 

Modified: branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod	Tue Mar 16 22:37:03 2010	(r44975)
@@ -393,7 +393,6 @@
 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

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

Deleted: branches/pcc_hackathon_6Mar10/include/parrot/events.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/events.h	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,226 +0,0 @@
-/* events.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This api will handle parrot events
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_EVENTS_H_GUARD
-#define PARROT_EVENTS_H_GUARD
-
-#include "parrot/compiler.h"
-
-typedef void* (*event_func_t)(Parrot_Interp, void*);
-
-typedef enum {
-    EVENT_TYPE_NONE,
-    EVENT_TYPE_EVENT,
-    EVENT_TYPE_IO,
-    EVENT_TYPE_MSG,
-    EVENT_TYPE_TIMER,
-    EVENT_TYPE_CALL_BACK,
-    EVENT_TYPE_SLEEP,
-    EVENT_TYPE_TERMINATE,
-    EVENT_TYPE_EVENT_TERMINATE,
-    EVENT_TYPE_CLASS_CHANGED,
-    EVENT_TYPE_SIGNAL,
-    EVENT_TYPE_SUSPEND_FOR_GC
-} parrot_event_type_enum;
-
-/*
- * any timer event has 2 time fields in front
- */
-typedef struct parrot_timer_event {
-    FLOATVAL                    abs_time;
-    FLOATVAL                    interval;
-    int                         repeat; /* 0 = once, -1 = forever */
-    PMC*                        sub;    /* handler sub */
-    PMC*                        timer;  /* a .Timer PMC */
-} parrot_timer_event;
-
-/* TODO export to pasm */
-typedef enum {
-    EV_IO_NONE,                 /* invalidated */
-    EV_IO_SELECT_RD,            /* rd is ready for read */
-    EV_IO_SELECT_WR             /* rd is ready for write */
-} parrot_io_event_enum;
-
-typedef struct parrot_io_event {
-    parrot_io_event_enum        action; /* read, write, ... */
-    PMC*                        pio;
-    PMC*                        handler;
-    PMC*                        user_data;
-} parrot_io_event;
-
-typedef struct _call_back_info {
-    PMC*                        cbi;    /* callback info */
-    char*                       external_data;
-} _call_back_info;
-
-typedef struct parrot_event {
-    parrot_event_type_enum      type;
-    Parrot_Interp               interp;
-    /* event_func_t                event_func; unused */
-    union {
-        STRING*                 msg;            /* for testing only */
-        int                     signal;         /* for EVENT_TYPE_SIGNAL */
-        parrot_timer_event      timer_event;    /* for EVENT_TYPE_TIMER */
-        _call_back_info         call_back;      /* CALL_BACKs */
-        parrot_io_event         io_event;       /* EVENT_TYPE_IO */
-    } u;
-} parrot_event;
-
-struct QUEUE_ENTRY;
-
-#define CHECK_EVENTS(i, n)  (opcode_t *)Parrot_do_check_events((i), (n))
-#define HANDLE_EVENTS(i, n) (opcode_t *)Parrot_do_handle_events((i), 1, (n))
-
-/* HEADERIZER BEGIN: src/events.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_EXPORT
-void Parrot_del_timer_event(PARROT_INTERP, ARGIN(const PMC *timer))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_do_check_events(PARROT_INTERP,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_do_handle_events(PARROT_INTERP,
-    int restore,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_event_add_io_event(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *pio),
-    ARGIN_NULLOK(PMC *sub),
-    ARGIN_NULLOK(PMC *data),
-    INTVAL which)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_init_events(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_init_signals(void);
-
-PARROT_EXPORT
-void Parrot_kill_event_loop(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_cb_event(PARROT_INTERP, ARGIN(PMC *cbi), ARGIN(char *ext))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-void Parrot_new_suspend_for_gc_event(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_terminate_event(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_timer_event(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *timer),
-    FLOATVAL diff,
-    FLOATVAL interval,
-    int repeat,
-    ARGIN_NULLOK(PMC *sub),
-    parrot_event_type_enum typ)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_schedule_event(PARROT_INTERP, ARGMOD(parrot_event* ev))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(* ev);
-
-PARROT_EXPORT
-void Parrot_schedule_interp_qentry(PARROT_INTERP,
-    ARGIN(struct QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_sleep_on_event(PARROT_INTERP,
-    FLOATVAL t,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-void Parrot_schedule_broadcast_qentry(ARGIN(struct QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_del_timer_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(timer))
-#define ASSERT_ARGS_Parrot_do_check_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_do_handle_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_event_add_io_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_init_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_init_signals __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_kill_event_loop __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_cb_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cbi) \
-    , PARROT_ASSERT_ARG(ext))
-#define ASSERT_ARGS_Parrot_new_suspend_for_gc_event \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_terminate_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_timer_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_schedule_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ev))
-#define ASSERT_ARGS_Parrot_schedule_interp_qentry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_Parrot_sleep_on_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_schedule_broadcast_qentry \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(entry))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/events.c */
-
-/* &gen_from_enum(io_thr_msg.pasm) */
-typedef enum {
-    IO_THR_MSG_NONE,
-    IO_THR_MSG_TERMINATE,
-    IO_THR_MSG_ADD_SELECT_RD
-} io_thread_msg_type;
-/* &end_gen */
-
-#endif /* PARROT_EVENTS_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /* exceptions.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
+ *  Copyright (C) 2001-2010, Parrot Foundation.
  *  SVN Info
  *     $Id$
  *  Overview:
@@ -272,10 +272,14 @@
 #ifdef NDEBUG
 #  define PARROT_ASSERT(x) /*@-noeffect@*/((void)0)/*@=noeffect@*/
 #  define PARROT_ASSERT_ARG(x) (0)
+#  define PARROT_FAILURE(x) /*@-noeffect@*/((void)0)/*@=noeffect@*/
+#  define PARROT_ASSERT_MSG(x, s) /*@-noeffect@*/((void)0)/*@=noeffect@*/
 #  define ASSERT_ARGS(a)
 #else
 #  define PARROT_ASSERT(x) (x) ? ((void)0) : Parrot_confess(#x, __FILE__, __LINE__)
 #  define PARROT_ASSERT_ARG(x) ((x) ? (0) : (Parrot_confess(#x, __FILE__, __LINE__), 0))
+#  define PARROT_FAILURE(x) Parrot_confess((x), __FILE__, __LINE__)
+#  define PARROT_ASSERT_MSG(x, s) ((x) ? (0) : (Parrot_confess(s, __FILE__, __LINE__), 0))
 
 #  ifdef __GNUC__
 #    define ASSERT_ARGS(a) ASSERT_ARGS_ ## a ;

Modified: branches/pcc_hackathon_6Mar10/include/parrot/hash.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/hash.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/hash.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -87,7 +87,7 @@
     ORDERED_HASH_ITEM_VALUE = 1,
     ORDERED_HASH_ITEM_PREV  = 2,
     ORDERED_HASH_ITEM_NEXT  = 3,
-    ORDERED_HASH_ITEM_MAX   = 4,
+    ORDERED_HASH_ITEM_MAX   = 4
 };
 
 /* HEADERIZER BEGIN: src/hash.c */

Modified: branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -609,7 +609,7 @@
 #  define PMC_IS_NULL(pmc) Parrot_pmc_is_null(NULL, (pmc))
 #endif
 #ifndef STRING_IS_NULL
-#  define STRING_IS_NULL(s) ((s) == NULL || STRING_is_null(NULL, (s))
+#  define STRING_IS_NULL(s) ((s) == NULL || Parrot_str_is_null(NULL, (s))
 #endif
 
 #endif   /* PARROT_INTERPRETER_H_GUARD */

Modified: branches/pcc_hackathon_6Mar10/include/parrot/oplib.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/oplib.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/oplib.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -47,7 +47,6 @@
 typedef enum {
     CORE_OPS_end,               /* halt the runloop */
     CORE_OPS_noop,              /* do nothing */
-    CORE_OPS_cpu_ret,           /* __asm("ret") */
     CORE_OPS_check_events,      /* explicit event check */
     CORE_OPS_check_events__,    /* inserted into op dispatch when an event
                                    got scheduled */

Modified: branches/pcc_hackathon_6Mar10/include/parrot/parrot.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/parrot.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/parrot.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -269,7 +269,6 @@
 #include "parrot/io.h"
 #include "parrot/op.h"
 #include "parrot/pmc.h"
-#include "parrot/events.h"
 #include "parrot/gc_api.h"
 #include "parrot/string_funcs.h"
 #include "parrot/misc.h"
@@ -280,7 +279,6 @@
 #include "parrot/nci.h"
 #include "parrot/thread.h"
 #include "parrot/scheduler.h"
-#include "parrot/tsq.h"
 #include "parrot/longopt.h"
 #include "parrot/oo.h"
 #include "parrot/vtables.h"

Modified: branches/pcc_hackathon_6Mar10/include/parrot/pmc.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/pmc.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/pmc.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -89,6 +89,11 @@
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
+PMC * Parrot_pmc_new_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
 PMC * Parrot_pmc_new_noinit(PARROT_INTERP, INTVAL base_type)
         __attribute__nonnull__(1);
 
@@ -172,6 +177,8 @@
 #define ASSERT_ARGS_Parrot_pmc_new_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(init))
+#define ASSERT_ARGS_Parrot_pmc_new_init_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_new_noinit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_pmc_register_new_type __attribute__unused__ int _ASSERT_ARGS_CHECK = (\

Modified: branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -17,7 +17,7 @@
     VISIT_HOW_PMC_TO_VISITOR     = 0x00, /* push to visitor */
     VISIT_HOW_VISITOR_TO_PMC     = 0x01, /* shift from visitor */
     VISIT_HOW_PMC_TO_PMC         = 0x02, /* push to visitor; then shift from visitor */
-    VISIT_HOW_VISITOR_TO_VISITOR = 0x03, /* shift from visitor; then push to visitor */
+    VISIT_HOW_VISITOR_TO_VISITOR = 0x03 /* shift from visitor; then push to visitor */
 } visit_how_enum_t;
 
 #define VISIT_HOW_MASK 0x03
@@ -26,7 +26,7 @@
     VISIT_WHAT_PMC      = 0x04,
     VISIT_WHAT_STRING   = 0x08,
     VISIT_WHAT_FLOATVAL = 0x10,
-    VISIT_WHAT_INTVAL   = 0x20,
+    VISIT_WHAT_INTVAL   = 0x20
 } visit_what_enum_t;
 
 #define VISIT_WHAT_MASK 0x3c
@@ -39,7 +39,7 @@
 
 typedef enum {
     EXTRA_IS_NULL,
-    EXTRA_IS_PROP_HASH,
+    EXTRA_IS_PROP_HASH
 } extra_flags_enum;
 
 #define VISIT_PMC(interp, visit, pmc) do {\

Modified: branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -64,7 +64,7 @@
 
     PPROF_DATA_CLI = 0,
 
-    PPROF_DATA_MAX = 3,
+    PPROF_DATA_MAX = 3
 } Parrot_profiling_datatype;
 
 struct profiling_runcore_t {

Modified: branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,3 +1,4 @@
+#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* string_funcs.h
  *  Copyright (C) 2001-2008, Parrot Foundation.
  *  SVN Info
@@ -249,6 +250,9 @@
         __attribute__nonnull__(3);
 
 PARROT_EXPORT
+INTVAL Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
+
+PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING* Parrot_str_join(PARROT_INTERP,
@@ -626,6 +630,7 @@
 #define ASSERT_ARGS_Parrot_str_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_Parrot_str_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_Parrot_str_join __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(ar))

Deleted: branches/pcc_hackathon_6Mar10/include/parrot/tsq.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/tsq.h	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,167 +0,0 @@
-/* tsq.h
- *  Copyright (C) 2001-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     Defines the thread-safe queue system
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_TSQ_H_GUARD
-#define PARROT_TSQ_H_GUARD
-
-#include "parrot/config.h"
-#include "parrot/thread.h"
-
-
-typedef struct QUEUE_ENTRY QUEUE_ENTRY;
-typedef struct QUEUE QUEUE;
-
-typedef enum {
-    QUEUE_ENTRY_TYPE_NONE,
-    QUEUE_ENTRY_TYPE_EVENT,
-    QUEUE_ENTRY_TYPE_TIMED_EVENT
-} queue_entry_type_enum;
-
-struct QUEUE_ENTRY {
-    void *data;
-    queue_entry_type_enum type;
-    QUEUE_ENTRY *next;
-};
-
-struct QUEUE {
-    QUEUE_ENTRY *head;
-    QUEUE_ENTRY *tail;
-    UINTVAL max_prio;
-    Parrot_mutex queue_mutex;
-    Parrot_cond queue_condition;
-};
-
-/* HEADERIZER BEGIN: src/tsq.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-void nosync_insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CANNOT_RETURN_NULL
-QUEUE_ENTRY * nosync_pop_entry(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-QUEUE_ENTRY * peek_entry(ARGIN(const QUEUE *queue))
-        __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY * pop_entry(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void push_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-void queue_broadcast(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_destroy(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-PARROT_MALLOC
-QUEUE* queue_init(UINTVAL prio);
-
-void queue_lock(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_signal(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_timedwait(
-    ARGMOD(QUEUE *queue),
-    ARGIN(const struct timespec *abs_time))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-void queue_unlock(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_wait(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void unshift_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY * wait_for_entry(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-#define ASSERT_ARGS_insert_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_nosync_insert_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_nosync_pop_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_peek_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_pop_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_push_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_queue_broadcast __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_queue_lock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_signal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_timedwait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(abs_time))
-#define ASSERT_ARGS_queue_unlock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_wait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_unshift_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_wait_for_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/tsq.c */
-
-#endif /* PARROT_TSQ_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -197,10 +197,15 @@
 
     $conf->genfile($source, $target, %options);
 
-Takes the specified source file, replacing entries like C<@FOO@> with
-C<FOO>'s value from the configuration system's data, and writes the results
+Takes the specified source file, replacing entries like C<@key@> with
+C<key>'s value from the configuration system's data, and writes the results
 to specified target file.
 
+If a C<::> is present in the C<@key@>, the replaced value will first try to
+use the full key, but if that is not present, the key up to the C<::> is used.
+For example, if C<@cc_warn::src/embed.c@> is used, and that key doesn't
+exist, the fallback key would be C<@cc_warn@>.
+
 Respects the following options when manipulating files (Note: most of the
 replacement syntax assumes the source text is on a single line.)
 
@@ -210,8 +215,8 @@
 
 If set to a C<makefile>, C<c> or C<perl> value, C<comment_type> will be set
 to corresponding value.
-Moreover, when set to a C<makefile> value, it will set C<replace_slashes> to
-enabled, and C<conditioned_lines> to enabled.
+Moreover, when set to a C<makefile> value, it will enable
+C<conditioned_lines>.
 
 Its value will be detected automatically by target file name unless you set
 it to a special value C<none>.
@@ -270,11 +275,6 @@
 
 will be used on "win32" and if "glut" is defined, but not on "cygwin".
 
-B<Legacy Syntax:>
-
-The old syntax #CONDITIONED_LINE(var): and
-#INVERSE_CONDITIONED_LINE(var): is still supported, but is deprecated.
-
 =item comment_type
 
 This option takes has two possible values, C<#> or C</*>. If present and
@@ -294,12 +294,6 @@
 this evaluation occurs, any substitution of @@ values is performed on the
 original text.
 
-=item replace_slashes
-
-If set to a true value, this causes any C</>s in the file to automatically
-be replaced with an architecture appropriate slash. C</> or C<\>. This is
-a very helpful option when writing Makefiles.
-
 =item expand_gmake_syntax
 
 If set to a true value, then certain types of I<gmake> syntax will be expanded
@@ -350,7 +344,7 @@
     open my $out, '>', "$target.tmp" or die "Can't open $target.tmp: $!";
 
     if ( !exists $options{file_type}) {
-        if ( $target =~ m/makefile$/i ) {
+        if ( $target =~ m/makefile$/i || $target =~ m/\.mak/) {
             $options{file_type} = 'makefile';
         }
         elsif ($target =~ m/\.p[lm]$/i ) {
@@ -378,7 +372,6 @@
                 $file_types_info{$options{file_type}}{comment_type};
         }
         if ( $options{file_type} eq 'makefile' ) {
-            $options{replace_slashes}   = 1;
             $options{conditioned_lines} = 1;
         }
     }
@@ -461,16 +454,6 @@
                 next LINE if $former_truth;
                 $line = $1;
             }
-            # Legacy, DEPRECATED.
-            elsif (($expr,$rest)=($line =~ m/^#CONDITIONED_LINE\(([^)]+)\):(.*)/s)) {
-                next LINE unless cond_eval($conf, $expr);
-                $line = $rest;
-            }
-            elsif (($expr,$rest)=($line =~ m/^#INVERSE_CONDITIONED_LINE\(([^)]+)\):(.*)/s )) {
-                next LINE if cond_eval($conf, $expr);
-                $line = $rest;
-            }
-
             else { # reset
                 $former_truth = -1; # ELSE must immediately follow a conditional.
             }
@@ -539,29 +522,29 @@
         # interpolate @foo@ values
         $line =~ s{ \@ (\w+) \@ }{
             if(defined(my $val=$conf->data->get($1))) {
-                #use Data::Dumper;warn Dumper("val for $1 is ",$val);
                 $val;
             }
             else {
-                warn "value for '$1' in $source is undef";
+                warn "value for '\@$1\@' in $source is undef";
                 '';
             }
         }egx;
 
-        if ( $options{replace_slashes} ) {
-            if ( $line =~ m{/$} ) {
-                croak "$source:$.: line ends in a slash\n";
+        # interpolate @foo::bar@ values
+        $line =~ s{ \@ (\w+) :: ([^\@]+) \@ }{
+            my $full = $1 . '::' . $2;
+            my $base = $1;
+            if(defined(my $val=$conf->data->get($full))) {
+                $val;
             }
-
-            $line =~ s{(/+)}{
-                my $len = length $1;
-                my $slash = $conf->data->get('slash');
-                '/' x ($len/2) . ($len%2 ? $slash : '');
-            }eg;
-
-            # replace \* with \\*, so make will not eat the \
-            $line =~ s{(\\\*)}{\\$1}g;
-        }
+            elsif(defined($val=$conf->data->get($base))) {
+                $val;
+            }
+            else {
+                warn "value for '\@$full\@' in $source is undef, no fallback";
+                '';
+            }
+        }egx;
 
         print $out $line;
     }
@@ -620,8 +603,6 @@
     }
 }
 
-sub truth { $_[0] ? "true" : "false"; }
-
 # Recursively evaluate boolean expressions with multiple keys and | & ! ops.
 # Order of precedence: Just "!" and "NOT" binds tighter than AND and OR.
 # There's no precedence for AND over OR defined, just left to right.

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 package Parrot::Configure::Step::List;
 use strict;
@@ -23,6 +23,8 @@
     auto::msvc
     auto::attributes
     auto::warnings
+    auto::arch
+    auto::cpu
     init::optimize
     inter::shlibs
     inter::libparrot
@@ -37,10 +39,8 @@
     auto::va_ptr
     auto::format
     auto::isreg
-    auto::arch
     auto::jit
     auto::frames
-    auto::cpu
     auto::cgoto
     auto::inline
     auto::gc

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -109,7 +109,6 @@
 my %type_for_name = (
     'Artistic'             => 'Licence file',
     'BUGS'                 => 'Project info',
-    'CFLAGS'               => 'CFLAGS file',
     'ChangeLog'            => 'Project info',
     'Changes'              => 'Project info',
     'CREDITS'              => 'Project info',

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -218,11 +218,10 @@
             'Threads', '',
             $self->c_pair_item( '', 'thread' ),
             $self->c_header_item( '', 'thr_pthread' ),
-            $self->c_pair_item( '', 'tsq' ),
         ),
         $self->new_group(
             'Exceptions', '',
-            $self->c_pair_item( '', 'exceptions' ), $self->c_pair_item( '', 'events' ),
+            $self->c_pair_item( '', 'exceptions' )
         ),
         $self->new_group(
             'Memory', '',

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -45,7 +45,6 @@
             'Configuration',
             '',
             $self->new_item( '', 'tools/dev/as2c.pl' ),
-            $self->new_item( '', 'tools/build/cc_flags.pl' ),
             $self->new_item( '', 'tools/build/vtable_h.pl' ),
             $self->new_item( '', 'tools/build/vtable_extend.pl' ),
         ),

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -315,15 +315,12 @@
 
     s/{{=0,=([^{]*?)}}/   $trans->restart_address($1) . "; {{=0}}"; /me;
     s/{{=0,\+=([^{]*?)}}/ $trans->restart_offset($1)  . "; {{=0}}"; /me;
-    s/{{=0,-=([^{]*?)}}/  $trans->restart_offset(-$1) . "; {{=0}}"; /me;
 
     s/{{\+=([^{]*?)}}/    $trans->goto_offset($1);  /me;
-    s/{{-=([^{]*?)}}/     $trans->goto_offset(-$1); /me;
     s/{{=([^*][^{]*?)}}/  $trans->goto_address($1); /me;
 
-    s/{{\^(-?\d+)}}/      $1                        /me;
+    s/{{\^(\d+)}}/        $1                        /me;
     s/{{\^\+([^{]*?)}}/   $trans->expr_offset($1);  /me;
-    s/{{\^-([^{]*?)}}/    $trans->expr_offset(-$1); /me;
     s/{{\^([^{]*?)}}/     $trans->expr_address($1); /me;
 
     return $_;
@@ -343,15 +340,6 @@
 sub rewrite_body {
     my ( $self, $body, $trans, $preamble_only ) = @_;
 
-    # use vtable macros
-    $body =~ s!
-        (?:
-            {{\@\d+\}}
-            |
-            \b\w+(?:->\w+)*
-        )->vtable->\s*(\w+)\(
-        !VTABLE_$1(!sgx;
-
     while (1) {
         my $new_body = $self->_substitute( $body, $trans, !!$preamble_only );
 

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -123,11 +123,15 @@
     my $source = "src/ops/$base_ops_stub.c.temp";
 
     if ( $flagref->{dynamic} ) {
+        $flagref->{dynamic} = 1;
+
         $source =~ s!src/ops/!!;
         $header = $base_ops_h;
         $base =~ s!^.*[/\\]!!;
-        $include = $base_ops_h;
-        $flagref->{dynamic} = 1;
+
+        # the compiler invocation has -Ipath/to/dir, so only include by name.
+        use File::Basename qw(fileparse);
+        $include = (fileparse($base_ops_h))[0];
     }
 
     my $sym_export =

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -68,6 +68,33 @@
 
 =cut
 
+
+my $OPSENUM_PREAMBLE =<<END;
+/* ex: set ro ft=c:
+ * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+ *
+ * This file is generated automatically from 'lib/Parrot/OpsRenumber.pm'.
+ *
+ * Any changes made here will be lost!
+ *
+ */
+#ifndef OPSENUM_H_GUARD
+#define OPSENUM_H_GUARD
+enum OPS_ENUM {
+END
+
+my $OPSENUM_POSTAMBLE =<<END;
+};
+#endif /* OPSENUM_H_GUARD */
+/* GENERATED BY lib/Parrot/OpsRenumber.pm */
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+END
+
 sub renum_op_map_file {
     my $self = shift;
 
@@ -107,6 +134,9 @@
     # above the DYNAMIC line.  For the purpose of renumbering, we create
     # an index $n.
 
+    my $opsenumfn = "include/parrot/opsenum.h";
+    open my $OPSENUM, '>', $opsenumfn or die "Can't open $opsenumfn, error $!";
+    print $OPSENUM $OPSENUM_PREAMBLE;
     open $OP, '>', $file
         or die "Can't open $file, error $!";
     print $OP @lines;
@@ -140,9 +170,12 @@
 
         elsif ( $seen{ $_->full_name } ) {
             printf $OP "%-31s%4d\n", $_->full_name, ++$n;
+            printf $OPSENUM "    enum_ops_%-31s= %4d,\n", $_->full_name, $n;
         }
     }
     close $OP;
+    print $OPSENUM $OPSENUM_POSTAMBLE;
+    close $OPSENUM;
 
     return 1;
 }

Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm	Tue Mar 16 22:37:03 2010	(r44975)
@@ -436,7 +436,6 @@
 
     } /* END PMETHOD BODY */
     } /* END PARAMS SCOPE */
-  no_return:
     return;
 END
     $self->return_type('void');

Modified: branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir
==============================================================================
--- branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir	Tue Mar 16 22:37:03 2010	(r44975)
@@ -37,11 +37,9 @@
 
     # Convert the text to an object and return it.
     .local pmc json, code, config
-    load_language  'data_json'
-    json = compreg 'data_json'
-    code = json.'compile'(text)
-
-    .tailcall code()
+    load_bytecode 'compilers/json/JSON.pbc'
+    json = compreg 'JSON'
+    .tailcall json(text)
 .end
 
 =head2 WriteConfig(config, filename, ?:compact)

Modified: branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir
==============================================================================
--- branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir	Tue Mar 16 22:37:03 2010	(r44975)
@@ -433,7 +433,7 @@
 .end
 
 # close all sockets
-# this needs enabling of SIGHUP in src/events.c but still doesn't
+# this needs enabling of SIGHUP but still doesn't
 # help against FIN_WAIT2 / TIME_WAIT state of connections
 .sub 'shutdown' :method
     .local pmc active, sock

Modified: branches/pcc_hackathon_6Mar10/src/call/args.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/call/args.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/call/args.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1889,7 +1889,8 @@
 intval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(intval_constant_from_varargs)
-    PARROT_ASSERT(!"Wrong call");
+    UNUSED(index);
+    PARROT_FAILURE("Wrong call");
     return 0;
 }
 
@@ -1897,7 +1898,8 @@
 numval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(numval_constant_from_varargs)
-    PARROT_ASSERT(!"Wrong call");
+    UNUSED(index);
+    PARROT_FAILURE("Wrong call");
     return 0.0;
 }
 
@@ -1906,7 +1908,8 @@
 string_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(string_constant_from_varargs)
-    PARROT_ASSERT(!"Wrong call");
+    UNUSED(index);
+    PARROT_FAILURE("Wrong call");
     return NULL;
 }
 
@@ -1915,7 +1918,8 @@
 pmc_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
 {
     ASSERT_ARGS(pmc_constant_from_varargs)
-    PARROT_ASSERT(!"Wrong call");
+    UNUSED(index);
+    PARROT_FAILURE("Wrong call");
     return PMCNULL;
 }
 

Modified: branches/pcc_hackathon_6Mar10/src/call/context.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/call/context.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/call/context.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -306,7 +306,7 @@
                            ? NULL
                            : get_context_struct_fast(interp, pmcold);
 
-    PARROT_ASSERT(!PMC_IS_NULL(pmcctx) || !"Can't initialise Null CallContext");
+    PARROT_ASSERT_MSG(!PMC_IS_NULL(pmcctx), "Can't initialise Null CallContext");
 
     /*
      * FIXME Invoking corotine shouldn't initialise context. So just

Modified: branches/pcc_hackathon_6Mar10/src/debug.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/debug.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/debug.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -111,46 +111,11 @@
 static void list_breakpoints(ARGIN(PDB_t *pdb))
         __attribute__nonnull__(1);
 
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * nextarg(ARGIN_NULLOK(const char *command));
-
 static void no_such_register(PARROT_INTERP,
     char register_type,
     UINTVAL register_num)
         __attribute__nonnull__(1);
 
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * parse_int(ARGIN(const char *str), ARGOUT(int *intP))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*intP);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char* parse_key(PARROT_INTERP,
-    ARGIN(const char *str),
-    ARGOUT(PMC **keyP))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*keyP);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * parse_string(PARROT_INTERP,
-    ARGIN(const char *str),
-    ARGOUT(STRING **strP))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*strP);
-
-PARROT_CANNOT_RETURN_NULL
-static const char * skip_command(ARGIN(const char *str))
-        __attribute__nonnull__(1);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 static const char * skip_whitespace(ARGIN(const char *cmd))
@@ -178,22 +143,8 @@
        PARROT_ASSERT_ARG(cmd))
 #define ASSERT_ARGS_list_breakpoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pdb))
-#define ASSERT_ARGS_nextarg __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_no_such_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_parse_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(str) \
-    , PARROT_ASSERT_ARG(intP))
-#define ASSERT_ARGS_parse_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str) \
-    , PARROT_ASSERT_ARG(keyP))
-#define ASSERT_ARGS_parse_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(str) \
-    , PARROT_ASSERT_ARG(strP))
-#define ASSERT_ARGS_skip_command __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_skip_whitespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(cmd))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
@@ -750,193 +701,6 @@
 
 /*
 
-=item C<static const char * nextarg(const char *command)>
-
-Returns the position just past the current argument in the PASM instruction
-C<command>. This is not the same as C<skip_command()>, which is intended for
-debugger commands. This function is used for C<eval>.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-nextarg(ARGIN_NULLOK(const char *command))
-{
-    ASSERT_ARGS(nextarg)
-    /* as long as the character pointed to by command is not NULL,
-     * and it is either alphanumeric, a comma or a closing bracket,
-     * continue looking for the next argument.
-     */
-    if (command) {
-        while (isalnum((unsigned char) *command) || *command == ',' || *command == ']')
-            command++;
-
-        /* eat as much space as possible */
-        command = skip_whitespace(command);
-    }
-
-    return command;
-}
-
-/*
-
-=item C<static const char * skip_command(const char *str)>
-
-Returns the pointer past the current debugger command. (This is an
-alternative to the C<skip_command()> macro above.)
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static const char *
-skip_command(ARGIN(const char *str))
-{
-    ASSERT_ARGS(skip_command)
-    /* while str is not null and it contains a command (no spaces),
-     * skip the character
-     */
-    while (*str && !isspace((unsigned char) *str))
-        str++;
-
-    /* eat all space after that */
-    return skip_whitespace(str);
-}
-
-/*
-
-=item C<static const char * parse_int(const char *str, int *intP)>
-
-Parse an C<int> out of a string and return a pointer to just after the C<int>.
-The output parameter C<intP> contains the parsed value.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-parse_int(ARGIN(const char *str), ARGOUT(int *intP))
-{
-    ASSERT_ARGS(parse_int)
-    char *end;
-
-    *intP = strtol(str, &end, 0);
-
-    return end;
-}
-
-/*
-
-=item C<static const char * parse_string(PARROT_INTERP, const char *str, STRING
-**strP)>
-
-Parse a double-quoted string out of a C string and return a pointer to
-just after the string. The parsed string is converted to a Parrot
-C<STRING> and placed in the output parameter C<strP>.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-parse_string(PARROT_INTERP, ARGIN(const char *str), ARGOUT(STRING **strP))
-{
-    ASSERT_ARGS(parse_string)
-    const char *string_start;
-
-    /* if this is not a quoted string, there's nothing to parse */
-    if (*str != '"')
-        return NULL;
-
-    /* skip the quote */
-    str++;
-
-    string_start = str;
-
-    /* parse while there's no closing quote */
-    while (*str && *str != '"') {
-        /* skip any potentially escaped quotes */
-        if (*str == '\\' && str[1])
-            str += 2;
-        else
-            str++;
-    }
-
-    /* create the output STRING */
-    *strP = string_make(interp, string_start, (UINTVAL)(str - string_start),
-        NULL, 0);
-
-    /* skip the closing quote */
-    if (*str)
-        str++;
-
-    return str;
-}
-
-/*
-
-=item C<static const char* parse_key(PARROT_INTERP, const char *str, PMC
-**keyP)>
-
-Parse an aggregate key out of a string and return a pointer to just
-after the key. Currently only string and integer keys are allowed.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char*
-parse_key(PARROT_INTERP, ARGIN(const char *str), ARGOUT(PMC **keyP))
-{
-    ASSERT_ARGS(parse_key)
-    /* clear output parameter */
-    *keyP = NULL;
-
-    /* make sure it's a key */
-    if (*str != '[')
-        return NULL;
-
-    /* Skip [ */
-    str++;
-
-    /* if this is a string key, create a Parrot STRING */
-    if (*str == '"') {
-        STRING *parrot_string;
-        str   = parse_string(interp, str, &parrot_string);
-        *keyP = key_new_string(interp, parrot_string);
-    }
-    /* if this is a numeric key */
-    else if (isdigit((unsigned char) *str)) {
-        int value;
-        str   = parse_int(str, &value);
-        *keyP = key_new_integer(interp, (INTVAL) value);
-    }
-    /* unsupported case; neither a string nor a numeric key */
-    else {
-        return NULL;
-    }
-
-    /* hm, but if this doesn't match, it's probably an error */
-    /* XXX str can be NULL from parse_string() */
-    if (*str != ']')
-        return NULL;
-
-    /* skip the closing brace on the key */
-    return ++str;
-}
-
-/*
-
 =item C<static void debugger_cmdline(PARROT_INTERP)>
 
 Debugger command line.
@@ -1800,10 +1564,7 @@
     /* Allocate the new break point */
     newbreak = mem_gc_allocate_zeroed_typed(interp, PDB_breakpoint_t);
 
-    if (command) {
-        /*command = skip_command(command);*/
-    }
-    else {
+    if (! command) {
         Parrot_ex_throw_from_c_args(interp, NULL, 1,
             "NULL command passed to PDB_set_break");
     }
@@ -3328,7 +3089,6 @@
 {
     ASSERT_ARGS(PDB_eval)
 
-    PDB_t         *pdb = interp->pdb;
     Interp *warninterp = (interp->pdb && interp->pdb->debugger) ?
         interp->pdb->debugger : interp;
     TRACEDEB_MSG("PDB_eval");

Added: branches/pcc_hackathon_6Mar10/src/dynoplibs/Defines.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/pcc_hackathon_6Mar10/src/dynoplibs/Defines.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -0,0 +1,19 @@
+DYNOPLIBS_TARGETS = \
+#IF(cg_flag):    $(DYNEXT_DIR)/obscure_ops_cg$(LOAD_EXT) \
+#IF(cg_flag):    $(DYNEXT_DIR)/obscure_ops_cgp$(LOAD_EXT) \
+    $(DYNEXT_DIR)/obscure_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/obscure_ops_switch$(LOAD_EXT) \
+#IF(cg_flag):    $(DYNEXT_DIR)/math_ops_cg$(LOAD_EXT) \
+#IF(cg_flag):    $(DYNEXT_DIR)/math_ops_cgp$(LOAD_EXT) \
+    $(DYNEXT_DIR)/math_ops$(LOAD_EXT) \
+    $(DYNEXT_DIR)/math_ops_switch$(LOAD_EXT)
+
+DYNOPLIBS_CLEANUPS = \
+    src/dynoplibs/*.c \
+    src/dynoplibs/*.h \
+    src/dynoplibs/*.lib \
+    src/dynoplibs/*.pdb \
+    src/dynoplibs/*.ilk \
+    src/dynoplibs/*.def \
+    src/dynoplibs/*.manifest \
+    src/dynoplibs/*$(O) \

Modified: branches/pcc_hackathon_6Mar10/src/dynoplibs/README
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/dynoplibs/README	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/dynoplibs/README	Tue Mar 16 22:37:03 2010	(r44975)
@@ -4,11 +4,6 @@
 
 1) edit/create your foo.ops source (s. myops.ops)
 
-2) edit Makefile and append your ops target(s)
+2) edit the .mak files and append your ops targets and rules.
 
-$ export LD_LIBRARY_PATH=.:blib/lib
-$ make -s
-$ make shared
-$ make dynoplibs
-
-For tests and thus examples see t/dynoplibs/*.t.
+For tests and examples see t/dynoplibs/*.t.

Added: branches/pcc_hackathon_6Mar10/src/dynoplibs/Rules.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/pcc_hackathon_6Mar10/src/dynoplibs/Rules.in	Tue Mar 16 22:37:03 2010	(r44975)
@@ -0,0 +1,99 @@
+#
+# Each opslib must be compiled with several variants.
+#
+
+$(DYNEXT_DIR)/obscure_ops$(LOAD_EXT): src/dynoplibs/obscure_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops.h: src/dynoplibs/obscure_ops.c
+
+src/dynoplibs/obscure_ops.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/obscure_ops_switch$(LOAD_EXT): src/dynoplibs/obscure_ops_switch$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops_switch$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops_switch$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_switch.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops_switch.h: src/dynoplibs/obscure_ops_switch.c
+
+src/dynoplibs/obscure_ops_switch.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/obscure_ops_cg$(LOAD_EXT): src/dynoplibs/obscure_ops_cg$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops_cg$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops_cg$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_cg.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops_cg.h: src/dynoplibs/obscure_ops_cg.c
+
+src/dynoplibs/obscure_ops_cg.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/obscure_ops_cgp$(LOAD_EXT): src/dynoplibs/obscure_ops_cgp$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/obscure_ops_cgp$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops_cgp$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_cgp.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops_cgp.h: src/dynoplibs/obscure_ops_cgp.c
+
+src/dynoplibs/obscure_ops_cgp.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/math_ops$(LOAD_EXT): src/dynoplibs/math_ops$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/math_ops$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/math.ops
+
+src/dynoplibs/math_ops$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops.h: src/dynoplibs/math_ops.c
+
+$(DYNEXT_DIR)/math_ops_switch$(LOAD_EXT): src/dynoplibs/math_ops_switch$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/math_ops_switch$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops_switch$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_switch.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops_switch.h: src/dynoplibs/math_ops_switch.c
+
+src/dynoplibs/math_ops_switch.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --dynamic src/dynoplibs/math.ops
+
+$(DYNEXT_DIR)/math_ops_cg$(LOAD_EXT): src/dynoplibs/math_ops_cg$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/math_ops_cg$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops_cg$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_cg.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops_cg.h: src/dynoplibs/math_ops_cg.c
+
+src/dynoplibs/math_ops_cg.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --dynamic src/dynoplibs/math.ops
+
+$(DYNEXT_DIR)/math_ops_cgp$(LOAD_EXT): src/dynoplibs/math_ops_cgp$(O) $(LIBPARROT)
+	$(LD) @ld_out@$@ src/dynoplibs/math_ops_cgp$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):	$(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops_cgp$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_cgp.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops_cgp.h: src/dynoplibs/math_ops_cgp.c
+
+src/dynoplibs/math_ops_cgp.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+	$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --dynamic src/dynoplibs/math.ops

Modified: branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -193,34 +193,6 @@
 
 /*
 
-=item * static void rat_power_int(PARROT_INTERP, PMC *self, int value)
-
-Calculates the power of a Rational-PMC to an exponent value in-place.
-
-=cut
-
-*/
-static void rat_power_int(PARROT_INTERP, PMC *self, int value) {
-  #ifdef PARROT_HAS_GMP
-    mpz_t num, den;
-
-    mpq_get_num(num, RT(self));
-    mpq_get_den(den, RT(self));
-
-    mpz_pow_ui(num, num, (unsigned int) value);
-    mpq_set_num(RT(self), num);
-    mpz_clear(num);
-
-    mpz_pow_ui(den, den, (unsigned int) value);
-    mpq_set_den(RT(self), den);
-    mpz_clear(den);
-  #else
-    RAISE_EXCEPTION
-  #endif
-}
-
-/*
-
 =back
 
 =cut

Modified: branches/pcc_hackathon_6Mar10/src/embed.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/embed.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/embed.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -32,11 +32,6 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-static const char * op_name(PARROT_INTERP, int k)
-        __attribute__nonnull__(1);
-
 static void print_constant_table(PARROT_INTERP, ARGIN(PMC *output))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -53,8 +48,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(3);
 
-#define ASSERT_ARGS_op_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_print_constant_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(output))
@@ -638,7 +631,7 @@
 setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
 {
     ASSERT_ARGS(setup_argv)
-    PMC   *userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
+    PMC   * const userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
     INTVAL i;
 
     if (Interp_debug_TEST(interp, PARROT_START_DEBUG_FLAG)) {
@@ -669,26 +662,6 @@
 
 /*
 
-=item C<static const char * op_name(PARROT_INTERP, int k)>
-
-Returns the name of the opcode.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-static const char *
-op_name(PARROT_INTERP, int k)
-{
-    ASSERT_ARGS(op_name)
-    return interp->op_info_table[k].full_name;
-}
-
-
-/*
-
 =item C<static void print_debug(PARROT_INTERP, int status, void *p)>
 
 Prints GC info.
@@ -745,7 +718,7 @@
     for (i = 0; i < ft->fixup_count; i++) {
         if (ft->fixups[i]->type == enum_fixup_sub) {
             const opcode_t ci      = ft->fixups[i]->offset;
-            PMC           *sub_pmc = ct->constants[ci]->u.key;
+            PMC    * const sub_pmc = ct->constants[ci]->u.key;
             Parrot_Sub_attributes *sub;
 
             PMC_get_sub(interp, sub_pmc, sub);
@@ -843,7 +816,6 @@
 opcode_t *
 Parrot_debug(PARROT_INTERP, NOTNULL(Parrot_Interp debugger), opcode_t * pc)
 {
-    const char *command;
     PDB_t      * const pdb = debugger->pdb;
 
     pdb->cur_opcode        = pc;
@@ -860,6 +832,8 @@
     PDB_disassemble(interp, NULL);
 
     while (!(pdb->state & PDB_EXIT)) {
+        const char *command;
+
         PDB_get_command(debugger);
         command = pdb->cur_command;
         PDB_run_command(debugger, command);
@@ -919,12 +893,12 @@
                     /* FixedIntegerArrays used for signatures, handy to print */
                   case enum_class_FixedIntegerArray:
                     {
-                        INTVAL n = VTABLE_elements(interp, c->u.key);
+                        const INTVAL n = VTABLE_elements(interp, c->u.key);
                         INTVAL i;
                         Parrot_io_fprintf(interp, output, "[");
 
                         for (i = 0; i < n; ++i) {
-                            INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
+                            const INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
                             Parrot_io_fprintf(interp, output, "%d", val);
                             if (i < n - 1)
                                 Parrot_io_fprintf(interp, output, ",");
@@ -1130,8 +1104,8 @@
      * before compiling a string */
 
     if (!interp->initial_pf) {
-        PackFile * const pf = PackFile_new_dummy(interp,
-                Parrot_str_new_constant(interp, "compile_string"));
+        /* SIDE EFFECT: PackFile_new_dummy sets interp->initial_pf */
+        PackFile_new_dummy(interp, Parrot_str_new_constant(interp, "compile_string"));
         /* Assumption: there is no valid reason to fail to create it.
          * If the assumption changes, replace the assertion with a
          * runtime check */
@@ -1157,10 +1131,6 @@
 
 F<include/parrot/embed.h> and F<docs/embed.pod>.
 
-=head1 HISTORY
-
-Initial version by Brent Dax on 2002.1.28.
-
 =cut
 
 */

Deleted: branches/pcc_hackathon_6Mar10/src/events.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/events.c	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,1562 +0,0 @@
-/*
-Copyright (C) 2001-2008, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/events.c - Event handling stuff
-
-=head1 DESCRIPTION
-
-An event_thread handles async events for all interpreters. When events
-are due, they are placed in per interpreter task_queues, where they are
-handled then by the C<check_event*> opcodes.
-
-IO events and signals are caught in the io_thread, which again
-dispatches these to one or all interpreters.
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-#include "parrot/events.h"
-#include "events.str"
-
-typedef struct pending_io_events {
-    parrot_event **events;
-    size_t n;
-    size_t alloced;
-} pending_io_events;
-
-/* HEADERIZER HFILE: include/parrot/events.h */
-/* HEADERIZER BEGIN: static */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t * do_event(PARROT_INTERP,
-    ARGIN(parrot_event* event),
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY* dup_entry(ARGIN(const QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY* dup_entry_interval(
-    ARGIN(QUEUE_ENTRY *entry),
-    FLOATVAL now)
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static void* event_thread(ARGMOD(void *data))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*data);
-
-static void event_to_exception(PARROT_INTERP,
-    ARGIN(const parrot_event* event))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void init_events_all(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-static void init_events_first(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
-static void* io_thread(SHIM(void *data));
-
-static void io_thread_ready_rd(ARGMOD(pending_io_events *ios), int ready_rd)
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*ios);
-
-static void Parrot_sigaction(int sig, ARGIN(void (*handler)(int)))
-        __attribute__nonnull__(2);
-
-static void Parrot_unblock_signal(int sig);
-static int process_events(ARGMOD(QUEUE *event_q))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*event_q);
-
-static void schedule_signal_event(int signum);
-static void sig_handler(int signum);
-static void stop_io_thread(void);
-static void store_io_event(
-    ARGMOD(pending_io_events *ios),
-    ARGIN(parrot_event *ev))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*ios);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t * wait_for_wakeup(PARROT_INTERP,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_do_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(event))
-#define ASSERT_ARGS_dup_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_dup_entry_interval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_event_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(data))
-#define ASSERT_ARGS_event_to_exception __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(event))
-#define ASSERT_ARGS_init_events_all __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_init_events_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_io_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_io_thread_ready_rd __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(ios))
-#define ASSERT_ARGS_Parrot_sigaction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(handler))
-#define ASSERT_ARGS_Parrot_unblock_signal __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_process_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(event_q))
-#define ASSERT_ARGS_schedule_signal_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_sig_handler __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_stop_io_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_store_io_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(ios) \
-    , PARROT_ASSERT_ARG(ev))
-#define ASSERT_ARGS_wait_for_wakeup __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: static */
-
-/*
- * event debugging stuff - turn it off before running tests
- */
-#define EVENT_DEBUG 0
-/*
- * not yet - need to sort out platform code and fix exceptions first
- * TODO get some config for POSIX compliant
- * TODO create API for extenders like ponie - events disabled for now
- */
-#if defined(linux) || defined(darwin)
-#  define INSTALL_EVENT_HANDLER 0
-#else
-#  define INSTALL_EVENT_HANDLER 0
-#endif
-
-#if EVENT_DEBUG
-#  define edebug(x) fprintf (x)
-static const char *ev_names[] = {
-    "EVENT_TYPE_NONE",
-    "EVENT_TYPE_EVENT",
-    "EVENT_TYPE_IO",
-    "EVENT_TYPE_MSG",
-    "EVENT_TYPE_TIMER",
-    "EVENT_TYPE_CALL_BACK",
-    "EVENT_TYPE_SLEEP",
-    "EVENT_TYPE_TERMINATE",
-    "EVENT_TYPE_EVENT_TERMINATE",
-    "EVENT_TYPE_CLASS_CHANGED",
-    "EVENT_TYPE_SIGNAL",
-    "EVENT_TYPE_SUSPEND_FOR_GC"
-};
-static const char*
-et(const parrot_event* const e)
-{
-    return ev_names[e->type];
-}
-
-#else
-#  define edebug(x)
-#endif
-
-
-/* forward defs */
-
-/*
- * we have exactly one global event_queue
- * TODO task prio handling
- */
-static QUEUE *event_queue;
-#define TASK_PRIO 10
-
-/*
- * user accessible signals like SIGINT
- */
-#ifndef SIGINT
-#  define SIGINT -4711
-#endif
-#ifndef SIGHUP
-#  define SIGHUP -4712
-#endif
-
-/*
- * XXX need a configure test
- * should be sig_atomic_t
- */
-static int sig_int, sig_hup;
-
-/*
- * a pipe is used to send messages to the IO thread
- */
-static int pipe_fds[2];
-#define PIPE_READ_FD  pipe_fds[0]
-#define PIPE_WRITE_FD pipe_fds[1]
-
-/*
- * a structure to communicate with the io_thread
- */
-typedef struct io_thread_msg {
-    INTVAL command;
-    parrot_event *ev;
-} io_thread_msg;
-
-
-/*
-
-=back
-
-=head2 Signal Handling
-
-=over 4
-
-=item C<static void sig_handler(int signum)>
-
-Handle signal C<signum>.
-
-TODO - Only C<SIGHUP> is handled at the moment for testing
-
-=cut
-
-*/
-
-static void
-sig_handler(int signum)
-{
-    ASSERT_ARGS(sig_handler)
-    switch (signum) {
-      case SIGINT:
-        sig_int = 1;
-        break;
-      case SIGHUP:
-        sig_hup = 1;
-        break;
-      default:
-        break;
-    }
-}
-
-/*
-
-=item C<static void Parrot_sigaction(int sig, void (*handler(int)))>
-
-Signal handlers are common to all threads, signal block masks are
-specific, so we install one handler then block that signal and unblock
-it in the thread, that will receive that signal.
-
-=cut
-
-*/
-
-static void
-Parrot_sigaction(int sig, ARGIN(void (*handler)(int)))
-{
-    ASSERT_ARGS(Parrot_sigaction)
-#ifdef PARROT_HAS_SIGACTION
-    struct sigaction action;
-    sigset_t block_mask;
-
-    /* install handler */
-    action.sa_handler = handler;
-    sigemptyset(&action.sa_mask);
-    action.sa_flags = 0;
-    sigaction(sig, &action, NULL);
-
-    /* block that signal */
-    sigemptyset(&block_mask);
-    sigaddset(&block_mask, sig);
-    sigprocmask(SIG_BLOCK, &block_mask, NULL);
-#else
-    UNUSED(sig);
-    UNUSED(handler);
-#endif
-}
-
-
-/*
-
-=item C<static void Parrot_unblock_signal(int sig)>
-
-unblock a signal
-
-=cut
-
-*/
-
-static void
-Parrot_unblock_signal(int sig)
-{
-    ASSERT_ARGS(Parrot_unblock_signal)
-#ifdef PARROT_HAS_SIGACTION
-    sigset_t block_mask;
-
-    sigemptyset(&block_mask);
-    sigaddset(&block_mask, sig);
-    sigprocmask(SIG_UNBLOCK, &block_mask, NULL);
-#else
-    UNUSED(sig);
-#endif
-}
-
-
-/*
-
-=item C<void Parrot_init_signals(void)>
-
-Set up actions to handle signals.
-Only SIGHUP handled at the moment.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_init_signals(void)
-{
-    ASSERT_ARGS(Parrot_init_signals)
-    /*
-     * SIGFPE is architecture specific - some signal an error,
-     * some don't, so we have to use direct checks if we are dividing
-     * by zero.
-     */
-    Parrot_sigaction(SIGHUP, sig_handler);
-}
-
-/*
-
-=back
-
-=head2 Initialization
-
-=over 4
-
-=item C<static void init_events_first(PARROT_INTERP)>
-
-Init event system for first interpreter.
-
-=cut
-
-*/
-
-static void
-init_events_first(PARROT_INTERP)
-{
-    ASSERT_ARGS(init_events_first)
-    Parrot_thread    ev_handle;
-#ifndef WIN32
-    Parrot_thread    io_handle;
-#endif
-
-    /*
-     * be sure all init is done only once
-     * we could use pthread_once for that too
-     */
-    if (event_queue)
-        PANIC(interp, "event queue already exists - missing parent_interp?");
-    /*
-     * create event queue
-     */
-    event_queue = queue_init(TASK_PRIO);
-    /*
-     * we use a message pipe to send IO related stuff to the
-     * IO thread
-     */
-#ifndef WIN32
-    /*
-     * pipes on WIN32 don't support select
-     * s. p6i: "event.c - of signals and pipes"
-     */
-    if (pipe(pipe_fds))
-        Parrot_ex_throw_from_c_args(interp, NULL, 1, "Couldn't create message pipe");
-#endif
-    /*
-     * now set some sig handlers before any thread is started, so
-     * that all threads inherit the signal block mask
-     */
-#if INSTALL_EVENT_HANDLER
-    Parrot_init_signals();
-#endif
-    /*
-     * we start an event_handler thread
-     */
-    THREAD_CREATE_DETACHED(ev_handle, event_thread, event_queue);
-    /*
-     * and a signal and IO handler thread
-     */
-#ifndef WIN32
-    THREAD_CREATE_DETACHED(io_handle, io_thread, event_queue);
-#endif
-}
-
-/*
-
-=item C<static void init_events_all(PARROT_INTERP)>
-
-Init events for all interpreters.
-
-=cut
-
-*/
-
-static void
-init_events_all(PARROT_INTERP)
-{
-    ASSERT_ARGS(init_events_all)
-    /*
-     * create per interpreter task queue
-     */
-    interp->task_queue = queue_init(0);
-}
-
-/*
-
-=item C<void Parrot_init_events(PARROT_INTERP)>
-
-Initialize the event system.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_init_events(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_init_events)
-    if (!interp->parent_interpreter) {
-        /* add the very first interpreter to the list of interps. */
-        pt_add_to_interpreters(interp, NULL);
-        init_events_first(interp);
-    }
-    init_events_all(interp);
-}
-
-/*
-
-=back
-
-=head2 Event Handler Functions
-
-=over 4
-
-=item C<void Parrot_schedule_event(PARROT_INTERP, parrot_event* ev)>
-
-Create queue entry and insert event into task queue.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_schedule_event(PARROT_INTERP, ARGMOD(parrot_event* ev))
-{
-    ASSERT_ARGS(Parrot_schedule_event)
-    QUEUE_ENTRY * const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-    entry->next = NULL;
-    ev->interp  = interp;
-    entry->data = ev;
-    switch (ev->type) {
-      case EVENT_TYPE_TIMER:
-      case EVENT_TYPE_SLEEP:
-        entry->type = QUEUE_ENTRY_TYPE_TIMED_EVENT;
-        insert_entry(event_queue, entry);
-        break;
-      case EVENT_TYPE_CALL_BACK:
-      case EVENT_TYPE_SIGNAL:
-      case EVENT_TYPE_IO:
-        entry->type = QUEUE_ENTRY_TYPE_EVENT;
-        unshift_entry(event_queue, entry);
-        break;
-      default:
-        entry->type = QUEUE_ENTRY_TYPE_EVENT;
-        push_entry(event_queue, entry);
-        break;
-    }
-}
-
-/*
-
-=item C<static void schedule_signal_event(int signum)>
-
-create and schedule a signal event
-
-=cut
-
-*/
-
-static void
-schedule_signal_event(int signum)
-{
-    ASSERT_ARGS(schedule_signal_event)
-    parrot_event* const ev    = mem_internal_allocate_typed(parrot_event);
-    QUEUE_ENTRY * const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
-    entry->next  = NULL;
-    entry->type  = QUEUE_ENTRY_TYPE_EVENT;
-    ev->type     = EVENT_TYPE_SIGNAL;
-    ev->u.signal = signum;
-    entry->data  = ev;
-    /*
-     * deliver to all interpreters
-     */
-    Parrot_schedule_broadcast_qentry(entry);
-}
-
-/*
-
-=item C<void Parrot_new_timer_event(PARROT_INTERP, PMC *timer, FLOATVAL diff,
-FLOATVAL interval, int repeat, PMC *sub, parrot_event_type_enum typ)>
-
-Create a new timer event due at C<diff> from now, repeated at C<interval>
-and running the passed C<sub>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_timer_event(PARROT_INTERP, ARGIN_NULLOK(PMC *timer), FLOATVAL diff,
-        FLOATVAL interval, int repeat, ARGIN_NULLOK(PMC *sub), parrot_event_type_enum typ)
-{
-    ASSERT_ARGS(Parrot_new_timer_event)
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-
-    const FLOATVAL now = Parrot_floatval_time();
-
-    ev->type                   = typ;
-    ev->u.timer_event.timer    = timer;
-    ev->u.timer_event.abs_time = now + diff;
-    ev->u.timer_event.interval = interval;
-    ev->u.timer_event.repeat   = repeat;
-    ev->u.timer_event.sub      = sub;
-
-    if (repeat && FLOAT_IS_ZERO(interval))
-        ev->u.timer_event.interval = diff;
-
-    Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_new_cb_event(PARROT_INTERP, PMC *cbi, char *ext)>
-
-Prepare and schedule a callback event.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_cb_event(PARROT_INTERP, ARGIN(PMC *cbi), ARGIN(char *ext))
-{
-    ASSERT_ARGS(Parrot_new_cb_event)
-    parrot_event* const ev    = mem_internal_allocate_typed(parrot_event);
-    QUEUE_ENTRY*  const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
-    entry->next = NULL;
-    entry->data = ev;
-    ev->interp  = interp;
-    ev->type    = EVENT_TYPE_CALL_BACK;
-    ev->u.call_back.cbi           = cbi;
-    ev->u.call_back.external_data = ext;
-    Parrot_schedule_interp_qentry(interp, entry);
-}
-
-/*
-
-=item C<void Parrot_del_timer_event(PARROT_INTERP, const PMC *timer)>
-
-Deactivate the timer identified by C<timer>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_del_timer_event(PARROT_INTERP, ARGIN(const PMC *timer))
-{
-    ASSERT_ARGS(Parrot_del_timer_event)
-    QUEUE_ENTRY *entry;
-
-    LOCK(event_queue->queue_mutex);
-
-    for (entry = event_queue->head; entry; entry = entry->next) {
-        if (entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-
-            parrot_event * const event = (parrot_event *)entry->data;
-
-            if (event->interp == interp
-                    && event->u.timer_event.timer == timer) {
-                event->u.timer_event.interval = 0.0;
-                event->type = EVENT_TYPE_NONE;
-                break;
-            }
-        }
-    }
-    UNLOCK(event_queue->queue_mutex);
-}
-
-/*
-
-=item C<void Parrot_new_terminate_event(PARROT_INTERP)>
-
-Create a terminate event, interpreter will leave the run-loop when this
-event arrives.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_terminate_event(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_new_terminate_event)
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-    ev->type = EVENT_TYPE_TERMINATE;
-    Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_new_suspend_for_gc_event(PARROT_INTERP)>
-
-Create a suspend-for-GC event, interpreter will wait on a condition
-variable for GC to finish when the event arrives.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_suspend_for_gc_event(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_new_suspend_for_gc_event)
-    QUEUE_ENTRY *qe;
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-    ev->type = EVENT_TYPE_SUSPEND_FOR_GC;
-    qe = mem_internal_allocate_typed(QUEUE_ENTRY);
-    qe->next = NULL;
-    qe->data = ev;
-    qe->type = QUEUE_ENTRY_TYPE_EVENT;
-    /* we don't use schedule_event because we must modify its
-     * task queue immediately
-     */
-    Parrot_schedule_interp_qentry(interp, qe);
-}
-
-/*
-
-=item C<void Parrot_kill_event_loop(PARROT_INTERP)>
-
-Schedule event-loop terminate event. This shuts down the event thread.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_kill_event_loop(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_kill_event_loop)
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-    ev->type = EVENT_TYPE_EVENT_TERMINATE;
-    Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_schedule_interp_qentry(PARROT_INTERP, struct QUEUE_ENTRY
-*entry)>
-
-Put a queue entry into the interpreters task queue and enable event
-checking for the interpreter.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_schedule_interp_qentry(PARROT_INTERP, ARGIN(struct QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(Parrot_schedule_interp_qentry)
-    parrot_event * const event = (parrot_event *)entry->data;
-    /*
-     * sleep checks events when it awakes
-     */
-    edebug((stderr, "got entry - schedule_inter_qentry %s\n", et(event)));
-    if (event->type != EVENT_TYPE_SLEEP)
-        enable_event_checking(interp);
-    /*
-     * do push_entry last - this signales the queue condition so the
-     * interpreter might starting process that event immediately
-     *
-     * we should better use a priority for placing the event
-     * in front or at the end of the queue
-     */
-    switch (event->type) {
-      case EVENT_TYPE_CALL_BACK:
-      case EVENT_TYPE_SIGNAL:
-        unshift_entry(interp->task_queue, entry);
-        break;
-      default:
-        push_entry(interp->task_queue, entry);
-        break;
-    }
-}
-
-/*
-
-=item C<void Parrot_schedule_broadcast_qentry(struct QUEUE_ENTRY *entry)>
-
-Broadcast an event.
-
-=cut
-
-*/
-
-void
-Parrot_schedule_broadcast_qentry(ARGIN(struct QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(Parrot_schedule_broadcast_qentry)
-    parrot_event * const event = (parrot_event *)entry->data;
-
-    switch (event->type) {
-      case EVENT_TYPE_SIGNAL:
-        edebug((stderr, "broadcast signal\n"));
-        /*
-         * we don't have special signal handlers in usercode yet
-         * e.g.:
-         * install handler like exception handler *and*
-         * set a interpreter flag, that a handler exists
-         * we then could examine that flag (after LOCKing it)
-         * and dispatch the exception to all interpreters that
-         * handle it
-         * Finally, we send the first (main) interpreter that signal
-         *
-         * For now just send to all.
-         *
-         */
-        switch (event->u.signal) {
-          case SIGHUP:
-          case SIGINT:
-            {
-                if (n_interpreters) {
-                    size_t i;
-                    LOCK(interpreter_array_mutex);
-                    for (i = 1; i < n_interpreters; ++i) {
-                        Interp *interp;
-                        edebug((stderr, "deliver SIGINT to %d\n", i));
-                        interp = interpreter_array[i];
-                        if (interp)
-                            Parrot_schedule_interp_qentry(interp,
-                                        dup_entry(entry));
-                    }
-                    UNLOCK(interpreter_array_mutex);
-                }
-                Parrot_schedule_interp_qentry(interpreter_array[0], entry);
-                edebug((stderr, "deliver SIGINT to 0\n"));
-            }
-            break;
-          default:
-            mem_internal_free(entry);
-            mem_internal_free(event);
-        }
-        break;
-      default:
-        mem_internal_free(entry);
-        mem_internal_free(event);
-        exit_fatal(1, "Unknown event to broadcast");
-        break;
-    }
-}
-
-/*
-
-=back
-
-=head2 IO Thread Handling
-
-=over 4
-
-=cut
-
-*/
-
-#ifndef WIN32
-
-/*
-
-=item C<static void store_io_event(pending_io_events *ios, parrot_event *ev)>
-
-Stores an event in the event stack.  Allocates memory if necessary.
-
-=cut
-
-*/
-
-static void
-store_io_event(ARGMOD(pending_io_events *ios), ARGIN(parrot_event *ev))
-{
-    ASSERT_ARGS(store_io_event)
-    if (!ios->alloced) {
-        ios->alloced = 16;
-        ios->events  = mem_internal_allocate_n_zeroed_typed(ios->alloced, parrot_event *);
-    }
-    else if (ios->n >= ios->alloced) {
-        ios->events  = mem_internal_realloc_n_zeroed_typed(ios->events,
-                ios->alloced * 2, ios->alloced, parrot_event *);
-        ios->alloced *= 2;
-    }
-    ios->events[ios->n++] = ev;
-}
-
-/*
-
-=item C<static void io_thread_ready_rd(pending_io_events *ios, int ready_rd)>
-
-Takes a list of pending i/o events and a file descriptor.
-If the fd is ready to read, the event is removed from the
-"pending" list and moved to the "scheduled" task queue.
-
-=cut
-
-*/
-
-static void
-io_thread_ready_rd(ARGMOD(pending_io_events *ios), int ready_rd)
-{
-    ASSERT_ARGS(io_thread_ready_rd)
-    size_t i;
-
-    for (i = 0; i < ios->n; ++i) {
-        parrot_event * const ev  = ios->events[i];
-        PMC          * const pio = ev->u.io_event.pio;
-        const int            fd  = Parrot_io_getfd(ev->interp, pio);
-
-        if (fd == ready_rd) {
-            /* remove from event list */
-            --ios->n;
-
-            for (; i < ios->n; ++i)
-                ios->events[i] = ios->events[i+1];
-
-            Parrot_schedule_event(ev->interp, ev);
-            break;
-        }
-    }
-}
-
-/*
-
-=item C<static void* io_thread(void *data)>
-
-The IO thread uses select/poll to handle IO events and signals.
-
-It waits on input from the message pipe to insert file descriptors in
-the wait sets.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static void*
-io_thread(SHIM(void *data))
-{
-    ASSERT_ARGS(io_thread)
-    fd_set act_rfds, act_wfds;
-    int n_highest, i;
-    int  running = 1;
-    pending_io_events ios;
-
-    ios.n       = 0;
-    ios.alloced = 0;
-    ios.events  = 0;
-    /* remember pending io events */
-
-    FD_ZERO(&act_rfds);
-    FD_ZERO(&act_wfds);
-    /*
-     * Watch the reader end of the pipe for messages
-     */
-    FD_SET(PIPE_READ_FD, &act_rfds);
-    n_highest = PIPE_READ_FD + 1;
-    /*
-     * all signals that we shall handle here have to be unblocked
-     * in this and only in this thread
-     */
-    Parrot_unblock_signal(SIGHUP);
-    while (running) {
-        fd_set rfds = act_rfds;
-        fd_set wfds = act_wfds;
-        const int retval = select(n_highest, &rfds, &wfds, NULL, NULL);
-
-        switch (retval) {
-          case -1:
-            if (errno == EINTR) {
-                edebug((stderr, "select EINTR\n"));
-                if (sig_int) {
-                    edebug((stderr, "int arrived\n"));
-                    sig_int = 0;
-                    /*
-                     * signal the event thread
-                     */
-                    schedule_signal_event(SIGINT);
-                }
-                if (sig_hup) {
-                    edebug((stderr, "int arrived\n"));
-                    sig_hup = 0;
-                    /*
-                     * signal the event thread
-                     */
-                    schedule_signal_event(SIGHUP);
-                }
-
-            }
-            break;
-          case 0:     /* timeout - can't happen */
-            break;
-          default:
-            edebug((stderr, "IO ready\n"));
-            for (i = 0; i < n_highest; ++i) {
-                if (FD_ISSET(i, &rfds)) {
-                    if (i == PIPE_READ_FD) {
-                        io_thread_msg buf;
-                        /*
-                         * a command arrived
-                         */
-                        edebug((stderr, "msg arrived\n"));
-                        if (read(PIPE_READ_FD, &buf, sizeof (buf)) != sizeof (buf))
-                            exit_fatal(1,
-                                    "read error from msg pipe");
-                        switch (buf.command) {
-                          case IO_THR_MSG_TERMINATE:
-                            running = 0;
-                            break;
-                          case IO_THR_MSG_ADD_SELECT_RD:
-                            {
-                                PMC * const pio = buf.ev->u.io_event.pio;
-                                const int fd = Parrot_io_getfd(buf.ev->interp, pio);
-                                if (FD_ISSET(fd, &act_rfds)) {
-                                    mem_internal_free(buf.ev);
-                                    break;
-                                }
-                                FD_SET(fd, &act_rfds);
-                                if (fd >= n_highest)
-                                    n_highest = fd + 1;
-                                store_io_event(&ios, buf.ev);
-                            }
-                            break;
-                          default:
-                            /* TODO */
-                            exit_fatal(1, "unhandled msg in pipe");
-                            break;
-                        }
-
-                    }
-                    else {
-                        /*
-                         * one of the io_event fds is ready
-                         * remove from active set, as we don't
-                         * want to fire again during io_handler
-                         * invocation
-                         */
-                        FD_CLR(i, &act_rfds);
-                        io_thread_ready_rd(&ios, i);
-                    }
-                }
-            }
-            /* TODO check fds */
-            break;
-        }
-    }
-    edebug((stderr, "IO thread terminated\n"));
-    close(PIPE_READ_FD);
-    close(PIPE_WRITE_FD);
-    return NULL;
-}
-#endif
-
-/*
-
-=item C<static void stop_io_thread(void)>
-
-Tell the IO thread to stop.
-
-=cut
-
-*/
-
-static void
-stop_io_thread(void)
-{
-    ASSERT_ARGS(stop_io_thread)
-#ifndef WIN32
-    io_thread_msg buf;
-    /*
-     * tell IO thread to stop
-     */
-    memset(&buf, 0, sizeof (buf));
-    buf.command = IO_THR_MSG_TERMINATE;
-    if (write(PIPE_WRITE_FD, &buf, sizeof (buf)) != sizeof (buf))
-        exit_fatal(1, "msg pipe write failed");
-#endif
-}
-
-/*
-
-=item C<void Parrot_event_add_io_event(PARROT_INTERP, PMC *pio, PMC *sub, PMC
-*data, INTVAL which)>
-
-Create new i/o event.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_event_add_io_event(PARROT_INTERP,
-        ARGIN_NULLOK(PMC *pio), ARGIN_NULLOK(PMC *sub), ARGIN_NULLOK(PMC *data), INTVAL which)
-{
-    ASSERT_ARGS(Parrot_event_add_io_event)
-    io_thread_msg buf;
-    parrot_event * const event = mem_internal_allocate_typed(parrot_event);
-
-    event->type   = EVENT_TYPE_IO;
-    event->interp = interp;
-    /*
-     * TODO gc_register these PMCs as long as the event system
-     *      owns these 3
-     *      unregister, when event is passed to interp again
-     */
-    event->u.io_event.pio       = pio;
-    event->u.io_event.handler   = sub;
-    event->u.io_event.user_data = data;
-
-    buf.command = which;
-    buf.ev      = event;
-    /* XXX Why isn't this entire function inside an ifndef WIN32? */
-#ifndef WIN32
-    if (write(PIPE_WRITE_FD, &buf, sizeof (buf)) != sizeof (buf))
-        Parrot_ex_throw_from_c_args(interp, NULL, 1, "msg pipe write failed");
-#endif
-}
-
-
-/*
-
-=back
-
-=head2 Event Handler Thread Functions
-
-=over 4
-
-=item C<static QUEUE_ENTRY* dup_entry(const QUEUE_ENTRY *entry)>
-
-Duplicate queue entry.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY*
-dup_entry(ARGIN(const QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(dup_entry)
-    QUEUE_ENTRY * const new_entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
-    new_entry->next = NULL;
-    new_entry->type = entry->type;
-    new_entry->data = mem_internal_allocate_typed(parrot_event);
-
-    mem_sys_memcopy(new_entry->data, entry->data, sizeof (parrot_event));
-    return new_entry;
-}
-
-/*
-
-=item C<static QUEUE_ENTRY* dup_entry_interval(QUEUE_ENTRY *entry, FLOATVAL
-now)>
-
-Duplicate timed entry and add interval to C<abs_time>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY*
-dup_entry_interval(ARGIN(QUEUE_ENTRY *entry), FLOATVAL now)
-{
-    ASSERT_ARGS(dup_entry_interval)
-    QUEUE_ENTRY  * const new_entry = dup_entry(entry);
-    parrot_event * const event     = (parrot_event *)new_entry->data;
-
-    event->u.timer_event.abs_time  = now + event->u.timer_event.interval;
-
-    return new_entry;
-}
-
-/*
-
-=item C<static int process_events(QUEUE *event_q)>
-
-Do something, when an event arrived caller has locked the mutex returns
-0 if event thread terminates.
-
-=cut
-
-*/
-
-static int
-process_events(ARGMOD(QUEUE *event_q))
-{
-    ASSERT_ARGS(process_events)
-    FLOATVAL     now;
-    QUEUE_ENTRY *entry;
-
-    while ((entry = peek_entry(event_q)) != NULL) {
-        /*
-         * one or more entries arrived - we hold the mutex again
-         * so we have to use the nonsyc_pop_entry to pop off event entries
-         */
-        parrot_event *event = NULL;
-
-        switch (entry->type) {
-          case QUEUE_ENTRY_TYPE_EVENT:
-            entry = nosync_pop_entry(event_q);
-            event = (parrot_event *)entry->data;
-            break;
-
-          case QUEUE_ENTRY_TYPE_TIMED_EVENT:
-            event = (parrot_event *)entry->data;
-            now   = Parrot_floatval_time();
-
-            /*
-             * if the timer_event isn't due yet, ignore the event
-             * (we were signalled on insert of the event)
-             * wait until we get at it again when time has elapsed
-             */
-            if (now < event->u.timer_event.abs_time)
-                return 1;
-            entry = nosync_pop_entry(event_q);
-
-            /* if event is repeated dup and reinsert it */
-
-            if (event->u.timer_event.interval) {
-                if (event->u.timer_event.repeat) {
-                    if (event->u.timer_event.repeat != -1)
-                        event->u.timer_event.repeat--;
-                    nosync_insert_entry(event_q,
-                                dup_entry_interval(entry, now));
-                }
-            }
-            break;
-          default:
-            exit_fatal(1, "Unknown queue entry");
-        }
-        PARROT_ASSERT(event);
-        if (event->type == EVENT_TYPE_NONE) {
-            mem_internal_free(entry);
-            mem_internal_free(event);
-            continue;
-        }
-        else if (event->type == EVENT_TYPE_EVENT_TERMINATE) {
-            mem_internal_free(entry);
-            mem_internal_free(event);
-
-            return 0;
-        }
-        /*
-         * now insert entry in interpreter task queue
-         */
-        if (event->interp) {
-            Parrot_schedule_interp_qentry(event->interp, entry);
-        }
-        else {
-            Parrot_schedule_broadcast_qentry(entry);
-        }
-    } /* while events */
-    return 1;
-}
-
-/*
-
-=item C<static void* event_thread(void *data)>
-
-The event thread is started by the first interpreter. It handles all
-events for all interpreters.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static void*
-event_thread(ARGMOD(void *data))
-{
-    ASSERT_ARGS(event_thread)
-    QUEUE * const event_q = (QUEUE *) data;
-    int running = 1;
-
-    LOCK(event_q->queue_mutex);
-    /*
-     * we might already have an event in the queue
-     */
-    if (peek_entry(event_q))
-        running = process_events(event_q);
-    while (running) {
-        QUEUE_ENTRY * const entry = peek_entry(event_q);
-
-        if (!entry) {
-            /* wait infinite until entry arrives */
-            queue_wait(event_q);
-        }
-        else if (entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-            /* do a_timedwait for entry */
-            struct timespec abs_time;
-            parrot_event * const event = (parrot_event*)entry->data;
-            const FLOATVAL when = event->u.timer_event.abs_time;
-
-            abs_time.tv_sec  = (time_t) when;
-            abs_time.tv_nsec = (long)((when - abs_time.tv_sec)*1000.0f)
-                *1000L*1000L;
-            queue_timedwait(event_q, &abs_time);
-        }
-        else {
-            /* we shouldn't get here probably
-             */
-            exit_fatal(1, "Spurious event");
-
-        }
-        /*
-         * one or more entries arrived - we hold the mutex again
-         * so we have to use the nonsync_pop_entry to pop off event entries
-         */
-        running = process_events(event_q);
-    } /* event loop */
-    /*
-     * the main interpreter is dying
-     * TODO empty the queue
-     */
-    UNLOCK(event_q->queue_mutex);
-    queue_destroy(event_q);
-    stop_io_thread();
-    edebug((stderr, "event thread stopped\n"));
-    return NULL;
-}
-
-/*
-
-=back
-
-=head2 Sleep Handling
-
-=over 4
-
-=item C<static opcode_t * wait_for_wakeup(PARROT_INTERP, opcode_t *next)>
-
-Sleep on the event queue condition. If an event arrives, the event
-is processed. Terminate the loop if sleeping is finished.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-wait_for_wakeup(PARROT_INTERP, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(wait_for_wakeup)
-    QUEUE * const tq = interp->task_queue;
-
-    interp->sleeping = 1;
-
-    /*
-     * event handler like callbacks or timers are run as normal code
-     * so inside such an event handler function, another event might get
-     * handled, which is good (higher priority events can interrupt
-     * other event handler).  OTOH we must ensure that all state changes
-     * are done in do_event and we should probably suspend nested
-     * event handlers sometimes
-     *
-     * FIXME: the same is true for the *next param:
-     *        get rid of that, instead mangle the resume flags
-     *        and offset to stop the runloop
-     *
-     */
-
-    while (interp->sleeping) {
-        QUEUE_ENTRY  * const entry = wait_for_entry(tq);
-        parrot_event * const event = (parrot_event*)entry->data;
-
-        mem_internal_free(entry);
-        edebug((stderr, "got ev %s head : %p\n", et(event), tq->head));
-        next = do_event(interp, event, next);
-    }
-
-    edebug((stderr, "woke up\n"));
-    return next;
-}
-
-/*
-
-=item C<opcode_t * Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, opcode_t
-*next)>
-
-Go to sleep. This is called from the C<sleep> opcode.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(Parrot_sleep_on_event)
-#ifdef PARROT_HAS_THREADS
-
-    if (interp->sleeping)
-        fprintf(stderr, "nested sleep might not work\n");
-    /*
-     * place the opcode_t* next arg in the event data, so that
-     * we can identify this event in wakeup
-     */
-    Parrot_new_timer_event(interp, (PMC *) next, t, 0.0, 0,
-        NULL, EVENT_TYPE_SLEEP);
-    next = wait_for_wakeup(interp, next);
-#else
-    /*
-     * TODO check for nanosleep or such
-     */
-    Parrot_sleep((UINTVAL) ceil(t));
-#endif
-    return next;
-}
-
-/*
-
-=back
-
-=head2 Event Handling for Run-Loops
-
-=over 4
-
-=item C<opcode_t * Parrot_do_check_events(PARROT_INTERP, opcode_t *next)>
-
-Explicitly C<sync> called by the check_event opcode from run loops.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_do_check_events(PARROT_INTERP, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(Parrot_do_check_events)
-    if (peek_entry(interp->task_queue))
-        return Parrot_do_handle_events(interp, 0, next);
-
-    return next;
-}
-
-/*
-
-=item C<static void event_to_exception(PARROT_INTERP, const parrot_event*
-event)>
-
-Convert event to exception and throw it.
-
-=cut
-
-*/
-
-static void
-event_to_exception(PARROT_INTERP, ARGIN(const parrot_event* event))
-{
-    ASSERT_ARGS(event_to_exception)
-    const int exit_code = -event->u.signal;
-
-    switch (event->u.signal) {
-      case SIGINT:
-      case SIGHUP:
-        /*
-         * SIGINT is silent, if no exception handler is
-         * installed: set severity to EXCEPT_exit
-         */
-        {
-            STRING * const message = CONST_STRING(interp, "Caught signal.");
-            PMC           *exception = Parrot_ex_build_exception(interp,
-                                        EXCEPT_exit, exit_code, message);
-
-            Parrot_ex_throw_from_c(interp, exception);
-        }
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL, exit_code,
-                    "Caught signal.");
-        break;
-    }
-}
-
-/*
-
-=item C<static opcode_t * do_event(PARROT_INTERP, parrot_event* event, opcode_t
-*next)>
-
-Run user code or such.  The C<event> argument is freed after execution.
-
-TODO: Instrument with splint args so splint knows event gets released.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-do_event(PARROT_INTERP, ARGIN(parrot_event* event), ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(do_event)
-    edebug((stderr, "do_event %s\n", et(event)));
-    switch (event->type) {
-      case EVENT_TYPE_TERMINATE:
-        next = NULL;        /* this will terminate the run loop */
-        break;
-      case EVENT_TYPE_SIGNAL:
-        interp->sleeping = 0;
-        /* generate exception */
-        event_to_exception(interp, event);
-        /* not reached - will longjmp */
-        break;
-      case EVENT_TYPE_TIMER:
-        /* run ops, save registers */
-        Parrot_pcc_invoke_sub_from_c_args(interp,
-                    event->u.timer_event.sub, "->");
-        break;
-      case EVENT_TYPE_CALL_BACK:
-        edebug((stderr, "starting user cb\n"));
-        Parrot_run_callback(interp, event->u.call_back.cbi,
-                    event->u.call_back.external_data);
-        break;
-      case EVENT_TYPE_IO:
-        edebug((stderr, "starting io handler\n"));
-        Parrot_pcc_invoke_sub_from_c_args(interp,
-                    event->u.io_event.handler,
-                    "PP->",
-                    event->u.io_event.pio,
-                    event->u.io_event.user_data);
-        break;
-      case EVENT_TYPE_SLEEP:
-        interp->sleeping = 0;
-        break;
-      case EVENT_TYPE_SUSPEND_FOR_GC:
-        edebug((stderr, "suspend for gc\n"));
-        pt_suspend_self_for_gc(interp);
-        break;
-      default:
-        fprintf(stderr, "Unhandled event type %d\n", (int)event->type);
-        break;
-    }
-    mem_internal_free(event);
-    return next;
-}
-
-/*
-
-=item C<opcode_t * Parrot_do_handle_events(PARROT_INTERP, int restore, opcode_t
-*next)>
-
-Called by the C<check_event__> opcode from run loops or from above. When
-called from the C<check_events__> opcode, we have to restore the
-C<op_func_table>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_do_handle_events(PARROT_INTERP, int restore, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(Parrot_do_handle_events)
-    QUEUE * const tq = interp->task_queue;
-
-    if (restore)
-        disable_event_checking(interp);
-
-    if (!peek_entry(tq))
-        return next;
-
-    while (peek_entry(tq)) {
-        QUEUE_ENTRY  * const entry = pop_entry(tq);
-        parrot_event * const event = (parrot_event*)entry->data;
-
-        mem_internal_free(entry);
-        next = do_event(interp, event, next);
-    }
-
-    return next;
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/events.h> and F<docs/dev/events.pod>.
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/pcc_hackathon_6Mar10/src/extend.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/extend.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/extend.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1366,7 +1366,6 @@
         (char *) NULL, 0);
     Parrot_PMC sub = Parrot_pmc_new(interp, enum_class_NCI);
     VTABLE_set_pointer_keyed_str(interp, sub, sig, F2DPTR(func));
-    PObj_get_FLAGS(sub) |= PObj_private1_FLAG;
     return sub;
 }
 

Modified: branches/pcc_hackathon_6Mar10/src/frame_builder.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/frame_builder.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/frame_builder.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -39,7 +39,7 @@
 */
 
 void
-Parrot_jit_free_buffer(PARROT_INTERP, void *ptr, void *priv)
+Parrot_jit_free_buffer(SHIM_INTERP, void *ptr, void *priv)
 {
     const struct jit_buffer_private_data * const jit = (struct jit_buffer_private_data*)priv;
     mem_free_executable(ptr, jit->size);
@@ -312,6 +312,8 @@
     int temp_calls_offset  = args_offset - 16;
     int total_stack_needed = -temp_calls_offset;
 
+    UNUSED(pmc_nci);
+
     /*
      * ESP
      * 0-15, 16 bytes for utility calls

Modified: branches/pcc_hackathon_6Mar10/src/gc/api.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/api.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/api.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -11,7 +11,7 @@
 This file implements the external-facing API for Parrot's garbage collector.
 The collector itself is composed of various interchangable cores that each
 may operate very differently internally. The functions in this file can be used
-throughtout Parrot without having to be concerned about the internal operations
+throughout Parrot without having to be concerned about the internal operations
 of the GC. This is documented in PDD 9 with supplementary notes in
 F<docs/memory_internals.pod>.
 
@@ -99,29 +99,6 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void fix_pmc_syncs(
-    ARGMOD(Interp *dest_interp),
-    ARGIN(Fixed_Size_Pool *pool))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*dest_interp);
-
-static void Parrot_gc_merge_buffer_pools(PARROT_INTERP,
-    ARGMOD(Fixed_Size_Pool *dest),
-    ARGMOD(Fixed_Size_Pool *source))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*dest)
-        FUNC_MODIFIES(*source);
-
-#define ASSERT_ARGS_fix_pmc_syncs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(dest_interp) \
-    , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_Parrot_gc_merge_buffer_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(dest) \
-    , PARROT_ASSERT_ARG(source))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 

Modified: branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -37,22 +37,6 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void gc_inf_add_free_object(SHIM_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
-    ARGMOD(Fixed_Size_Pool *pool),
-    ARGIN(void *to_add))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*pool);
-
-static void gc_inf_alloc_objects(SHIM_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
-    ARGMOD(Fixed_Size_Pool *pool))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*pool);
-
 static void gc_inf_allocate_buffer_storage(PARROT_INTERP,
     ARGMOD(Buffer *buffer),
     size_t size)
@@ -61,7 +45,8 @@
         FUNC_MODIFIES(*buffer);
 
 PARROT_CAN_RETURN_NULL
-static Buffer* gc_inf_allocate_bufferlike_header(PARROT_INTERP, size_t size)
+static Buffer* gc_inf_allocate_bufferlike_header(PARROT_INTERP,
+    SHIM(size_t size))
         __attribute__nonnull__(1);
 
 PARROT_CAN_RETURN_NULL
@@ -75,11 +60,12 @@
         FUNC_MODIFIES(*pmc);
 
 PARROT_CAN_RETURN_NULL
-static PMC* gc_inf_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
+static PMC* gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
         __attribute__nonnull__(1);
 
 PARROT_CAN_RETURN_NULL
-static STRING* gc_inf_allocate_string_header(PARROT_INTERP, UINTVAL flags)
+static STRING* gc_inf_allocate_string_header(PARROT_INTERP,
+    SHIM(UINTVAL flags))
         __attribute__nonnull__(1);
 
 static void gc_inf_allocate_string_storage(PARROT_INTERP,
@@ -94,11 +80,11 @@
 
 static void gc_inf_free_bufferlike_header(PARROT_INTERP,
     ARGIN_NULLOK(Buffer *b),
-    size_t size)
+    SHIM(size_t size))
         __attribute__nonnull__(1);
 
 static void gc_inf_free_fixed_size_storage(PARROT_INTERP,
-    size_t size,
+    SHIM(size_t size),
     ARGMOD(void *data))
         __attribute__nonnull__(1)
         __attribute__nonnull__(3)
@@ -116,29 +102,10 @@
     ARGIN_NULLOK(STRING *s))
         __attribute__nonnull__(1);
 
-PARROT_CANNOT_RETURN_NULL
-static void * gc_inf_get_free_object(SHIM_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
-    ARGMOD(Fixed_Size_Pool *pool))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*pool);
-
-static size_t gc_inf_get_gc_info(PARROT_INTERP, Interpinfo_enum what)
+static size_t gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
         __attribute__nonnull__(1);
 
 static void gc_inf_mark_and_sweep(SHIM_INTERP, UINTVAL flags);
-static void gc_inf_more_traceable_objects(SHIM_INTERP,
-    ARGIN(Memory_Pools *mem_pools),
-    ARGMOD(Fixed_Size_Pool *pool))
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*pool);
-
-static void gc_inf_pool_init(SHIM_INTERP, ARGMOD(Fixed_Size_Pool *pool))
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pool);
-
 static void gc_inf_reallocate_buffer_storage(PARROT_INTERP,
     ARGMOD(Buffer *buffer),
     size_t size)
@@ -153,13 +120,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*str);
 
-#define ASSERT_ARGS_gc_inf_add_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool) \
-    , PARROT_ASSERT_ARG(to_add))
-#define ASSERT_ARGS_gc_inf_alloc_objects __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_gc_inf_allocate_buffer_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -197,17 +157,9 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_inf_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_get_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_gc_inf_get_gc_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_gc_inf_mark_and_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_gc_inf_more_traceable_objects __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(mem_pools) \
-    , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_gc_inf_pool_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(pool))
 #define ASSERT_ARGS_gc_inf_reallocate_buffer_storage \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -251,144 +203,6 @@
 
 /*
 
-=item C<static void gc_inf_add_free_object(PARROT_INTERP, Memory_Pools
-*mem_pools, Fixed_Size_Pool *pool, void *to_add)>
-
-Manually frees a chunk of memory. Normally this would return the memory
-to the free list of the pool, but in this case we just return it to the
-OS.
-
-This function is called from places like C<Parrot_gc_free_pmc_header> and
-related manual freeing functions. Some cores will also use it internally to
-add items to the freelist from a freshly allocated arena.
-
-=cut
-
-*/
-
-static void
-gc_inf_add_free_object(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
-        ARGMOD(Fixed_Size_Pool *pool),
-        ARGIN(void *to_add))
-{
-    ASSERT_ARGS(gc_inf_add_free_object)
-    if (to_add)
-        free(to_add);
-}
-
-/*
-
-=item C<static void * gc_inf_get_free_object(PARROT_INTERP, Memory_Pools
-*mem_pools, Fixed_Size_Pool *pool)>
-
-Gets a new object from the pool. Each pool specifies an object size in
-C<pool->object_size> so we can use that number to make the allocation. For
-GCs that manage their own memory through the use of arenas or similar
-structures, we can use this basic algorithm here:
-
- 1) Check if we have any items on the free list and allocate one from there
-    if so.
- 2) Do a GC run to try and free up new items, and allocate a newly freed
-    item if one becomes available
- 3) Allocate a new arena from the OS and allocate a new item from there.
-
-This function is called from GC API functions like
-C<Parrot_Gc_get_new_pmc_header>
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static void *
-gc_inf_get_free_object(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
-        ARGMOD(Fixed_Size_Pool *pool))
-{
-    ASSERT_ARGS(gc_inf_get_free_object)
-    return calloc(pool->object_size, 1);
-}
-
-/*
-
-=item C<static void gc_inf_alloc_objects(PARROT_INTERP, Memory_Pools *mem_pools,
-Fixed_Size_Pool *pool)>
-
-Allocates a new arena of objects from the system. This function is only
-really used internally by the core, the API functions don't need to call
-it directly. However, this function is necessary because we may have
-different behaviors for certain pools, so we can't allocate for all of them
-in the same way. We will need to have a new "alloc_objects" function
-for each special case pool.
-
-=cut
-
-*/
-
-static void
-gc_inf_alloc_objects(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
-        ARGMOD(Fixed_Size_Pool *pool))
-{
-    ASSERT_ARGS(gc_inf_alloc_objects)
-    UNUSED(pool);
-}
-
-/*
-
-=item C<static void gc_inf_more_traceable_objects(PARROT_INTERP, Memory_Pools
-*mem_pools, Fixed_Size_Pool *pool)>
-
-Would normally try to find new traceable objects by first running a GC sweep
-and then allocating a new arena from the system. Neither of these are
-necessary in the infinite memory collector.
-
-This function is only used internally to the core, and is not called directly
-from the GC API. Different pools may have special requirements so multiple
-"more_traceable_objects" functions may need to be written and used.
-
-=cut
-
-*/
-
-static void
-gc_inf_more_traceable_objects(SHIM_INTERP,
-        ARGIN(Memory_Pools *mem_pools),
-        ARGMOD(Fixed_Size_Pool *pool))
-{
-    ASSERT_ARGS(gc_inf_more_traceable_objects)
-    UNUSED(pool);
-}
-
-/*
-
-=item C<static void gc_inf_pool_init(PARROT_INTERP, Fixed_Size_Pool *pool)>
-
-Initializes the function pointers in a new pool. When a new pool is created
-we assign several function pointers to it for managing memory in the pool.
-In this way we can treat different pools differently if they have special
-management needs. In general all PObj-like pools are treated the same.
-
-This function is mostly called from the function C<initialize_fixed_size_pools>
-in F<src/gc/mark_sweep.c> at Parrot startup.
-
-=cut
-
-*/
-
-static void
-gc_inf_pool_init(SHIM_INTERP, ARGMOD(Fixed_Size_Pool *pool))
-{
-    ASSERT_ARGS(gc_inf_pool_init)
-    pool->add_free_object = gc_inf_add_free_object;
-    pool->get_free_object = gc_inf_get_free_object;
-    pool->alloc_objects   = gc_inf_alloc_objects;
-    pool->more_objects    = gc_inf_more_traceable_objects;
-}
-
-/*
-
 =item C<static void gc_inf_compact_memory_pool(PARROT_INTERP)>
 
 Stub for compacting memory pools.
@@ -447,7 +261,7 @@
 
 PARROT_CAN_RETURN_NULL
 static PMC*
-gc_inf_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
+gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(gc_inf_allocate_pmc_header)
     return (PMC*)calloc(sizeof (PMC), 1);
@@ -463,7 +277,7 @@
 
 PARROT_CAN_RETURN_NULL
 static STRING*
-gc_inf_allocate_string_header(PARROT_INTERP, UINTVAL flags)
+gc_inf_allocate_string_header(PARROT_INTERP, SHIM(UINTVAL flags))
 {
     ASSERT_ARGS(gc_inf_allocate_string_header)
     return (STRING*)calloc(sizeof (STRING), 1);
@@ -479,14 +293,14 @@
 
 PARROT_CAN_RETURN_NULL
 static Buffer*
-gc_inf_allocate_bufferlike_header(PARROT_INTERP, size_t size)
+gc_inf_allocate_bufferlike_header(PARROT_INTERP, SHIM(size_t size))
 {
     ASSERT_ARGS(gc_inf_allocate_bufferlike_header)
     return (Buffer*)calloc(sizeof (Buffer), 1);
 }
 
 static void
-gc_inf_free_bufferlike_header(PARROT_INTERP, ARGIN_NULLOK(Buffer *b), size_t size)
+gc_inf_free_bufferlike_header(PARROT_INTERP, ARGIN_NULLOK(Buffer *b), SHIM(size_t size))
 {
     ASSERT_ARGS(gc_inf_free_bufferlike_header)
     if (b)
@@ -582,7 +396,7 @@
 }
 
 static void
-gc_inf_free_fixed_size_storage(PARROT_INTERP, size_t size, ARGMOD(void *data))
+gc_inf_free_fixed_size_storage(PARROT_INTERP, SHIM(size_t size), ARGMOD(void *data))
 {
     ASSERT_ARGS(gc_inf_free_fixed_size_storage)
     if (data)
@@ -599,7 +413,7 @@
 
 */
 static size_t
-gc_inf_get_gc_info(PARROT_INTERP, Interpinfo_enum what)
+gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
 {
     ASSERT_ARGS(gc_inf_get_gc_info)
     return 0;

Modified: branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -195,7 +195,7 @@
 static int gc_ms_sweep_cb(PARROT_INTERP,
     ARGIN(Memory_Pools *mem_pools),
     ARGMOD(Fixed_Size_Pool *pool),
-    int flag,
+    SHIM(int flag),
     ARGMOD(void *arg))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -1093,7 +1093,6 @@
 {
     ASSERT_ARGS(gc_ms_free_fixed_size_storage)
 
-    const size_t item_size = size < sizeof (void *) ? sizeof (void *) : size;
     const size_t idx   = size - sizeof (void *);
     PMC_Attribute_Pool ** const pools = interp->mem_pools->attrib_pools;
     gc_ms_free_attributes_from_pool(interp, pools[idx], data);
@@ -1231,7 +1230,7 @@
 gc_ms_sweep_cb(PARROT_INTERP,
         ARGIN(Memory_Pools *mem_pools),
         ARGMOD(Fixed_Size_Pool *pool),
-        int flag, ARGMOD(void *arg))
+        SHIM(int flag), ARGMOD(void *arg))
 {
     ASSERT_ARGS(gc_ms_sweep_cb)
     int * const total_free = (int *) arg;

Modified: branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -41,12 +41,6 @@
         FUNC_MODIFIES(*pool)
         FUNC_MODIFIES(*b);
 
-static void free_buffer_malloc(SHIM_INTERP,
-    SHIM(Fixed_Size_Pool *pool),
-    ARGMOD(Buffer *b))
-        __attribute__nonnull__(3)
-        FUNC_MODIFIES(*b);
-
 static void free_pmc_in_pool(PARROT_INTERP,
     ARGIN(Memory_Pools *mem_pools),
     SHIM(Fixed_Size_Pool *pool),
@@ -98,8 +92,6 @@
        PARROT_ASSERT_ARG(mem_pools) \
     , PARROT_ASSERT_ARG(pool) \
     , PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_free_buffer_malloc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_free_pmc_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(mem_pools) \
@@ -287,8 +279,6 @@
     gc_object_fn_type   gc_object   = pool->gc_object;
     UINTVAL             total_used  = 0;
     const UINTVAL       object_size = pool->object_size;
-    UINTVAL             i;
-
 
     /* Run through all the PObj header pools and mark */
     for (cur_arena = pool->last_Arena; cur_arena; cur_arena = cur_arena->prev) {
@@ -472,7 +462,6 @@
         ARGMOD(Fixed_Size_Arena *arena))
 {
     ASSERT_ARGS(Parrot_add_to_free_list)
-    UINTVAL  i;
     void    *object;
     const UINTVAL num_objects = pool->objects_per_alloc;
 
@@ -708,42 +697,6 @@
 
 /*
 
-=item C<static void free_buffer_malloc(PARROT_INTERP, Fixed_Size_Pool *pool,
-Buffer *b)>
-
-Frees the given buffer, returning the storage space to the operating system
-and removing it from Parrot's memory management system. If the buffer is COW,
-The buffer is not freed if the reference count is greater then 1.
-
-=cut
-
-*/
-
-static void
-free_buffer_malloc(SHIM_INTERP, SHIM(Fixed_Size_Pool *pool),
-        ARGMOD(Buffer *b))
-{
-    ASSERT_ARGS(free_buffer_malloc)
-    /* free allocated space at (int *)bufstart - 1, but not if it used COW or is
-     * external */
-    Buffer_buflen(b) = 0;
-
-    if (!Buffer_bufstart(b) || PObj_is_external_or_free_TESTALL(b))
-        return;
-
-    if (PObj_COW_TEST(b)) {
-        INTVAL * const refcount = Buffer_bufrefcountptr(b);
-
-        if (--(*refcount) == 0) {
-            mem_sys_free(refcount); /* the actual bufstart */
-        }
-    }
-    else
-        mem_sys_free(Buffer_bufrefcountptr(b));
-}
-
-/*
-
 =item C<static void free_buffer(PARROT_INTERP, Memory_Pools *mem_pools,
 Fixed_Size_Pool *pool, Buffer *b)>
 
@@ -1035,9 +988,8 @@
 Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool *pool))
 {
     ASSERT_ARGS(Parrot_gc_allocate_new_attributes_arena)
-    PMC_Attribute_Free_List *list, *next, *first;
+    PMC_Attribute_Free_List *next;
 
-    size_t       i;
     const size_t num_items  = pool->objects_per_alloc;
     const size_t item_size  = pool->attr_size;
     const size_t item_space = item_size * num_items;

Modified: branches/pcc_hackathon_6Mar10/src/global.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/global.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/global.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -813,7 +813,8 @@
         store_sub_in_multi(interp, sub_pmc, ns);
 
     /* store other subs (as long as they're not :anon) */
-    else if (!(PObj_get_FLAGS(sub_pmc) & SUB_FLAG_PF_ANON)) {
+    else if (!(PObj_get_FLAGS(sub_pmc) & SUB_FLAG_PF_ANON)
+        || sub->vtable_index != -1) {
         STRING * const ns_entry_name = sub->ns_entry_name;
         PMC    * const nsname        = sub->namespace_name;
 

Modified: branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -159,7 +159,6 @@
 {
     ASSERT_ARGS(verify_CD)
     PARROT_INTERP = NULL;
-    size_t i;
     PMC    *interp_pmc;
     STRING *sc;
 

Modified: branches/pcc_hackathon_6Mar10/src/interp/inter_create.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/interp/inter_create.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/interp/inter_create.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -118,7 +118,6 @@
 allocate_interpreter(ARGIN_NULLOK(Interp *parent), INTVAL flags)
 {
     ASSERT_ARGS(allocate_interpreter)
-    int stacktop;
     Interp *interp;
 
     /* Get an empty interpreter from system memory */

Modified: branches/pcc_hackathon_6Mar10/src/io/buffer.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/io/buffer.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/io/buffer.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -357,9 +357,12 @@
         }
 
         got = Parrot_io_fill_readbuf(interp, filehandle);
-        len = (len < got)
-            ? len
-            : (got > 0) ? got : 0;
+
+        /* got is never < 0, but C's type system can't tell */
+        if (got < 0)
+            got = 0;
+
+        len = (len < got) ? len : got;
     }
 
     /* read from the read_buffer */

Modified: branches/pcc_hackathon_6Mar10/src/io/unix.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/io/unix.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/io/unix.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -181,17 +181,19 @@
          */
         if ((oflags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) {
             close(fd);
-            Parrot_str_free_cstring(spath); /* returning before C string freed */
+
+            /* returning before C string freed */
+            Parrot_str_free_cstring(spath);
             return PMCNULL;
         }
-        /*
-         * Check for truncate?
-         */
+
+        /* Check for truncate?  */
         if (oflags & O_TRUNC) {
             int tfd;
             while ((tfd = creat(spath, PIO_DEFAULTMODE)) < 0 && errno == EINTR)
                 errno = 0;
-            close(tfd);
+            if (tfd > 0)
+                close(tfd);
         }
     }
     else if (oflags & O_CREAT) {
@@ -199,10 +201,10 @@
         while ((fd = creat(spath, PIO_DEFAULTMODE)) < 0 && errno == EINTR)
             errno = 0;
         if (!(oflags & O_WRONLY)) {
-            close(fd);
-            /*
-             * File created, reopen with read+write
-             */
+            if (fd > 0)
+                close(fd);
+
+            /* File created, reopen with read+write */
             while ((fd = open(spath, oflags & (O_WRONLY | O_RDWR),
                               DEFAULT_OPEN_MODE)) < 0 && errno == EINTR)
                 errno = 0;

Modified: branches/pcc_hackathon_6Mar10/src/main.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/main.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/main.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -132,11 +132,11 @@
         PMC *env = Parrot_pmc_new(interp, enum_class_Env);
         STRING *path = VTABLE_get_string_keyed_str(interp, env,
                 Parrot_str_new_constant(interp, "PARROT_LIBRARY"));
-        if (!STRING_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
+        if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
             Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_LIBRARY);
         path = VTABLE_get_string_keyed_str(interp, env,
                 Parrot_str_new_constant(interp, "PARROT_INCLUDE"));
-        if (!STRING_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
+        if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
             Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_INCLUDE);
     }
 
@@ -405,6 +405,13 @@
             }
             break;
         }
+        else if (STREQ(arg, "--hash-seed")) {
+            ++pos;
+            arg = argv[pos];
+            if (is_all_hex_digits(arg)) {
+                interp->hash_seed = strtoul(arg, NULL, 16);
+            }
+        }
         ++pos;
     }
 }
@@ -496,11 +503,6 @@
             else
                 SET_DEBUG(PARROT_MEM_STAT_DEBUG_FLAG);
             break;
-          case 'H':
-            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
-                interp->hash_seed = strtoul(opt.opt_arg, NULL, 16);
-            }
-            break;
 
           case '.':  /* Give Windows Parrot hackers an opportunity to
                       * attach a debuggger. */
@@ -510,6 +512,9 @@
             help();
             exit(EXIT_FAILURE);
             break;
+          case 'H':
+            /* handled in parseflags_minimal */
+            break;
           case OPT_HELP_DEBUG:
             help_debug();
             exit(EXIT_FAILURE);

Modified: branches/pcc_hackathon_6Mar10/src/multidispatch.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/multidispatch.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/multidispatch.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2003-2009, Parrot Foundation.
+Copyright (C) 2003-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -51,7 +51,6 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static INTVAL distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b);
 static void mmd_add_multi_global(PARROT_INTERP,
     ARGIN(STRING *sub_name),
     ARGIN(PMC *sub_obj))
@@ -129,13 +128,6 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-static int mmd_search_local(PARROT_INTERP,
-    ARGIN(STRING *name),
-    ARGIN(PMC *candidates))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 static PMC * Parrot_mmd_get_cached_multi_sig(PARROT_INTERP,
@@ -151,12 +143,6 @@
         __attribute__nonnull__(3);
 
 PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static PMC* Parrot_mmd_search_scopes(PARROT_INTERP, ARGIN(STRING *meth))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
 static PMC * Parrot_mmd_sort_candidates(PARROT_INTERP,
     ARGIN(PMC *arg_tuple),
     ARGIN(PMC *cl))
@@ -164,7 +150,6 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
-#define ASSERT_ARGS_distance_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_mmd_add_multi_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub_name) \
@@ -206,10 +191,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name) \
     , PARROT_ASSERT_ARG(cl))
-#define ASSERT_ARGS_mmd_search_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(name) \
-    , PARROT_ASSERT_ARG(candidates))
 #define ASSERT_ARGS_Parrot_mmd_get_cached_multi_sig \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -218,9 +199,6 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc) \
     , PARROT_ASSERT_ARG(cl))
-#define ASSERT_ARGS_Parrot_mmd_search_scopes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(meth))
 #define ASSERT_ARGS_Parrot_mmd_sort_candidates __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(arg_tuple) \
@@ -394,41 +372,6 @@
         VTABLE_get_pmc(interp, invoke_sig), candidates);
 }
 
-
-
-/*
-
-=item C<static INTVAL distance_cmp(PARROT_INTERP, INTVAL a, INTVAL b)>
-
-Compare distance values C<a> and C<b>. Return 1 if C<a> is larger, -1 if
-C<b> is.
-
-=cut
-
-*/
-
-static INTVAL
-distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b)
-{
-    ASSERT_ARGS(distance_cmp)
-    short da = (short)(a & 0xffff);
-    short db = (short)(b & 0xffff);
-
-    /* sort first by distance */
-    if (da > db)
-        return 1;
-
-    if (da < db)
-        return -1;
-
-    /* end then by index in candidate list */
-    da = (short)(a >> 16);
-    db = (short)(b >> 16);
-
-    return da > db ? 1 : da < db ? -1 : 0;
-}
-
-
 /*
 
 =item C<static PMC* mmd_build_type_tuple_from_type_list(PARROT_INTERP, PMC
@@ -518,83 +461,7 @@
 Parrot_mmd_build_type_tuple_from_sig_obj(PARROT_INTERP, ARGIN(PMC *sig_obj))
 {
     ASSERT_ARGS(Parrot_mmd_build_type_tuple_from_sig_obj)
-    PMC * const  type_tuple = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
-    STRING      *string_sig = VTABLE_get_string(interp, sig_obj);
-    INTVAL       tuple_size = 0;
-    INTVAL       args_ended = 0;
-    INTVAL       i, seen_invocant = 0;
-    INTVAL       sig_len;
-
-    if (STRING_IS_NULL(string_sig)) {
-            Parrot_ex_throw_from_c_args(interp, NULL, 1,
-                    "Call has no signature, unable to dispatch.\n");
-    }
-
-    sig_len = Parrot_str_byte_length(interp, string_sig);
-
-    for (i = 0; i < sig_len; ++i) {
-        INTVAL type = Parrot_str_indexed(interp, string_sig, i + seen_invocant);
-        if (args_ended)
-            break;
-
-        /* Regular arguments just set the value */
-        switch (type) {
-          case 'I':
-            VTABLE_set_integer_keyed_int(interp, type_tuple,
-                        i, enum_type_INTVAL);
-            break;
-          case 'N':
-            VTABLE_set_integer_keyed_int(interp, type_tuple,
-                        i, enum_type_FLOATVAL);
-            break;
-          case 'S':
-            {
-                INTVAL type_lookahead = Parrot_str_indexed(interp, string_sig, (i + 1));
-                if (type_lookahead == 'n') {
-                    args_ended = 1;
-                    break;
-                }
-                VTABLE_set_integer_keyed_int(interp, type_tuple,
-                            i, enum_type_STRING);
-                break;
-            }
-          case 'P':
-            {
-                INTVAL type_lookahead = Parrot_str_indexed(interp, string_sig, (i + 1));
-                if (type_lookahead == 'i') {
-                    if (i != 0)
-                        Parrot_ex_throw_from_c_args(interp, NULL,
-                            EXCEPTION_INVALID_OPERATION,
-                            "Multiple Dispatch: only the first argument can be an invocant");
-                    seen_invocant = 1;
-                }
-                else if (type_lookahead == 'f') {
-                    args_ended = 1;
-                    break;
-                }
-                else {
-                    PMC *pmc_arg = VTABLE_get_pmc_keyed_int(interp, sig_obj, i);
-                    if (PMC_IS_NULL(pmc_arg))
-                        VTABLE_set_integer_keyed_int(interp, type_tuple,
-                                i, enum_type_PMC);
-                    else
-                        VTABLE_set_integer_keyed_int(interp, type_tuple, i,
-                                VTABLE_type(interp, pmc_arg));
-                }
-
-                break;
-            }
-          case '-':
-            args_ended = 1;
-            break;
-          default:
-            Parrot_ex_throw_from_c_args(interp, NULL,
-                    EXCEPTION_INVALID_OPERATION,
-                    "Multiple Dispatch: invalid argument type %c!", type);
-        }
-    }
-
-    return type_tuple;
+    return VTABLE_get_pmc(interp, sig_obj);
 }
 
 
@@ -889,33 +756,6 @@
 
 /*
 
-=item C<static PMC* Parrot_mmd_search_scopes(PARROT_INTERP, STRING *meth)>
-
-Search all scopes for MMD candidates matching the arguments given in
-C<arg_tuple>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static PMC*
-Parrot_mmd_search_scopes(PARROT_INTERP, ARGIN(STRING *meth))
-{
-    ASSERT_ARGS(Parrot_mmd_search_scopes)
-    PMC * const candidates = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
-    const int stop         = mmd_search_local(interp, meth, candidates);
-
-    if (!stop)
-        mmd_search_global(interp, meth, candidates);
-
-    return candidates;
-}
-
-
-/*
-
 =item C<static int Parrot_mmd_maybe_candidate(PARROT_INTERP, PMC *pmc, PMC *cl)>
 
 If the candidate C<pmc> is a Sub PMC, push it on the candidate list and
@@ -961,28 +801,6 @@
 
 /*
 
-=item C<static int mmd_search_local(PARROT_INTERP, STRING *name, PMC
-*candidates)>
-
-Search the current package namespace for matching candidates. Return
-TRUE if the MMD search should stop.
-
-=cut
-
-*/
-
-static int
-mmd_search_local(PARROT_INTERP, ARGIN(STRING *name), ARGIN(PMC *candidates))
-{
-    ASSERT_ARGS(mmd_search_local)
-    PMC * const multi_sub = Parrot_find_global_cur(interp, name);
-
-    return multi_sub && Parrot_mmd_maybe_candidate(interp, multi_sub, candidates);
-}
-
-
-/*
-
 =item C<static void mmd_search_by_sig_obj(PARROT_INTERP, STRING *name, PMC
 *sig_obj, PMC *candidates)>
 

Modified: branches/pcc_hackathon_6Mar10/src/nci/api.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/nci/api.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/nci/api.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -18,14 +18,6 @@
 /* HEADERIZER HFILE: include/parrot/nci.h */
 /* HEADERIZER STOP */
 
-static void
-init_nci_funcs(PARROT_INTERP) {
-    VTABLE_set_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_NCI_FUNCS,
-        Parrot_pmc_new(interp, enum_class_Hash));
-    Parrot_nci_load_core_thunks(interp);
-    Parrot_nci_load_extra_thunks(interp);
-}
-
 /* This function serves a single purpose. It takes the function
    signature for a C function we want to call and returns a pointer
    to a function that can call it. */

Modified: branches/pcc_hackathon_6Mar10/src/ops/core.ops
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/core.ops	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/core.ops	Tue Mar 16 22:37:03 2010	(r44975)
@@ -63,12 +63,6 @@
 Does nothing other than waste an iota of time and 32 bits of bytecode space.
 (Must be op #1, CORE_OPS_noop)
 
-=item B<cpu_ret>()
-
-Emit a cpu return instruction. This is used to return from CGP core
-to JIT code. Note: Do B<not> use this opcode. It is for internal use only.
-(Must be op #2, CORE_OPS_cpu_ret)
-
 =item B<check_events>()
 
 Check the event queue and run event handlers if there are unhandled events.
@@ -98,26 +92,6 @@
 inline op noop() :base_core {
 }
 
-inline op cpu_ret() {
-    /* We only want to call __asm__("ret") if we're in the JIT core. Otherwise
-       we want to throw an error. Seriously people: Do not use this opcode
-       directly in PIR. Ever. It absolutely makes no sense and it doesn't do
-       anything productive. You've been warned. */
-   if (PARROT_RUNCORE_JIT_OPS_TEST(interp->run_core)) {
-#ifdef __GNUC__
-#  ifdef I386
-        __asm__("ret");
-#  endif
-#endif
-    }
-    else {
-        opcode_t * const handler= Parrot_ex_throw_from_op_args(interp,
-            NULL, EXCEPTION_INVALID_OPERATION,
-            "cpu_ret: May not use this opcode from PIR source");
-        goto ADDRESS(handler);
-    }
-}
-
 inline op check_events() :base_core :flow {
     opcode_t *next = expr NEXT();
     Parrot_cx_check_tasks(interp, interp->scheduler);
@@ -758,7 +732,7 @@
 
 inline op pop_eh() {
     Parrot_cx_delete_handler_local(interp,
-            Parrot_str_new(interp, "exception", 9));
+            Parrot_str_new_constant(interp, "exception"));
 }
 
 inline op throw(invar PMC) :flow {
@@ -804,7 +778,7 @@
 
 inline op count_eh(out INT) {
     $1 = Parrot_cx_count_handlers_local(interp,
-            Parrot_str_new(interp, "exception", 9));
+            Parrot_str_new_constant(interp, "exception"));
 }
 
 inline op die(in STR) :flow {
@@ -1313,7 +1287,6 @@
     else {
         $1 = Parrot_pmc_new(interp, enum_class_NCI);
         VTABLE_set_pointer_keyed_str(interp, $1, $4, F2DPTR(p));
-        PObj_get_FLAGS($1) |= PObj_private1_FLAG;
     }
     Parrot_str_free_cstring(name);
 }

Modified: branches/pcc_hackathon_6Mar10/src/ops/experimental.ops
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/experimental.ops	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/experimental.ops	Tue Mar 16 22:37:03 2010	(r44975)
@@ -235,9 +235,114 @@
     }
 }
 
+=over 4
+
+=item B<new>(out PMC, in STR, in INT)
+
+=item B<new>(out PMC, in PMC, in INT)
+
+=back
+
+=cut
+
+
+op new(out PMC, in STR, in INT) {
+    STRING * const name   = $2;
+    PMC    * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+                          ? Parrot_oo_get_class_str(interp, name)
+                          : PMCNULL;
+
+    if (!PMC_IS_NULL(_class)) {
+        PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        VTABLE_set_integer_native(interp, initial, $3);
+        $1 = VTABLE_instantiate(interp, _class, initial);
+    }
+    else {
+        const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+        if (type <= 0) {
+            opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+                EXCEPTION_NO_CLASS,
+                "Class '%Ss' not found", name);
+            goto ADDRESS(dest);
+        }
+        $1 = Parrot_pmc_new_init_int(interp, type, $3);
+    }
+}
+
+
+op new(out PMC, in PMC, in INT) {
+    PMC * const  name_key = $2;
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const _class = Parrot_oo_get_class(interp, name_key);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, $3);
+            $1 = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        $1 = Parrot_pmc_new_init_int(interp, type, $3);
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
+        goto ADDRESS(dest);
+    }
+}
+
+=over 4
+
+=item B<root_new>(out PMC, in PMC, in INT)
+
+=back
+
+=cut
+
+op root_new(out PMC, in PMC, in INT) {
+    PMC * const  name_key = $2;
+
+    /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+    const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+    /* if it's clearly a PIR-level PMC */
+    if (type > enum_class_core_max) {
+        PMC * const root_ns  = interp->root_namespace;
+        PMC * const ns       = Parrot_get_namespace_keyed(interp, root_ns, name_key);
+        PMC * const _class   = Parrot_oo_get_class(interp, ns);
+        if (!PMC_IS_NULL(_class)) {
+            PMC *initial = Parrot_pmc_new(interp,
+                Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+            VTABLE_set_integer_native(interp, initial, $3);
+            $1 = VTABLE_instantiate(interp, _class, initial);
+        }
+    }
+
+    /* if it's a core PMC */
+    else if (type > enum_class_default)
+        $1 = Parrot_pmc_new_init_int(interp, type, $3);
+
+    /* it's a typo */
+    else {
+        opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+            EXCEPTION_NO_CLASS,
+            "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
+        goto ADDRESS(dest);
+    }
+}
+
 =head1 COPYRIGHT
 
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 
 =head1 LICENSE
 

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

Modified: branches/pcc_hackathon_6Mar10/src/ops/var.ops
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/var.ops	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/var.ops	Tue Mar 16 22:37:03 2010	(r44975)
@@ -472,6 +472,11 @@
 
 =item B<find_sub_not_null>(out PMC, in STR)
 
+Do the same thing as C<find_name>, but throw an exception if the name isn't
+found.
+
+=cut
+
 inline op find_sub_not_null(out PMC, in STR) :base_core {
     opcode_t *dest = expr NEXT();
     PMC *sub = Parrot_find_name_op(interp, $2, dest);

Modified: branches/pcc_hackathon_6Mar10/src/packfile.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/packfile.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/packfile.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -2826,7 +2826,6 @@
     const PackFile_Debug * const debug = (const PackFile_Debug *)self;
 
     opcode_t i;
-    size_t   j;
 
     default_dump_header(interp, self);
 

Modified: branches/pcc_hackathon_6Mar10/src/parrot_debugger.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/parrot_debugger.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/parrot_debugger.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -249,9 +249,9 @@
         STRING *compiler = Parrot_str_new_constant(interp, "PIR");
         STRING *errstr = NULL;
         const char source []= ".sub aux :main\nexit 0\n.end\n";
-        PMC *code = Parrot_compile_string(interp, compiler, source, &errstr);
+        Parrot_compile_string(interp, compiler, source, &errstr);
 
-        if (!STRING_is_null(interp, errstr))
+        if (!Parrot_str_is_null(interp, errstr))
             Parrot_io_eprintf(interp, "%Ss\n", errstr);
     }
 

Modified: branches/pcc_hackathon_6Mar10/src/pbc_merge.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pbc_merge.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pbc_merge.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -724,7 +724,6 @@
     ASSERT_ARGS(pbc_merge_begin)
     PackFile_ByteCode   *bc;
     PackFile_ConstTable *ct;
-    opcode_t             const_count = 0;
     int                  i;
 
     /* Create a new empty packfile. */

Modified: branches/pcc_hackathon_6Mar10/src/pmc.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -252,7 +252,7 @@
 
     ASSERT_ARGS(Parrot_pmc_reuse_noinit)
     VTABLE *new_vtable;
-    INTVAL  has_ext, new_flags = 0;
+    INTVAL  new_flags = 0;
 
     if (pmc->vtable->base_type == new_type)
         return pmc;
@@ -303,7 +303,7 @@
     ASSERT_ARGS(Parrot_pmc_reuse_by_class)
     const INTVAL   new_type   = PARROT_CLASS(class_)->id;
     VTABLE * const new_vtable = interp->vtables[new_type];
-    INTVAL         new_flags  = flags;
+    const INTVAL   new_flags  = flags;
 
     if (pmc->vtable->base_type == new_type)
         return pmc;
@@ -564,6 +564,40 @@
 
 /*
 
+=item C<PMC * Parrot_pmc_new_init_int(PARROT_INTERP, INTVAL base_type, INTVAL
+init)>
+
+As C<Parrot_pmc_new()>, but passes C<init> to the PMC's C<init_int()> vtable entry.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC *
+Parrot_pmc_new_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+{
+    ASSERT_ARGS(Parrot_pmc_new_init_int)
+    PMC *const classobj = interp->vtables[base_type]->pmc_class;
+
+    if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj)) {
+        PMC * const initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+        VTABLE_set_integer_native(interp, initial, init);
+        VTABLE_instantiate(interp, classobj, initial);
+        /* XXX Falls through to end of function without returning */
+    }
+    else {
+        PMC * const pmc = get_new_pmc_header(interp, base_type, 0);
+        VTABLE_init_int(interp, pmc, init);
+        return pmc;
+    }
+}
+
+
+
+/*
+
 =item C<PMC * Parrot_pmc_new_constant_init(PARROT_INTERP, INTVAL base_type, PMC
 *init)>
 
@@ -758,9 +792,7 @@
 {
     ASSERT_ARGS(Parrot_pmc_get_type)
     PMC * const classname_hash = interp->class_hash;
-    PMC * item;
-
-    item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
+    PMC * const item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
 
     if (!PMC_IS_NULL(item))
         return VTABLE_get_integer(interp, item);
@@ -827,9 +859,9 @@
 Parrot_pmc_create_mro(PARROT_INTERP, INTVAL type)
 {
     ASSERT_ARGS(Parrot_pmc_create_mro)
-    PMC    *_class, *mro;
+    PMC    *mro;
     VTABLE *vtable   = interp->vtables[type];
-    PMC    *mro_list = vtable->mro;
+    PMC    * const mro_list = vtable->mro;
     INTVAL  i, count;
 
     /* this should never be PMCNULL */
@@ -848,8 +880,9 @@
     count = VTABLE_elements(interp, mro_list);
 
     for (i = 0; i < count; ++i) {
-        STRING *class_name  = VTABLE_get_string_keyed_int(interp, mro_list, i);
-        INTVAL  parent_type = Parrot_pmc_get_type_str(interp, class_name);
+        STRING * const class_name = VTABLE_get_string_keyed_int(interp, mro_list, i);
+        const INTVAL parent_type  = Parrot_pmc_get_type_str(interp, class_name);
+        PMC *_class;
 
         /* abstract classes don't have a vtable */
         if (!parent_type)
@@ -938,10 +971,6 @@
 C<5.1.0.14.2.20011008152120.02158148 at pop.sidhe.org>
 (http://www.nntp.perl.org/group/perl.perl6.internals/5516).
 
-=head1 HISTORY
-
-Initial version by Simon on 2001.10.20.
-
 =cut
 
 */

Modified: branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -49,18 +49,6 @@
 #define STRINGCELL 2
 #define PMCCELL    3
 
-#define SET_CELL_INT(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | INTCELL)
-
-#define SET_CELL_FLOAT(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | FLOATCELL)
-
-#define SET_CELL_STRING(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | STRINGCELL)
-
-#define SET_CELL_PMC(c) \
-        INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | PMCCELL)
-
 #define ALLOC_CELL(i) \
     (Pcc_cell *)Parrot_gc_allocate_fixed_size_storage((i), sizeof (Pcc_cell))
 
@@ -693,7 +681,7 @@
                 res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "P"));
                 break;
               default:
-                PARROT_ASSERT(!"Impossible flag");
+                PARROT_FAILURE("Impossible flag");
                 break;
             }
             c = NEXT_CELL(c);
@@ -737,14 +725,46 @@
         GET_ATTR_type_tuple(INTERP, SELF, type_tuple);
 
         if (PMC_IS_NULL(type_tuple)) {
-            type_tuple = Parrot_mmd_build_type_tuple_from_sig_obj(INTERP, SELF);
+            Pcc_cell *c;
+            INTVAL    num_positionals;
+            INTVAL    i = 0;
+
+            GET_ATTR_positionals(INTERP, SELF, c);
+            GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
+
+            type_tuple = Parrot_pmc_new_init_int(interp,
+                enum_class_FixedIntegerArray, num_positionals);
+
+            while (c) {
+                INTVAL type;
+
+                switch (CELL_TYPE_MASK(c)) {
+                    case INTCELL:    type = enum_type_INTVAL;   break;
+                    case FLOATCELL:  type = enum_type_FLOATVAL; break;
+                    case STRINGCELL: type = enum_type_STRING;   break;
+                    case PMCCELL:
+                        type = PMC_IS_NULL(CELL_PMC(c))
+                             ? enum_type_PMC
+                             : VTABLE_type(interp, CELL_PMC(c));
+                        break;
+                    default:
+                        Parrot_ex_throw_from_c_args(interp, NULL,
+                            EXCEPTION_INVALID_OPERATION,
+                            "Multiple Dispatch: invalid argument type!");
+                }
+
+                VTABLE_set_integer_keyed_int(interp, type_tuple, i, type);
+                i++;
+                c = NEXT_CELL(c);
+            }
+
             SET_ATTR_type_tuple(INTERP, SELF, type_tuple);
         }
 
         return type_tuple;
-
     }
 
+
 /*
 
 =item C<void set_attr_str(STRING *key, PMC *value)>
@@ -1171,8 +1191,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_INT(cell);
 
         CELL_INT(cell) = value;
     }
@@ -1186,8 +1204,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_FLOAT(cell);
 
         CELL_FLOAT(cell) = value;
     }
@@ -1201,8 +1217,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_STRING(cell);
 
         CELL_STRING(cell) = value;
     }
@@ -1216,8 +1230,6 @@
             parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_PMC(cell);
 
         CELL_PMC(cell) = value;
     }
@@ -1232,8 +1244,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_INT(cell);
 
         CELL_INT(cell) = value;
     }
@@ -1248,8 +1258,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_FLOAT(cell);
 
         CELL_FLOAT(cell) = value;
     }
@@ -1264,8 +1272,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_STRING(cell);
 
         CELL_STRING(cell) = value;
     }
@@ -1280,8 +1286,6 @@
             parrot_hash_put(INTERP, hash, k, (void *)cell);
             NEXT_CELL(cell) = NULL;
         }
-        else
-            SET_CELL_PMC(cell);
 
         CELL_PMC(cell) = value;
     }

Modified: branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -224,37 +224,6 @@
 
 /*
 
-=item C<opcode_t *invoke(void *next)>
-
-Pythonic object constructor. SELF is a Complex Class object. Return a new
-C<complex> object according to 2.1. Built-in Functions.
-
-=cut
-
-*/
-    VTABLE opcode_t *invoke(void *next) {
-        const int   argcP = REG_INT(interp, 3);
-        PMC * const res   = Parrot_pmc_new(INTERP, enum_class_Complex);
-
-        if (argcP == 1) {
-            PMC * const arg = REG_PMC(interp, 5);
-
-            if (arg->vtable->base_type == enum_class_String)
-                VTABLE_set_string_native(INTERP, res, VTABLE_get_string(interp, arg));
-            else
-                SET_ATTR_re(INTERP, res, VTABLE_get_number(INTERP, arg));
-        }
-        else if (argcP == 2) {
-            SET_ATTR_re(INTERP, res, VTABLE_get_number(INTERP, REG_PMC(interp, 5)));
-            SET_ATTR_im(INTERP, res, VTABLE_get_number(INTERP, REG_PMC(interp, 6)));
-        }
-
-        REG_PMC(interp, 5) = res;
-        return (opcode_t *)next;
-    }
-
-/*
-
 =back
 
 =head2 Methods
@@ -329,6 +298,42 @@
 
 /*
 
+=item C<void freeze(PMC *visit)>
+
+=item C<void thaw(PMC *visit)>
+
+Serialize/deserialize this object for bytecode.
+
+=cut
+
+*/
+
+    VTABLE void freeze(PMC *visit) {
+        FLOATVAL re, im;
+
+        SUPER(visit);
+
+        GET_ATTR_re(INTERP, SELF, re);
+        VTABLE_push_float(INTERP, visit, re);
+
+        GET_ATTR_im(INTERP, SELF, im);
+        VTABLE_push_float(INTERP, visit, im);
+    }
+
+    VTABLE void thaw(PMC *visit) {
+        FLOATVAL re, im;
+
+        SUPER(visit);
+
+        re = VTABLE_shift_float(INTERP, visit);
+        SET_ATTR_re(INTERP, SELF, re);
+
+        im = VTABLE_shift_float(INTERP, visit);
+        SET_ATTR_im(INTERP, SELF, im);
+    }
+
+/*
+
 =item C<INTVAL get_integer()>
 
 Returns the modulus of the complex number as an integer.

Modified: branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -230,11 +230,12 @@
 */
     VTABLE opcode_t *invoke(void *next) {
         Parrot_EventHandler_attributes * const e = PARROT_EVENTHANDLER(SELF);
-        void *unused;
 
         /* can't invoke on INTERP and can't return its result; this may not be
          * the right interpreter */
         if (e) {
+            void *unused;
+
             unused = VTABLE_invoke(PMC_data_typed(e->interp, Parrot_Interp),
                     e->code, next);
             UNUSED(unused);
@@ -266,14 +267,15 @@
 */
 
     METHOD can_handle(PMC *event) {
-        Parrot_EventHandler_attributes * const handler_struct = PARROT_EVENTHANDLER(SELF);
+
         if (event->vtable->base_type == enum_class_Task) {
-            PMC *type = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "type"));
-            STRING *type_str = VTABLE_get_string(interp, type);
+            PMC    * const type     = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "type"));
+            STRING * const type_str = VTABLE_get_string(interp, type);
 
             if (Parrot_str_equal(interp, type_str, CONST_STRING(interp, "event"))) {
-                PMC *subtype = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "subtype"));
-                STRING *subtype_str = VTABLE_get_string(interp, subtype);
+                Parrot_EventHandler_attributes * const handler_struct = PARROT_EVENTHANDLER(SELF);
+                PMC    * const subtype     = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "subtype"));
+                STRING * const subtype_str = VTABLE_get_string(interp, subtype);
 
                 if (Parrot_str_equal(interp, subtype_str, handler_struct->type)) {
                     RETURN(INTVAL 1);

Modified: branches/pcc_hackathon_6Mar10/src/pmc/file.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/file.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/file.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -65,9 +65,9 @@
         struct stat info;
         char * const cpath = Parrot_str_to_cstring(interp, path);
 #ifdef WIN32
-        int error   = stat(cpath, &info);
+        const int error = stat(cpath, &info);
 #else
-        int error   = lstat(cpath, &info);
+        const int error = lstat(cpath, &info);
 #endif
         Parrot_str_free_cstring(cpath);
 
@@ -91,14 +91,14 @@
         struct stat info;
         char * const cpath = Parrot_str_to_cstring(interp, path);
 #ifdef WIN32
-        int error   = stat(cpath, &info);
+        const int error = stat(cpath, &info);
 #else
-        int error   = lstat(cpath, &info);
+        const int error = lstat(cpath, &info);
 #endif
         Parrot_str_free_cstring(cpath);
 
         if (error) {
-            char *errmsg = strerror(errno);
+            const char * const errmsg = strerror(errno);
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 errmsg);
         }
@@ -130,7 +130,7 @@
         Parrot_str_free_cstring(cpath);
 
         if (error) {
-            char *errmsg = strerror(errno);
+            const char * const errmsg = strerror(errno);
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 errmsg);
         }
@@ -159,12 +159,12 @@
         struct stat info;
 
         char * const cpath = Parrot_str_to_cstring(interp, path);
-        int          error = lstat(cpath, &info);
+        const int    error = lstat(cpath, &info);
 
         Parrot_str_free_cstring(cpath);
 
         if (error) {
-            char *errmsg = strerror(errno);
+            const char * const errmsg = strerror(errno);
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 errmsg);
         }
@@ -196,24 +196,23 @@
 #define CHUNK_SIZE 1024
 
         char * const cfrom  = Parrot_str_to_cstring(interp, from);
-        FILE       * source = fopen(cfrom, "rb");
+        FILE * const source = fopen(cfrom, "rb");
 
         Parrot_str_free_cstring(cfrom);
 
         if (source) {
-            char * const cto = Parrot_str_to_cstring(interp, to);
-            FILE    * target = fopen(cto, "w+b");
+            char * const cto    = Parrot_str_to_cstring(interp, to);
+            FILE * const target = fopen(cto, "w+b");
 
             Parrot_str_free_cstring(cto);
 
             if (target) {
-                char   buf[CHUNK_SIZE];
-                size_t bytes_read, bytes_written;
-
                 while (!feof(source)) {
-                    bytes_read = fread(buf, 1, CHUNK_SIZE, source);
+                    char buf[CHUNK_SIZE];
+                    const size_t bytes_read = fread(buf, 1, CHUNK_SIZE, source);
+
                     if (bytes_read) {
-                        bytes_written = fwrite(buf, 1, bytes_read, target);
+                        const size_t bytes_written = fwrite(buf, 1, bytes_read, target);
                         if (bytes_read != bytes_written) {
                             Parrot_ex_throw_from_c_args(interp, NULL,
                                 EXCEPTION_EXTERNAL_ERROR, "Error writing file");
@@ -224,14 +223,14 @@
                 fclose(target);
             }
             else {
-                char *errmsg = strerror(errno);
+                const char * const errmsg = strerror(errno);
                 Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                     errmsg);
             }
             fclose(source);
         }
         else {
-            char *errmsg = strerror(errno);
+            const char * const errmsg = strerror(errno);
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 errmsg);
         }
@@ -251,13 +250,13 @@
     METHOD rename(STRING *from, STRING *to) {
         char * const cfrom = Parrot_str_to_cstring(interp, from);
         char * const   cto = Parrot_str_to_cstring(interp, to);
-        int          error = rename(cfrom, cto);
+        const int    error = rename(cfrom, cto);
 
         Parrot_str_free_cstring(cfrom);
         Parrot_str_free_cstring(cto);
 
         if (error) {
-            char *errmsg = strerror(errno);
+            const char * const errmsg = strerror(errno);
             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
                 errmsg);
         }

Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -62,6 +62,31 @@
 
 /*
 
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+    VTABLE void init_int(INTVAL size) {
+        const size_t size_in_bytes = get_size_in_bytes(size);
+
+        if (size < 0)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                _("FixedBooleanArray: Cannot set array size to a negative number (%d)"), size);
+
+        SET_ATTR_size(INTERP, SELF, size);
+        SET_ATTR_resize_threshold(INTERP, SELF, size_in_bytes * BITS_PER_CHAR);
+        SET_ATTR_bit_array(INTERP, SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size_in_bytes,
+                                                                        unsigned char));
+        PObj_custom_destroy_SET(SELF);
+    }
+
+
+/*
+
 =item C<void destroy()>
 
 Destroys the array.

Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -48,6 +48,25 @@
 
 /*
 
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+    VTABLE void init_int(INTVAL size) {
+        if (size < 0)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                _("FixedFloatArray: Cannot set array size to a negative number (%d)"), size);
+        SET_ATTR_size(INTERP, SELF, size);
+        SET_ATTR_float_array(INTERP, SELF, mem_gc_allocate_n_typed(INTERP, size, FLOATVAL));
+        PObj_custom_destroy_SET(SELF);
+    }
+
+/*
+
 =item C<PMC *clone()>
 
 Creates and returns a copy of the array.

Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -45,6 +45,25 @@
 
 /*
 
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+    VTABLE void init_int(INTVAL size) {
+        if (size < 0)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                _("FixedIntegerArray: Cannot set array size to a negative number (%d)"), size);
+        SET_ATTR_size(INTERP, SELF, size);
+        SET_ATTR_int_array(INTERP, SELF, mem_gc_allocate_n_typed(INTERP, size, INTVAL));
+        PObj_custom_destroy_SET(SELF);
+    }
+
+/*
+
 =item C<void destroy()>
 
 Destroys the array.

Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -78,6 +78,33 @@
 
 /*
 
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+    VTABLE void init_int(INTVAL size) {
+        PMC **data;
+        int i;
+
+        if (size < 0)
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                    _("FixedPMCArray: Cannot set array size to a negative number (%d)"), size);
+
+        SET_ATTR_size(INTERP, SELF, size);
+        data           = mem_gc_allocate_n_typed(INTERP, size, PMC *);
+
+        for (i = 0; i < size; i++)
+            data[i] = PMCNULL;
+
+        PObj_custom_destroy_SET(SELF);
+    }
+
+/*
+
 =item C<void destroy()>
 
 Destroys the array.

Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -45,6 +45,26 @@
 
 /*
 
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+    VTABLE void init_int(INTVAL size) {
+        if (size < 0)
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+                _("FixedStringArray: Cannot set array size to a negative number (%d)"), size);
+        SET_ATTR_size(INTERP, SELF, size);
+        SET_ATTR_str_array(INTERP, SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size, STRING *));
+        PObj_custom_mark_destroy_SETALL(SELF);
+    }
+
+
+/*
+
 =item C<void destroy()>
 
 Destroys the array.

Modified: branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -84,7 +84,7 @@
         Parrot_HashIteratorKey_attributes *attrs =
                 PARROT_HASHITERATORKEY(SELF);
 
-        PARROT_ASSERT(value || !"Can't set NULL pointer into HashIteratorKey");
+        PARROT_ASSERT_MSG(value, "Can't set NULL pointer into HashIteratorKey");
 
         if (key == 0) {
             attrs->parrot_hash = (Hash*)value;

Modified: branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -204,7 +204,7 @@
 */
     VTABLE void set_integer_native(INTVAL value) {
         PMC *self = SELF;
-        PARROT_ASSERT(!"Iterator: implementation have to override this method");
+        PARROT_FAILURE("Iterator: implementation have to override this method");
 
         Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
                 "Iterator: unimplemented method");

Modified: branches/pcc_hackathon_6Mar10/src/pmc/null.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/null.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/null.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -41,17 +41,21 @@
 */
 
     VTABLE void init() {
+        UNUSED(interp)
     }
 
     VTABLE void *get_pointer() {
+        UNUSED(interp)
         return PMCNULL;
     }
 
     VTABLE void set_pointer(void *p) {
+        UNUSED(interp)
         PMCNULL = (PMC *)p;
     }
 
     VTABLE INTVAL does(STRING *what) {
+        UNUSED(interp)
         UNUSED(what)
         /* XXX maybe a hack to get TGE running again */
         return 0;

Modified: branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -77,22 +77,11 @@
 
 */
 
-/* Create new stored item. FixedPMCArray of (key, value, prev, next). */
-static PMC*
-create_item(PARROT_INTERP, ARGIN(PMC *key), ARGIN(PMC *value)) {
-    PMC *ret = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
-    VTABLE_set_integer_native(interp, ret, ORDERED_HASH_ITEM_MAX);
-
-    VTABLE_set_pmc_keyed_int(interp, ret, ORDERED_HASH_ITEM_KEY, key);
-    VTABLE_set_pmc_keyed_int(interp, ret, ORDERED_HASH_ITEM_VALUE, value);
-    return ret;
-}
-
 /* Get list_item by index */
 static PMC*
 get_list_item(PARROT_INTERP, ARGIN(PMC *self), INTVAL idx) {
-    Parrot_OrderedHash_attributes *attrs = PARROT_ORDEREDHASH(self);
-    INTVAL                         n = VTABLE_elements(interp, attrs->hash);
+    const Parrot_OrderedHash_attributes * const attrs = PARROT_ORDEREDHASH(self);
+    const INTVAL n = VTABLE_elements(interp, attrs->hash);
     INTVAL                         pos;
     PMC                           *list_entry = attrs->first;
 
@@ -112,10 +101,11 @@
 /* Parameter C<pmc_hash> is Hash, not OrderedHash */
 static void
 find_bounds(PARROT_INTERP, PMC *pmc_hash, PMC **first, PMC **last) {
-    PMC *iter = VTABLE_get_iter(interp, pmc_hash);
+    PMC * const iter = VTABLE_get_iter(interp, pmc_hash);
+
     while (VTABLE_get_bool(interp, iter)) {
-        PMC *item  = VTABLE_shift_pmc(interp, iter);
-        PMC *entry = VTABLE_get_pmc_keyed(interp, pmc_hash, item);
+        PMC * const item  = VTABLE_shift_pmc(interp, iter);
+        PMC * const entry = VTABLE_get_pmc_keyed(interp, pmc_hash, item);
         /* First entry doesn't have prev */
         PMC *tmp   = VTABLE_get_pmc_keyed_int(interp, entry, ORDERED_HASH_ITEM_PREV);
         if (PMC_IS_NULL(tmp))
@@ -249,16 +239,17 @@
 
 */
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        Parrot_OrderedHash_attributes *attrs =
+        Parrot_OrderedHash_attributes * const attrs =
                 PARROT_ORDEREDHASH(SELF);
 
         /* Check for old entry */
         PMC *list_entry = VTABLE_get_pmc_keyed(INTERP, attrs->hash, key);
         if (!PMC_IS_NULL(list_entry)) {
             /* We have old entry. Just update value */
-            PMC *nextkey = key_next(INTERP, key);
+            PMC * const nextkey = key_next(INTERP, key);
             if (nextkey) {
-                PMC *old_value = VTABLE_get_pmc_keyed_int(INTERP, list_entry,
+                /* XXX old_value is unused.  Should we be storing this at all? */
+                PMC * const old_value = VTABLE_get_pmc_keyed_int(INTERP, list_entry,
                         ORDERED_HASH_ITEM_VALUE);
                 VTABLE_set_pmc_keyed(INTERP, value, nextkey, value);
             }
@@ -336,7 +327,7 @@
         /* Now we have chicken and egg problem during freeze/thaw */
         /* When we try to thaw OrderedHash which stores HLL mapping */
         /* Reported by François Perrad */
-        PMC *pkey = Parrot_pmc_new(INTERP, enum_class_String);
+        PMC * const pkey = Parrot_pmc_new(INTERP, enum_class_String);
         VTABLE_set_string_native(INTERP, pkey, key);
         VTABLE_set_pmc_keyed(INTERP, SELF, pkey, value);
     }
@@ -369,7 +360,7 @@
 */
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL idx) {
-        PMC *list_entry = get_list_item(INTERP, SELF, idx);
+        PMC * const list_entry = get_list_item(INTERP, SELF, idx);
 
         if (PMC_IS_NULL(list_entry))
             return PMCNULL;
@@ -391,7 +382,7 @@
     }
 
     VTABLE PMC *get_pmc_keyed_str(STRING *key) {
-        PMC *pkey = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
+        PMC * const pkey = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
         VTABLE_set_string_native(INTERP, pkey, key);
         return STATICSELF.get_pmc_keyed(pkey);
     }
@@ -482,10 +473,7 @@
 */
 
     VTABLE void set_pmc_keyed_int(INTVAL idx, PMC *val) {
-        const INTVAL   n   = STATICSELF.elements();
-        STRING * const fmt = CONST_STRING(INTERP, "\1%d");
-        PMC           *list_entry;
-        INTVAL         pos;
+        const INTVAL n = STATICSELF.elements();
 
         if (idx < -n)
             idx = -idx - n - 1;
@@ -494,11 +482,12 @@
 
         if (idx >= n) {
             /* TODO warn or fill if there are holes */
+            STRING * const fmt = CONST_STRING(INTERP, "\1%d");
             STRING * const key = Parrot_sprintf_s(INTERP, fmt, idx);
             SELF.set_pmc_keyed_str(key, val);
         }
         else {
-            list_entry = get_list_item(INTERP, SELF, idx);
+            PMC * const list_entry = get_list_item(INTERP, SELF, idx);
             PARROT_ASSERT(!PMC_IS_NULL(list_entry));
             VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_VALUE, val);
         }
@@ -577,8 +566,8 @@
     VTABLE INTVAL exists_keyed(PMC *key) {
         if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
             /* Don't fetch item prematurely. It's costy */
-            INTVAL    intval = VTABLE_get_integer(INTERP, key);
-            PMC * const next = VTABLE_shift_pmc(INTERP, key);
+            const INTVAL intval = VTABLE_get_integer(INTERP, key);
+            PMC * const next    = VTABLE_shift_pmc(INTERP, key);
 
             if (!next)
                 return STATICSELF.exists_keyed_int(intval);
@@ -653,8 +642,8 @@
                 PARROT_ORDEREDHASH(SELF);
         PMC *list_entry, *prev, *next;
         if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
-            INTVAL    intval = VTABLE_get_integer(INTERP, key);
-            PMC * const next = VTABLE_shift_pmc(INTERP, key);
+            const INTVAL intval = VTABLE_get_integer(INTERP, key);
+            PMC * const next    = VTABLE_shift_pmc(INTERP, key);
 
             if (next)
                 VTABLE_delete_keyed(INTERP, STATICSELF.get_pmc_keyed_int(intval), next);
@@ -693,13 +682,12 @@
     }
 
     VTABLE void delete_keyed_int(INTVAL idx) {
-        PMC *list_entry;
-        if (!STATICSELF.exists_keyed_int(idx))
-            return;
-
-        list_entry = get_list_item(INTERP, SELF, idx);
-        STATICSELF.delete_keyed(
-            VTABLE_get_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY));
+        if (STATICSELF.exists_keyed_int(idx)) {
+            PMC * const list_entry = get_list_item(INTERP, SELF, idx);
+            STATICSELF.delete_keyed(
+                    VTABLE_get_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY));
+        }
+        return;
     }
 
 /*
@@ -777,10 +765,6 @@
 
 F<docs/pdds/pdd08_keys.pod>.
 
-=head1 HISTORY
-
-Initial rev by leo 2003-08-21.
-
 =cut
 
 */

Modified: branches/pcc_hackathon_6Mar10/src/pmc/os.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/os.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/os.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -22,6 +22,8 @@
 #if defined(_MSC_VER)
 #  include <direct.h>
 #  include <io.h>
+#  include <tchar.h>
+#  include <windows.h>
 #elif defined(__BORLANDC__)
 #  include <dir.h>
 #  include <dirent.h>
@@ -475,11 +477,11 @@
 
 */
     METHOD readdir(STRING *path) {
+        PMC   * array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
 #ifndef _MSC_VER
         char  * const cpath = Parrot_str_to_cstring(INTERP, path);
         DIR           *dir  = opendir(cpath);
         struct dirent *dirent;
-        PMC           *array;
         STRING        *retval;
 
         Parrot_str_free_cstring(cpath);
@@ -490,20 +492,48 @@
                 errmsg);
         }
 
-        array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
-
         while ((dirent = readdir(dir)) != NULL) {
             retval = Parrot_str_new(INTERP, dirent->d_name, 0) ;
             VTABLE_push_string(INTERP, array, retval);
         }
 
         closedir(dir);
-
-        RETURN(PMC *array);
 #else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-                "Win32 is not POSIX. Need Win32 developer!");
+        WIN32_FIND_DATA file_find_data;
+        char * cpath;
+        HANDLE hFind = INVALID_HANDLE_VALUE;
+
+        /* Add \* to the directory name and start search. */
+        STRING *last_char = Parrot_str_substr(interp, path,
+                                              Parrot_str_length(interp, path) - 1, 1, NULL, 0);
+        int trailing_slash = Parrot_str_equal(interp, last_char, string_from_literal(interp, "\\"))
+                             ||
+                             Parrot_str_equal(interp, last_char, string_from_literal(interp, "/"));
+        cpath = Parrot_str_to_cstring(interp, Parrot_str_concat(interp,
+                path, string_from_literal(interp, trailing_slash ? "*" : "\\*"), 0));
+        hFind = FindFirstFile(cpath, &file_find_data);
+        Parrot_str_free_cstring(cpath);
+        if (hFind == INVALID_HANDLE_VALUE)
+        {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "Unable to readdir");
+        }
+
+        /* Loop over all directories and add to result array. */
+        do
+        {
+            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP,
+                    file_find_data.cFileName, 0));
+        }
+        while (FindNextFile(hFind, &file_find_data) != 0);
+        if (GetLastError() != ERROR_NO_MORE_FILES)
+        {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "Error during readdir");
+        }
+        FindClose(hFind);
 #endif
+        RETURN(PMC *array);
     }
 /*
 =item C<rename(STRING *oldpath, STRING *newpath)>

Modified: branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -79,7 +79,7 @@
     return tid;
 }
 
-pmclass ParrotThread extends ParrotInterpreter no_ro {
+pmclass ParrotThread extends ParrotInterpreter no_ro manual_attrs {
 
 /*
 

Modified: branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -24,9 +24,9 @@
 static void
 print_sub_name(PARROT_INTERP, ARGIN_NULLOK(PMC *sub))
 {
-    Interp * const tracer = (interp->pdb && interp->pdb->debugger) ?
-        interp->pdb->debugger :
-        interp;
+    Interp * const tracer = (interp->pdb && interp->pdb->debugger)
+                          ? interp->pdb->debugger
+                          : interp;
 
     /* sub was located via globals */
     Parrot_io_eprintf(tracer, "# Calling sub '%Ss'\n# ",
@@ -89,7 +89,7 @@
      */
     VTABLE void init() {
         Parrot_Sub_attributes * const attrs =
-            (Parrot_Sub_attributes *) PMC_data(SELF);
+            PMC_data_typed(SELF, Parrot_Sub_attributes *);
 
         attrs->seg             = INTERP->code;
         attrs->outer_sub       = PMCNULL;
@@ -99,6 +99,7 @@
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
+
 /*
 
 =item C<void init_pmc()>
@@ -112,10 +113,9 @@
 
     VTABLE void init_pmc(PMC* init) {
         Parrot_Sub_attributes * const attrs =
-            (Parrot_Sub_attributes *) PMC_data(SELF);
-        STRING *field;
+            PMC_data_typed(SELF, Parrot_Sub_attributes *);
+        STRING *field = CONST_STRING(INTERP, "start_offs");
 
-        field = CONST_STRING(INTERP, "start_offs");
         if (VTABLE_exists_keyed_str(INTERP, init, field))
             attrs->start_offs = VTABLE_get_integer_keyed_str(INTERP, init, field);
 
@@ -199,15 +199,13 @@
             attrs->arg_info->named_slurpy = VTABLE_get_integer_keyed_str(INTERP, tmp, CONST_STRING(INTERP, "named_slurpy"));
         }
 
-
-        /*
-        C<eval_pmc> and C<ctx> are not handled here. And shouldn't be handled
-        here at all because of run-time nature.
-        */
+        /* C<eval_pmc> and C<ctx> are not handled here, and shouldn't be,
+         * because of run-time nature.  */
 
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
+
 /*
 
 =item C<void destroy()>
@@ -221,12 +219,11 @@
     VTABLE void destroy() {
         Parrot_Sub_attributes *sub = PARROT_SUB(SELF);
 
-        if (sub) {
-            if (sub->arg_info)
-                mem_gc_free(INTERP, sub->arg_info);
-        }
+        if (sub && sub->arg_info)
+            mem_gc_free(INTERP, sub->arg_info);
     }
 
+
 /*
 
 =item C<STRING *get_string()>
@@ -242,7 +239,6 @@
 */
 
     VTABLE STRING *get_string() {
-        STRING *name;
         Parrot_Sub_attributes *sub;
         PMC_get_sub(INTERP, SELF, sub);
 
@@ -252,12 +248,14 @@
         return NULL;
     }
 
+
     VTABLE void set_string_native(STRING *subname) {
         Parrot_Sub_attributes *sub;
         PMC_get_sub(INTERP, SELF, sub);
         sub->name = Parrot_str_copy(INTERP, subname);
     }
 
+
 /*
 
 =item C<void set_pointer(void *value)>
@@ -276,6 +274,7 @@
             "Don't set the address of a sub\nuse .const 'Sub' instead");
     }
 
+
 /*
 
 =item C<void *get_pointer()>
@@ -292,6 +291,7 @@
         return sub->seg->base.data + sub->start_offs;
     }
 
+
 /*
 
 =item C<INTVAL get_integer_keyed(PMC *key)>
@@ -312,6 +312,7 @@
         return (INTVAL) (sub->seg->base.data);
     }
 
+
 /*
 
 =item C<INTVAL defined()>
@@ -332,6 +333,7 @@
         return 1;
     }
 
+
 /*
 
 =item C<opcode_t *invoke(void *next)>
@@ -343,10 +345,14 @@
 */
 
     VTABLE opcode_t *invoke(void *next) {
+        PMC *caller_ctx = CURRENT_CONTEXT(interp);
+        PMC *ccont      = INTERP->current_cont;
+
+        /* plain subroutine call
+         * create new context, place it in interpreter */
+        PMC *context    = Parrot_pcc_get_signature(INTERP, caller_ctx);
+
         Parrot_Sub_attributes *sub;
-        PMC                   *caller_ctx;
-        PMC                   *context;
-        PMC                   *ccont;
         opcode_t              *pc;
 
         PMC_get_sub(INTERP, SELF, sub);
@@ -376,8 +382,6 @@
          *
          */
         pc                   = sub->seg->base.data + sub->start_offs;
-        caller_ctx           = CURRENT_CONTEXT(interp);
-        ccont                = INTERP->current_cont;
         INTERP->current_cont = NULL;
 
         if (ccont == NEED_CONTINUATION)
@@ -385,11 +389,9 @@
 
         PARROT_ASSERT(!PMC_IS_NULL(ccont));
 
-        /* plain subroutine call
-         * create new context, place it in interpreter */
-        context = Parrot_pcc_get_signature(INTERP, caller_ctx);
         if (PMC_IS_NULL(context))
             context = Parrot_pmc_new(INTERP, enum_class_CallContext);
+
         CURRENT_CONTEXT(INTERP) = context;
         Parrot_pcc_set_caller_ctx(INTERP, context, caller_ctx);
         Parrot_pcc_allocate_registers(INTERP, context, sub->n_regs_used);
@@ -432,17 +434,17 @@
             VTABLE_set_pointer(INTERP, Parrot_pcc_get_lex_pad(interp, context), context);
         }
 
-        if (!PMC_IS_NULL(sub->outer_ctx)) {
-            /* set outer context */
+        /* set outer context */
+        if (!PMC_IS_NULL(sub->outer_ctx))
             Parrot_pcc_set_outer_ctx(interp, context, sub->outer_ctx);
-        }
         else {
             /* autoclose */
-            PMC *c = context;
+            PMC *c       = context;
             PMC *outer_c = Parrot_pcc_get_outer_ctx(interp, c);
+
             for (c = context; PMC_IS_NULL(outer_c); c = outer_c) {
 
-                PMC         *outer_pmc;
+                PMC *outer_pmc;
                 Parrot_Sub_attributes *current_sub, *outer_sub;
 
                 PMC_get_sub(INTERP, Parrot_pcc_get_sub(interp, c), current_sub);
@@ -459,14 +461,19 @@
                     Parrot_pcc_set_sub(interp, dummy, outer_pmc);
 
                     if (!PMC_IS_NULL(outer_sub->lex_info)) {
-                        Parrot_pcc_set_lex_pad(interp, dummy, Parrot_pmc_new_init(INTERP,
-                               Parrot_get_ctx_HLL_type(interp, enum_class_LexPad),
-                               outer_sub->lex_info));
-                        VTABLE_set_pointer(INTERP, Parrot_pcc_get_lex_pad(interp, dummy), dummy);
+                        Parrot_pcc_set_lex_pad(interp, dummy,
+                            Parrot_pmc_new_init(INTERP,
+                                Parrot_get_ctx_HLL_type(interp,
+                                    enum_class_LexPad), outer_sub->lex_info));
+
+                        VTABLE_set_pointer(INTERP,
+                            Parrot_pcc_get_lex_pad(interp, dummy), dummy);
                     }
 
                     if (!PMC_IS_NULL(outer_sub->outer_ctx))
-                        Parrot_pcc_set_outer_ctx(interp, dummy, outer_sub->outer_ctx);
+                        Parrot_pcc_set_outer_ctx(interp, dummy,
+                            outer_sub->outer_ctx);
+
                     outer_sub->ctx = dummy;
                 }
 
@@ -480,8 +487,8 @@
             Parrot_switch_to_cs(INTERP, sub->seg, 1);
 
         if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
-            if (!(*pc == PARROT_OP_get_params_pc
-            ||    (*pc    == PARROT_OP_push_eh_ic
+            if (!(*pc    == PARROT_OP_get_params_pc
+            ||   (*pc    == PARROT_OP_push_eh_ic
             &&     pc[2] == PARROT_OP_get_params_pc))) {
 
                 /* TODO keep it or resize it */
@@ -496,6 +503,7 @@
         return pc;
     }
 
+
 /*
 
 =item C<PMC *clone()>
@@ -507,7 +515,8 @@
 */
 
     VTABLE PMC *clone() {
-        PMC        * const ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+        PMC * const ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+
         Parrot_Sub_attributes *dest_sub;
         Parrot_Sub_attributes *sub;
 
@@ -530,6 +539,7 @@
         return ret;
     }
 
+
 /*
 
 =item C<void assign_pmc(PMC *other)>
@@ -566,6 +576,7 @@
                 "Can't assign a non-Sub type to a Sub");
     }
 
+
 /*
 
 =item C<void mark()>
@@ -583,17 +594,18 @@
             return;
 
         Parrot_gc_mark_STRING_alive(INTERP, sub->name);
+        Parrot_gc_mark_STRING_alive(INTERP, sub->subid);
         Parrot_gc_mark_STRING_alive(INTERP, sub->method_name);
         Parrot_gc_mark_STRING_alive(INTERP, sub->ns_entry_name);
-        Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_name);
-        Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_stash);
-        Parrot_gc_mark_PMC_alive(INTERP, sub->multi_signature);
-        Parrot_gc_mark_PMC_alive(INTERP, sub->lex_info);
-        Parrot_gc_mark_PMC_alive(INTERP, sub->outer_sub);
-        Parrot_gc_mark_PMC_alive(INTERP, sub->eval_pmc);
-        Parrot_gc_mark_STRING_alive(INTERP, sub->subid);
+
         Parrot_gc_mark_PMC_alive(interp, sub->ctx);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->eval_pmc);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->lex_info);
         Parrot_gc_mark_PMC_alive(interp, sub->outer_ctx);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->outer_sub);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_name);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->multi_signature);
+        Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_stash);
     }
 
 /*
@@ -607,8 +619,7 @@
 */
 
     MULTI INTVAL is_equal(PMC *value) {
-        Parrot_Sub_attributes *my_sub;
-        Parrot_Sub_attributes *value_sub;
+        Parrot_Sub_attributes *my_sub, *value_sub;
 
         PMC_get_sub(INTERP, SELF, my_sub);
         PMC_get_sub(INTERP, value, value_sub);
@@ -618,6 +629,7 @@
         &&     (my_sub)->seg        == (value_sub)->seg;
     }
 
+
 /*
 
 =item C<void visit(PMC *info)>
@@ -634,9 +646,7 @@
 
     VTABLE void visit(PMC *info) {
         VISIT_PMC_ATTR(INTERP, info, SELF, Sub, namespace_name);
-
         VISIT_PMC_ATTR(INTERP, info, SELF, Sub, multi_signature);
-
         VISIT_PMC_ATTR(INTERP, info, SELF, Sub, outer_sub);
 
         /*
@@ -652,6 +662,7 @@
         SUPER(info);
     }
 
+
     VTABLE void freeze(PMC *info) {
         Parrot_Sub_attributes *sub;
         STRING                *hll_name;
@@ -705,9 +716,11 @@
 
         if (!sub->subid)
             sub->subid = CONST_STRING(INTERP, "");
+
         VTABLE_push_string(INTERP, info, sub->subid);
     }
 
+
 /*
 
 =item C<void thaw(PMC *info)>
@@ -748,6 +761,7 @@
         sub->subid        = VTABLE_shift_string(INTERP, info);
     }
 
+
 /*
 
 =item C<PMC *inspect()>
@@ -760,8 +774,8 @@
 
     VTABLE PMC *inspect()
     {
-        /* Create a hash, then use inspect_str to get all of the data to
-         * fill it up with. */
+        /* Create a hash, then use inspect_str to get all of its data */
+
         PMC    * const metadata           = Parrot_pmc_new(interp, enum_class_Hash);
         STRING * const pos_required_str   = CONST_STRING(interp, "pos_required");
         STRING * const pos_optional_str   = CONST_STRING(interp, "pos_optional");
@@ -791,6 +805,7 @@
         return metadata;
     }
 
+
 /*
 
 =item C<PMC *inspect_str(STRING *what)>
@@ -849,16 +864,14 @@
 
             /* If the first instruction is a get_params... */
             if (*pc == PARROT_OP_get_params_pc) {
-                PMC    *sig;
-                int     i, sig_length;
-
                 /* Get the signature (the next thing in the bytecode). */
-                pc++;
-                sig = PF_CONST(sub->seg, *pc)->u.key;
-                ASSERT_SIG_PMC(sig);
+                PMC    *sig        = PF_CONST(sub->seg, *(++pc))->u.key;
 
                 /* Iterate over the signature and compute argument counts. */
-                sig_length = VTABLE_elements(INTERP, sig);
+                INTVAL  sig_length = VTABLE_elements(INTERP, sig);
+                int     i;
+
+                ASSERT_SIG_PMC(sig);
 
                 for (i = 0; i < sig_length; i++) {
                     int sig_item = VTABLE_get_integer_keyed_int(INTERP, sig, i);;
@@ -886,7 +899,7 @@
             }
         }
 
-        /* Return the argument information that was requested. */
+        /* Return the requested argument information */
         if (Parrot_str_equal(interp, what, CONST_STRING(interp, "pos_required"))) {
             count_found = (INTVAL)sub->arg_info->pos_required;
         }
@@ -905,16 +918,17 @@
         else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "named_slurpy"))) {
             count_found = (INTVAL)sub->arg_info->named_slurpy;
         }
-        else {
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+        else
+            Parrot_ex_throw_from_c_args(interp, NULL,
+                EXCEPTION_INVALID_OPERATION,
                 "Unknown introspection value '%S'", what);
-        }
 
         retval = Parrot_pmc_new(INTERP, enum_class_Integer);
         VTABLE_set_integer_native(INTERP, retval, count_found);
         return retval;
     }
 
+
 /*
 
 =back
@@ -925,33 +939,33 @@
 
 =item C<INTVAL start_offs()>
 
-Return the start offset of the Sub.
+Returns the start offset of the Sub.
 
 =item C<INTVAL end_offs()>
 
-Return the end offset of the Sub.
+Returns the end offset of the Sub.
 
 =item C<PMC *get_namespace()>
 
-Return the namespace PMC, where the Sub is defined.
+Returns the namespace PMC, where the Sub is defined.
 
 TODO return C<namespace_stash> instead.
 
 =item C<INTVAL __get_regs_used(char *kind)>
 
-Return amount of used registers for register kinds "I", "S", "P", "N".
+Returns the number of used registers for register kinds "I", "S", "P", "N".
 
 =item C<PMC *get_lexinfo()>
 
-Return the LexInfo PMC, if any or a Null PMC.
+Returns the LexInfo PMC, if any or a Null PMC.
 
 =item C<PMC *get_multisig()>
 
-Return the MMD signature PMC, if any or a Null PMC.
+Returns the MMD signature PMC, if any, or a Null PMC.
 
 =item C<PMC *get_outer()>
 
-Gets the sub that is the outer of this one, if any or a Null PMC.
+Gets the sub that is the outer of this one, if any, or a Null PMC.
 
 =item C<void set_outer(PMC *outer)>
 
@@ -959,7 +973,7 @@
 
 =item C<INTVAL arity()>
 
-Return the arity of the Sub (the number of arguments, excluding optional and
+Returns the arity of the Sub (the number of arguments, excluding optional and
 slurpy arguments).
 
 =cut
@@ -968,11 +982,13 @@
     METHOD start_offs() {
         Parrot_Sub_attributes  *sub;
         INTVAL                  start_offs;
+
         PMC_get_sub(INTERP, SELF, sub);
         start_offs = sub->start_offs;
         RETURN(INTVAL start_offs);
     }
 
+
     METHOD end_offs() {
         Parrot_Sub_attributes  *sub;
         INTVAL                  end_offs;
@@ -981,9 +997,11 @@
         RETURN(INTVAL end_offs);
     }
 
+
     METHOD get_namespace() {
-        PMC *_namespace;
+        PMC                   *_namespace;
         Parrot_Sub_attributes *sub;
+
         PMC_get_sub(INTERP, SELF, sub);
         /*
         XXX Rakudo's failing with with this code on ASSERT. Why???
@@ -994,8 +1012,8 @@
         RETURN(PMC *_namespace);
     }
 
-    METHOD __get_regs_used(STRING *reg) {
 
+    METHOD __get_regs_used(STRING *reg) {
         /* TODO switch to canonical NiSP order
          * see also imcc/reg_alloc.c */
         STRING                *types = CONST_STRING(INTERP, "INSP");
@@ -1006,33 +1024,35 @@
         PMC_get_sub(INTERP, SELF, sub);
         PARROT_ASSERT(sub->n_regs_used);
 
-        if (!reg || Parrot_str_length(INTERP, reg) != 1) {
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+        if (!reg || Parrot_str_length(INTERP, reg) != 1)
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
                 "illegal register kind '%Ss'", reg);
-        }
 
         kind = Parrot_str_find_index(INTERP, types, reg, 0);
 
         if (kind == -1)
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
-                "illegal register kind '%Ss'", reg);
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+               EXCEPTION_INVALID_OPERATION, "illegal register kind '%Ss'", reg);
 
         regs_used = sub->n_regs_used[kind];
         RETURN(INTVAL regs_used);
     }
 
+
     METHOD get_lexinfo() {
-        PMC        *lexinfo;
+        PMC                   *lexinfo;
         Parrot_Sub_attributes *sub;
         PMC_get_sub(INTERP, SELF, sub);
 
-        lexinfo = sub->lex_info ? sub->lex_info: PMCNULL;
+        lexinfo = sub->lex_info ? sub->lex_info : PMCNULL;
 
         RETURN(PMC *lexinfo);
     }
 
+
     METHOD get_subid() {
-        STRING     *subid;
+        STRING                *subid;
         Parrot_Sub_attributes *sub;
         PMC_get_sub(INTERP, SELF, sub);
 
@@ -1041,6 +1061,7 @@
         RETURN(STRING *subid);
     }
 
+
     METHOD get_outer() {
         PMC                   *outersub;
         Parrot_Sub_attributes *sub;
@@ -1051,10 +1072,11 @@
         RETURN(PMC *outersub);
     }
 
+
     METHOD set_outer(PMC *outer) {
         /* Set outer sub. */
         Parrot_Sub_attributes *sub;
-        PMC *tmp1;
+        PMC                   *outer_ctx;
         PMC_get_sub(INTERP, SELF, sub);
 
         sub->outer_sub = outer;
@@ -1071,18 +1093,20 @@
 
         /* If we've got a context around for the outer sub, set it as the
          * outer context. */
-        tmp1 = CURRENT_CONTEXT(interp);
-        while (!PMC_IS_NULL(tmp1)) {
-            if (Parrot_pcc_get_sub(interp, tmp1) == outer) {
-                sub->outer_ctx = tmp1;
+        outer_ctx = CURRENT_CONTEXT(interp);
+
+        while (!PMC_IS_NULL(outer_ctx)) {
+            if (Parrot_pcc_get_sub(interp, outer_ctx) == outer) {
+                sub->outer_ctx = outer_ctx;
                 break;
             }
-            tmp1 = Parrot_pcc_get_caller_ctx(interp, tmp1);
+            outer_ctx = Parrot_pcc_get_caller_ctx(interp, outer_ctx);
         }
     }
 
+
     METHOD get_multisig() {
-        PMC                 *multisig;
+        PMC                   *multisig;
         Parrot_Sub_attributes *sub;
         PMC_get_sub(INTERP, SELF, sub);
 
@@ -1091,17 +1115,19 @@
         RETURN(PMC *multisig);
     }
 
+
     METHOD arity() {
         PMC * const pos_required   = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "pos_required"));
         PMC * const named_required = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "named_required"));
 
-        const INTVAL arity = VTABLE_get_integer(INTERP, pos_required) +
-            VTABLE_get_integer(INTERP, named_required);
+        const INTVAL arity = VTABLE_get_integer(INTERP, pos_required)
+                           + VTABLE_get_integer(INTERP, named_required);
 
         RETURN(INTVAL arity);
     }
 }
 
+
 /*
  * Local variables:
  *   c-file-style: "parrot"

Modified: branches/pcc_hackathon_6Mar10/src/runcore/main.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/runcore/main.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/runcore/main.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -485,7 +485,7 @@
         interp->all_op_libs = mem_gc_allocate_n_zeroed_typed(interp,
                 interp->n_libs + 1, op_lib_t*);
     else
-        mem_gc_realloc_n_typed_zeroed(interp, interp->all_op_libs,
+        interp->all_op_libs = mem_gc_realloc_n_typed_zeroed(interp, interp->all_op_libs,
                 interp->n_libs + 1, interp->n_libs, op_lib_t *);
 
     init_func = get_dynamic_op_lib_init(interp, lib_pmc);
@@ -585,15 +585,14 @@
     const size_t n_tot    = n_old + n_new;
     op_func_t   *ops_addr = NULL;
     op_lib_t    *cg_lib   = init_func(interp, 1);
-    op_lib_t    *new_lib;
 
 #if 0
     /* related to CG and CGP ops issue below */
+    op_lib_t    *new_lib;
     STRING *op_variant;
-#endif
-
     oplib_init_f new_init_func;
     PMC *lib_variant;
+#endif
 
     if (cg_lib->flags & OP_FUNC_IS_ALLOCATED) {
         ops_addr = mem_gc_realloc_n_typed_zeroed(interp,

Modified: branches/pcc_hackathon_6Mar10/src/string/api.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/string/api.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/string/api.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -73,6 +73,25 @@
 
 /*
 
+=item C<INTVAL Parrot_str_is_null(PARROT_INTERP, const STRING *s)>
+
+Tests if the given STRING is STRINGNULL.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+INTVAL
+Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
+{
+    ASSERT_ARGS(Parrot_str_is_null)
+    return !s || s == STRINGNULL;
+}
+
+
+/*
+
 =item C<INTVAL STRING_is_null(PARROT_INTERP, const STRING *s)>
 
 Tests if the given STRING is STRINGNULL.
@@ -2822,9 +2841,6 @@
     const CHARSET  *charset;
     const ENCODING *encoding = NULL;
 
-    /* the default encoding is ascii */
-    const char     *enc_name = enc_char ? enc_char : "ascii";
-
     /* does the encoding have a character set? */
     const char     *p        = enc_char ? strchr(enc_char, ':') : NULL;
     size_t          clength  = strlen(cstring);

Modified: branches/pcc_hackathon_6Mar10/src/thread.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/thread.c	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/thread.c	Tue Mar 16 22:37:03 2010	(r44975)
@@ -97,10 +97,6 @@
         __attribute__nonnull__(1);
 
 PARROT_CAN_RETURN_NULL
-static QUEUE_ENTRY * remove_queued_suspend_gc(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
 static void* thread_func(ARGIN_NULLOK(void *arg));
 
 #define ASSERT_ARGS_detach __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -140,8 +136,6 @@
     , PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pt_thread_wait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_remove_queued_suspend_gc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_thread_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
@@ -963,62 +957,6 @@
 
 /*
 
-=item C<static QUEUE_ENTRY * remove_queued_suspend_gc(PARROT_INTERP)>
-
-Removes an event requesting that the interpreter suspend itself for a
-garbage-collection run from the event queue.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static QUEUE_ENTRY *
-remove_queued_suspend_gc(PARROT_INTERP)
-{
-    ASSERT_ARGS(remove_queued_suspend_gc)
-    parrot_event *ev    = NULL;
-    QUEUE * const queue = interp->task_queue;
-    QUEUE_ENTRY  *prev  = NULL;
-    QUEUE_ENTRY  *cur;
-
-    queue_lock(queue);
-    cur = queue->head;
-
-    while (cur) {
-        ev   = (parrot_event *)cur->data;
-
-        if (ev->type == EVENT_TYPE_SUSPEND_FOR_GC)
-            break;
-
-        prev = cur;
-        cur  = cur->next;
-    }
-
-    if (cur) {
-        if (prev)
-            prev->next  = cur->next;
-        else
-            queue->head = cur->next;
-
-        if (cur == queue->tail)
-            queue->tail = prev;
-
-        if (cur == queue->head)
-            queue->head = cur->next;
-
-        mem_internal_free(ev);
-        mem_internal_free(cur);
-        cur = NULL;
-        DEBUG_ONLY(fprintf(stderr, "%p: remove_queued_suspend_gc: got one\n", interp));
-    }
-
-    queue_unlock(queue);
-    return cur;
-}
-
-/*
-
 =item C<static int pt_gc_count_threads(PARROT_INTERP)>
 
 Returns the number of active threads in the system (running or suspended).  Be

Deleted: branches/pcc_hackathon_6Mar10/src/tsq.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/tsq.c	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,426 +0,0 @@
-/*
-Copyright (C) 2001-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/tsq.c - Thread-safe queues
-
-=head1 DESCRIPTION
-
-This file implements thread-safe queues for Parrot.
-
-=head2 Functions
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-
-/* HEADERIZER HFILE: include/parrot/tsq.h */
-
-/*
-
-=item C<QUEUE_ENTRY * pop_entry(QUEUE *queue)>
-
-Does a synchronized removal of the head entry off the queue and returns it.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY *
-pop_entry(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(pop_entry)
-    QUEUE_ENTRY *returnval;
-    queue_lock(queue);
-    returnval = nosync_pop_entry(queue);
-    queue_unlock(queue);
-    return returnval;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * peek_entry(const QUEUE *queue)>
-
-This does no locking, so the result might have changed by the time you
-get the entry, but a synchronized C<pop_entry()> will check again and
-return C<NULL> if the queue is empty.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-QUEUE_ENTRY *
-peek_entry(ARGIN(const QUEUE *queue))
-{
-    ASSERT_ARGS(peek_entry)
-    return queue->head;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * nosync_pop_entry(QUEUE *queue)>
-
-Grab an entry off the queue with no synchronization. Internal only,
-because it's darned evil and shouldn't be used outside the module. It's
-in here so we don't have to duplicate pop code.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-QUEUE_ENTRY *
-nosync_pop_entry(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(nosync_pop_entry)
-    QUEUE_ENTRY *returnval;
-    if (!queue->head) {
-        return NULL;
-    }
-    returnval = queue->head;
-    if (queue->head == queue->tail) {
-        queue->head = NULL;
-        queue->tail = NULL;
-    }
-    else {
-        queue->head = queue->head->next;
-    }
-    returnval->next = NULL;
-    return returnval;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * wait_for_entry(QUEUE *queue)>
-
-Does a synchronized removal of the head entry off the queue, waiting if
-necessary until there is an entry, and then returns it.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY *
-wait_for_entry(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(wait_for_entry)
-    QUEUE_ENTRY *returnval;
-
-    queue_lock(queue);
-    while (queue->head == NULL) {
-        queue_wait(queue);
-    }
-    returnval = nosync_pop_entry(queue);
-    queue_unlock(queue);
-    return returnval;
-
-}
-
-/*
-
-=item C<void push_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insertion of C<entry> onto the tail of the queue.
-
-=cut
-
-*/
-
-void
-push_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(push_entry)
-    queue_lock(queue);
-    /* Is there something in the queue? */
-    if (queue->tail) {
-        queue->tail->next = entry;
-        queue->tail = entry;
-    }
-    else {
-        queue->head = entry;
-        queue->tail = entry;
-    }
-    queue_signal(queue);        /* assumes only one waiter */
-    queue_unlock(queue);
-}
-
-/*
-
-=item C<void unshift_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insertion of C<entry> into the head of the queue.
-
-=cut
-
-*/
-
-void
-unshift_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(unshift_entry)
-    QUEUE_ENTRY *cur;
-
-    queue_lock(queue);
-    cur = queue->head;
-    if (!cur) {
-        /* empty just set head */
-        queue->head = entry;
-        queue->tail = entry;
-    }
-    else {
-        queue->head = entry;
-        entry->next = cur;
-    }
-    queue_signal(queue);
-    queue_unlock(queue);
-}
-
-/*
-
-=item C<void nosync_insert_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Inserts a timed event according to C<abstime>. The caller has to hold the
-queue mutex.
-
-=cut
-
-*/
-
-void
-nosync_insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(nosync_insert_entry)
-    QUEUE_ENTRY *cur = queue->head;
-    QUEUE_ENTRY *prev;
-    parrot_event *event;
-    FLOATVAL abs_time;
-
-    PARROT_ASSERT(entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT);
-    /*
-     * empty queue - just insert
-     */
-    if (!cur) {
-        queue->head = entry;
-        queue->tail = entry;
-        return;
-    }
-
-    prev     = NULL;
-    event    = (parrot_event *)entry->data;
-    abs_time = event->u.timer_event.abs_time;
-
-    while (cur && cur->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-        const parrot_event * const cur_event = (parrot_event *)cur->data;
-        if (abs_time > cur_event->u.timer_event.abs_time) {
-            prev = cur;
-            cur = cur->next;
-        }
-        else
-            break;
-    }
-    if (!prev)
-        queue->head = entry;
-    else {
-        prev->next = entry;
-        if (prev == queue->tail)
-            queue->tail = entry;
-    }
-    entry->next = cur;
-}
-
-/*
-
-=item C<void insert_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insert of C<entry>.
-
-=cut
-
-*/
-
-void
-insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(insert_entry)
-    queue_lock(queue);
-    nosync_insert_entry(queue, entry);
-    queue_signal(queue);
-    queue_unlock(queue);
-}
-
-/*
-
-=item C<void queue_lock(QUEUE *queue)>
-
-Locks the queue's mutex.
-
-=cut
-
-*/
-
-void
-queue_lock(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_lock)
-    LOCK(queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_unlock(QUEUE *queue)>
-
-Unlocks the queue's mutex.
-
-=cut
-
-*/
-
-void
-queue_unlock(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_unlock)
-    UNLOCK(queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_broadcast(QUEUE *queue)>
-
-This function wakes up I<every> thread waiting on the queue.
-
-=cut
-
-*/
-
-void
-queue_broadcast(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_broadcast)
-    COND_BROADCAST(queue->queue_condition);
-}
-
-/*
-
-=item C<void queue_signal(QUEUE *queue)>
-
-=cut
-
-*/
-
-void
-queue_signal(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_signal)
-    COND_SIGNAL(queue->queue_condition);
-}
-
-/*
-
-=item C<void queue_wait(QUEUE *queue)>
-
-Instructs the queue to wait.
-
-=cut
-
-*/
-
-void
-queue_wait(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_wait)
-    COND_WAIT(queue->queue_condition, queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_timedwait(QUEUE *queue, const struct timespec *abs_time)>
-
-Instructs the queue to wait for C<abs_time> seconds (?).
-
-=cut
-
-*/
-
-void
-queue_timedwait(ARGMOD(QUEUE *queue), ARGIN(const struct timespec *abs_time))
-{
-    ASSERT_ARGS(queue_timedwait)
-    COND_TIMED_WAIT(queue->queue_condition, queue->queue_mutex, abs_time);
-}
-
-/*
-
-=item C<QUEUE* queue_init(UINTVAL prio)>
-
-Initializes the queue, setting C<prio> as the queue's priority.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_MALLOC
-QUEUE*
-queue_init(UINTVAL prio)
-{
-    ASSERT_ARGS(queue_init)
-    QUEUE * const queue = mem_internal_allocate_typed(QUEUE);
-
-    queue->head = queue->tail = NULL;
-    queue->max_prio = prio;
-    COND_INIT(queue->queue_condition);
-    MUTEX_INIT(queue->queue_mutex);
-    return queue;
-}
-
-/*
-
-=item C<void queue_destroy(QUEUE *queue)>
-
-Destroys the queue, raising an exception if it is not empty.
-
-=cut
-
-*/
-
-void
-queue_destroy(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_destroy)
-    if (peek_entry(queue))
-        exit_fatal(1, "Queue not empty on destroy");
-
-    COND_DESTROY(queue->queue_condition);
-    MUTEX_DESTROY(queue->queue_mutex);
-    mem_internal_free(queue);
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/tsq.h>.
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/pcc_hackathon_6Mar10/src/vtable.tbl
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/vtable.tbl	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/src/vtable.tbl	Tue Mar 16 22:37:03 2010	(r44975)
@@ -281,3 +281,5 @@
 void share()
 
 PMC* share_ro()
+
+void init_int(INTVAL initializer)

Modified: branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -121,7 +121,6 @@
 src/string/charset/binary.c
 src/string/charset/iso-8859-1.c
 src/string/charset/unicode.c
-src/tsq.c
 
 # Local Variables:
 #   mode: cperl

Modified: branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -40,7 +40,13 @@
 use Parrot::Distribution;
 use Test::More;
 
-# There's no point in continuing if we're missing some certain modules.
+# There's no point in continuing if we're missing some certain modules, or
+# if the developer doesn't want to.
+
+if (exists $ENV{'PARROT_TEST_NO_PERLCRITIC'}) {
+  give_up('absence of PARROT_TEST_NO_PERLCRITIC environment variable');
+}
+
 eval { require Test::Perl::Critic };
 if ($@) {
   give_up('Test::Perl::Critic');

Modified: branches/pcc_hackathon_6Mar10/t/configure/034-step.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/configure/034-step.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/configure/034-step.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -114,7 +114,7 @@
         \$stderr
     );
     ok($rv, "genfile() returned true when warning expected" );
-    like( $stderr, qr/value for 'foobar'/, "got expected warning" );
+    like( $stderr, qr/value for '\@foobar\@'/, "got expected warning" );
 
     unlink $dummy or croak "Unable to delete file after testing";
     chdir $cwd    or croak "Unable to change back to starting directory";

Deleted: branches/pcc_hackathon_6Mar10/t/dynoplibs/random-range.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/dynoplibs/random-range.t	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,369 +0,0 @@
-#! parrot
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/dynoplibs/random-range.t - Tests random range behavior of math_ops lib.
-
-=head1 SYNOPSIS
-
-        % prove t/dynoblibs/random-range.t
-
-=head1 DESCRIPTION
-
-Tests random range using chi-square
-
-=cut
-
-.loadlib 'math_ops'
-.sub add_chi2_entry
-	.param pmc table
-	.param int nu
-	.param num p_10
-	.param num p_05
-	.param num p_025
-	.param num p_01
-	.param num p_001
-
-	$P0 = new ['FixedFloatArray']
-	$P0 = 5
-
-	$P0[0] = p_10
-	$P0[1] = p_05
-	$P0[2] = p_025
-	$P0[3] = p_01
-	$P0[4] = p_001
-
-	table[nu] = $P0
-.end
-
-.sub compute_chi_square
-	.param pmc histogram
-	.param int num_samples
-
-	.local int possible_values
-	possible_values = elements histogram
-
-	.local num expected
-	expected = num_samples
-	expected /= possible_values
-
-	.local num K
-	K = 0.0
-
-	$I0 = possible_values
-	if $I0 == 0 goto end
-chi2_loop:
-	dec $I0
-
-	# Compute:  (O - E)^2 / E
-	$N0 = histogram[$I0]
-	$N0 -= expected
-	$N0 *= $N0
-	$N0 /= expected
-
-	K += $N0
-
-	unless $I0 == 0 goto chi2_loop
-
-	#~ print "Chi-squared K is: "
-	#~ say K
-end:
-	.return (K)
-.end
-
-.sub make_chi2_table
-	# This info comes from http://itl.nist.gov/div898/handbook/eda/section3/eda3674.htm
-	# Obtained 26 Feb 2010 -- Austin
-
-	#	Probability of exceeding the critical value
-	# nu	0.10	0.05	0.025	0.01	0.001
-
-	.local pmc table
-	table = new ['ResizablePMCArray']
-
-	add_chi2_entry(table, 1, 2.706, 3.841, 5.024, 6.635, 10.828)
-	add_chi2_entry(table, 2, 4.605, 5.991, 7.378, 9.210, 13.816)
-	add_chi2_entry(table, 3, 6.251, 7.815, 9.348, 11.345, 16.266)
-	add_chi2_entry(table, 4, 7.779, 9.488, 11.143, 13.277, 18.467)
-	add_chi2_entry(table, 5, 9.236, 11.070, 12.833, 15.086, 20.515)
-	add_chi2_entry(table, 6, 10.645, 12.592, 14.449, 16.812, 22.458)
-	add_chi2_entry(table, 7, 12.017, 14.067, 16.013, 18.475, 24.322)
-	add_chi2_entry(table, 8, 13.362, 15.507, 17.535, 20.090, 26.125)
-	add_chi2_entry(table, 9, 14.684, 16.919, 19.023, 21.666, 27.877)
-	add_chi2_entry(table, 10, 15.987, 18.307, 20.483, 23.209, 29.588)
-	add_chi2_entry(table, 11, 17.275, 19.675, 21.920, 24.725, 31.264)
-	add_chi2_entry(table, 12, 18.549, 21.026, 23.337, 26.217, 32.910)
-	add_chi2_entry(table, 13, 19.812, 22.362, 24.736, 27.688, 34.528)
-	add_chi2_entry(table, 14, 21.064, 23.685, 26.119, 29.141, 36.123)
-	add_chi2_entry(table, 15, 22.307, 24.996, 27.488, 30.578, 37.697)
-	add_chi2_entry(table, 16, 23.542, 26.296, 28.845, 32.000, 39.252)
-	add_chi2_entry(table, 17, 24.769, 27.587, 30.191, 33.409, 40.790)
-	add_chi2_entry(table, 18, 25.989, 28.869, 31.526, 34.805, 42.312)
-	add_chi2_entry(table, 19, 27.204, 30.144, 32.852, 36.191, 43.820)
-	add_chi2_entry(table, 20, 28.412, 31.410, 34.170, 37.566, 45.315)
-	add_chi2_entry(table, 21, 29.615, 32.671, 35.479, 38.932, 46.797)
-	add_chi2_entry(table, 22, 30.813, 33.924, 36.781, 40.289, 48.268)
-	add_chi2_entry(table, 23, 32.007, 35.172, 38.076, 41.638, 49.728)
-	add_chi2_entry(table, 24, 33.196, 36.415, 39.364, 42.980, 51.179)
-	add_chi2_entry(table, 25, 34.382, 37.652, 40.646, 44.314, 52.620)
-	add_chi2_entry(table, 26, 35.563, 38.885, 41.923, 45.642, 54.052)
-	add_chi2_entry(table, 27, 36.741, 40.113, 43.195, 46.963, 55.476)
-	add_chi2_entry(table, 28, 37.916, 41.337, 44.461, 48.278, 56.892)
-	add_chi2_entry(table, 29, 39.087, 42.557, 45.722, 49.588, 58.301)
-	add_chi2_entry(table, 30, 40.256, 43.773, 46.979, 50.892, 59.703)
-	add_chi2_entry(table, 31, 41.422, 44.985, 48.232, 52.191, 61.098)
-	add_chi2_entry(table, 32, 42.585, 46.194, 49.480, 53.486, 62.487)
-	add_chi2_entry(table, 33, 43.745, 47.400, 50.725, 54.776, 63.870)
-	add_chi2_entry(table, 34, 44.903, 48.602, 51.966, 56.061, 65.247)
-	add_chi2_entry(table, 35, 46.059, 49.802, 53.203, 57.342, 66.619)
-	add_chi2_entry(table, 36, 47.212, 50.998, 54.437, 58.619, 67.985)
-	add_chi2_entry(table, 37, 48.363, 52.192, 55.668, 59.893, 69.347)
-	add_chi2_entry(table, 38, 49.513, 53.384, 56.896, 61.162, 70.703)
-	add_chi2_entry(table, 39, 50.660, 54.572, 58.120, 62.428, 72.055)
-	add_chi2_entry(table, 40, 51.805, 55.758, 59.342, 63.691, 73.402)
-	add_chi2_entry(table, 41, 52.949, 56.942, 60.561, 64.950, 74.745)
-	add_chi2_entry(table, 42, 54.090, 58.124, 61.777, 66.206, 76.084)
-	add_chi2_entry(table, 43, 55.230, 59.304, 62.990, 67.459, 77.419)
-	add_chi2_entry(table, 44, 56.369, 60.481, 64.201, 68.710, 78.750)
-	add_chi2_entry(table, 45, 57.505, 61.656, 65.410, 69.957, 80.077)
-	add_chi2_entry(table, 46, 58.641, 62.830, 66.617, 71.201, 81.400)
-	add_chi2_entry(table, 47, 59.774, 64.001, 67.821, 72.443, 82.720)
-	add_chi2_entry(table, 48, 60.907, 65.171, 69.023, 73.683, 84.037)
-	add_chi2_entry(table, 49, 62.038, 66.339, 70.222, 74.919, 85.351)
-	add_chi2_entry(table, 50, 63.167, 67.505, 71.420, 76.154, 86.661)
-	add_chi2_entry(table, 51, 64.295, 68.669, 72.616, 77.386, 87.968)
-	add_chi2_entry(table, 52, 65.422, 69.832, 73.810, 78.616, 89.272)
-	add_chi2_entry(table, 53, 66.548, 70.993, 75.002, 79.843, 90.573)
-	add_chi2_entry(table, 54, 67.673, 72.153, 76.192, 81.069, 91.872)
-	add_chi2_entry(table, 55, 68.796, 73.311, 77.380, 82.292, 93.168)
-	add_chi2_entry(table, 56, 69.919, 74.468, 78.567, 83.513, 94.461)
-	add_chi2_entry(table, 57, 71.040, 75.624, 79.752, 84.733, 95.751)
-	add_chi2_entry(table, 58, 72.160, 76.778, 80.936, 85.950, 97.039)
-	add_chi2_entry(table, 59, 73.279, 77.931, 82.117, 87.166, 98.324)
-	add_chi2_entry(table, 60, 74.397, 79.082, 83.298, 88.379, 99.607)
-	add_chi2_entry(table, 61, 75.514, 80.232, 84.476, 89.591, 100.888)
-	add_chi2_entry(table, 62, 76.630, 81.381, 85.654, 90.802, 102.166)
-	add_chi2_entry(table, 63, 77.745, 82.529, 86.830, 92.010, 103.442)
-	add_chi2_entry(table, 64, 78.860, 83.675, 88.004, 93.217, 104.716)
-	add_chi2_entry(table, 65, 79.973, 84.821, 89.177, 94.422, 105.988)
-	add_chi2_entry(table, 66, 81.085, 85.965, 90.349, 95.626, 107.258)
-	add_chi2_entry(table, 67, 82.197, 87.108, 91.519, 96.828, 108.526)
-	add_chi2_entry(table, 68, 83.308, 88.250, 92.689, 98.028, 109.791)
-	add_chi2_entry(table, 69, 84.418, 89.391, 93.856, 99.228, 111.055)
-	add_chi2_entry(table, 70, 85.527, 90.531, 95.023, 100.425, 112.317)
-	add_chi2_entry(table, 71, 86.635, 91.670, 96.189, 101.621, 113.577)
-	add_chi2_entry(table, 72, 87.743, 92.808, 97.353, 102.816, 114.835)
-	add_chi2_entry(table, 73, 88.850, 93.945, 98.516, 104.010, 116.092)
-	add_chi2_entry(table, 74, 89.956, 95.081, 99.678, 105.202, 117.346)
-	add_chi2_entry(table, 75, 91.061, 96.217, 100.839, 106.393, 118.599)
-	add_chi2_entry(table, 76, 92.166, 97.351, 101.999, 107.583, 119.850)
-	add_chi2_entry(table, 77, 93.270, 98.484, 103.158, 108.771, 121.100)
-	add_chi2_entry(table, 78, 94.374, 99.617, 104.316, 109.958, 122.348)
-	add_chi2_entry(table, 79, 95.476, 100.749, 105.473, 111.144, 123.594)
-	add_chi2_entry(table, 80, 96.578, 101.879, 106.629, 112.329, 124.839)
-	add_chi2_entry(table, 81, 97.680, 103.010, 107.783, 113.512, 126.083)
-	add_chi2_entry(table, 82, 98.780, 104.139, 108.937, 114.695, 127.324)
-	add_chi2_entry(table, 83, 99.880, 105.267, 110.090, 115.876, 128.565)
-	add_chi2_entry(table, 84, 100.980, 106.395, 111.242, 117.057, 129.804)
-	add_chi2_entry(table, 85, 102.079, 107.522, 112.393, 118.236, 131.041)
-	add_chi2_entry(table, 86, 103.177, 108.648, 113.544, 119.414, 132.277)
-	add_chi2_entry(table, 87, 104.275, 109.773, 114.693, 120.591, 133.512)
-	add_chi2_entry(table, 88, 105.372, 110.898, 115.841, 121.767, 134.746)
-	add_chi2_entry(table, 89, 106.469, 112.022, 116.989, 122.942, 135.978)
-	add_chi2_entry(table, 90, 107.565, 113.145, 118.136, 124.116, 137.208)
-	add_chi2_entry(table, 91, 108.661, 114.268, 119.282, 125.289, 138.438)
-	add_chi2_entry(table, 92, 109.756, 115.390, 120.427, 126.462, 139.666)
-	add_chi2_entry(table, 93, 110.850, 116.511, 121.571, 127.633, 140.893)
-	add_chi2_entry(table, 94, 111.944, 117.632, 122.715, 128.803, 142.119)
-	add_chi2_entry(table, 95, 113.038, 118.752, 123.858, 129.973, 143.344)
-	add_chi2_entry(table, 96, 114.131, 119.871, 125.000, 131.141, 144.567)
-	add_chi2_entry(table, 97, 115.223, 120.990, 126.141, 132.309, 145.789)
-	add_chi2_entry(table, 98, 116.315, 122.108, 127.282, 133.476, 147.010)
-	add_chi2_entry(table, 99, 117.407, 123.225, 128.422, 134.642, 148.230)
-	add_chi2_entry(table, 100, 118.498, 124.342, 129.561, 135.807, 149.449)
-
-	.return (table)
-.end
-
-.sub make_random_hist
-	.param int min
-	.param int max
-	.param int num_samples
-
-	if max > min goto get_pv
-	die "Max must be > min"
-
-get_pv:
-	.local int possible_values
-	possible_values = max - min
-	inc possible_values
-
-	.local pmc histogram
-	histogram = new ['FixedIntegerArray']
-	histogram = possible_values
-
-	$I0 = max - min
-init:
-	histogram[$I0] = 0
-	dec $I0
-	unless $I0 < 0 goto init
-
-	$I0 = num_samples
-	if $I0 == 0 goto loop_done
-loop:
-	.local int random
-	random = rand min, max
-
-	random -= min
-	$I1 = histogram[random]
-	inc $I1
-	histogram[random] = $I1
-
-	dec $I0
-	unless $I0 <= 0 goto loop
-loop_done:
-
-	.return (histogram)
-.end
-
-.sub print_histogram
-	.param pmc histogram
-	.param int num_samples
-
-	.local num expected
-	expected = num_samples
-	$I0 = elements histogram
-	expected /= $I0
-
-	.local pmc sprintf_args
-	sprintf_args = new ['FixedPMCArray']
-	sprintf_args = 2
-
-	$I0 = elements histogram
-hist_loop:
-	dec $I0
-
-	$N0 = histogram[$I0]
-	$N0 /= expected
-	$P0 = box $N0
-	sprintf_args[0] = $P0
-
-	$N1 = $N0 * 40
-	$I1 = $N1
-	$I1 -= 6	# width of printed $N0, plus space
-	if $I1 > 0 goto make_stars
-	$I1 = 0
-make_stars:
-
-	$S0 = repeat '*', $I1
-	$P0 = box $S0
-	sprintf_args[1] = $P0
-
-	$S0 = sprintf "%5.3f %s", sprintf_args
-	say $S0
-
-	unless $I0 <= 0 goto hist_loop
-
-end:
-.end
-
-.sub test_histogram
-	.param pmc histogram
-	.param num K
-	.param pmc table
-
-	.local int degrees_of_freedom
-	$I0 = elements histogram
-	degrees_of_freedom = $I0 - 1
-
-	.local pmc sprintf_args
-	sprintf_args = new ['ResizablePMCArray']
-	$P0 = box degrees_of_freedom
-	push sprintf_args, $P0
-
-	$I0 = exists table[degrees_of_freedom]
-	if $I0 goto get_data
-
-	$S0 = sprintf "Don't have chi2 data for %d degrees of freedom", sprintf_args
-	skip(1, $S0)
-	goto end
-
-get_data:
-
-	.local pmc chi2_data
-	chi2_data = table[degrees_of_freedom]
-	$N0 = chi2_data[0]
-
-	$I0 = islt K, $N0
-
-	$P0 = box $N0
-	unshift sprintf_args, $P0
-	$P0= box K
-	unshift sprintf_args, $P0
-
-	$S0 = sprintf "K (%5.3f) should be less than limit (%5.3f) for %d degrees of freedom", sprintf_args
-	todo($I0, $S0)
-
-end:
-	.return ($I0)
-.end
-
-.sub test_random_range
-	.param int range
-	.param int times
-	.param pmc table
-
-	.local int num_samples
-	num_samples = range * times
-
-	.local int min, max
-	min = 10
-	max = min + range
-
-	.local pmc histogram
-	histogram = make_random_hist(min, max, num_samples)
-
-	.local num K
-	K = compute_chi_square(histogram, num_samples)
-
-	$I0 = test_histogram(histogram, K, table)
-
-	#if $I0 goto end
-	#print_histogram(histogram, num_samples)
-end:
-.end
-
-.sub main :main
-	.include 'test_more.pir'
-
-	.const int TIMES = 10000
-
-	.local int num_tries
-	num_tries = 101
-
-	plan(num_tries)
-
-	$S0 = "Running tests expecting #TIMES# hits per bucket"
-	$P0 = split '#', $S0
-	$S0 = TIMES
-	$P0[1] = $S0
-	$S0 = join '', $P0
-	diag($S0)
-
-	.local pmc table
-	table = make_chi2_table()
-
-	$I0 = 0
-loop:
-	inc $I0
-	test_random_range($I0, TIMES, table)
-	if $I0 < num_tries goto loop
-
-.end
-# Local Variables:
-#   mode: pir
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:

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

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

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

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

Modified: branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -18,11 +18,12 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(12)
+    plan(13)
 
     newclass_tests()
     subclass_tests()
     vtable_implies_self_tests()
+    anon_vtable_tests()
 .end
 
 .sub 'newclass_tests'
@@ -88,6 +89,21 @@
   ok( $I0, ':vtable should imply the self parameter' )
 .end
 
+
+.sub 'anon_vtable_tests'
+    $P0 = newclass "AnonVtableType"
+    $P1 = new 'AnonVtableType'
+    push_eh anon_does_not_work
+    $S0 = $P1
+    is($S0, "foo", "can have :vtable :anon")
+    goto anon_end
+  anon_does_not_work:
+    ok(0, "can not have :anon :vtable")
+  anon_end:
+    pop_eh
+.end
+
+
 .namespace [ 'MyObject' ]
 
 .sub '__onload' :anon :init
@@ -171,6 +187,14 @@
     .return( 1 )
 .end
 
+
+.namespace [ 'AnonVtableType' ]
+
+.sub '' :vtable('get_string') :method :anon
+    .return("foo")
+.end
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/pcc_hackathon_6Mar10/t/op/arithmetics.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/arithmetics.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/arithmetics.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -19,6 +19,7 @@
 
 .sub main :main
     .include 'test_more.pir'
+    .include 'iglobals.pasm'
 
     plan(130)
 
@@ -153,18 +154,21 @@
 # print -0.0 as -0
 #
 .sub negate_minus_zero_point_zero
-    .include 'sysinfo.pasm'
-    $S9 = sysinfo .SYSINFO_PARROT_OS
+    .local pmc interp, config_hash
+    .local string has_negative_zero
+    interp = getinterp
+    config_hash = interp[.IGLOBALS_CONFIG_HASH]
+    has_negative_zero = config_hash['has_negative_zero']
 
     set $N0, 0
     neg $N0
     $S0 = $N0
-    if $S9 == 'MSWin32' goto Todo_test1
+    unless has_negative_zero goto Todo_test1
     is( $S0, "-0", '1' )
     goto End_test1
 Todo_test1:
     $I0 = $S0 == "-0"
-    todo($I0, 'Faulty on this platform')
+    todo($I0, 'negative zero, TT #313')
 End_test1:
 
     set $N0, -0.0
@@ -181,12 +185,12 @@
     set $N1, 1
     neg $N1, $N0
     $S0 = $N1
-    if $S9 == 'MSWin32' goto Todo_test4
+    unless has_negative_zero goto Todo_test4
     is( $S0, "-0", '4' )
     goto End_test4
 Todo_test4:
     $I0 = $S0 == "-0"
-    todo($I0, 'Faulty on this platform')
+    todo($I0, 'negative zero, TT #313')
 End_test4:
 .end
 

Modified: branches/pcc_hackathon_6Mar10/t/op/sprintf.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/sprintf.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/sprintf.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -106,8 +106,6 @@
     skip_tests = 'set_skip_info'()
 
     # how many tests to run?
-    # XXX: this should be summed automatically from test_files data
-    #      until then, it's set to no plan
     test.'plan'(TESTS)
 
   outer_loop:

Modified: branches/pcc_hackathon_6Mar10/t/op/trans.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/trans.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/trans.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -4,7 +4,7 @@
 
 =head1 NAME
 
-t/op/trans.t - Bitwise Ops
+t/op/trans.t - Trancendental Mathematical Ops
 
 =head1 SYNOPSIS
 
@@ -18,15 +18,29 @@
 
 .sub main :main
     .include 'test_more.pir'
+    .local num epsilon
+    epsilon = _epsilon()
 
-    plan(16)
+    plan(28)
 
-    test_sin_n()
-    test_sin_i()
-    test_cos_n()
-    test_cos_i()
-    test_tan_n()
-    test_tan_i()
+    test_sin_n(epsilon)
+    test_sin_i(epsilon)
+    test_cos_n(epsilon)
+    test_cos_i(epsilon)
+    test_tan_n(epsilon)
+    test_tan_i(epsilon)
+    test_sec_n(epsilon)
+    test_sec_i(epsilon)
+    test_atan_n(epsilon)
+    test_atan_i(epsilon)
+    test_asin_n(epsilon)
+    test_asin_i(epsilon)
+    test_acos_n(epsilon)
+    test_acos_i(epsilon)
+    test_asec_n(epsilon)
+    test_asec_i(epsilon)
+    test_cosh_n(epsilon)
+    test_cosh_i(epsilon)
 .end
 
 .sub _pi
@@ -42,8 +56,7 @@
 .end
 
 .sub test_sin_n
-    .local num epsilon
-    epsilon = _epsilon()
+    .param num epsilon
 
     $N0 = sin 0.0
     is($N0, 0.0, "sin(0.0)", epsilon)
@@ -62,8 +75,7 @@
 .end
 
 .sub test_sin_i
-    .local num epsilon
-    epsilon = _epsilon()
+    .param num epsilon
 
     $N0 = sin 0
     is($N0, 0.0, "sin(0)", epsilon)
@@ -73,8 +85,7 @@
 .end
 
 .sub test_cos_n
-    .local num epsilon
-    epsilon = _epsilon()
+    .param num epsilon
 
     $N0 = cos 0.0
     is($N0, 1.0, "cos(0.0)", epsilon)
@@ -93,8 +104,7 @@
 .end
 
 .sub test_cos_i
-    .local num epsilon
-    epsilon = _epsilon()
+    .param num epsilon
 
     $N0 = cos 0
     is($N0, 1.0, "cos(0)", epsilon)
@@ -104,8 +114,7 @@
 .end
 
 .sub test_tan_n
-    .local num epsilon
-    epsilon = _epsilon()
+    .param num epsilon
 
     $N0 = tan 0.0
     is($N0, 0.0, "tan(0.0)", epsilon)
@@ -115,8 +124,7 @@
 .end
 
 .sub test_tan_i
-    .local num epsilon
-    epsilon = _epsilon()
+    .param num epsilon
 
     $N0 = tan 0
     is($N0, 0.0, "tan(0)", epsilon)
@@ -125,6 +133,109 @@
     is($N0, 1.557408, "tan(1)", epsilon)
 .end
 
+.sub test_sec_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = sec $N1
+    is($N2, 1.850816, "sec(1.0)", epsilon)
+.end
+
+.sub test_sec_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = sec $I1
+    is($N1, 1.850816, "sec(1)", epsilon)
+.end
+
+.sub test_atan_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = atan $N1
+    is($N2, 0.785398, "atan(1.0)", epsilon)
+.end
+
+.sub test_atan_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = atan $I1
+    is($N1, 0.785398, "atan(1)", epsilon)
+.end
+
+.sub test_asin_n
+    .param num epsilon
+    .local num pi2
+    pi2 = _pi()
+    pi2 /= 2
+
+    $N1 = 1.0
+    $N2 = asin $N1
+    is($N2, pi2, "asin(1.0)", epsilon)
+.end
+
+.sub test_asin_i
+    .param num epsilon
+    .local num pi2
+    pi2 = _pi()
+    pi2 /= 2
+
+    $I1 = 1
+    $N1 = asin $I1
+    is($N1, pi2, "asin(1)", epsilon)
+.end
+
+.sub test_acos_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = acos $N1
+    is($N2, 0.0, "acos(1.0)", epsilon)
+.end
+
+.sub test_acos_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = acos $I1
+    is($N1, 0.0, "acos(1)", epsilon)
+.end
+
+.sub test_asec_n
+    .param num epsilon
+
+    $N1 = 1.0
+    $N2 = asec $N1
+    is($N2, 0.0, "asec(1.0)", epsilon)
+.end
+
+.sub test_asec_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = asec $I1
+    is($N1, 0.0, "asec(1)", epsilon)
+.end
+
+.sub test_cosh_n
+    .param num epsilon
+    .local num result
+
+    $N1 = 1.0
+    $N2 = cosh $N1
+    is($N2, 1.543081, "cosh(1.0)", epsilon)
+.end
+
+.sub test_cosh_i
+    .param num epsilon
+
+    $I1 = 1
+    $N1 = cosh $I1
+    is($N1, 1.543081, "cosh(1)", epsilon)
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/pcc_hackathon_6Mar10/t/op/trans_old.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/trans_old.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/trans_old.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 19;
+use Parrot::Test tests => 13;
 use Math::Trig qw( tan sec atan asin acos asec cosh sinh tanh sech );
 
 =head1 NAME
@@ -29,124 +29,6 @@
 # which will conditionally branch
 # to LABEL if abs(n,n) < epsilon
 
-pasm_output_is( <<"CODE", <<OUTPUT, "sec" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        sec N2, N1
-        .fp_eq_pasm  (N2, 1.850816, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        sec N2, I1
-        .fp_eq_pasm  (N2, 1.850816, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "atan" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        atan N2, N1
-        .fp_eq_pasm  (N2, 0.785398, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        atan N2, I1
-        .fp_eq_pasm  (N2,0.785398 , EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "asin" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        asin N2, N1
-        .fp_eq_pasm  (N2, 1.570796, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        asin N2, I1
-        .fp_eq_pasm  (N2, 1.570796 , EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "acos" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        acos N2, N1
-        .fp_eq_pasm  (N2, 0.000000, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        acos N2, I1
-        .fp_eq_pasm  (N2, 0.000000, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "asec" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        asec N2, N1
-        .fp_eq_pasm  (N2, 0.000000, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        asec N2, I1
-        .fp_eq_pasm  (N2, 0.000000, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "cosh" );
-        .include 'fp_equality.pasm'
-        set N1, 1.0
-        cosh N2, N1
-        .fp_eq_pasm  (N2, 1.543081, EQ1)
-        print "not "
-EQ1:    print "ok 1\\n"
-
-        set I1, 1
-        cosh N2, I1
-        .fp_eq_pasm  (N2, 1.543081, EQ2)
-        print "not "
-EQ2:    print "ok 2\\n"
-
-        end
-CODE
-ok 1
-ok 2
-OUTPUT
-
 my $runcore = $ENV{TEST_PROG_ARGS} || '';
 my @bsdtodo = (
     $runcore =~ /--runcore=jit/ &&  $^O =~ m/bsd/i

Modified: branches/pcc_hackathon_6Mar10/t/pmc/complex.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/complex.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/complex.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -21,7 +21,7 @@
     .include 'fp_equality.pasm'
     .include "iglobals.pasm"
 
-    plan(458)
+    plan(459)
 
     string_parsing()
     exception_malformed_string__real_part()
@@ -50,6 +50,7 @@
     instantiate__pir__s()
     test_complex_neg()
     test_clone()
+    test_freeze_thaw()
     test_sub()
     test_i_sub()
     sprintf_with_a_complex()
@@ -591,6 +592,14 @@
      .fp_eq_ok($N1, -3.0, '... nor to imag portion')
 .end
 
+.sub test_freeze_thaw
+    $P0 = new ['Complex']
+    set $P0, "1 - 3i"
+    $S0 = freeze $P0
+    $P1 = thaw $S0
+    is($P0, $P1, 'roundtrip serialize Complex PMC')
+.end
+
 .sub test_sub
     .local pmc d, f, c
     d = new ['Undef']

Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -17,12 +17,10 @@
 
 =cut
 
-.const int TESTS = 37
-
 .sub 'test' :main
     .include 'test_more.pir'
 
-    plan(TESTS)
+    plan(41)
 
     setting_array_size()
     resizing_not_allowed()
@@ -36,9 +34,11 @@
     truth()
     pmc_keys_and_values()
     freeze_thaw()
-    'clone'()
+    test_clone()
     get_iter()
     fill()
+    test_new_style_init()
+    test_invalid_init_tt1509()
 .end
 
 .sub 'setting_array_size'
@@ -244,7 +244,7 @@
     is($S0, '01001000100010010', 'FixedBooleanArray after thaw')
 .end
 
-.sub 'clone'
+.sub test_clone
     .local pmc fba1, fba2
     .local int i
     .local string s
@@ -332,6 +332,31 @@
 
 .end
 
+.sub test_new_style_init
+    $P0 = new 'FixedBooleanArray', 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements")
+
+    $P0 = new ['FixedBooleanArray'], 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+    throws_substring(<<'CODE', 'FixedBooleanArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+    .sub main
+        $P0 = new ['FixedBooleanArray'], -10
+    .end
+CODE
+
+    throws_substring(<<'CODE', 'FixedBooleanArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+    .sub main
+        $P0 = new 'FixedBooleanArray', -10
+    .end
+CODE
+.end
 
 # Local Variables:
 #   mode: pir

Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,5 +1,5 @@
 #! parrot
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -20,7 +20,7 @@
 .sub main :main
     .include 'fp_equality.pasm'
     .include 'test_more.pir'
-    plan(26)
+    plan(30)
 
     array_size_tests()
     element_set_tests()
@@ -30,6 +30,8 @@
     what_is_truth()
     interface_check()
     get_iter_test()
+    test_new_style_init()
+    test_invalid_init_tt1509()
 .end
 
 .sub array_size_tests
@@ -245,6 +247,31 @@
     is($S0, "1.1,99.99,-345.001,", "get_iter works")
 .end
 
+.sub test_new_style_init
+    $P0 = new 'FixedFloatArray', 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements")
+
+    $P0 = new ['FixedFloatArray'], 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+    throws_substring(<<'CODE', 'FixedFloatArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+    .sub main
+        $P0 = new ['FixedFloatArray'], -10
+    .end
+CODE
+
+    throws_substring(<<'CODE', 'FixedFloatArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+    .sub main
+        $P0 = new 'FixedFloatArray', -10
+    .end
+CODE
+.end
 
 # Local Variables:
 #   mode: pir

Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -19,18 +19,32 @@
 
 .sub 'main' :main
     .include 'test_more.pir'
-    plan(29)
+    plan(33)
 
-    'test_set_size'()       # 2 tests
-    'test_reset_size'()     # 1 test
-    'test_set_first'()      # 3 tests
-    'test_set_second'()     # 3 tests
-    'test_out_of_bounds'()  # 4 tests
-    'test_set_via_pmc'()    # 3 tests
-    'test_get_via_pmc'()    # 4 tests
-    'test_interface_done'() # 4 tests
-    'test_get_iter'()       # 1 test
-    'test_equality'()       # 5 tests
+    test_set_size()
+    test_reset_size()
+    test_set_first()
+    test_set_second()
+    test_out_of_bounds()
+    test_set_via_pmc()
+    test_get_via_pmc()
+    test_interface_done()
+    test_get_iter()
+    test_equality()
+    test_new_style_init()
+    test_invalid_init_tt1509()
+.end
+
+.sub 'test_new_style_init'
+    $P0 = new 'FixedIntegerArray', 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements")
+
+    $P0 = new ['FixedIntegerArray'], 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements for a key constant")
 .end
 
 .sub 'test_set_size'
@@ -235,6 +249,26 @@
     is(a1, a2, "Equal when second element same")
 .end
 
+.sub 'test_new_style_init'
+    $P0 = new ['FixedIntegerArray'], 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements")
+.end
+
+.sub test_invalid_init_tt1509
+    throws_substring(<<'CODE', 'FixedIntegerArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+    .sub main
+        $P0 = new ['FixedIntegerArray'], -10
+    .end
+CODE
+
+    throws_substring(<<'CODE', 'FixedIntegerArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+    .sub main
+        $P0 = new 'FixedIntegerArray', -10
+    .end
+CODE
+.end
 
 # Local Variables:
 #   mode: pir

Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -19,7 +19,7 @@
 
 .sub main :main
     .include 'test_more.pir'
-    plan(78)
+    plan(82)
     test_setting_array_size()
     test_assign_from_another()
     test_assign_self()
@@ -46,6 +46,8 @@
     test_splice()
     test_sort()
     test_exists()
+    test_new_style_init()
+    test_invalid_init_tt1509()
 .end
 
 .sub test_exists
@@ -666,6 +668,32 @@
     is($I0,1,'size of FixedPMCArray is 1')
 .end
 
+.sub 'test_new_style_init'
+    $P0 = new 'FixedPMCArray', 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements")
+
+    $P0 = new ['FixedPMCArray'], 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+    throws_substring(<<'CODE', 'Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+    .sub main
+        $P0 = new ['FixedPMCArray'], -10
+    .end
+CODE
+
+    throws_substring(<<'CODE', 'Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+    .sub main
+        $P0 = new 'FixedPMCArray', -10
+    .end
+CODE
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -19,25 +19,27 @@
 
 .sub 'main' :main
     .include 'test_more.pir'
-    plan(46)
+    plan(50)
 
-    'test_set_size'()       # 2 tests
-    'test_reset_size'()     # 1 test
-    'test_set_first'()      # 3 tests
-    'test_set_second'()     # 3 tests
-    'test_out_of_bounds'()  # 4 tests
-    'test_set_via_pmc'()    # 3 tests
-    'test_get_via_pmc'()    # 4 tests
-    'test_interface_done'() # 3 tests
-    'test_clone'()          # 3 tests
-    'test_clone_unitialized'() # 2 tests
-    'test_truth'()          # 2 tests
-    'test_get_iter'()       # 1 test
-    'test_freez_thaw'()     # 1 test
-    'test_get_string'()     # 1 test
-    'test_equality'()       # 5 tests
-    'test_gc'()             # 4 tests
-    'test_number'()         # 2 tests
+    test_set_size()
+    test_reset_size()
+    test_set_first()
+    test_set_second()
+    test_out_of_bounds()
+    test_set_via_pmc()
+    test_get_via_pmc()
+    test_interface_done()
+    test_clone()
+    test_clone_unitialized()
+    test_truth()
+    test_get_iter()
+    test_freez_thaw()
+    test_get_string()
+    test_equality()
+    test_gc()
+    test_number()
+    test_new_style_init()
+    test_invalid_init_tt1509()
 .end
 
 .sub 'test_set_size'
@@ -376,6 +378,31 @@
     is($N0, 3.0, "get_number returns correct size")
 .end
 
+.sub 'test_new_style_init'
+    $P0 = new 'FixedStringArray', 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements")
+
+    $P0 = new ['FixedStringArray'], 10
+
+    $I0 = $P0
+    is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+    throws_substring(<<'CODE', 'FixedStringArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+    .sub main
+        $P0 = new ['FixedStringArray'], -10
+    .end
+CODE
+
+    throws_substring(<<'CODE', 'FixedStringArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+    .sub main
+        $P0 = new 'FixedStringArray', -10
+    .end
+CODE
+.end
 
 # Local Variables:
 #   mode: pir

Modified: branches/pcc_hackathon_6Mar10/t/pmc/float.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/float.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/float.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -342,7 +342,7 @@
     neg $P0
 
     $S0 = $P0
-    is($S0, "-0")
+    is($S0, "-0", "negative 0.0 to string")
     .return ()
 
   negative_zero_todoed:

Modified: branches/pcc_hackathon_6Mar10/t/pmc/nci.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/nci.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/nci.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,12 +1,12 @@
 #! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 71;
+use Parrot::Test;
 use Parrot::Config qw(%PConfig);
 
 =head1 NAME
@@ -34,8 +34,9 @@
 
 SKIP: {
     unless ( -e "runtime/parrot/dynext/libnci_test$PConfig{load_ext}" ) {
-        skip( "Please make libnci_test$PConfig{load_ext}", Test::Builder->expected_tests() );
+        plan skip_all => "Please make libnci_test$PConfig{load_ext}";
     }
+    plan tests => 71;
 
     pir_output_is( << 'CODE', << 'OUTPUT', 'load library fails' );
 .sub test :main

Modified: branches/pcc_hackathon_6Mar10/t/pmc/signal.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/signal.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/signal.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -22,8 +22,7 @@
 
 =cut
 
-# actually more platforms should work - all POSIX compliant ones - but
-# signals are currently not enabled for all in src/events.c
+# actually more platforms should work - all POSIX compliant ones
 # a second problem is to get the test doing the right thing: mainly figuring
 # out what PID to kill. The "ps" command isn't one of the portable ones.
 

Modified: branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  45;
+use Test::More tests =>  25;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::auto::cgoto');
@@ -37,10 +37,6 @@
 my $ret = $step->runstep($conf);
 ok( $ret, "runstep() returned true value" );
 ok(defined($step->result()), "A result was defined");
-ok(defined($conf->data->get('TEMP_cg_h')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_c')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_o')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_r')), "An attribute has been defined");
 ok(defined($conf->data->get('cg_flag')), "An attribute has been defined");
 
 $conf->replenish($serialized);
@@ -68,18 +64,10 @@
 ########### _evaluate_cgoto() ###########
 
 $step->_evaluate_cgoto($conf, 1);
-ok($conf->data->get('TEMP_cg_h'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_c'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_o'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_r'), "An attribute was set to true value");
 ok($conf->data->get('cg_flag'), "An attribute was set to true value");
 is($step->result(), q{yes}, "Expected result was set");
 
 $step->_evaluate_cgoto($conf, 0);
-is($conf->data->get('TEMP_cg_h'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_c'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_o'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_r'), q{}, "An attribute was set to empty string");
 is($conf->data->get('cg_flag'), q{}, "An attribute was set to empty string");
 is($step->result(), q{no}, "Expected result was set");
 
@@ -99,10 +87,6 @@
         sub { $step->_evaluate_cgoto($conf, 1) },
         \$stdout
     );
-    ok($conf->data->get('TEMP_cg_h'), "An attribute was set to true value");
-    ok($conf->data->get('TEMP_cg_c'), "An attribute was set to true value");
-    ok($conf->data->get('TEMP_cg_o'), "An attribute was set to true value");
-    ok($conf->data->get('TEMP_cg_r'), "An attribute was set to true value");
     ok($conf->data->get('cg_flag'), "An attribute was set to true value");
     is($step->result(), q{yes}, "Expected result was set");
 }
@@ -113,14 +97,6 @@
         sub { $step->_evaluate_cgoto($conf, 0) },
         \$stdout
     );
-    is($conf->data->get('TEMP_cg_h'), q{},
-        "An attribute was set to empty string");
-    is($conf->data->get('TEMP_cg_c'), q{},
-        "An attribute was set to empty string");
-    is($conf->data->get('TEMP_cg_o'), q{},
-        "An attribute was set to empty string");
-    is($conf->data->get('TEMP_cg_r'), q{},
-        "An attribute was set to empty string");
     is($conf->data->get('cg_flag'), q{},
         "An attribute was set to empty string");
     is($step->result(), q{no}, "Expected result was set");

Modified: branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests =>  41;
+use Test::More qw(no_plan); # tests =>  26;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::auto::warnings');
@@ -31,111 +31,59 @@
 $conf->add_steps($pkg);
 
 my $serialized = $conf->pcfreeze();
+my $step;
 
-$conf->options->set( %{$args} );
 SKIP: {
     skip 'Tests not yet passing on Sun/Solaris',
-    39
+    23
     if $^O =~ m/sun|solaris/i;
 
-my $step = test_step_constructor_and_description($conf);
-
-my %potential_warnings_seen;
-$conf->options->set(cage => 1);
-$step->_add_cage_warnings($conf);
-%potential_warnings_seen = map { $_, 1 } @{ $step->{potential_warnings} };
-ok($potential_warnings_seen{'-std=c89'}, "Cage warning added");
-
-$conf->replenish($serialized);
+# Simulate the  case where C compiler is not gcc.
 $conf->options->set( %{$args} );
 $step = test_step_constructor_and_description($conf);
-$conf->options->set(maintainer => 1);
-$step->_add_maintainer_warnings($conf);
-%potential_warnings_seen = map { $_, 1 } @{ $step->{potential_warnings} };
-ok($potential_warnings_seen{'-Wlarger-than-4096'}, "Maintainer warning added");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $warning = q{-Wphony_warning};
-auto::warnings::_set_warning($conf, $warning, 1, undef);
-ok(! $conf->data->get($warning),
-    "Got expected setting for warning");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-{
-    my $warning = q{-Wphony_warning};
-    my $stdout;
-    capture(
-        sub { auto::warnings::_set_warning($conf, $warning, 1, 1); },
-        \$stdout,
-    );
-    ok(! $conf->data->get($warning),
-        "Got expected setting for warning");
-    like($stdout, qr/exit code:\s+1/, "Got expected verbose output");
-}
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $output = q{some string};
-my $tryflags = q{some flag};
-my $rv = auto::warnings::_set_ccflags($conf, $output, $tryflags, undef);
-is($rv, 1, "_set_ccflags() returned 1 as expected");
-is($conf->data->get("ccflags"), $tryflags, "ccflags changed as expected");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-{
-    my $output = q{some string};
-    my $tryflags = q{some flag};
-    my ($rv, $stdout);
-    capture(
-        sub { $rv = auto::warnings::_set_ccflags($conf, $output, $tryflags, 1); },
-        \$stdout,
-    );
-    is($rv, 1, "_set_ccflags() returned 1 as expected");
-    is($conf->data->get("ccflags"), $tryflags, "ccflags changed as expected");
-    like($stdout, qr/ccflags:\s+$tryflags/, "Got expected verbose output");
-}
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-# Mock case where C compiler is not gcc.
 $conf->data->set( gccversion => undef );
 ok($step->runstep($conf), "runstep() returned true value");
 is($step->result(), q{skipped}, "Got expected result");
 
+$step->set_result( undef );
 $conf->replenish($serialized);
 
-$conf->options->set( %{$args} );
+# Simulate the case where C compiler is not gcc:  verbose
+$conf->options->set( verbose => 1 );
 $step = test_step_constructor_and_description($conf);
+$conf->data->set( gccversion => undef );
 {
-    my ($stdout, $rv);
-    # Mock case where C compiler is not gcc.
-    $conf->data->set( gccversion => undef );
-    $conf->options->set( verbose => 1 );
+    my ($stdout, $stderr, $rv);
     capture(
         sub { $rv = $step->runstep($conf); },
         \$stdout,
+        \$stderr,
     );
     ok($rv, "runstep() returned true value");
     is($step->result(), q{skipped}, "Got expected result");
-    like($stdout,
-        qr/Currently we only set warnings/,
-        "Got expected verbose output"
-    );
+    like($stdout, qr/We do not \(yet\) probe for warnings for your compiler/s,
+        "Got expected verbose output: compiler with warnings not yet supported" );
 }
 
+$step->set_result( undef );
+$conf->replenish($serialized);
+
+# Simulate case where --cage warnings are requested
+$conf->options->set( verbose => undef );
+$step = test_step_constructor_and_description($conf);
+$conf->data->set( gccversion => 'defined' );
+$conf->data->set( 'g++' => undef );
+$conf->options->set( cage => 1 );
+ok($step->runstep($conf), "runstep() returned true value");
+
+# This test is fragile, as it depends on the current state of --cage,
+# which changes over time, and on the compiler, which may not support
+# this option.
+like($conf->data->get( 'ccwarn' ),
+    qr/-Wunreachable-code/,
+    "'cage' warning set as expected"
+);
+
 } # End SKIP block for Sun/Solaris
 
 $conf->cc_clean();

Modified: branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -68,16 +68,10 @@
        #["IF(value == xx)",                 0], # invalid op error
        #["IF(value = xx)",                  0], # invalid op error
        ["IF(value=xx)",                     0], # also invalid, no warning. checks for key value=xx
-
-       # Legacy syntax                 true or false
-       ["CONDITIONED_LINE(true)",           1],
-       ["INVERSE_CONDITIONED_LINE(true)",   0],
-       ["CONDITIONED_LINE(false)",          0],
-       ["INVERSE_CONDITIONED_LINE(false)",  1],
       );
 }
 
-use Test::More tests => (8 + @cond_tests);
+use Test::More tests => (7 + @cond_tests);
 use Carp;
 use lib qw( . lib );
 
@@ -114,7 +108,6 @@
 }
 
 is($missing_SOURCE, 0, "No Makefile source file missing");
-ok(-f $step->{CFLAGS_source}, "CFLAGS source file located");
 
 my $index = undef;
 sub result {

Modified: branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t	Tue Mar 16 22:37:03 2010	(r44975)
@@ -39,7 +39,7 @@
 my $ccflags = '';
 my $verbose = 0;
 $ccflags = init::hints::linux::_handle_icc_ccflags($ccflags, $verbose);
-like( $ccflags, qr/\s-wd269/, "On icc, 'cc_flags' set as expected" );
+like( $ccflags, qr/\s-we147/, "On icc, 'cc_flags' set as expected" );
 
 $ccflags = '';
 $verbose = 1;
@@ -51,9 +51,9 @@
         \$stdout,
         \$stderr,
     );
-    like( $ccflags, qr/\s-wd269/, "On icc, 'cc_flags' set as expected" );
+    like( $ccflags, qr/\s-we147/, "On icc, 'cc_flags' set as expected" );
     like( $stdout,
-        qr/\sccflags:.*?-wd269/,
+        qr/\sccflags:.*?-we147/,
         "On icc, got expected verbose output for 'cc_flags'" );
 }
 

Deleted: branches/pcc_hackathon_6Mar10/tools/build/cc_flags.pl
==============================================================================
--- branches/pcc_hackathon_6Mar10/tools/build/cc_flags.pl	Tue Mar 16 22:37:03 2010	(r44974)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,131 +0,0 @@
-#! perl
-################################################################################
-# Copyright (C) 2001-2003, Parrot Foundation.
-# $Id$
-################################################################################
-
-=head1 NAME
-
-tools/build/cc_flags.pl - Process compiler flags
-
-=head1 SYNOPSIS
-
-    % perl tools/build/cc_flags.pl transform compiler flags
-
-=head1 DESCRIPTION
-
-This script is used in a F<Makefile> to process the flags to pass to the
-compiler for each C file.
-
-See F<config/gen/makefiles/CFLAGS.in> for the transformation file format.
-
-=cut
-
-################################################################################
-
-use strict;
-use warnings;
-
-my $cflags = shift;
-
-open my $F, '<', $cflags or die "open $cflags: $!\n";
-
-my @options;
-
-while (<$F>) {
-    chomp;
-    s/#.*//;
-    next unless /\S/;
-
-    my $regex;
-    if (s/^\{(.*?)\}\s*//) {
-        next unless $1;
-        $regex = qr/$1/;
-    }
-    elsif (s/^(\S+)\s*//) {
-        $regex = qr/^\Q$1\E$/;
-    }
-    else {
-        die "syntax error in $cflags: line $., $_\n";
-    }
-
-    for ( ; ; ) {
-        if (s/^([-+])\{(.*?)\}\s*//) {
-            next unless $2;
-            my ( $sign, $options ) = ( $1, $2 );
-            foreach my $option ( split ' ', $options ) {
-                push @options, [ $regex, $sign, $option ];
-            }
-        }
-        elsif (s{s(.)(.*?)\1(.*?)\1([imsx]*)\s*}{}) {
-            my $mod = "";
-            $mod = "(?$4)" if $4;
-
-            push @options, [ $regex, 's', "$mod$2", $3 ];
-        }
-        elsif (/\S/) {
-            die "syntax error in $cflags: line $., $_\n";
-        }
-        else {
-            last;
-        }
-    }
-}
-
-my ($cfile) = grep /\.c$/, @ARGV;
-
-my ( $inject_point, $where );
-
-foreach (@ARGV) {
-    last if $_ eq '';
-    ++$where;
-}
-if ($where) {
-
-    # Found a "" - remove it
-    splice @ARGV, $where, 1;
-    $inject_point = $where;
-}
-else {
-    $inject_point = 1;
-}
-
-if ($cfile) {
-    foreach my $option (@options) {
-        if ( $cfile =~ $option->[0] ) {
-            if ( $option->[1] eq '+' ) {
-                splice @ARGV, $inject_point, 0, $option->[2];
-            }
-            elsif ( $option->[1] eq '-' ) {
-                @ARGV = grep { $_ ne $option->[2] } @ARGV;
-            }
-            else {
-                foreach my $arg (@ARGV) {
-                    $arg =~ s/$option->[2]/$option->[3]/;
-                }
-            }
-        }
-    }
-
-    # Visual C++ already prints the source file name...
-    if ( $ARGV[0] =~ /cl(?:\.exe)?/i ) {
-
-        # ...but only the file name, so we print the path
-        # to the directory first
-        if ( $cfile =~ /(.*[\/\\])/ ) {
-            print $1;
-        }
-    }
-    else {
-        print "$cfile\n";
-    }
-}
-
-exit system(@ARGV) / 256;
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

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

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

Modified: branches/pcc_hackathon_6Mar10/tools/util/release.json
==============================================================================
--- branches/pcc_hackathon_6Mar10/tools/util/release.json	Tue Mar 16 21:59:54 2010	(r44974)
+++ branches/pcc_hackathon_6Mar10/tools/util/release.json	Tue Mar 16 22:37:03 2010	(r44975)
@@ -1,9 +1,9 @@
 {
-    "release.version"  : "2.0.0",
-    "release.name"     : "Inevitable",
+    "release.version"  : "2.2.0",
+    "release.name"     : "Like Clockwork",
     "release.day"      : "Tuesday",
-    "release.date"     : "16 Februuary 2010",
-    "release.nextdate" : "16 March 2010",
+    "release.date"     : "16 March 2010",
+    "release.nextdate" : "20 April 2010",
 
     "web.root"         : "http://parrot.org/",
     "web.source"       : "download",
@@ -17,7 +17,7 @@
     "wiki.bugday"      : "bug_day_2010_03_13",
 
     "cpan.search"      : "http://search.cpan.org/dist/parrot",
-    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/devel/stable/2.1.0/",
+    "ftp.path"         : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.2.0/",
     "subversion.root"  : "http://subversion.tigris.org/",
     "svk.root"         : "http://svk.bestpractical.com/"
 }


More information about the parrot-commits mailing list