[svn:parrot] r39444 - in branches/io_rewiring: . compilers/imcc compilers/nqp/bootstrap compilers/nqp/src compilers/nqp/src/Grammar compilers/pct/src/PCT config/auto config/auto/sizes config/gen/config_pm config/gen/makefiles config/init docs docs/book docs/book/draft docs/dev docs/pct docs/pdds examples/languages/abc examples/languages/abc/src/parser examples/languages/squaak examples/library examples/nci examples/tcl include/parrot lib/Parrot lib/Parrot/Pmc2c ports/cpan ports/cygwin ports/debian ports/fedora ports/mandriva ports/suse ports/ubuntu runtime/parrot/languages runtime/parrot/languages/parrot runtime/parrot/library runtime/parrot/library/Math src src/call src/gc src/interp src/ops src/packfile src/pmc src/runcore src/string t/compilers/imcc/syn t/compilers/json t/compilers/tge t/dynpmc t/library t/oo t/op t/pmc t/src t/steps t/tools/install t/tools/ops2pm tools/dev tools/install tools/util

whiteknight at svn.parrot.org whiteknight at svn.parrot.org
Sun Jun 7 23:41:49 UTC 2009


Author: whiteknight
Date: Sun Jun  7 23:41:42 2009
New Revision: 39444
URL: https://trac.parrot.org/parrot/changeset/39444

Log:
[io_rewiring] merging from trunk r39194:39443. Causes some failures, need to investigate now

Added:
   branches/io_rewiring/runtime/parrot/languages/
      - copied from r39443, trunk/runtime/parrot/languages/
Replaced:
   branches/io_rewiring/runtime/parrot/languages/parrot/
      - copied from r39443, trunk/runtime/parrot/languages/parrot/
Modified:
   branches/io_rewiring/   (props changed)
   branches/io_rewiring/DEPRECATED.pod
   branches/io_rewiring/MANIFEST
   branches/io_rewiring/PBC_COMPAT
   branches/io_rewiring/PLATFORMS
   branches/io_rewiring/README
   branches/io_rewiring/README_win32.pod
   branches/io_rewiring/compilers/imcc/imc.c
   branches/io_rewiring/compilers/imcc/imcc.l
   branches/io_rewiring/compilers/imcc/imcc.y
   branches/io_rewiring/compilers/imcc/imclexer.c
   branches/io_rewiring/compilers/imcc/imcparser.c
   branches/io_rewiring/compilers/imcc/imcparser.h
   branches/io_rewiring/compilers/imcc/main.c
   branches/io_rewiring/compilers/imcc/parser_util.c
   branches/io_rewiring/compilers/imcc/pcc.c
   branches/io_rewiring/compilers/nqp/bootstrap/actions.pm
   branches/io_rewiring/compilers/nqp/src/Grammar.pg
   branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir
   branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir
   branches/io_rewiring/config/auto/gcc.pm
   branches/io_rewiring/config/auto/icu.pm
   branches/io_rewiring/config/auto/sizes/intval_maxmin_c.in   (props changed)
   branches/io_rewiring/config/gen/config_pm/config_pir.in
   branches/io_rewiring/config/gen/makefiles/root.in
   branches/io_rewiring/config/init/defaults.pm
   branches/io_rewiring/docs/book/appb_patch_submission.pod   (props changed)
   branches/io_rewiring/docs/book/appc_command_line_options.pod
   branches/io_rewiring/docs/book/ch01_introduction.pod   (props changed)
   branches/io_rewiring/docs/book/ch03_pir.pod   (contents, props changed)
   branches/io_rewiring/docs/book/ch04_compiler_tools.pod   (contents, props changed)
   branches/io_rewiring/docs/book/ch07_dynpmcs.pod   (props changed)
   branches/io_rewiring/docs/book/ch08_dynops.pod   (props changed)
   branches/io_rewiring/docs/book/ch10_opcode_reference.pod   (contents, props changed)
   branches/io_rewiring/docs/book/draft/chXX_hlls.pod   (props changed)
   branches/io_rewiring/docs/book/draft/chXX_library.pod   (props changed)
   branches/io_rewiring/docs/book/draft/chXX_testing_and_debugging.pod   (props changed)
   branches/io_rewiring/docs/dev/c_functions.pod   (props changed)
   branches/io_rewiring/docs/pct/pct_optable_guide.pod
   branches/io_rewiring/docs/pdds/pdd19_pir.pod
   branches/io_rewiring/docs/pdds/pdd30_install.pod   (props changed)
   branches/io_rewiring/docs/running.pod
   branches/io_rewiring/docs/tests.pod
   branches/io_rewiring/examples/languages/abc/   (props changed)
   branches/io_rewiring/examples/languages/abc/src/parser/actions.pm
   branches/io_rewiring/examples/languages/squaak/   (props changed)
   branches/io_rewiring/examples/library/pcre.pir
   branches/io_rewiring/examples/nci/xlibtest.pir
   branches/io_rewiring/examples/tcl/tcltkdemo.pir
   branches/io_rewiring/include/parrot/call.h   (props changed)
   branches/io_rewiring/include/parrot/embed.h
   branches/io_rewiring/include/parrot/gc_api.h   (props changed)
   branches/io_rewiring/include/parrot/library.h
   branches/io_rewiring/include/parrot/runcore_api.h   (contents, props changed)
   branches/io_rewiring/include/parrot/runcore_trace.h   (props changed)
   branches/io_rewiring/include/parrot/string_funcs.h
   branches/io_rewiring/include/parrot/sub.h
   branches/io_rewiring/lib/Parrot/Install.pm
   branches/io_rewiring/lib/Parrot/Manifest.pm
   branches/io_rewiring/lib/Parrot/Ops2pm.pm
   branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm
   branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/io_rewiring/ports/cpan/pause_guide.pod   (props changed)
   branches/io_rewiring/ports/cygwin/parrot-1.0.0-1.cygport   (props changed)
   branches/io_rewiring/ports/debian/libparrot-dev.install.in   (props changed)
   branches/io_rewiring/ports/debian/libparrot.install.in   (props changed)
   branches/io_rewiring/ports/debian/parrot-doc.install.in   (props changed)
   branches/io_rewiring/ports/debian/parrot.install.in   (props changed)
   branches/io_rewiring/ports/fedora/parrot.spec.fedora   (props changed)
   branches/io_rewiring/ports/mandriva/parrot.spec.mandriva   (props changed)
   branches/io_rewiring/ports/suse/parrot.spec.suse   (props changed)
   branches/io_rewiring/ports/ubuntu/changelog
   branches/io_rewiring/runtime/parrot/library/Math/Rand.pir   (props changed)
   branches/io_rewiring/runtime/parrot/library/TclLibrary.pir
   branches/io_rewiring/runtime/parrot/library/libpcre.pir
   branches/io_rewiring/runtime/parrot/library/pcre.pir
   branches/io_rewiring/src/call/ops.c   (props changed)
   branches/io_rewiring/src/call/pcc.c   (props changed)
   branches/io_rewiring/src/dynext.c
   branches/io_rewiring/src/embed.c
   branches/io_rewiring/src/gc/alloc_memory.c   (props changed)
   branches/io_rewiring/src/gc/alloc_register.c   (contents, props changed)
   branches/io_rewiring/src/gc/alloc_resources.c   (props changed)
   branches/io_rewiring/src/gc/api.c   (props changed)
   branches/io_rewiring/src/gc/gc_ms.c
   branches/io_rewiring/src/gc/generational_ms.c   (props changed)
   branches/io_rewiring/src/gc/incremental_ms.c   (props changed)
   branches/io_rewiring/src/gc/malloc.c   (props changed)
   branches/io_rewiring/src/gc/malloc_trace.c   (props changed)
   branches/io_rewiring/src/gc/mark_sweep.c   (props changed)
   branches/io_rewiring/src/gc/system.c   (props changed)
   branches/io_rewiring/src/hash.c
   branches/io_rewiring/src/interp/inter_cb.c   (props changed)
   branches/io_rewiring/src/interp/inter_create.c   (contents, props changed)
   branches/io_rewiring/src/interp/inter_misc.c   (props changed)
   branches/io_rewiring/src/library.c
   branches/io_rewiring/src/multidispatch.c
   branches/io_rewiring/src/oo.c
   branches/io_rewiring/src/ops/cmp.ops
   branches/io_rewiring/src/ops/io.ops
   branches/io_rewiring/src/ops/ops.num
   branches/io_rewiring/src/ops/set.ops
   branches/io_rewiring/src/packfile.c
   branches/io_rewiring/src/packfile/pf_items.c
   branches/io_rewiring/src/pmc.c
   branches/io_rewiring/src/pmc/bigint.pmc
   branches/io_rewiring/src/pmc/bignum.pmc
   branches/io_rewiring/src/pmc/continuation.pmc
   branches/io_rewiring/src/pmc/coroutine.pmc
   branches/io_rewiring/src/pmc/eventhandler.pmc
   branches/io_rewiring/src/pmc/fixedintegerarray.pmc
   branches/io_rewiring/src/pmc/float.pmc
   branches/io_rewiring/src/pmc/integer.pmc
   branches/io_rewiring/src/pmc/lexpad.pmc
   branches/io_rewiring/src/pmc/resizablestringarray.pmc
   branches/io_rewiring/src/pmc/scalar.pmc
   branches/io_rewiring/src/pmc/string.pmc
   branches/io_rewiring/src/pmc/stringhandle.pmc
   branches/io_rewiring/src/pmc/sub.pmc
   branches/io_rewiring/src/pmc_freeze.c
   branches/io_rewiring/src/runcore/cores.c   (props changed)
   branches/io_rewiring/src/runcore/main.c   (contents, props changed)
   branches/io_rewiring/src/runcore/trace.c   (contents, props changed)
   branches/io_rewiring/src/string/api.c
   branches/io_rewiring/t/compilers/imcc/syn/file.t
   branches/io_rewiring/t/compilers/imcc/syn/pcc.t
   branches/io_rewiring/t/compilers/json/from_parrot.t
   branches/io_rewiring/t/compilers/tge/NoneGrammar.tg   (props changed)
   branches/io_rewiring/t/dynpmc/pair.t   (props changed)
   branches/io_rewiring/t/library/pcre.t
   branches/io_rewiring/t/oo/proxy.t
   branches/io_rewiring/t/oo/root_new.t   (props changed)
   branches/io_rewiring/t/op/copy.t
   branches/io_rewiring/t/op/stringu.t
   branches/io_rewiring/t/pmc/multidispatch.t
   branches/io_rewiring/t/pmc/string.t
   branches/io_rewiring/t/pmc/sub.t
   branches/io_rewiring/t/pmc/sys.t
   branches/io_rewiring/t/src/embed.t   (props changed)
   branches/io_rewiring/t/steps/auto_gcc-01.t
   branches/io_rewiring/t/steps/auto_icu-01.t
   branches/io_rewiring/t/steps/auto_jit-01.t
   branches/io_rewiring/t/steps/auto_pmc-01.t
   branches/io_rewiring/t/steps/gen_platform-01.t
   branches/io_rewiring/t/tools/install/02-install_files.t
   branches/io_rewiring/t/tools/install/03-lines_to_files.t
   branches/io_rewiring/t/tools/install/dev_overall.t
   branches/io_rewiring/t/tools/install/overall.t
   branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t
   branches/io_rewiring/t/tools/ops2pm/10-print_module.t
   branches/io_rewiring/t/tools/ops2pm/11-print_h.t
   branches/io_rewiring/tools/dev/create_language.pl
   branches/io_rewiring/tools/dev/fetch_languages.pl   (contents, props changed)
   branches/io_rewiring/tools/dev/install_dev_files.pl
   branches/io_rewiring/tools/dev/install_files.pl
   branches/io_rewiring/tools/dev/mk_gitignore.pl   (props changed)
   branches/io_rewiring/tools/dev/parrot-fuzzer
   branches/io_rewiring/tools/dev/pbc_to_exe.pir
   branches/io_rewiring/tools/install/smoke_languages.pl
   branches/io_rewiring/tools/util/perlcritic-cage.conf   (props changed)

Modified: branches/io_rewiring/DEPRECATED.pod
==============================================================================
--- branches/io_rewiring/DEPRECATED.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/DEPRECATED.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -196,13 +196,6 @@
 
 L<http://rt.perl.org/rt3/Ticket/Display.html?id=53302>
 
-=item Parrot_readbc, Parrot_loadbc. [eligible in 1.1]
-
-They have been renamed to C<Parrot_pbc_read>, C<Parrot_pbc_load>.
-C<Parrot_pbc_read> has one third int argument.
-
-L<https://trac.parrot.org/parrot/ticket/266>
-
 =item C API coding standards cleanup [eligible in 1.1]
 
 All C API functions that aren't currently named according to the
@@ -212,12 +205,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/443>
 
-=item Parrot_add_library_path [eligible in 1.1]
-
-Will be renamed to C<Parrot_lib_add_path_from_cstring>.
-
-L<https://trac.parrot.org/parrot/ticket/455>
-
 =item parrot_new_pmc_hash [eligible in 1.5]
 
 This function will be removed.  parrot_new_hash should be used in its place.

Modified: branches/io_rewiring/MANIFEST
==============================================================================
--- branches/io_rewiring/MANIFEST	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/MANIFEST	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,10 +1,10 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Sun May 24 16:30:09 2009 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Jun  4 22:51:55 2009 UT
+#
+# See below for documentation on the format of this file.
 #
-# See tools/dev/install_files.pl for documentation on the
-# format of this file.
 # See docs/submissions.pod on how to recreate this file after SVN
 # has been told about new or deleted files.
 CREDITS                                                     []
@@ -114,6 +114,7 @@
 compilers/nqp/t/26-method_ops.t                             [test]
 compilers/nqp/t/27-ternary.t                                [test]
 compilers/nqp/t/28-return.t                                 [test]
+compilers/nqp/t/29-self.t                                   [test]
 compilers/nqp/t/harness                                     [test]
 compilers/pct/PCT.pir                                       [pct]
 compilers/pct/README.pod                                    []doc
@@ -1142,6 +1143,7 @@
 runtime/parrot/include/fp_equality.pasm                     [library]
 runtime/parrot/include/hllmacros.pir                        [library]
 runtime/parrot/include/test_more.pir                        [library]
+runtime/parrot/languages/parrot/parrot.pir                  [library]
 runtime/parrot/library/CGI/QueryHash.pir                    [library]
 runtime/parrot/library/Config/JSON.pir                      [library]
 runtime/parrot/library/Crow.pir                             [library]
@@ -1759,6 +1761,7 @@
 t/op/64bit.t                                                [test]
 t/op/annotate.t                                             [test]
 t/op/arithmetics.t                                          [test]
+t/op/arithmetics_pmc.t                                      [test]
 t/op/basic.t                                                [test]
 t/op/bitwise.t                                              [test]
 t/op/box.t                                                  [test]
@@ -2026,6 +2029,7 @@
 t/tools/install/testlib/parrot.pc                           [test]
 t/tools/install/testlib/phony                               [test]
 t/tools/install/testlib/phony.exe                           [test]
+t/tools/install/testlib/runtime/parrot/include/sockets.pasm [test]
 t/tools/install/testlib/runtime/parrot/library/TGE.pbc      [test]
 t/tools/install/testlib/src/ops/ops.num                     [test]
 t/tools/install/testlib/src/pmc/pmc_object.h                [test]

Modified: branches/io_rewiring/PBC_COMPAT
==============================================================================
--- branches/io_rewiring/PBC_COMPAT	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/PBC_COMPAT	Sun Jun  7 23:41:42 2009	(r39444)
@@ -27,7 +27,8 @@
 
 # please insert tab separated entries at the top of the list
 
-4.7	2009.05.30	Infinoid	Added Handle, Pipe, PipeHandle PMCs
+4.8	2009.05.30	Infinoid	Added Handle, Pipe, PipeHandle PMCs
+4.7	2009.05.29	cotto	add cmp_pmc opcode (also, addition of setstdin and root_new in previous commits)
 4.6	2009.05.18	bacek	removed PackfileAnnotationKeys PMC
 4.5	2009.04.10	cotto	removed Ref and SharedRef PMCs
 4.4	2009.04.07	pmichaud	find_caller_lex added

Modified: branches/io_rewiring/PLATFORMS
==============================================================================
--- branches/io_rewiring/PLATFORMS	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/PLATFORMS	Sun Jun  7 23:41:42 2009	(r39444)
@@ -58,7 +58,6 @@
 netbsd5.0-sparc64-gcc-4.1.3  B8   Y    -    -     Y   Y   Y    Y/1   ?  20090519
 netbsd5.0-x86_64-gcc-4.1.3    8   Y    -    -     Y   Y   Y    Y     ?  20090419
 opensolaris-x86-gcc_4.0.3     4   Y    Y    ?     ?   ?   Y    Y/2   ?  20080325
-sol8-sparc-gcc_4.1.0         B    -    -    -     -   -   -    Y/42  ?  20090317
 win32-x86-mingw_gcc4.3.0          Y    Y    -     -   -   Y    Y/88  ?  20081203
 win32-x86-msvc_6.0            4   -    Y    -     -   -   Y    Y/8   ?  20090315
 win32-x64-msvc_9.0            8   -    -    -     -   -   Y    Y/51  ?  20081203

Modified: branches/io_rewiring/README
==============================================================================
--- branches/io_rewiring/README	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/README	Sun Jun  7 23:41:42 2009	(r39444)
@@ -18,7 +18,7 @@
 linking with the ICU library you have to download and install it before
 configuring Parrot.
 
-Get it from http://www-306.ibm.com/software/globalization/icu/downloads.jsp
+Get it from http://site.icu-project.org/download
 
 You also need Perl 5.8.4 or newer, Storable 2.12 or newer, and Bundle::Parrot
 to run various configure and build scripts.

Modified: branches/io_rewiring/README_win32.pod
==============================================================================
--- branches/io_rewiring/README_win32.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/README_win32.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -60,7 +60,7 @@
 ignore it (C<--without-icu>).
 
 If you want to use ICU, download it from
-L<http://www.icu-project.org/download/>.
+L<http://site.icu-project.org/download>.
 
 If you want to use precompiled binaries, do the following.
 Download the package matching your compiler, unpack it (say, into

Modified: branches/io_rewiring/compilers/imcc/imc.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/imc.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/imc.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -266,6 +266,11 @@
 
     clear_locals(unit);
 
+    if (unit->vtable_name)
+        mem_sys_free(unit->vtable_name);
+    if (unit->instance_of)
+        mem_sys_free(unit->instance_of);
+
     free(unit->hash.data);
     free(unit);
 }

Modified: branches/io_rewiring/compilers/imcc/imcc.l
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcc.l	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/imcc.l	Sun Jun  7 23:41:42 2009	(r39444)
@@ -430,6 +430,7 @@
                 "stringliteral or register", IMCC_INFO(interp)->cur_macro_name);
 
         define_macro(interp, IMCC_INFO(interp)->cur_macro_name, NULL, valp->s, start_line);
+        mem_sys_free(valp->s);
 
         IMCC_INFO(interp)->cur_macro_name = NULL;
 
@@ -443,9 +444,12 @@
 
 <emit,INITIAL>".include" {
         const int c = yylex(valp, yyscanner, interp);
+
         if (c != STRINGC)
             return c;
 
+        /* STRINGCs have a str_dup()ed valp->s */
+        mem_sys_free(valp->s);
         YYCHOP();
         include_file(interp, yytext + 1, yyscanner);
     }

Modified: branches/io_rewiring/compilers/imcc/imcc.y
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcc.y	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/imcc.y	Sun Jun  7 23:41:42 2009	(r39444)
@@ -800,14 +800,19 @@
 {
     ASSERT_ARGS(IMCC_itcall_sub)
     IMCC_INFO(interp)->cur_call->pcc_sub->sub = sub;
+
     if (IMCC_INFO(interp)->cur_obj) {
         if (IMCC_INFO(interp)->cur_obj->set != 'P')
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "object isn't a PMC");
-        IMCC_INFO(interp)->cur_call->pcc_sub->object = IMCC_INFO(interp)->cur_obj;
+
+        IMCC_INFO(interp)->cur_call->pcc_sub->object =
+            IMCC_INFO(interp)->cur_obj;
         IMCC_INFO(interp)->cur_obj = NULL;
     }
+
     if (IMCC_INFO(interp)->cur_call->pcc_sub->sub->pmc_type == enum_class_NCI)
         IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
+
     if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
         IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
 }
@@ -1165,10 +1170,12 @@
      TK_LINE INTC COMMA STRINGC '\n'
          {
            IMCC_INFO(interp)->line = atoi($2);
+           /* set_filename() frees the STRINGC */
            set_filename(interp, $4);
          }
    | TK_FILE STRINGC '\n'
          {
+           /* set_filename() frees the STRINGC */
            set_filename(interp, $2);
          }
    ;
@@ -1193,6 +1200,7 @@
                 Parrot_register_HLL(interp, hll_name);
 
             IMCC_INFO(interp)->cur_namespace = NULL;
+            mem_sys_free($2);
             $$ = 0;
          }
    ;
@@ -1210,12 +1218,15 @@
      CONST { pesky_global__is_def=1; } INTC var_or_i '=' any_string
          {
            $$ = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
+           mem_sys_free($6);
            pesky_global__is_def = 0;
          }
 
      | CONST { pesky_global__is_def=1; } STRINGC var_or_i '=' any_string
          {
            $$ = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
+           mem_sys_free($3);
+           mem_sys_free($6);
            pesky_global__is_def = 0;
          }
    ;
@@ -1401,13 +1412,13 @@
      VTABLE_METHOD
          {
            $$ = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
+           IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
    | VTABLE_METHOD '(' STRINGC ')'
          {
            $$ = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = $3;
+           IMCC_INFO(interp)->cur_unit->vtable_name      = $3;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
    ;
@@ -1417,13 +1428,13 @@
          {
            $$ = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
    | METHOD '(' any_string ')'
          {
            $$ = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = $3;
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
    ;
 
@@ -1431,7 +1442,7 @@
     NS_ENTRY
          {
            $$ = 0;
-           IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
+           IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
    | NS_ENTRY '(' any_string ')'
@@ -2086,9 +2097,9 @@
    ;
 
 the_sub:
-     IDENTIFIER                { $$ = mk_sub_address(interp, $1);  mem_sys_free($1); }
-   | STRINGC                   { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
-   | USTRINGC                  { $$ = mk_sub_address_u(interp, $1); mem_sys_free($1); }
+     IDENTIFIER     { $$ = mk_sub_address(interp, $1);       mem_sys_free($1); }
+     | STRINGC      { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
+     | USTRINGC     { $$ = mk_sub_address_u(interp, $1);     mem_sys_free($1); }
    | target
          {
            $$ = $1;
@@ -2109,6 +2120,12 @@
             IMCC_INFO(interp)->cur_obj = $1;
             $$                         = $3;
         }
+   | target DOT USTRINGC
+         {
+            IMCC_INFO(interp)->cur_obj = $1;
+            $$                         = mk_const(interp, $3, 'U');
+            mem_sys_free($3);
+         }
    | target DOT STRINGC
          {
             IMCC_INFO(interp)->cur_obj = $1;

Modified: branches/io_rewiring/compilers/imcc/imclexer.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/imclexer.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/imclexer.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -75,7 +75,6 @@
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -106,6 +105,8 @@
 #define UINT32_MAX             (4294967295U)
 #endif
 
+#endif /* ! C99 */
+
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -179,7 +180,15 @@
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
 #define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -2478,7 +2487,7 @@
 
 
 
-#line 2482 "compilers/imcc/imclexer.c"
+#line 2491 "compilers/imcc/imclexer.c"
 
 #define INITIAL 0
 #define emit 1
@@ -2613,7 +2622,12 @@
     
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
 #define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -2621,7 +2635,7 @@
 /* This used to be an fputs(), but since the string might contain NUL's,
  * we now use fwrite().
  */
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
 #endif
 
 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
@@ -2632,7 +2646,7 @@
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		int n; \
+		size_t n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -2737,7 +2751,7 @@
             return 0;
         }
 
-#line 2741 "compilers/imcc/imclexer.c"
+#line 2755 "compilers/imcc/imclexer.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -3494,6 +3508,7 @@
                 "stringliteral or register", IMCC_INFO(interp)->cur_macro_name);
 
         define_macro(interp, IMCC_INFO(interp)->cur_macro_name, NULL, valp->s, start_line);
+        mem_sys_free(valp->s);
 
         IMCC_INFO(interp)->cur_macro_name = NULL;
 
@@ -3503,26 +3518,29 @@
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 440 "compilers/imcc/imcc.l"
+#line 441 "compilers/imcc/imcc.l"
 {
         return read_macro(valp, interp, yyscanner);
     }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 444 "compilers/imcc/imcc.l"
+#line 445 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
+
         if (c != STRINGC)
             return c;
 
+        /* STRINGCs have a str_dup()ed valp->s */
+        mem_sys_free(valp->s);
         YYCHOP();
         include_file(interp, yytext + 1, yyscanner);
     }
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 453 "compilers/imcc/imcc.l"
+#line 457 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3547,7 +3565,7 @@
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 475 "compilers/imcc/imcc.l"
+#line 479 "compilers/imcc/imcc.l"
 {
 
         if (valp) {
@@ -3572,12 +3590,12 @@
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 497 "compilers/imcc/imcc.l"
+#line 501 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 499 "compilers/imcc/imcc.l"
+#line 503 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3590,7 +3608,7 @@
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 509 "compilers/imcc/imcc.l"
+#line 513 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = yytext + 1;
 
@@ -3602,32 +3620,32 @@
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 520 "compilers/imcc/imcc.l"
+#line 524 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 521 "compilers/imcc/imcc.l"
+#line 525 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 522 "compilers/imcc/imcc.l"
+#line 526 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 523 "compilers/imcc/imcc.l"
+#line 527 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 524 "compilers/imcc/imcc.l"
+#line 528 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 526 "compilers/imcc/imcc.l"
+#line 530 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3640,7 +3658,7 @@
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 540 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3650,7 +3668,7 @@
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 543 "compilers/imcc/imcc.l"
+#line 547 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3681,7 +3699,7 @@
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 571 "compilers/imcc/imcc.l"
+#line 575 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = str_dup(yytext);
@@ -3692,7 +3710,7 @@
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 579 "compilers/imcc/imcc.l"
+#line 583 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3703,7 +3721,7 @@
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 587 "compilers/imcc/imcc.l"
+#line 591 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3714,7 +3732,7 @@
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 595 "compilers/imcc/imcc.l"
+#line 599 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3725,7 +3743,7 @@
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 603 "compilers/imcc/imcc.l"
+#line 607 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3736,7 +3754,7 @@
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 611 "compilers/imcc/imcc.l"
+#line 615 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
@@ -3744,7 +3762,7 @@
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 616 "compilers/imcc/imcc.l"
+#line 620 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3758,7 +3776,7 @@
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 627 "compilers/imcc/imcc.l"
+#line 631 "compilers/imcc/imcc.l"
 {
         if (!pesky_global__is_def) {
             SymReg *r = find_sym(interp, yytext);
@@ -3789,19 +3807,19 @@
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 656 "compilers/imcc/imcc.l"
+#line 660 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 658 "compilers/imcc/imcc.l"
+#line 662 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 663 "compilers/imcc/imcc.l"
+#line 667 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3814,18 +3832,18 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 674 "compilers/imcc/imcc.l"
+#line 678 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 676 "compilers/imcc/imcc.l"
+#line 680 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ENDM);
 	YY_BREAK
 case 136:
 /* rule 136 can match eol */
 YY_RULE_SETUP
-#line 678 "compilers/imcc/imcc.l"
+#line 682 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
@@ -3833,12 +3851,12 @@
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 683 "compilers/imcc/imcc.l"
+#line 687 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 685 "compilers/imcc/imcc.l"
+#line 689 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3864,7 +3882,7 @@
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 708 "compilers/imcc/imcc.l"
+#line 712 "compilers/imcc/imcc.l"
 {
         if (valp) {
             const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 12;
@@ -3881,49 +3899,49 @@
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 722 "compilers/imcc/imcc.l"
+#line 726 "compilers/imcc/imcc.l"
 /* skip leading ws */;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 723 "compilers/imcc/imcc.l"
+#line 727 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 724 "compilers/imcc/imcc.l"
+#line 728 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 725 "compilers/imcc/imcc.l"
+#line 729 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 726 "compilers/imcc/imcc.l"
+#line 730 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 727 "compilers/imcc/imcc.l"
+#line 731 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, MACRO);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 728 "compilers/imcc/imcc.l"
+#line 732 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 729 "compilers/imcc/imcc.l"
+#line 733 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 731 "compilers/imcc/imcc.l"
+#line 735 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 3927 "compilers/imcc/imclexer.c"
+#line 3945 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -4702,8 +4720,8 @@
 
 /** Setup the input buffer state to scan the given bytes. The next call to yylex() will
  * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
@@ -5125,7 +5143,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 731 "compilers/imcc/imcc.l"
+#line 735 "compilers/imcc/imcc.l"
 
 
 

Modified: branches/io_rewiring/compilers/imcc/imcparser.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcparser.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/imcparser.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1124,14 +1124,19 @@
 {
     ASSERT_ARGS(IMCC_itcall_sub)
     IMCC_INFO(interp)->cur_call->pcc_sub->sub = sub;
+
     if (IMCC_INFO(interp)->cur_obj) {
         if (IMCC_INFO(interp)->cur_obj->set != 'P')
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "object isn't a PMC");
-        IMCC_INFO(interp)->cur_call->pcc_sub->object = IMCC_INFO(interp)->cur_obj;
+
+        IMCC_INFO(interp)->cur_call->pcc_sub->object =
+            IMCC_INFO(interp)->cur_obj;
         IMCC_INFO(interp)->cur_obj = NULL;
     }
+
     if (IMCC_INFO(interp)->cur_call->pcc_sub->sub->pmc_type == enum_class_NCI)
         IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
+
     if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
         IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
 }
@@ -1371,7 +1376,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 1030 "compilers/imcc/imcc.y"
+#line 1035 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;
@@ -1380,7 +1385,7 @@
     Instruction *i;
 }
 /* Line 187 of yacc.c.  */
-#line 1373 "compilers/imcc/imcparser.c"
+#line 1378 "compilers/imcc/imcparser.c"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -1393,7 +1398,7 @@
 
 
 /* Line 216 of yacc.c.  */
-#line 1386 "compilers/imcc/imcparser.c"
+#line 1391 "compilers/imcc/imcparser.c"
 
 #ifdef short
 # undef short
@@ -1608,16 +1613,16 @@
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   676
+#define YYLAST   680
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  126
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  336
+#define YYNRULES  337
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  542
+#define YYNSTATES  543
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -1700,14 +1705,14 @@
      665,   667,   669,   671,   673,   675,   677,   679,   681,   683,
      685,   686,   692,   696,   698,   700,   702,   704,   706,   708,
      710,   712,   714,   716,   718,   720,   722,   727,   729,   731,
-     733,   735,   739,   743,   747,   748,   754,   755,   759,   761,
-     767,   771,   775,   778,   779,   782,   784,   786,   791,   796,
-     799,   803,   809,   811,   815,   816,   818,   820,   827,   833,
-     838,   843,   850,   856,   858,   860,   862,   864,   866,   868,
-     870,   872,   874,   876,   877,   879,   883,   885,   887,   892,
-     896,   898,   900,   902,   904,   906,   908,   910,   912,   914,
-     916,   918,   919,   922,   923,   926,   928,   932,   934,   936,
-     938,   940,   942,   944,   946,   948,   950
+     733,   735,   739,   743,   747,   751,   752,   758,   759,   763,
+     765,   771,   775,   779,   782,   783,   786,   788,   790,   795,
+     800,   803,   807,   813,   815,   819,   820,   822,   824,   831,
+     837,   842,   847,   854,   860,   862,   864,   866,   868,   870,
+     872,   874,   876,   878,   880,   881,   883,   887,   889,   891,
+     896,   900,   902,   904,   906,   908,   910,   912,   914,   916,
+     918,   920,   922,   923,   926,   927,   930,   932,   936,   938,
+     940,   942,   944,   946,   948,   950,   952,   954
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -1787,67 +1792,67 @@
       40,    -1,    41,    -1,    42,    -1,    46,    -1,    47,    -1,
       48,    -1,   247,   122,   116,   157,    -1,   108,    -1,   112,
       -1,   115,    -1,   247,    -1,   247,   120,   252,    -1,   247,
-     120,   112,    -1,   247,   120,   247,    -1,    -1,   233,   235,
-     125,   236,   126,    -1,    -1,   236,    71,   237,    -1,   237,
-      -1,   236,    71,   112,    21,   255,    -1,   255,    21,   255,
-      -1,   112,    21,   255,    -1,   255,   238,    -1,    -1,   238,
-     239,    -1,    16,    -1,    20,    -1,    20,   125,   115,   126,
-      -1,    20,   125,   112,   126,    -1,   247,   194,    -1,   241,
-      71,   240,    -1,   241,    71,   112,    21,   247,    -1,   240,
-      -1,   112,    21,   247,    -1,    -1,   244,    -1,   243,    -1,
-      12,   255,   246,   255,     9,   253,    -1,    12,    13,   255,
-       9,   253,    -1,    12,   255,   245,   253,    -1,    11,   255,
-     245,   253,    -1,    11,   255,   246,   255,     9,   253,    -1,
-      11,    13,   255,     9,   253,    -1,    71,    -1,     9,    -1,
-      56,    -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,
-      61,    -1,   117,    -1,   262,    -1,    -1,   249,    -1,   249,
-      71,   250,    -1,   250,    -1,   254,    -1,   247,   123,   256,
-     124,    -1,   123,   258,   124,    -1,   252,    -1,   112,    -1,
-     115,    -1,   108,    -1,   116,    -1,   108,    -1,   116,    -1,
-     253,    -1,   255,    -1,   247,    -1,   263,    -1,    -1,   257,
-     260,    -1,    -1,   259,   260,    -1,   261,    -1,   260,   137,
-     261,    -1,   255,    -1,   104,    -1,   105,    -1,   106,    -1,
-     107,    -1,   109,    -1,   113,    -1,   114,    -1,   112,    -1,
-     115,    -1
+     120,   115,    -1,   247,   120,   112,    -1,   247,   120,   247,
+      -1,    -1,   233,   235,   125,   236,   126,    -1,    -1,   236,
+      71,   237,    -1,   237,    -1,   236,    71,   112,    21,   255,
+      -1,   255,    21,   255,    -1,   112,    21,   255,    -1,   255,
+     238,    -1,    -1,   238,   239,    -1,    16,    -1,    20,    -1,
+      20,   125,   115,   126,    -1,    20,   125,   112,   126,    -1,
+     247,   194,    -1,   241,    71,   240,    -1,   241,    71,   112,
+      21,   247,    -1,   240,    -1,   112,    21,   247,    -1,    -1,
+     244,    -1,   243,    -1,    12,   255,   246,   255,     9,   253,
+      -1,    12,    13,   255,     9,   253,    -1,    12,   255,   245,
+     253,    -1,    11,   255,   245,   253,    -1,    11,   255,   246,
+     255,     9,   253,    -1,    11,    13,   255,     9,   253,    -1,
+      71,    -1,     9,    -1,    56,    -1,    57,    -1,    58,    -1,
+      59,    -1,    60,    -1,    61,    -1,   117,    -1,   262,    -1,
+      -1,   249,    -1,   249,    71,   250,    -1,   250,    -1,   254,
+      -1,   247,   123,   256,   124,    -1,   123,   258,   124,    -1,
+     252,    -1,   112,    -1,   115,    -1,   108,    -1,   116,    -1,
+     108,    -1,   116,    -1,   253,    -1,   255,    -1,   247,    -1,
+     263,    -1,    -1,   257,   260,    -1,    -1,   259,   260,    -1,
+     261,    -1,   260,   137,   261,    -1,   255,    -1,   104,    -1,
+     105,    -1,   106,    -1,   107,    -1,   109,    -1,   113,    -1,
+     114,    -1,   112,    -1,   115,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,  1125,  1125,  1129,  1130,  1134,  1135,  1136,  1142,  1148,
-    1149,  1150,  1151,  1155,  1156,  1165,  1170,  1177,  1189,  1201,
-    1201,  1210,  1210,  1216,  1216,  1223,  1224,  1228,  1229,  1233,
-    1234,  1235,  1236,  1237,  1238,  1239,  1242,  1242,  1251,  1250,
-    1262,  1266,  1275,  1279,  1283,  1283,  1295,  1297,  1301,  1316,
-    1324,  1329,  1333,  1337,  1328,  1349,  1350,  1351,  1364,  1364,
-    1368,  1382,  1386,  1392,  1401,  1407,  1416,  1422,  1431,  1437,
-    1446,  1454,  1459,  1470,  1473,  1478,  1486,  1487,  1488,  1489,
-    1490,  1501,  1512,  1515,  1517,  1522,  1521,  1554,  1555,  1559,
-    1560,  1564,  1565,  1569,  1570,  1574,  1575,  1576,  1577,  1578,
-    1579,  1580,  1581,  1582,  1583,  1584,  1585,  1586,  1587,  1591,
-    1596,  1600,  1605,  1609,  1613,  1618,  1627,  1628,  1632,  1637,
-    1638,  1646,  1647,  1647,  1662,  1663,  1667,  1668,  1669,  1670,
-    1671,  1672,  1673,  1678,  1678,  1681,  1689,  1689,  1695,  1696,
-    1701,  1709,  1710,  1715,  1723,  1727,  1732,  1731,  1744,  1745,
-    1749,  1750,  1760,  1765,  1775,  1784,  1785,  1797,  1801,  1803,
-    1804,  1805,  1806,  1807,  1811,  1812,  1816,  1817,  1821,  1830,
-    1831,  1842,  1849,  1858,  1868,  1869,  1874,  1875,  1876,  1876,
-    1892,  1897,  1902,  1902,  1909,  1910,  1910,  1916,  1922,  1926,
-    1938,  1939,  1940,  1941,  1942,  1943,  1947,  1948,  1949,  1950,
-    1954,  1967,  1969,  1971,  1973,  1975,  1980,  1983,  1990,  1989,
-    1998,  1999,  2000,  2001,  2009,  2010,  2011,  2015,  2016,  2017,
-    2018,  2019,  2020,  2021,  2022,  2023,  2024,  2025,  2026,  2027,
-    2028,  2029,  2030,  2031,  2032,  2033,  2034,  2035,  2036,  2037,
-    2043,  2042,  2054,  2061,  2062,  2063,  2064,  2065,  2066,  2067,
-    2068,  2069,  2070,  2071,  2072,  2073,  2078,  2089,  2090,  2091,
-    2092,  2098,  2112,  2118,  2124,  2123,  2132,  2133,  2143,  2153,
-    2160,  2165,  2175,  2179,  2180,  2184,  2185,  2188,  2189,  2193,
-    2197,  2207,  2213,  2223,  2228,  2232,  2233,  2237,  2241,  2245,
-    2252,  2256,  2260,  2267,  2268,  2272,  2273,  2274,  2275,  2276,
-    2277,  2281,  2282,  2286,  2287,  2291,  2292,  2296,  2297,  2304,
-    2311,  2312,  2313,  2317,  2318,  2322,  2323,  2327,  2328,  2332,
-    2333,  2337,  2337,  2350,  2350,  2363,  2364,  2372,  2381,  2382,
-    2383,  2384,  2385,  2389,  2390,  2391,  2392
+       0,  1130,  1130,  1134,  1135,  1139,  1140,  1141,  1147,  1153,
+    1154,  1155,  1156,  1160,  1161,  1170,  1176,  1184,  1196,  1209,
+    1209,  1218,  1218,  1225,  1225,  1234,  1235,  1239,  1240,  1244,
+    1245,  1246,  1247,  1248,  1249,  1250,  1253,  1253,  1262,  1261,
+    1273,  1277,  1286,  1290,  1294,  1294,  1306,  1308,  1312,  1327,
+    1335,  1340,  1344,  1348,  1339,  1360,  1361,  1362,  1375,  1375,
+    1379,  1393,  1397,  1403,  1412,  1418,  1427,  1433,  1442,  1448,
+    1457,  1465,  1470,  1481,  1484,  1489,  1497,  1498,  1499,  1500,
+    1501,  1512,  1523,  1526,  1528,  1533,  1532,  1565,  1566,  1570,
+    1571,  1575,  1576,  1580,  1581,  1585,  1586,  1587,  1588,  1589,
+    1590,  1591,  1592,  1593,  1594,  1595,  1596,  1597,  1598,  1602,
+    1607,  1611,  1616,  1620,  1624,  1629,  1638,  1639,  1643,  1648,
+    1649,  1657,  1658,  1658,  1673,  1674,  1678,  1679,  1680,  1681,
+    1682,  1683,  1684,  1689,  1689,  1692,  1700,  1700,  1706,  1707,
+    1712,  1720,  1721,  1726,  1734,  1738,  1743,  1742,  1755,  1756,
+    1760,  1761,  1771,  1776,  1786,  1795,  1796,  1808,  1812,  1814,
+    1815,  1816,  1817,  1818,  1822,  1823,  1827,  1828,  1832,  1841,
+    1842,  1853,  1860,  1869,  1879,  1880,  1885,  1886,  1887,  1887,
+    1903,  1908,  1913,  1913,  1920,  1921,  1921,  1927,  1933,  1937,
+    1949,  1950,  1951,  1952,  1953,  1954,  1958,  1959,  1960,  1961,
+    1965,  1978,  1980,  1982,  1984,  1986,  1991,  1994,  2001,  2000,
+    2009,  2010,  2011,  2012,  2020,  2021,  2022,  2026,  2027,  2028,
+    2029,  2030,  2031,  2032,  2033,  2034,  2035,  2036,  2037,  2038,
+    2039,  2040,  2041,  2042,  2043,  2044,  2045,  2046,  2047,  2048,
+    2054,  2053,  2065,  2072,  2073,  2074,  2075,  2076,  2077,  2078,
+    2079,  2080,  2081,  2082,  2083,  2084,  2089,  2100,  2101,  2102,
+    2103,  2109,  2123,  2129,  2135,  2141,  2140,  2149,  2150,  2160,
+    2170,  2177,  2182,  2192,  2196,  2197,  2201,  2202,  2205,  2206,
+    2210,  2214,  2224,  2230,  2240,  2245,  2249,  2250,  2254,  2258,
+    2262,  2269,  2273,  2277,  2284,  2285,  2289,  2290,  2291,  2292,
+    2293,  2294,  2298,  2299,  2303,  2304,  2308,  2309,  2313,  2314,
+    2321,  2328,  2329,  2330,  2334,  2335,  2339,  2340,  2344,  2345,
+    2349,  2350,  2354,  2354,  2367,  2367,  2380,  2381,  2389,  2398,
+    2399,  2400,  2401,  2402,  2406,  2407,  2408,  2409
 };
 #endif
 
@@ -1955,14 +1960,14 @@
      227,   227,   227,   227,   227,   227,   227,   227,   227,   227,
      229,   228,   230,   231,   231,   231,   231,   231,   231,   231,
      231,   231,   231,   231,   231,   231,   232,   233,   233,   233,
-     233,   233,   233,   233,   235,   234,   236,   236,   236,   236,
-     236,   236,   237,   238,   238,   239,   239,   239,   239,   240,
-     241,   241,   241,   241,   241,   242,   242,   243,   243,   243,
-     244,   244,   244,   245,   245,   246,   246,   246,   246,   246,
-     246,   247,   247,   248,   248,   249,   249,   250,   250,   250,
-     251,   251,   251,   252,   252,   253,   253,   254,   254,   255,
-     255,   257,   256,   259,   258,   260,   260,   261,   262,   262,
-     262,   262,   262,   263,   263,   263,   263
+     233,   233,   233,   233,   233,   235,   234,   236,   236,   236,
+     236,   236,   236,   237,   238,   238,   239,   239,   239,   239,
+     240,   241,   241,   241,   241,   241,   242,   242,   243,   243,
+     243,   244,   244,   244,   245,   245,   246,   246,   246,   246,
+     246,   246,   247,   247,   248,   248,   249,   249,   250,   250,
+     250,   251,   251,   251,   252,   252,   253,   253,   254,   254,
+     255,   255,   257,   256,   259,   258,   260,   260,   261,   262,
+     262,   262,   262,   262,   263,   263,   263,   263
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -1994,14 +1999,14 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        0,     5,     3,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     4,     1,     1,     1,
-       1,     3,     3,     3,     0,     5,     0,     3,     1,     5,
-       3,     3,     2,     0,     2,     1,     1,     4,     4,     2,
-       3,     5,     1,     3,     0,     1,     1,     6,     5,     4,
-       4,     6,     5,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     1,     3,     1,     1,     4,     3,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     2,     0,     2,     1,     3,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1
+       1,     3,     3,     3,     3,     0,     5,     0,     3,     1,
+       5,     3,     3,     2,     0,     2,     1,     1,     4,     4,
+       2,     3,     5,     1,     3,     0,     1,     1,     6,     5,
+       4,     4,     6,     5,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     1,     3,     1,     1,     4,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     2,     0,     2,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2011,59 +2016,59 @@
 {
        0,    12,     0,     0,     0,     0,    51,    19,     0,    44,
        0,     0,     2,     3,    10,    11,     0,     6,     8,     5,
-       7,    18,     0,     0,   321,     0,     0,     0,     0,   164,
+       7,    18,     0,     0,   322,     0,     0,     0,     0,   164,
        9,     1,     4,    13,     0,    16,    50,     0,     0,    48,
-     313,   311,   312,   314,    52,   310,   196,   197,   198,   199,
+     314,   312,   313,   315,    52,   311,   196,   197,   198,   199,
        0,    14,    21,   168,     0,    32,    31,    35,    34,   164,
-      27,     0,    33,    36,   165,   167,     0,    49,   328,   329,
-     330,   331,   332,   335,   333,   334,   336,   301,   319,   327,
-     322,   325,   302,   320,    91,     0,     0,     0,    30,    28,
+      27,     0,    33,    36,   165,   167,     0,    49,   329,   330,
+     331,   332,   333,   336,   334,   335,   337,   302,   320,   328,
+     323,   326,   303,   321,    91,     0,     0,     0,    30,    28,
       45,     0,     0,    38,     0,     0,   166,    15,     0,    97,
       95,    96,    98,    99,    66,   100,     0,   101,     0,    64,
        0,    71,    68,   102,   103,   104,   105,   106,   107,   108,
        0,    92,    93,     0,     0,     0,    40,     0,    91,    29,
-     303,   326,     0,     0,    73,     0,     0,     0,     0,    53,
-      94,    20,   315,   316,   317,     0,   318,     0,     0,     0,
-     323,    37,   319,    43,   304,   306,   307,    25,    26,     0,
-       0,     0,    76,    77,    79,    78,    80,    81,   321,     0,
+     304,   327,     0,     0,    73,     0,     0,     0,     0,    53,
+      94,    20,   316,   317,   318,     0,   319,     0,     0,     0,
+     324,    37,   320,    43,   305,   307,   308,    25,    26,     0,
+       0,     0,    76,    77,    79,    78,    80,    81,   322,     0,
       75,     0,     0,     0,     0,    55,     0,     0,    41,    39,
-       0,     0,   321,     0,    67,    63,    62,     0,     0,    61,
-      65,    70,    72,    69,    56,   157,    22,    24,   309,   324,
-       0,   305,    82,    74,    58,     0,     0,   161,   160,   162,
-     163,     0,     0,   157,     0,   155,   308,     0,     0,   159,
+       0,     0,   322,     0,    67,    63,    62,     0,     0,    61,
+      65,    70,    72,    69,    56,   157,    22,    24,   310,   325,
+       0,   306,    82,    74,    58,     0,     0,   161,   160,   162,
+     163,     0,     0,   157,     0,   155,   309,     0,     0,   159,
       57,    54,   156,     0,   195,   158,    59,     0,     0,   170,
        0,     0,     0,     0,   178,     0,   182,   185,   148,     0,
-     149,   240,     0,     0,     0,   257,   258,   259,   303,   208,
+     149,   240,     0,     0,     0,   257,   258,   259,   304,   208,
      184,   192,   193,   194,   135,     0,     0,   176,   210,   211,
-     212,   264,   191,   177,   286,   285,   260,   124,    17,   188,
+     212,   265,   191,   177,   287,   286,   260,   124,    17,   188,
        0,     0,     0,     0,   190,     0,     0,     0,     0,     0,
-     187,   260,     0,    85,   133,   136,   189,   284,   146,   169,
+     187,   260,     0,    85,   133,   136,   189,   285,   146,   169,
        0,   243,   244,   245,   246,   249,   250,   251,   252,   248,
-     247,   253,   254,   255,     0,     0,   321,     0,    60,     0,
-     294,   295,   296,   297,   298,   299,   300,   293,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   284,   116,
-     138,   141,     0,   282,     0,   124,   150,   266,   262,   263,
-     261,   213,   335,   336,   303,     0,   214,   215,   216,     0,
-     207,   319,   201,     0,   242,   126,   127,   128,   129,   132,
-     125,     0,   290,     0,     0,   289,     0,   174,   179,   171,
-     180,   181,     0,     0,     0,    89,     0,     0,     0,     0,
-       0,   279,   335,     0,   151,   273,   335,     0,   268,   273,
-     256,   200,     0,   202,   222,   231,   232,   236,   225,   226,
-     227,   228,   229,   230,   223,   233,   234,   235,   224,   321,
-     239,   217,   218,   219,   220,   221,   237,   238,     0,     0,
-       0,   292,     0,   288,     0,   175,   173,     0,     0,     0,
-     241,     0,     0,     0,     0,   139,     0,   134,     0,   142,
-       0,   137,     0,   283,     0,   280,     0,     0,     0,   147,
-     272,     0,     0,   265,     0,   321,     0,   203,     0,     0,
-       0,   291,   287,   172,   183,   186,   118,     0,     0,     0,
-       0,    87,   117,   273,   140,   273,   143,     0,     0,   152,
-     335,   153,   275,   276,   274,   271,   335,   267,   270,     0,
-     204,   205,   130,   131,    90,     0,     0,     0,     0,   119,
-       0,   144,   145,   281,   266,     0,     0,     0,   206,   110,
-       0,   111,   113,     0,   112,     0,     0,    88,     0,   154,
-       0,     0,   269,     0,     0,     0,   122,     0,    86,     0,
-     209,   278,   277,   109,   115,   114,     0,   124,   120,     0,
-     121,   123
+     247,   253,   254,   255,     0,     0,   322,     0,    60,     0,
+     295,   296,   297,   298,   299,   300,   301,   294,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   285,   116,
+     138,   141,     0,   283,     0,   124,   150,   267,   263,   262,
+     264,   261,   213,   336,   337,   304,     0,   214,   215,   216,
+       0,   207,   320,   201,     0,   242,   126,   127,   128,   129,
+     132,   125,     0,   291,     0,     0,   290,     0,   174,   179,
+     171,   180,   181,     0,     0,     0,    89,     0,     0,     0,
+       0,     0,   280,   336,     0,   151,   274,   336,     0,   269,
+     274,   256,   200,     0,   202,   222,   231,   232,   236,   225,
+     226,   227,   228,   229,   230,   223,   233,   234,   235,   224,
+     322,   239,   217,   218,   219,   220,   221,   237,   238,     0,
+       0,     0,   293,     0,   289,     0,   175,   173,     0,     0,
+       0,   241,     0,     0,     0,     0,   139,     0,   134,     0,
+     142,     0,   137,     0,   284,     0,   281,     0,     0,     0,
+     147,   273,     0,     0,   266,     0,   322,     0,   203,     0,
+       0,     0,   292,   288,   172,   183,   186,   118,     0,     0,
+       0,     0,    87,   117,   274,   140,   274,   143,     0,     0,
+     152,   336,   153,   276,   277,   275,   272,   336,   268,   271,
+       0,   204,   205,   130,   131,    90,     0,     0,     0,     0,
+     119,     0,   144,   145,   282,   267,     0,     0,     0,   206,
+     110,     0,   111,   113,     0,   112,     0,     0,    88,     0,
+     154,     0,     0,   270,     0,     0,     0,   122,     0,    86,
+       0,   209,   279,   278,   109,   115,   114,     0,   124,   120,
+       0,   121,   123
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
@@ -2073,95 +2078,95 @@
       58,    86,    87,   159,    59,    60,    94,    95,   128,   151,
       18,    29,    61,    19,    25,    20,    26,    84,   175,   195,
      211,   217,   226,   113,   114,   115,   116,   117,   118,   119,
-     169,   170,   212,   251,   329,   499,   433,   120,   121,   122,
-     471,   375,   434,   516,   529,   536,   308,   360,   252,   330,
-     253,   331,   376,   377,   438,   442,   254,   336,   255,   383,
-     213,   214,   215,    63,    64,    65,   225,   368,   369,   426,
-     256,   275,   278,   279,    50,   392,   257,   287,   349,   418,
-     258,   282,   259,   307,   260,   261,   262,   290,   387,   388,
-     450,   484,   333,   334,   263,   264,   265,   318,   319,    78,
+     169,   170,   212,   251,   329,   500,   434,   120,   121,   122,
+     472,   376,   435,   517,   530,   537,   308,   361,   252,   330,
+     253,   331,   377,   378,   439,   443,   254,   336,   255,   384,
+     213,   214,   215,    63,    64,    65,   225,   369,   370,   427,
+     256,   275,   278,   279,    50,   393,   257,   287,   350,   419,
+     258,   282,   259,   307,   260,   261,   262,   290,   388,   389,
+     451,   485,   333,   334,   263,   264,   265,   318,   319,    78,
      153,   154,   155,    44,    45,   144,   156,   146,    37,    38,
      180,   181,    80,    81,    82,    83
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -422
+#define YYPACT_NINF -418
 static const yytype_int16 yypact[] =
 {
-       4,  -422,   -77,   -34,   -46,   -31,  -422,  -422,    -4,  -422,
-     106,   139,     4,  -422,  -422,  -422,   186,  -422,  -422,  -422,
-    -422,  -422,   104,   187,    68,   194,   221,   127,   199,    53,
-    -422,  -422,  -422,  -422,    92,  -422,  -422,    84,   489,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-     107,  -422,   101,  -422,   217,  -422,  -422,  -422,  -422,    64,
-    -422,   122,  -422,    14,   125,  -422,   223,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-      98,  -422,  -422,  -422,   493,   118,   129,   131,  -422,  -422,
-    -422,   489,   132,  -422,   241,   130,  -422,  -422,   489,  -422,
-    -422,  -422,  -422,  -422,   123,  -422,   134,  -422,   135,   136,
-     138,   141,   146,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-     245,   493,  -422,    74,   239,   239,  -422,   181,   493,  -422,
-     437,  -422,    40,    56,    -7,   152,   170,    40,    40,  -422,
-    -422,  -422,  -422,  -422,  -422,   163,  -422,   165,   183,   193,
-    -422,  -422,   173,  -422,   226,  -422,  -422,  -422,  -422,   180,
-     188,   189,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   -50,
-    -422,   190,   191,   195,   202,   303,    40,    40,  -422,  -422,
-     206,   489,  -422,   437,  -422,  -422,  -422,   207,    -7,  -422,
-    -422,  -422,  -422,  -422,  -422,    32,  -422,  -422,  -422,    98,
-     208,  -422,  -422,  -422,  -422,   211,   315,  -422,  -422,  -422,
-    -422,   316,   262,    43,   261,  -422,  -422,   127,   267,  -422,
-    -422,  -422,  -422,   336,   415,  -422,  -422,   242,    74,  -422,
-     -36,   105,   124,   489,  -422,    54,    16,  -422,  -422,   171,
-    -422,  -422,   353,   360,   368,  -422,  -422,  -422,   437,  -422,
-    -422,  -422,  -422,  -422,  -422,   249,   371,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,   416,  -422,  -422,  -422,
-     489,   197,   489,   197,  -422,   127,   308,   310,   127,   127,
-    -422,   268,   264,  -422,  -422,  -422,  -422,   278,  -422,  -422,
-     266,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,   196,    18,  -422,   489,    -3,   383,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   -36,   489,
-     387,   -36,   489,   289,   254,   254,   292,   293,   278,  -422,
-    -422,  -422,   382,  -422,   -42,  -422,   503,   517,  -422,  -422,
-    -422,  -422,   279,   280,   437,   298,  -422,  -422,  -422,   489,
-    -422,   -47,   441,   283,  -422,  -422,  -422,  -422,   286,  -422,
-    -422,   -36,  -422,   403,   -36,  -422,   406,   317,   347,  -422,
-    -422,  -422,   297,   299,   -23,     3,    28,    21,   254,   329,
-     300,    -3,   402,   -14,  -422,  -422,   404,   -13,  -422,   408,
-    -422,  -422,   309,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,   489,   318,
-      58,  -422,   -36,  -422,   -36,  -422,  -422,   289,    74,    74,
-    -422,   489,   489,    -1,   433,  -422,   489,  -422,   435,  -422,
-     489,  -422,   438,  -422,   426,  -422,   171,   489,   531,  -422,
-      69,   489,   545,  -422,   489,  -422,   324,  -422,   489,   333,
-     339,  -422,  -422,  -422,  -422,  -422,  -422,   446,   489,   489,
-     559,   125,  -422,  -422,  -422,  -422,  -422,   254,   343,  -422,
-     449,  -422,  -422,   346,  -422,  -422,   452,  -422,  -422,   350,
-    -422,  -422,  -422,  -422,  -422,    15,   472,    19,    22,  -422,
-     478,    69,    69,  -422,   517,   489,    90,   489,  -422,  -422,
-     489,  -422,  -422,   489,  -422,   489,    -6,  -422,    -9,  -422,
-     357,   359,  -422,   482,   483,   484,  -422,   254,  -422,   488,
-    -422,  -422,  -422,  -422,  -422,  -422,   127,  -422,  -422,   289,
-      -3,  -422
+     252,  -418,   -82,   -71,   -58,   -55,  -418,  -418,    -6,  -418,
+     112,   141,   252,  -418,  -418,  -418,   145,  -418,  -418,  -418,
+    -418,  -418,    87,   169,    68,   194,    48,   184,   200,    11,
+    -418,  -418,  -418,  -418,    94,  -418,  -418,    83,   479,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+     101,  -418,    98,  -418,   211,  -418,  -418,  -418,  -418,   144,
+    -418,   122,  -418,    20,   132,  -418,   235,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+     109,  -418,  -418,  -418,   451,   127,   137,   143,  -418,  -418,
+    -418,   479,   149,  -418,   249,   148,  -418,  -418,   479,  -418,
+    -418,  -418,  -418,  -418,   140,  -418,   146,  -418,   150,   152,
+     154,   155,   158,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+     253,   451,  -418,   173,   464,   464,  -418,   195,   451,  -418,
+     412,  -418,    54,   -41,     5,   156,   180,    54,    54,  -418,
+    -418,  -418,  -418,  -418,  -418,   171,  -418,   174,   188,   203,
+    -418,  -418,   183,  -418,   236,  -418,  -418,  -418,  -418,   189,
+     190,   191,  -418,  -418,  -418,  -418,  -418,  -418,  -418,   -46,
+    -418,   192,   202,   204,   205,   305,    54,    54,  -418,  -418,
+     197,   479,  -418,   412,  -418,  -418,  -418,   198,     5,  -418,
+    -418,  -418,  -418,  -418,  -418,    43,  -418,  -418,  -418,   109,
+     208,  -418,  -418,  -418,  -418,   217,   310,  -418,  -418,  -418,
+    -418,   316,   264,     0,    74,  -418,  -418,   184,   262,  -418,
+    -418,  -418,  -418,   333,   261,  -418,  -418,   230,   173,  -418,
+     -69,   321,   336,   479,  -418,    55,   -50,  -418,  -418,   354,
+    -418,  -418,   338,   340,   341,  -418,  -418,  -418,   412,  -418,
+    -418,  -418,  -418,  -418,  -418,   215,   342,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,   467,  -418,  -418,  -418,
+     479,    75,   479,    75,  -418,   184,   276,   280,   184,   184,
+    -418,   232,   228,  -418,  -418,  -418,  -418,   196,  -418,  -418,
+     231,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,   493,   114,  -418,   479,    -5,   346,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,   -69,   479,
+     348,   -69,   479,   250,   107,   107,   251,   255,   196,  -418,
+    -418,  -418,   339,  -418,   -45,  -418,   507,   521,  -418,  -418,
+    -418,  -418,  -418,   239,   246,   412,   266,  -418,  -418,  -418,
+     479,  -418,   -80,   431,   237,  -418,  -418,  -418,  -418,   247,
+    -418,  -418,   -69,  -418,   366,   -69,  -418,   370,   282,   309,
+    -418,  -418,  -418,   263,   265,   -35,     8,    15,    12,   107,
+     284,   270,    -5,   362,   -27,  -418,  -418,   363,    -2,  -418,
+     376,  -418,  -418,   275,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,   479,
+     283,    72,  -418,   -69,  -418,   -69,  -418,  -418,   250,   173,
+     173,  -418,   479,   479,    89,   398,  -418,   479,  -418,   400,
+    -418,   479,  -418,   402,  -418,   386,  -418,   354,   479,   535,
+    -418,   131,   479,   549,  -418,   479,  -418,   288,  -418,   479,
+     287,   290,  -418,  -418,  -418,  -418,  -418,  -418,   404,   479,
+     479,   563,   132,  -418,  -418,  -418,  -418,  -418,   107,   293,
+    -418,   399,  -418,  -418,   294,  -418,  -418,   401,  -418,  -418,
+     299,  -418,  -418,  -418,  -418,  -418,    17,   420,    18,    19,
+    -418,   425,   131,   131,  -418,   521,   479,    73,   479,  -418,
+    -418,   479,  -418,  -418,   479,  -418,   479,     4,  -418,    -1,
+    -418,   311,   313,  -418,   440,   442,   443,  -418,   107,  -418,
+     448,  -418,  -418,  -418,  -418,  -418,  -418,   184,  -418,  -418,
+     250,    -5,  -418
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -422,  -422,  -422,   491,     9,  -146,  -422,  -422,  -422,  -422,
-     270,  -422,  -422,    47,  -422,   445,  -422,  -422,  -422,   161,
-    -422,  -422,  -422,    12,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,   319,  -422,  -422,  -422,  -422,  -422,   378,  -422,   391,
-    -422,  -422,  -422,  -422,  -422,  -422,  -330,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,   301,   302,  -422,   -63,  -422,  -422,  -418,  -422,
-    -422,  -422,  -422,  -422,  -214,  -422,  -422,  -422,  -422,  -422,
-    -422,  -422,  -422,  -422,  -422,    67,  -206,  -422,    11,  -312,
-    -421,  -422,   147,   200,  -422,  -422,  -422,   244,   252,  -128,
-     281,  -422,   335,  -422,   229,  -223,    33,   -38,  -162,  -422,
-    -422,  -422,   354,   436,  -422,  -119
+    -418,  -418,  -418,   444,    14,  -167,  -418,  -418,  -418,  -418,
+     233,  -418,  -418,  -100,  -418,   395,  -418,  -418,  -418,   110,
+    -418,  -418,  -418,    23,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,   277,  -418,  -418,  -418,  -418,  -418,   344,  -418,   343,
+    -418,  -418,  -418,  -418,  -418,  -418,  -330,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,   269,   271,  -418,   -63,  -418,  -418,  -417,  -418,
+    -418,  -418,  -418,  -418,  -214,  -418,  -418,  -418,  -418,  -418,
+    -418,  -418,  -418,  -418,  -418,    28,  -205,  -418,   -28,  -327,
+    -319,  -418,    99,   165,  -418,  -418,  -418,   210,   221,  -128,
+     248,  -418,   301,  -418,   193,  -220,    77,   -38,  -162,  -418,
+    -418,  -418,   314,   424,  -418,  -119
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -2171,146 +2176,148 @@
 #define YYTABLE_NINF -261
 static const yytype_int16 yytable[] =
 {
-      79,    96,   152,   227,   141,   381,   187,   269,     1,   463,
-       2,     3,     4,   431,   355,   356,   357,   358,   -42,   509,
-     200,   188,   526,   512,   384,   439,   514,    91,     5,   379,
-       6,   341,   435,   280,     7,    21,   440,   204,    57,     3,
-       4,    62,   436,    92,   162,   163,   164,   165,   379,   209,
-       3,     4,   501,   126,   502,   152,   527,   448,   452,     2,
-      79,   323,   452,   205,   326,   327,    23,   209,    57,   528,
-       2,    62,   142,   304,   205,   468,   189,     5,  -260,    22,
-     143,   469,   470,    52,   380,   482,   510,   432,     5,   483,
-     513,    93,    24,   515,    52,   362,   266,   359,   365,   350,
-       8,   166,   441,   430,   -83,   167,     9,   437,    28,   268,
-      30,   281,   449,   453,    10,   -84,   168,   530,   270,   466,
-     152,   541,    68,    69,    70,    71,   245,    72,   -23,   -21,
-     342,    74,    75,   343,   344,    77,   481,   272,   421,    31,
-     487,   423,   206,    79,   353,   345,   346,   347,   348,     8,
-     207,   208,   157,   206,    53,   158,   -46,   145,   147,   335,
-       8,   207,   208,    54,   160,    53,   276,   -47,   161,   277,
-     459,    55,    56,   460,    54,    34,   339,   351,    46,    47,
-      48,    49,    55,    56,   173,   174,    73,    74,    75,    76,
-      33,    35,    36,   271,   273,   274,   370,   371,    39,   461,
-     335,   462,   520,    51,    66,   521,   310,   540,    67,    68,
-      69,    70,    71,   -23,    72,    85,   152,    73,    74,    75,
-      76,    88,    77,   196,   197,    90,    53,    97,    68,    69,
-      70,    71,   309,    72,   320,    98,    73,    74,    75,    76,
-     123,    77,   124,   125,   127,   129,   130,   456,   132,   139,
-     443,   335,   148,   311,   312,   313,   314,   315,   316,   133,
-     134,   135,   223,   136,   171,  -164,   137,   352,   317,   354,
-    -164,   138,  -164,  -164,  -164,    68,    69,    70,    71,   245,
-      72,   363,   172,   246,   366,   176,   247,   177,    77,  -164,
-    -164,  -164,   178,   489,   179,  -164,   182,   183,   385,   389,
-      68,    69,    70,    71,    40,    72,   184,   194,   338,   464,
-     465,   393,    43,    77,   185,   186,   190,   191,   281,   219,
-     220,   192,   539,   218,  -164,  -164,  -164,  -164,   193,    40,
-     198,   202,   216,    41,   221,  -164,    42,    43,   228,  -164,
-     229,  -164,   498,    68,    69,    70,    71,   142,    72,   503,
-     267,    73,    74,    75,    76,   143,    77,   283,    68,    69,
-      70,    71,    53,    72,   284,  -164,  -164,  -164,  -164,  -164,
-    -164,    77,   285,  -164,   288,   289,  -164,  -164,  -164,   324,
-     457,   325,    68,    69,    70,    71,  -164,    72,   304,   328,
-     332,   337,   361,   385,   467,    77,   364,   367,   473,   537,
-     372,   373,   475,   378,  -258,  -259,   391,   419,   500,   479,
-     385,   420,   422,   485,   385,   424,   488,   425,   427,   428,
-     491,   429,   446,   447,   230,   451,   231,   232,   233,   454,
-     495,   496,   455,    68,    69,    70,    71,   472,    72,   474,
-     458,   444,   476,   234,   235,   236,    77,   477,   490,   237,
-     494,   291,   292,   293,   294,   295,   296,   297,   298,   492,
-     299,   300,   301,   302,   303,   493,   389,   519,   504,   522,
-     505,   506,   523,   507,   508,   524,   511,   525,   238,   239,
-     240,   241,   517,   531,   394,   532,   533,   534,   535,   242,
-     395,   396,   538,   243,   250,   244,   397,   398,   399,   400,
-     401,   402,   403,    32,    89,   390,   149,   203,   404,   405,
-     406,   407,   140,   478,   222,   518,   224,   321,   201,    68,
-      69,    70,    71,   245,    72,   322,   445,   246,   374,   286,
-     247,   248,    77,   340,   131,   199,   304,     0,   305,   306,
-     249,    68,    69,    70,    71,   142,    72,     0,     0,    73,
-      74,    75,    76,   143,    77,     0,     0,     0,     0,     0,
-     150,     0,   408,     0,   409,     0,     0,     0,     0,     0,
-     410,   411,   412,   413,   414,   415,   416,   417,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,     0,
-     110,   111,   112,    68,    69,    70,    71,     0,    72,     0,
-       0,    73,    74,    75,    76,     0,    77,    68,    69,    70,
-      71,     0,    72,     0,     0,   382,    74,    75,    76,     0,
-      77,    68,    69,    70,    71,     0,    72,     0,     0,   386,
+      79,    96,   152,   227,   141,   382,   187,     3,     4,   385,
+     269,   464,   356,   357,   358,   359,   440,     2,   432,   436,
+     200,   510,   513,   515,   -42,   188,   380,   441,   209,   437,
+      21,   205,   527,    91,   280,     5,   380,   173,   174,   142,
+     304,    52,    22,    57,   449,  -260,   209,   143,   204,    92,
+       3,     4,    62,   126,    23,   152,   162,   163,   164,   165,
+      79,   323,   -23,   -21,   326,   327,   528,   160,    24,   453,
+     453,   161,   -84,    57,   205,   223,   196,   197,  -164,   529,
+     189,   381,    62,  -164,   310,  -164,  -164,  -164,   511,   514,
+     516,   431,   433,   442,   438,   360,   266,    93,   363,   450,
+     351,   366,  -164,  -164,  -164,   467,    28,     8,  -164,   268,
+     206,   281,    53,   166,   -46,   -83,    30,   167,   207,   208,
+     152,    54,   482,   542,   454,   531,   488,   342,   168,    55,
+      56,   311,   312,   313,   314,   315,   316,  -164,  -164,  -164,
+    -164,    31,   422,    79,   354,   424,   317,   483,  -164,    33,
+       2,   484,  -164,   206,  -164,   502,    40,   503,    34,   335,
+      41,   207,   208,    42,    43,   469,   157,   276,     5,   158,
+     277,   470,   471,    35,    52,    53,   340,   352,  -164,  -164,
+    -164,  -164,  -164,  -164,   460,   521,  -164,   461,   522,  -164,
+    -164,  -164,    36,   271,   273,   274,   371,   372,    39,  -164,
+     335,   145,   147,   462,    51,   463,    66,    67,   541,    85,
+     -23,    68,    69,    70,    71,    88,    72,   152,    68,    69,
+      70,    71,   245,    72,    77,    90,   343,    74,    75,   344,
+     345,    77,   309,    53,   320,    46,    47,    48,    49,    97,
+       8,   346,   347,   348,   349,    53,    98,   -47,   457,   123,
+     124,   444,   335,   129,    54,   125,     1,   139,     2,     3,
+       4,   127,    55,    56,   130,   132,   148,   353,   171,   355,
+     230,   133,   231,   232,   233,   134,     5,   135,     6,   136,
+     137,   364,     7,   138,   367,    73,    74,    75,    76,   234,
+     235,   236,   172,   176,   490,   237,   177,   178,   386,   390,
+      68,    69,    70,    71,   179,    72,   182,   183,   332,   194,
+     465,   466,   394,    77,   219,   184,   185,   186,   190,   281,
+     220,   198,   202,   540,   238,   239,   240,   241,   191,   218,
+     192,   193,   216,   228,   270,   242,   221,   229,   267,   243,
+     288,   244,   283,   499,   284,   285,   289,   324,     8,   272,
+     504,   325,   304,   328,     9,   362,   337,   365,   368,   373,
+     379,   420,    10,   374,  -258,    68,    69,    70,    71,   245,
+      72,  -259,   421,   246,   392,   423,   247,   248,    77,   425,
+     428,   458,   426,   448,   452,   429,   249,   430,    68,    69,
+      70,    71,   447,    72,   386,   468,   445,   455,   456,   474,
+     538,    77,   473,   476,   475,   459,   477,   478,   495,   501,
+     480,   386,   491,   493,   486,   386,   494,   489,   505,   507,
+     506,   492,   508,   509,   512,    68,    69,    70,    71,   518,
+      72,   496,   497,    73,    74,    75,    76,   532,    77,   533,
+      68,    69,    70,    71,   534,    72,   535,   536,    73,    74,
+      75,    76,   539,    77,    89,   391,    32,   250,    68,    69,
+      70,    71,   245,    72,   140,   203,   246,   390,   520,   247,
+     523,    77,   149,   524,   395,   479,   525,   519,   526,   446,
+     396,   397,   222,   321,   201,   224,   398,   399,   400,   401,
+     402,   403,   404,   375,   322,   199,   286,   341,   405,   406,
+     407,   408,   291,   292,   293,   294,   295,   296,   297,   298,
+       0,   299,   300,   301,   302,   303,    68,    69,    70,    71,
+     142,    72,   131,     0,    73,    74,    75,    76,   143,    77,
+       0,     0,     0,     0,     0,   150,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,     0,   110,   111,
+     112,     0,   409,     0,   410,     0,     0,     0,     0,     0,
+     411,   412,   413,   414,   415,   416,   417,   418,    68,    69,
+      70,    71,   142,    72,     0,     0,    73,    74,    75,    76,
+     143,    77,     0,    68,    69,    70,    71,   304,    72,   305,
+     306,    73,    74,    75,    76,     0,    77,    68,    69,    70,
+      71,    40,    72,     0,     0,   338,     0,     0,   339,    43,
+      77,    68,    69,    70,    71,     0,    72,     0,     0,   383,
       74,    75,    76,     0,    77,    68,    69,    70,    71,     0,
-      72,     0,     0,   480,    74,    75,    76,     0,    77,    68,
-      69,    70,    71,     0,    72,     0,     0,   486,    74,    75,
+      72,     0,     0,   387,    74,    75,    76,     0,    77,    68,
+      69,    70,    71,     0,    72,     0,     0,   481,    74,    75,
       76,     0,    77,    68,    69,    70,    71,     0,    72,     0,
-       0,   497,     0,     0,     0,     0,    77
+       0,   487,    74,    75,    76,     0,    77,    68,    69,    70,
+      71,     0,    72,     0,     0,   498,     0,     0,     0,     0,
+      77
 };
 
 static const yytype_int16 yycheck[] =
 {
-      38,    64,   130,   217,   123,   335,   168,   230,     4,   427,
-       6,     7,     8,    10,    17,    18,    19,    20,     4,     4,
-     182,    71,    28,     4,   336,     4,     4,    13,    24,    71,
-      26,    13,     4,   239,    30,   112,    15,     5,    29,     7,
-       8,    29,    14,    29,    51,    52,    53,    54,    71,   195,
-       7,     8,   473,    91,   475,   183,    62,    71,    71,     6,
-      98,   275,    71,    31,   278,   279,   112,   213,    59,    75,
-       6,    59,   108,   120,    31,    76,   126,    24,   125,   113,
-     116,    82,    83,    30,   126,    16,    71,    84,    24,    20,
-      71,    77,   123,    71,    30,   318,   224,   100,   321,   305,
-      96,   108,    81,   126,    72,   112,   102,    79,   112,   228,
-       4,   239,   126,   126,   110,    72,   123,   126,    13,   431,
-     248,   539,   104,   105,   106,   107,   108,   109,   112,   113,
-     112,   113,   114,   115,   116,   117,   448,    13,   361,     0,
-     452,   364,   110,   181,   306,   127,   128,   129,   130,    96,
-     118,   119,   112,   110,   101,   115,   103,   124,   125,   287,
-      96,   118,   119,   110,   108,   101,   112,   103,   112,   115,
-     112,   118,   119,   115,   110,    71,   304,   305,    51,    52,
-      53,    54,   118,   119,   137,   138,   112,   113,   114,   115,
-       4,     4,   124,   231,   232,   233,   324,   325,     4,   422,
-     328,   424,   112,     4,   112,   115,     9,   537,   124,   104,
-     105,   106,   107,   112,   109,   108,   344,   112,   113,   114,
-     115,     4,   117,   176,   177,   103,   101,     4,   104,   105,
-     106,   107,   270,   109,   272,   137,   112,   113,   114,   115,
-     122,   117,   113,   112,   112,     4,   116,   409,   125,     4,
-     378,   379,    71,    56,    57,    58,    59,    60,    61,   125,
-     125,   125,     1,   125,   112,     4,   125,   305,    71,   307,
-       9,   125,    11,    12,    13,   104,   105,   106,   107,   108,
-     109,   319,   112,   112,   322,   122,   115,   122,   117,    28,
-      29,    30,   109,   455,   101,    34,   123,    71,   336,   337,
-     104,   105,   106,   107,   108,   109,   126,     4,   112,   428,
-     429,   349,   116,   117,   126,   126,   126,   126,   446,     4,
-       4,   126,   536,   112,    63,    64,    65,    66,   126,   108,
-     124,   124,   124,   112,    72,    74,   115,   116,    71,    78,
-       4,    80,   470,   104,   105,   106,   107,   108,   109,   477,
-     108,   112,   113,   114,   115,   116,   117,     4,   104,   105,
-     106,   107,   101,   109,     4,   104,   105,   106,   107,   108,
-     109,   117,     4,   112,   125,     4,   115,   116,   117,    71,
-     418,    71,   104,   105,   106,   107,   125,   109,   120,   125,
-     112,   125,     9,   431,   432,   117,     9,   108,   436,   527,
-     108,   108,   440,    21,   125,   125,   108,   124,   471,   447,
-     448,   125,     9,   451,   452,     9,   454,   100,    71,   122,
-     458,   122,   122,    21,     9,    21,    11,    12,    13,    21,
-     468,   469,   123,   104,   105,   106,   107,     4,   109,     4,
-     122,   112,     4,    28,    29,    30,   117,    21,   124,    34,
-       4,    35,    36,    37,    38,    39,    40,    41,    42,   126,
-      44,    45,    46,    47,    48,   126,   504,   505,   125,   507,
-      21,   125,   510,    21,   124,   513,     4,   515,    63,    64,
-      65,    66,     4,   126,    43,   126,     4,     4,     4,    74,
-      49,    50,     4,    78,   224,    80,    55,    56,    57,    58,
-      59,    60,    61,    12,    59,   344,   128,   188,    67,    68,
-      69,    70,   121,   446,   213,   504,   214,   273,   183,   104,
-     105,   106,   107,   108,   109,   273,   379,   112,   328,   248,
-     115,   116,   117,   304,    98,   181,   120,    -1,   122,   123,
-     125,   104,   105,   106,   107,   108,   109,    -1,    -1,   112,
-     113,   114,   115,   116,   117,    -1,    -1,    -1,    -1,    -1,
-     123,    -1,   121,    -1,   123,    -1,    -1,    -1,    -1,    -1,
-     129,   130,   131,   132,   133,   134,   135,   136,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
-      97,    98,    99,   104,   105,   106,   107,    -1,   109,    -1,
-      -1,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
-     107,    -1,   109,    -1,    -1,   112,   113,   114,   115,    -1,
+      38,    64,   130,   217,   123,   335,   168,     7,     8,   336,
+     230,   428,    17,    18,    19,    20,     4,     6,    10,     4,
+     182,     4,     4,     4,     4,    71,    71,    15,   195,    14,
+     112,    31,    28,    13,   239,    24,    71,   137,   138,   108,
+     120,    30,   113,    29,    71,   125,   213,   116,     5,    29,
+       7,     8,    29,    91,   112,   183,    51,    52,    53,    54,
+      98,   275,   112,   113,   278,   279,    62,   108,   123,    71,
+      71,   112,    72,    59,    31,     1,   176,   177,     4,    75,
+     126,   126,    59,     9,     9,    11,    12,    13,    71,    71,
+      71,   126,    84,    81,    79,   100,   224,    77,   318,   126,
+     305,   321,    28,    29,    30,   432,   112,    96,    34,   228,
+     110,   239,   101,   108,   103,    72,     4,   112,   118,   119,
+     248,   110,   449,   540,   126,   126,   453,    13,   123,   118,
+     119,    56,    57,    58,    59,    60,    61,    63,    64,    65,
+      66,     0,   362,   181,   306,   365,    71,    16,    74,     4,
+       6,    20,    78,   110,    80,   474,   108,   476,    71,   287,
+     112,   118,   119,   115,   116,    76,   112,   112,    24,   115,
+     115,    82,    83,     4,    30,   101,   304,   305,   104,   105,
+     106,   107,   108,   109,   112,   112,   112,   115,   115,   115,
+     116,   117,   124,   231,   232,   233,   324,   325,     4,   125,
+     328,   124,   125,   423,     4,   425,   112,   124,   538,   108,
+     112,   104,   105,   106,   107,     4,   109,   345,   104,   105,
+     106,   107,   108,   109,   117,   103,   112,   113,   114,   115,
+     116,   117,   270,   101,   272,    51,    52,    53,    54,     4,
+      96,   127,   128,   129,   130,   101,   137,   103,   410,   122,
+     113,   379,   380,     4,   110,   112,     4,     4,     6,     7,
+       8,   112,   118,   119,   116,   125,    71,   305,   112,   307,
+       9,   125,    11,    12,    13,   125,    24,   125,    26,   125,
+     125,   319,    30,   125,   322,   112,   113,   114,   115,    28,
+      29,    30,   112,   122,   456,    34,   122,   109,   336,   337,
+     104,   105,   106,   107,   101,   109,   123,    71,   112,     4,
+     429,   430,   350,   117,     4,   126,   126,   126,   126,   447,
+       4,   124,   124,   537,    63,    64,    65,    66,   126,   112,
+     126,   126,   124,    71,    13,    74,    72,     4,   108,    78,
+     125,    80,     4,   471,     4,     4,     4,    71,    96,    13,
+     478,    71,   120,   125,   102,     9,   125,     9,   108,   108,
+      21,   124,   110,   108,   125,   104,   105,   106,   107,   108,
+     109,   125,   125,   112,   108,     9,   115,   116,   117,     9,
+      71,   419,   100,    21,    21,   122,   125,   122,   104,   105,
+     106,   107,   122,   109,   432,   433,   112,    21,   123,   437,
+     528,   117,     4,   441,     4,   122,     4,    21,     4,   472,
+     448,   449,   124,   126,   452,   453,   126,   455,   125,   125,
+      21,   459,    21,   124,     4,   104,   105,   106,   107,     4,
+     109,   469,   470,   112,   113,   114,   115,   126,   117,   126,
+     104,   105,   106,   107,     4,   109,     4,     4,   112,   113,
+     114,   115,     4,   117,    59,   345,    12,   224,   104,   105,
+     106,   107,   108,   109,   121,   188,   112,   505,   506,   115,
+     508,   117,   128,   511,    43,   447,   514,   505,   516,   380,
+      49,    50,   213,   273,   183,   214,    55,    56,    57,    58,
+      59,    60,    61,   328,   273,   181,   248,   304,    67,    68,
+      69,    70,    35,    36,    37,    38,    39,    40,    41,    42,
+      -1,    44,    45,    46,    47,    48,   104,   105,   106,   107,
+     108,   109,    98,    -1,   112,   113,   114,   115,   116,   117,
+      -1,    -1,    -1,    -1,    -1,   123,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    -1,    97,    98,
+      99,    -1,   121,    -1,   123,    -1,    -1,    -1,    -1,    -1,
+     129,   130,   131,   132,   133,   134,   135,   136,   104,   105,
+     106,   107,   108,   109,    -1,    -1,   112,   113,   114,   115,
+     116,   117,    -1,   104,   105,   106,   107,   120,   109,   122,
+     123,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
+     107,   108,   109,    -1,    -1,   112,    -1,    -1,   115,   116,
      117,   104,   105,   106,   107,    -1,   109,    -1,    -1,   112,
      113,   114,   115,    -1,   117,   104,   105,   106,   107,    -1,
      109,    -1,    -1,   112,   113,   114,   115,    -1,   117,   104,
      105,   106,   107,    -1,   109,    -1,    -1,   112,   113,   114,
      115,    -1,   117,   104,   105,   106,   107,    -1,   109,    -1,
-      -1,   112,    -1,    -1,    -1,    -1,   117
+      -1,   112,   113,   114,   115,    -1,   117,   104,   105,   106,
+     107,    -1,   109,    -1,    -1,   112,    -1,    -1,    -1,    -1,
+     117
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2350,28 +2357,28 @@
       45,    46,    47,    48,   120,   122,   123,   231,   194,   255,
        9,    56,    57,    58,    59,    60,    61,    71,   245,   246,
      255,   245,   246,   222,    71,    71,   222,   222,   125,   182,
-     197,   199,   112,   240,   241,   247,   205,   125,   112,   247,
-     252,    13,   112,   115,   116,   127,   128,   129,   130,   226,
-     234,   247,   255,   256,   255,    17,    18,    19,    20,   100,
-     195,     9,   253,   255,     9,   253,   255,   108,   215,   216,
-     247,   247,   108,   108,   241,   189,   200,   201,    21,    71,
-     126,   194,   112,   207,   237,   255,   112,   236,   237,   255,
-     157,   108,   223,   255,    43,    49,    50,    55,    56,    57,
-      58,    59,    60,    61,    67,    68,    69,    70,   121,   123,
-     129,   130,   131,   132,   133,   134,   135,   136,   227,   124,
-     125,   253,     9,   253,     9,   100,   217,    71,   122,   122,
-     126,    10,    84,   184,   190,     4,    14,    79,   202,     4,
-      15,    81,   203,   247,   112,   240,   122,    21,    71,   126,
-     238,    21,    71,   126,    21,   123,   256,   255,   122,   112,
-     115,   253,   253,   216,   263,   263,   237,   255,    76,    82,
-      83,   188,     4,   255,     4,   255,     4,    21,   233,   255,
-     112,   237,    16,    20,   239,   255,   112,   237,   255,   256,
-     124,   255,   126,   126,     4,   255,   255,   112,   247,   183,
-     213,   238,   238,   247,   125,    21,   125,    21,   124,     4,
-      71,     4,     4,    71,     4,    71,   191,     4,   236,   255,
-     112,   115,   255,   255,   255,   255,    28,    62,    75,   192,
-     126,   126,   126,     4,     4,     4,   193,   247,     4,   222,
-     194,   216
+     197,   199,   112,   240,   241,   247,   205,   125,   112,   115,
+     247,   252,    13,   112,   115,   116,   127,   128,   129,   130,
+     226,   234,   247,   255,   256,   255,    17,    18,    19,    20,
+     100,   195,     9,   253,   255,     9,   253,   255,   108,   215,
+     216,   247,   247,   108,   108,   241,   189,   200,   201,    21,
+      71,   126,   194,   112,   207,   237,   255,   112,   236,   237,
+     255,   157,   108,   223,   255,    43,    49,    50,    55,    56,
+      57,    58,    59,    60,    61,    67,    68,    69,    70,   121,
+     123,   129,   130,   131,   132,   133,   134,   135,   136,   227,
+     124,   125,   253,     9,   253,     9,   100,   217,    71,   122,
+     122,   126,    10,    84,   184,   190,     4,    14,    79,   202,
+       4,    15,    81,   203,   247,   112,   240,   122,    21,    71,
+     126,   238,    21,    71,   126,    21,   123,   256,   255,   122,
+     112,   115,   253,   253,   216,   263,   263,   237,   255,    76,
+      82,    83,   188,     4,   255,     4,   255,     4,    21,   233,
+     255,   112,   237,    16,    20,   239,   255,   112,   237,   255,
+     256,   124,   255,   126,   126,     4,   255,   255,   112,   247,
+     183,   213,   238,   238,   247,   125,    21,   125,    21,   124,
+       4,    71,     4,     4,    71,     4,    71,   191,     4,   236,
+     255,   112,   115,   255,   255,   255,   255,    28,    62,    75,
+     192,   126,   126,   126,     4,     4,     4,   193,   247,     4,
+     222,   194,   216
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3199,22 +3206,22 @@
   switch (yyn)
     {
         case 2:
-#line 1125 "compilers/imcc/imcc.y"
+#line 1130 "compilers/imcc/imcc.y"
     { if (yynerrs) YYABORT; (yyval.i) = 0; }
     break;
 
   case 5:
-#line 1134 "compilers/imcc/imcc.y"
+#line 1139 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 6:
-#line 1135 "compilers/imcc/imcc.y"
+#line 1140 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 7:
-#line 1137 "compilers/imcc/imcc.y"
+#line 1142 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3223,7 +3230,7 @@
     break;
 
   case 8:
-#line 1143 "compilers/imcc/imcc.y"
+#line 1148 "compilers/imcc/imcc.y"
     {
            (yyval.i) = (yyvsp[(1) - (1)].i);
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3232,32 +3239,32 @@
     break;
 
   case 9:
-#line 1148 "compilers/imcc/imcc.y"
+#line 1153 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 10:
-#line 1149 "compilers/imcc/imcc.y"
+#line 1154 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 11:
-#line 1150 "compilers/imcc/imcc.y"
+#line 1155 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 12:
-#line 1151 "compilers/imcc/imcc.y"
+#line 1156 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 13:
-#line 1155 "compilers/imcc/imcc.y"
+#line 1160 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 14:
-#line 1157 "compilers/imcc/imcc.y"
+#line 1162 "compilers/imcc/imcc.y"
     {
            (yyval.i) = 0;
            do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3266,22 +3273,24 @@
     break;
 
   case 15:
-#line 1166 "compilers/imcc/imcc.y"
+#line 1171 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
+           /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(4) - (5)].s));
          }
     break;
 
   case 16:
-#line 1171 "compilers/imcc/imcc.y"
+#line 1177 "compilers/imcc/imcc.y"
     {
+           /* set_filename() frees the STRINGC */
            set_filename(interp, (yyvsp[(2) - (3)].s));
          }
     break;
 
   case 17:
-#line 1178 "compilers/imcc/imcc.y"
+#line 1185 "compilers/imcc/imcc.y"
     {
           /* We'll want to store an entry while emitting instructions, so just
            * store annotation like it's an instruction. */
@@ -3292,24 +3301,25 @@
     break;
 
   case 18:
-#line 1190 "compilers/imcc/imcc.y"
+#line 1197 "compilers/imcc/imcc.y"
     {
             STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
             CONTEXT(interp)->current_HLL =
                 Parrot_register_HLL(interp, hll_name);
 
             IMCC_INFO(interp)->cur_namespace = NULL;
+            mem_sys_free((yyvsp[(2) - (2)].s));
             (yyval.t) = 0;
          }
     break;
 
   case 19:
-#line 1201 "compilers/imcc/imcc.y"
+#line 1209 "compilers/imcc/imcc.y"
     { pesky_global__is_def = 1; }
     break;
 
   case 20:
-#line 1202 "compilers/imcc/imcc.y"
+#line 1210 "compilers/imcc/imcc.y"
     {
              mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
              mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3318,63 +3328,66 @@
     break;
 
   case 21:
-#line 1210 "compilers/imcc/imcc.y"
+#line 1218 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 22:
-#line 1211 "compilers/imcc/imcc.y"
+#line 1219 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
+           mem_sys_free((yyvsp[(6) - (6)].s));
            pesky_global__is_def = 0;
          }
     break;
 
   case 23:
-#line 1216 "compilers/imcc/imcc.y"
+#line 1225 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 24:
-#line 1217 "compilers/imcc/imcc.y"
+#line 1226 "compilers/imcc/imcc.y"
     {
            (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
+           mem_sys_free((yyvsp[(3) - (6)].s));
+           mem_sys_free((yyvsp[(6) - (6)].s));
            pesky_global__is_def = 0;
          }
     break;
 
   case 29:
-#line 1233 "compilers/imcc/imcc.y"
+#line 1244 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 30:
-#line 1234 "compilers/imcc/imcc.y"
+#line 1245 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 31:
-#line 1235 "compilers/imcc/imcc.y"
+#line 1246 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 32:
-#line 1236 "compilers/imcc/imcc.y"
+#line 1247 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;  }
     break;
 
   case 33:
-#line 1237 "compilers/imcc/imcc.y"
+#line 1248 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 36:
-#line 1242 "compilers/imcc/imcc.y"
+#line 1253 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 37:
-#line 1244 "compilers/imcc/imcc.y"
+#line 1255 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
                     (yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3384,7 +3397,7 @@
     break;
 
   case 38:
-#line 1251 "compilers/imcc/imcc.y"
+#line 1262 "compilers/imcc/imcc.y"
     {
            imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3392,7 +3405,7 @@
     break;
 
   case 39:
-#line 1256 "compilers/imcc/imcc.y"
+#line 1267 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iSUBROUTINE(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -3402,14 +3415,14 @@
     break;
 
   case 40:
-#line 1263 "compilers/imcc/imcc.y"
+#line 1274 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
   case 41:
-#line 1267 "compilers/imcc/imcc.y"
+#line 1278 "compilers/imcc/imcc.y"
     {
            SymReg *r = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
            SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
@@ -3421,17 +3434,17 @@
     break;
 
   case 42:
-#line 1275 "compilers/imcc/imcc.y"
+#line 1286 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 44:
-#line 1283 "compilers/imcc/imcc.y"
+#line 1294 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
     break;
 
   case 45:
-#line 1286 "compilers/imcc/imcc.y"
+#line 1297 "compilers/imcc/imcc.y"
     {
            /* if (optimizer_level & OPT_PASM)
                          imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3442,7 +3455,7 @@
     break;
 
   case 48:
-#line 1302 "compilers/imcc/imcc.y"
+#line 1313 "compilers/imcc/imcc.y"
     {
            int re_open = 0;
            (yyval.i) = 0;
@@ -3457,7 +3470,7 @@
     break;
 
   case 49:
-#line 1317 "compilers/imcc/imcc.y"
+#line 1328 "compilers/imcc/imcc.y"
     {
             if (IMCC_INFO(interp)->in_slice)
                 IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3468,26 +3481,26 @@
     break;
 
   case 50:
-#line 1324 "compilers/imcc/imcc.y"
+#line 1335 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
   case 51:
-#line 1329 "compilers/imcc/imcc.y"
+#line 1340 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
          }
     break;
 
   case 52:
-#line 1333 "compilers/imcc/imcc.y"
+#line 1344 "compilers/imcc/imcc.y"
     {
            iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 53:
-#line 1337 "compilers/imcc/imcc.y"
+#line 1348 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
           if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3498,22 +3511,22 @@
     break;
 
   case 54:
-#line 1345 "compilers/imcc/imcc.y"
+#line 1356 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 55:
-#line 1349 "compilers/imcc/imcc.y"
+#line 1360 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 56:
-#line 1350 "compilers/imcc/imcc.y"
+#line 1361 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 57:
-#line 1352 "compilers/imcc/imcc.y"
+#line 1363 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                  add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3526,17 +3539,17 @@
     break;
 
   case 58:
-#line 1364 "compilers/imcc/imcc.y"
+#line 1375 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 59:
-#line 1364 "compilers/imcc/imcc.y"
+#line 1375 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(3) - (3)].sr); pesky_global__is_def=0; }
     break;
 
   case 60:
-#line 1369 "compilers/imcc/imcc.y"
+#line 1380 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(3) - (3)].t) & VT_UNIQUE_REG)
                (yyval.sr) = mk_ident_ur(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
@@ -3548,12 +3561,12 @@
     break;
 
   case 61:
-#line 1382 "compilers/imcc/imcc.y"
+#line 1393 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 62:
-#line 1387 "compilers/imcc/imcc.y"
+#line 1398 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3562,7 +3575,7 @@
     break;
 
   case 63:
-#line 1393 "compilers/imcc/imcc.y"
+#line 1404 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3571,52 +3584,52 @@
     break;
 
   case 64:
-#line 1402 "compilers/imcc/imcc.y"
+#line 1413 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
+           IMCC_INFO(interp)->cur_unit->vtable_name      = NULL;
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
     break;
 
   case 65:
-#line 1408 "compilers/imcc/imcc.y"
+#line 1419 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_VTABLE;
-           IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
+           IMCC_INFO(interp)->cur_unit->vtable_name      = (yyvsp[(3) - (4)].s);
            IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
          }
     break;
 
   case 66:
-#line 1417 "compilers/imcc/imcc.y"
+#line 1428 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = NULL;
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
     break;
 
   case 67:
-#line 1423 "compilers/imcc/imcc.y"
+#line 1434 "compilers/imcc/imcc.y"
     {
            (yyval.t) = P_METHOD;
            IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
-           IMCC_INFO(interp)->cur_unit->is_method = 1;
+           IMCC_INFO(interp)->cur_unit->is_method   = 1;
          }
     break;
 
   case 68:
-#line 1432 "compilers/imcc/imcc.y"
+#line 1443 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
-           IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
+           IMCC_INFO(interp)->cur_unit->ns_entry_name     = NULL;
            IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
          }
     break;
 
   case 69:
-#line 1438 "compilers/imcc/imcc.y"
+#line 1449 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3625,7 +3638,7 @@
     break;
 
   case 70:
-#line 1447 "compilers/imcc/imcc.y"
+#line 1458 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3633,7 +3646,7 @@
     break;
 
   case 71:
-#line 1455 "compilers/imcc/imcc.y"
+#line 1466 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3641,7 +3654,7 @@
     break;
 
   case 72:
-#line 1460 "compilers/imcc/imcc.y"
+#line 1471 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3651,14 +3664,14 @@
     break;
 
   case 73:
-#line 1470 "compilers/imcc/imcc.y"
+#line 1481 "compilers/imcc/imcc.y"
     {
            add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
          }
     break;
 
   case 74:
-#line 1474 "compilers/imcc/imcc.y"
+#line 1485 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3666,7 +3679,7 @@
     break;
 
   case 75:
-#line 1479 "compilers/imcc/imcc.y"
+#line 1490 "compilers/imcc/imcc.y"
     {
            (yyval.t) = 0;
            add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3674,27 +3687,27 @@
     break;
 
   case 76:
-#line 1486 "compilers/imcc/imcc.y"
+#line 1497 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); }
     break;
 
   case 77:
-#line 1487 "compilers/imcc/imcc.y"
+#line 1498 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
     break;
 
   case 78:
-#line 1488 "compilers/imcc/imcc.y"
+#line 1499 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "PMC",      'S'); }
     break;
 
   case 79:
-#line 1489 "compilers/imcc/imcc.y"
+#line 1500 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, "STRING",   'S'); }
     break;
 
   case 80:
-#line 1491 "compilers/imcc/imcc.y"
+#line 1502 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3708,7 +3721,7 @@
     break;
 
   case 81:
-#line 1502 "compilers/imcc/imcc.y"
+#line 1513 "compilers/imcc/imcc.y"
     {
            SymReg *r;
            if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3722,12 +3735,12 @@
     break;
 
   case 82:
-#line 1512 "compilers/imcc/imcc.y"
+#line 1523 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 85:
-#line 1522 "compilers/imcc/imcc.y"
+#line 1533 "compilers/imcc/imcc.y"
     {
            char name[128];
            SymReg *r, *r1;
@@ -3754,82 +3767,82 @@
     break;
 
   case 86:
-#line 1550 "compilers/imcc/imcc.y"
+#line 1561 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 87:
-#line 1554 "compilers/imcc/imcc.y"
+#line 1565 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
     break;
 
   case 88:
-#line 1555 "compilers/imcc/imcc.y"
+#line 1566 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
     break;
 
   case 89:
-#line 1559 "compilers/imcc/imcc.y"
+#line 1570 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 90:
-#line 1560 "compilers/imcc/imcc.y"
+#line 1571 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
     break;
 
   case 91:
-#line 1564 "compilers/imcc/imcc.y"
+#line 1575 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 93:
-#line 1569 "compilers/imcc/imcc.y"
+#line 1580 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (1)].t); }
     break;
 
   case 94:
-#line 1570 "compilers/imcc/imcc.y"
+#line 1581 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 95:
-#line 1574 "compilers/imcc/imcc.y"
+#line 1585 "compilers/imcc/imcc.y"
     { (yyval.t) = P_LOAD; }
     break;
 
   case 96:
-#line 1575 "compilers/imcc/imcc.y"
+#line 1586 "compilers/imcc/imcc.y"
     { (yyval.t) = P_INIT; }
     break;
 
   case 97:
-#line 1576 "compilers/imcc/imcc.y"
+#line 1587 "compilers/imcc/imcc.y"
     { (yyval.t) = P_MAIN; }
     break;
 
   case 98:
-#line 1577 "compilers/imcc/imcc.y"
+#line 1588 "compilers/imcc/imcc.y"
     { (yyval.t) = P_IMMEDIATE; }
     break;
 
   case 99:
-#line 1578 "compilers/imcc/imcc.y"
+#line 1589 "compilers/imcc/imcc.y"
     { (yyval.t) = P_POSTCOMP; }
     break;
 
   case 100:
-#line 1579 "compilers/imcc/imcc.y"
+#line 1590 "compilers/imcc/imcc.y"
     { (yyval.t) = P_ANON; }
     break;
 
   case 101:
-#line 1580 "compilers/imcc/imcc.y"
+#line 1591 "compilers/imcc/imcc.y"
     { (yyval.t) = P_NEED_LEX; }
     break;
 
   case 109:
-#line 1592 "compilers/imcc/imcc.y"
+#line 1603 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3837,14 +3850,14 @@
     break;
 
   case 110:
-#line 1597 "compilers/imcc/imcc.y"
+#line 1608 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 111:
-#line 1601 "compilers/imcc/imcc.y"
+#line 1612 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
@@ -3852,21 +3865,21 @@
     break;
 
   case 112:
-#line 1606 "compilers/imcc/imcc.y"
+#line 1617 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
          }
     break;
 
   case 113:
-#line 1610 "compilers/imcc/imcc.y"
+#line 1621 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
          }
     break;
 
   case 114:
-#line 1614 "compilers/imcc/imcc.y"
+#line 1625 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3874,7 +3887,7 @@
     break;
 
   case 115:
-#line 1619 "compilers/imcc/imcc.y"
+#line 1630 "compilers/imcc/imcc.y"
     {
            add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
            add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3882,27 +3895,27 @@
     break;
 
   case 116:
-#line 1627 "compilers/imcc/imcc.y"
+#line 1638 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 117:
-#line 1628 "compilers/imcc/imcc.y"
+#line 1639 "compilers/imcc/imcc.y"
     { add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
     break;
 
   case 118:
-#line 1632 "compilers/imcc/imcc.y"
+#line 1643 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (2)].sr); }
     break;
 
   case 119:
-#line 1637 "compilers/imcc/imcc.y"
+#line 1648 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 120:
-#line 1639 "compilers/imcc/imcc.y"
+#line 1650 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -3910,17 +3923,17 @@
     break;
 
   case 121:
-#line 1646 "compilers/imcc/imcc.y"
+#line 1657 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 122:
-#line 1647 "compilers/imcc/imcc.y"
+#line 1658 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 123:
-#line 1648 "compilers/imcc/imcc.y"
+#line 1659 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            SymReg *ignored;
@@ -3935,62 +3948,62 @@
     break;
 
   case 124:
-#line 1662 "compilers/imcc/imcc.y"
+#line 1673 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 125:
-#line 1663 "compilers/imcc/imcc.y"
+#line 1674 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
   case 126:
-#line 1667 "compilers/imcc/imcc.y"
+#line 1678 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT;   }
     break;
 
   case 127:
-#line 1668 "compilers/imcc/imcc.y"
+#line 1679 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPTIONAL; }
     break;
 
   case 128:
-#line 1669 "compilers/imcc/imcc.y"
+#line 1680 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_OPT_FLAG; }
     break;
 
   case 129:
-#line 1670 "compilers/imcc/imcc.y"
+#line 1681 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
   case 130:
-#line 1671 "compilers/imcc/imcc.y"
+#line 1682 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
   case 131:
-#line 1672 "compilers/imcc/imcc.y"
+#line 1683 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
   case 132:
-#line 1673 "compilers/imcc/imcc.y"
+#line 1684 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_UNIQUE_REG; }
     break;
 
   case 133:
-#line 1678 "compilers/imcc/imcc.y"
+#line 1689 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 0); }
     break;
 
   case 134:
-#line 1680 "compilers/imcc/imcc.y"
+#line 1691 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 135:
-#line 1682 "compilers/imcc/imcc.y"
+#line 1693 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->asm_state = AsmDefault;
            (yyval.i) = 0;
@@ -3998,22 +4011,22 @@
     break;
 
   case 136:
-#line 1689 "compilers/imcc/imcc.y"
+#line 1700 "compilers/imcc/imcc.y"
     { begin_return_or_yield(interp, 1); }
     break;
 
   case 137:
-#line 1691 "compilers/imcc/imcc.y"
+#line 1702 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
     break;
 
   case 138:
-#line 1695 "compilers/imcc/imcc.y"
+#line 1706 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 139:
-#line 1697 "compilers/imcc/imcc.y"
+#line 1708 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4021,7 +4034,7 @@
     break;
 
   case 140:
-#line 1702 "compilers/imcc/imcc.y"
+#line 1713 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4029,12 +4042,12 @@
     break;
 
   case 141:
-#line 1709 "compilers/imcc/imcc.y"
+#line 1720 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
   case 142:
-#line 1711 "compilers/imcc/imcc.y"
+#line 1722 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(1) - (2)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4042,7 +4055,7 @@
     break;
 
   case 143:
-#line 1716 "compilers/imcc/imcc.y"
+#line 1727 "compilers/imcc/imcc.y"
     {
            if ((yyvsp[(2) - (3)].sr))
                add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4050,17 +4063,17 @@
     break;
 
   case 144:
-#line 1723 "compilers/imcc/imcc.y"
+#line 1734 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 145:
-#line 1727 "compilers/imcc/imcc.y"
+#line 1738 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
     break;
 
   case 146:
-#line 1732 "compilers/imcc/imcc.y"
+#line 1743 "compilers/imcc/imcc.y"
     {
           if (IMCC_INFO(interp)->asm_state == AsmDefault)
               begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -4068,7 +4081,7 @@
     break;
 
   case 147:
-#line 1737 "compilers/imcc/imcc.y"
+#line 1748 "compilers/imcc/imcc.y"
     {
           IMCC_INFO(interp)->asm_state = AsmDefault;
           (yyval.t) = 0;
@@ -4076,22 +4089,22 @@
     break;
 
   case 148:
-#line 1744 "compilers/imcc/imcc.y"
+#line 1755 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 149:
-#line 1745 "compilers/imcc/imcc.y"
+#line 1756 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 150:
-#line 1749 "compilers/imcc/imcc.y"
+#line 1760 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 151:
-#line 1751 "compilers/imcc/imcc.y"
+#line 1762 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4104,7 +4117,7 @@
     break;
 
   case 152:
-#line 1761 "compilers/imcc/imcc.y"
+#line 1772 "compilers/imcc/imcc.y"
     {
             SymReg *name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
             add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
@@ -4112,7 +4125,7 @@
     break;
 
   case 153:
-#line 1766 "compilers/imcc/imcc.y"
+#line 1777 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->adv_named_id) {
                add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4125,7 +4138,7 @@
     break;
 
   case 154:
-#line 1776 "compilers/imcc/imcc.y"
+#line 1787 "compilers/imcc/imcc.y"
     {
            SymReg *name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
            add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
@@ -4133,59 +4146,59 @@
     break;
 
   case 157:
-#line 1797 "compilers/imcc/imcc.y"
+#line 1808 "compilers/imcc/imcc.y"
     { clear_state(interp); }
     break;
 
   case 158:
-#line 1802 "compilers/imcc/imcc.y"
+#line 1813 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (2)].i); }
     break;
 
   case 159:
-#line 1803 "compilers/imcc/imcc.y"
+#line 1814 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 160:
-#line 1804 "compilers/imcc/imcc.y"
+#line 1815 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 161:
-#line 1805 "compilers/imcc/imcc.y"
+#line 1816 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 162:
-#line 1806 "compilers/imcc/imcc.y"
+#line 1817 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 163:
-#line 1807 "compilers/imcc/imcc.y"
+#line 1818 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
   case 164:
-#line 1811 "compilers/imcc/imcc.y"
+#line 1822 "compilers/imcc/imcc.y"
     { (yyval.i) = NULL; }
     break;
 
   case 168:
-#line 1822 "compilers/imcc/imcc.y"
+#line 1833 "compilers/imcc/imcc.y"
     {
            (yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
          }
     break;
 
   case 169:
-#line 1830 "compilers/imcc/imcc.y"
+#line 1841 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (3)].i); }
     break;
 
   case 170:
-#line 1832 "compilers/imcc/imcc.y"
+#line 1843 "compilers/imcc/imcc.y"
     {
            if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
                IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4196,7 +4209,7 @@
     break;
 
   case 171:
-#line 1843 "compilers/imcc/imcc.y"
+#line 1854 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(1) - (1)].idlist);
            l->next = NULL;
@@ -4205,7 +4218,7 @@
     break;
 
   case 172:
-#line 1850 "compilers/imcc/imcc.y"
+#line 1861 "compilers/imcc/imcc.y"
     {
            IdList* l = (yyvsp[(3) - (3)].idlist);
            l->next = (yyvsp[(1) - (3)].idlist);
@@ -4214,7 +4227,7 @@
     break;
 
   case 173:
-#line 1859 "compilers/imcc/imcc.y"
+#line 1870 "compilers/imcc/imcc.y"
     {
            IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
            l->id           = (yyvsp[(1) - (2)].s);
@@ -4224,22 +4237,22 @@
     break;
 
   case 174:
-#line 1868 "compilers/imcc/imcc.y"
+#line 1879 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
   case 175:
-#line 1869 "compilers/imcc/imcc.y"
+#line 1880 "compilers/imcc/imcc.y"
     { (yyval.t) = 1; }
     break;
 
   case 178:
-#line 1876 "compilers/imcc/imcc.y"
+#line 1887 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 179:
-#line 1877 "compilers/imcc/imcc.y"
+#line 1888 "compilers/imcc/imcc.y"
     {
            IdList *l = (yyvsp[(4) - (4)].idlist);
            while (l) {
@@ -4258,7 +4271,7 @@
     break;
 
   case 180:
-#line 1893 "compilers/imcc/imcc.y"
+#line 1904 "compilers/imcc/imcc.y"
     {
            SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
            set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
@@ -4266,7 +4279,7 @@
     break;
 
   case 181:
-#line 1898 "compilers/imcc/imcc.y"
+#line 1909 "compilers/imcc/imcc.y"
     {
            SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'U');
            set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
@@ -4274,12 +4287,12 @@
     break;
 
   case 182:
-#line 1902 "compilers/imcc/imcc.y"
+#line 1913 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 183:
-#line 1903 "compilers/imcc/imcc.y"
+#line 1914 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
            pesky_global__is_def=0;
@@ -4288,12 +4301,12 @@
     break;
 
   case 185:
-#line 1910 "compilers/imcc/imcc.y"
+#line 1921 "compilers/imcc/imcc.y"
     { pesky_global__is_def=1; }
     break;
 
   case 186:
-#line 1911 "compilers/imcc/imcc.y"
+#line 1922 "compilers/imcc/imcc.y"
     {
            mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
            pesky_global__is_def=0;
@@ -4302,7 +4315,7 @@
     break;
 
   case 187:
-#line 1917 "compilers/imcc/imcc.y"
+#line 1928 "compilers/imcc/imcc.y"
     {
            (yyval.i) = NULL;
            IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4311,14 +4324,14 @@
     break;
 
   case 188:
-#line 1923 "compilers/imcc/imcc.y"
+#line 1934 "compilers/imcc/imcc.y"
     {
             (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
          }
     break;
 
   case 189:
-#line 1927 "compilers/imcc/imcc.y"
+#line 1938 "compilers/imcc/imcc.y"
     {
            (yyval.i) = INS(interp,
                     IMCC_INFO(interp)->cur_unit,
@@ -4333,47 +4346,47 @@
     break;
 
   case 190:
-#line 1938 "compilers/imcc/imcc.y"
+#line 1949 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
     break;
 
   case 191:
-#line 1939 "compilers/imcc/imcc.y"
+#line 1950 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
     break;
 
   case 192:
-#line 1940 "compilers/imcc/imcc.y"
+#line 1951 "compilers/imcc/imcc.y"
     { (yyval.i) = 0; }
     break;
 
   case 195:
-#line 1943 "compilers/imcc/imcc.y"
+#line 1954 "compilers/imcc/imcc.y"
     { (yyval.i) = 0;}
     break;
 
   case 196:
-#line 1947 "compilers/imcc/imcc.y"
+#line 1958 "compilers/imcc/imcc.y"
     { (yyval.t) = 'I'; }
     break;
 
   case 197:
-#line 1948 "compilers/imcc/imcc.y"
+#line 1959 "compilers/imcc/imcc.y"
     { (yyval.t) = 'N'; }
     break;
 
   case 198:
-#line 1949 "compilers/imcc/imcc.y"
+#line 1960 "compilers/imcc/imcc.y"
     { (yyval.t) = 'S'; }
     break;
 
   case 199:
-#line 1950 "compilers/imcc/imcc.y"
+#line 1961 "compilers/imcc/imcc.y"
     { (yyval.t) = 'P'; }
     break;
 
   case 200:
-#line 1955 "compilers/imcc/imcc.y"
+#line 1966 "compilers/imcc/imcc.y"
     {
            /* there'd normally be a str_dup() here, but the lexer already
             * copied the string, so it's safe to use directly */
@@ -4386,37 +4399,37 @@
     break;
 
   case 201:
-#line 1968 "compilers/imcc/imcc.y"
+#line 1979 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  }
     break;
 
   case 202:
-#line 1970 "compilers/imcc/imcc.y"
+#line 1981 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  }
     break;
 
   case 203:
-#line 1972 "compilers/imcc/imcc.y"
+#line 1983 "compilers/imcc/imcc.y"
     { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));  }
     break;
 
   case 204:
-#line 1974 "compilers/imcc/imcc.y"
+#line 1985 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
     break;
 
   case 205:
-#line 1976 "compilers/imcc/imcc.y"
+#line 1987 "compilers/imcc/imcc.y"
     { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
     break;
 
   case 206:
-#line 1981 "compilers/imcc/imcc.y"
+#line 1992 "compilers/imcc/imcc.y"
     { (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
     break;
 
   case 207:
-#line 1984 "compilers/imcc/imcc.y"
+#line 1995 "compilers/imcc/imcc.y"
     {
            add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4425,14 +4438,14 @@
     break;
 
   case 208:
-#line 1990 "compilers/imcc/imcc.y"
+#line 2001 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
          }
     break;
 
   case 209:
-#line 1994 "compilers/imcc/imcc.y"
+#line 2005 "compilers/imcc/imcc.y"
     {
            IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
            IMCC_INFO(interp)->cur_call = NULL;
@@ -4440,144 +4453,144 @@
     break;
 
   case 213:
-#line 2002 "compilers/imcc/imcc.y"
+#line 2013 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
          }
     break;
 
   case 214:
-#line 2009 "compilers/imcc/imcc.y"
+#line 2020 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"not"; }
     break;
 
   case 215:
-#line 2010 "compilers/imcc/imcc.y"
+#line 2021 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bnot"; }
     break;
 
   case 216:
-#line 2011 "compilers/imcc/imcc.y"
+#line 2022 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"neg"; }
     break;
 
   case 217:
-#line 2015 "compilers/imcc/imcc.y"
+#line 2026 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 218:
-#line 2016 "compilers/imcc/imcc.y"
+#line 2027 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 219:
-#line 2017 "compilers/imcc/imcc.y"
+#line 2028 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 220:
-#line 2018 "compilers/imcc/imcc.y"
+#line 2029 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 221:
-#line 2019 "compilers/imcc/imcc.y"
+#line 2030 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 222:
-#line 2020 "compilers/imcc/imcc.y"
+#line 2031 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 223:
-#line 2021 "compilers/imcc/imcc.y"
+#line 2032 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"pow"; }
     break;
 
   case 224:
-#line 2022 "compilers/imcc/imcc.y"
+#line 2033 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 225:
-#line 2023 "compilers/imcc/imcc.y"
+#line 2034 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"iseq"; }
     break;
 
   case 226:
-#line 2024 "compilers/imcc/imcc.y"
+#line 2035 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isne"; }
     break;
 
   case 227:
-#line 2025 "compilers/imcc/imcc.y"
+#line 2036 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isgt"; }
     break;
 
   case 228:
-#line 2026 "compilers/imcc/imcc.y"
+#line 2037 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isge"; }
     break;
 
   case 229:
-#line 2027 "compilers/imcc/imcc.y"
+#line 2038 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"islt"; }
     break;
 
   case 230:
-#line 2028 "compilers/imcc/imcc.y"
+#line 2039 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"isle"; }
     break;
 
   case 231:
-#line 2029 "compilers/imcc/imcc.y"
+#line 2040 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 232:
-#line 2030 "compilers/imcc/imcc.y"
+#line 2041 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 233:
-#line 2031 "compilers/imcc/imcc.y"
+#line 2042 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 234:
-#line 2032 "compilers/imcc/imcc.y"
+#line 2043 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"and"; }
     break;
 
   case 235:
-#line 2033 "compilers/imcc/imcc.y"
+#line 2044 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"or"; }
     break;
 
   case 236:
-#line 2034 "compilers/imcc/imcc.y"
+#line 2045 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"xor"; }
     break;
 
   case 237:
-#line 2035 "compilers/imcc/imcc.y"
+#line 2046 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 238:
-#line 2036 "compilers/imcc/imcc.y"
+#line 2047 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 239:
-#line 2037 "compilers/imcc/imcc.y"
+#line 2048 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 240:
-#line 2043 "compilers/imcc/imcc.y"
+#line 2054 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            (yyval.i)->type &= ~ITCALL;
@@ -4586,84 +4599,84 @@
     break;
 
   case 241:
-#line 2048 "compilers/imcc/imcc.y"
+#line 2059 "compilers/imcc/imcc.y"
     {  (yyval.i) = 0; }
     break;
 
   case 242:
-#line 2055 "compilers/imcc/imcc.y"
+#line 2066 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
   case 243:
-#line 2061 "compilers/imcc/imcc.y"
+#line 2072 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"add"; }
     break;
 
   case 244:
-#line 2062 "compilers/imcc/imcc.y"
+#line 2073 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"sub"; }
     break;
 
   case 245:
-#line 2063 "compilers/imcc/imcc.y"
+#line 2074 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mul"; }
     break;
 
   case 246:
-#line 2064 "compilers/imcc/imcc.y"
+#line 2075 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"div"; }
     break;
 
   case 247:
-#line 2065 "compilers/imcc/imcc.y"
+#line 2076 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"mod"; }
     break;
 
   case 248:
-#line 2066 "compilers/imcc/imcc.y"
+#line 2077 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"fdiv"; }
     break;
 
   case 249:
-#line 2067 "compilers/imcc/imcc.y"
+#line 2078 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"concat"; }
     break;
 
   case 250:
-#line 2068 "compilers/imcc/imcc.y"
+#line 2079 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"band"; }
     break;
 
   case 251:
-#line 2069 "compilers/imcc/imcc.y"
+#line 2080 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bor"; }
     break;
 
   case 252:
-#line 2070 "compilers/imcc/imcc.y"
+#line 2081 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"bxor"; }
     break;
 
   case 253:
-#line 2071 "compilers/imcc/imcc.y"
+#line 2082 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shr"; }
     break;
 
   case 254:
-#line 2072 "compilers/imcc/imcc.y"
+#line 2083 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"shl"; }
     break;
 
   case 255:
-#line 2073 "compilers/imcc/imcc.y"
+#line 2084 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lsr"; }
     break;
 
   case 256:
-#line 2079 "compilers/imcc/imcc.y"
+#line 2090 "compilers/imcc/imcc.y"
     {
         (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
                       IMCC_INFO(interp) -> regs,
@@ -4674,22 +4687,22 @@
     break;
 
   case 257:
-#line 2089 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2100 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 258:
-#line 2090 "compilers/imcc/imcc.y"
+#line 2101 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 259:
-#line 2091 "compilers/imcc/imcc.y"
-    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2102 "compilers/imcc/imcc.y"
+    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
   case 260:
-#line 2093 "compilers/imcc/imcc.y"
+#line 2104 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = (yyvsp[(1) - (1)].sr);
            if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4698,7 +4711,7 @@
     break;
 
   case 261:
-#line 2099 "compilers/imcc/imcc.y"
+#line 2110 "compilers/imcc/imcc.y"
     {
             /* disallow bareword method names; SREG name constants are fine */
             char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4715,39 +4728,48 @@
     break;
 
   case 262:
-#line 2113 "compilers/imcc/imcc.y"
+#line 2124 "compilers/imcc/imcc.y"
     {
             IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
-            (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
+            (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
             mem_sys_free((yyvsp[(3) - (3)].s));
          }
     break;
 
   case 263:
-#line 2118 "compilers/imcc/imcc.y"
-    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
+#line 2130 "compilers/imcc/imcc.y"
+    {
+            IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
+            (yyval.sr)                         = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
+            mem_sys_free((yyvsp[(3) - (3)].s));
+         }
     break;
 
   case 264:
-#line 2124 "compilers/imcc/imcc.y"
+#line 2135 "compilers/imcc/imcc.y"
+    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
+    break;
+
+  case 265:
+#line 2141 "compilers/imcc/imcc.y"
     {
            (yyval.i) = IMCC_create_itcall_label(interp);
            IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
          }
     break;
 
-  case 265:
-#line 2128 "compilers/imcc/imcc.y"
+  case 266:
+#line 2145 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(2) - (5)].i); }
     break;
 
-  case 266:
-#line 2132 "compilers/imcc/imcc.y"
+  case 267:
+#line 2149 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 267:
-#line 2134 "compilers/imcc/imcc.y"
+  case 268:
+#line 2151 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4759,8 +4781,8 @@
          }
     break;
 
-  case 268:
-#line 2144 "compilers/imcc/imcc.y"
+  case 269:
+#line 2161 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4772,8 +4794,8 @@
          }
     break;
 
-  case 269:
-#line 2154 "compilers/imcc/imcc.y"
+  case 270:
+#line 2171 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -4782,16 +4804,16 @@
          }
     break;
 
-  case 270:
-#line 2161 "compilers/imcc/imcc.y"
+  case 271:
+#line 2178 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
          }
     break;
 
-  case 271:
-#line 2166 "compilers/imcc/imcc.y"
+  case 272:
+#line 2183 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -4800,48 +4822,48 @@
          }
     break;
 
-  case 272:
-#line 2175 "compilers/imcc/imcc.y"
+  case 273:
+#line 2192 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 273:
-#line 2179 "compilers/imcc/imcc.y"
+  case 274:
+#line 2196 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 274:
-#line 2180 "compilers/imcc/imcc.y"
+  case 275:
+#line 2197 "compilers/imcc/imcc.y"
     { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
     break;
 
-  case 275:
-#line 2184 "compilers/imcc/imcc.y"
+  case 276:
+#line 2201 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_FLAT; }
     break;
 
-  case 276:
-#line 2185 "compilers/imcc/imcc.y"
+  case 277:
+#line 2202 "compilers/imcc/imcc.y"
     { (yyval.t) = VT_NAMED; }
     break;
 
-  case 277:
-#line 2188 "compilers/imcc/imcc.y"
+  case 278:
+#line 2205 "compilers/imcc/imcc.y"
     { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
     break;
 
-  case 278:
-#line 2189 "compilers/imcc/imcc.y"
+  case 279:
+#line 2206 "compilers/imcc/imcc.y"
     { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = 0; }
     break;
 
-  case 279:
-#line 2193 "compilers/imcc/imcc.y"
+  case 280:
+#line 2210 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
     break;
 
-  case 280:
-#line 2198 "compilers/imcc/imcc.y"
+  case 281:
+#line 2215 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4853,8 +4875,8 @@
          }
     break;
 
-  case 281:
-#line 2208 "compilers/imcc/imcc.y"
+  case 282:
+#line 2225 "compilers/imcc/imcc.y"
     {
             add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
             mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -4862,8 +4884,8 @@
          }
     break;
 
-  case 282:
-#line 2214 "compilers/imcc/imcc.y"
+  case 283:
+#line 2231 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = 0;
            if (IMCC_INFO(interp)->adv_named_id) {
@@ -4875,133 +4897,133 @@
          }
     break;
 
-  case 283:
-#line 2224 "compilers/imcc/imcc.y"
+  case 284:
+#line 2241 "compilers/imcc/imcc.y"
     {
            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
            mem_sys_free((yyvsp[(1) - (3)].s));
          }
     break;
 
-  case 284:
-#line 2228 "compilers/imcc/imcc.y"
+  case 285:
+#line 2245 "compilers/imcc/imcc.y"
     { (yyval.sr) = 0; }
     break;
 
-  case 285:
-#line 2232 "compilers/imcc/imcc.y"
+  case 286:
+#line 2249 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 286:
-#line 2233 "compilers/imcc/imcc.y"
+  case 287:
+#line 2250 "compilers/imcc/imcc.y"
     { (yyval.i) = (yyvsp[(1) - (1)].i); }
     break;
 
-  case 287:
-#line 2238 "compilers/imcc/imcc.y"
+  case 288:
+#line 2255 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 288:
-#line 2242 "compilers/imcc/imcc.y"
+  case 289:
+#line 2259 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 289:
-#line 2246 "compilers/imcc/imcc.y"
+  case 290:
+#line 2263 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 290:
-#line 2253 "compilers/imcc/imcc.y"
+  case 291:
+#line 2270 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
          }
     break;
 
-  case 291:
-#line 2257 "compilers/imcc/imcc.y"
+  case 292:
+#line 2274 "compilers/imcc/imcc.y"
     {
            (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
          }
     break;
 
-  case 292:
-#line 2261 "compilers/imcc/imcc.y"
+  case 293:
+#line 2278 "compilers/imcc/imcc.y"
     {
            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
          }
     break;
 
-  case 293:
-#line 2267 "compilers/imcc/imcc.y"
+  case 294:
+#line 2284 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 294:
-#line 2268 "compilers/imcc/imcc.y"
+  case 295:
+#line 2285 "compilers/imcc/imcc.y"
     { (yyval.t) = 0; }
     break;
 
-  case 295:
-#line 2272 "compilers/imcc/imcc.y"
+  case 296:
+#line 2289 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"eq"; }
     break;
 
-  case 296:
-#line 2273 "compilers/imcc/imcc.y"
+  case 297:
+#line 2290 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ne"; }
     break;
 
-  case 297:
-#line 2274 "compilers/imcc/imcc.y"
+  case 298:
+#line 2291 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"gt"; }
     break;
 
-  case 298:
-#line 2275 "compilers/imcc/imcc.y"
+  case 299:
+#line 2292 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"ge"; }
     break;
 
-  case 299:
-#line 2276 "compilers/imcc/imcc.y"
+  case 300:
+#line 2293 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"lt"; }
     break;
 
-  case 300:
-#line 2277 "compilers/imcc/imcc.y"
+  case 301:
+#line 2294 "compilers/imcc/imcc.y"
     { (yyval.s) = (char *)"le"; }
     break;
 
-  case 303:
-#line 2286 "compilers/imcc/imcc.y"
+  case 304:
+#line 2303 "compilers/imcc/imcc.y"
     { (yyval.sr) = NULL; }
     break;
 
-  case 304:
-#line 2287 "compilers/imcc/imcc.y"
+  case 305:
+#line 2304 "compilers/imcc/imcc.y"
     { (yyval.sr) = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 305:
-#line 2291 "compilers/imcc/imcc.y"
+  case 306:
+#line 2308 "compilers/imcc/imcc.y"
     { (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
     break;
 
-  case 307:
-#line 2296 "compilers/imcc/imcc.y"
+  case 308:
+#line 2313 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 308:
-#line 2298 "compilers/imcc/imcc.y"
+  case 309:
+#line 2315 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
            IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5010,54 +5032,54 @@
          }
     break;
 
-  case 309:
-#line 2305 "compilers/imcc/imcc.y"
+  case 310:
+#line 2322 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
            (yyval.sr) = (yyvsp[(2) - (3)].sr);
          }
     break;
 
-  case 311:
-#line 2312 "compilers/imcc/imcc.y"
+  case 312:
+#line 2329 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 312:
-#line 2313 "compilers/imcc/imcc.y"
+  case 313:
+#line 2330 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 313:
-#line 2317 "compilers/imcc/imcc.y"
+  case 314:
+#line 2334 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 314:
-#line 2318 "compilers/imcc/imcc.y"
+  case 315:
+#line 2335 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 315:
-#line 2322 "compilers/imcc/imcc.y"
+  case 316:
+#line 2339 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 316:
-#line 2323 "compilers/imcc/imcc.y"
+  case 317:
+#line 2340 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 321:
-#line 2337 "compilers/imcc/imcc.y"
+  case 322:
+#line 2354 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys    = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 322:
-#line 2342 "compilers/imcc/imcc.y"
+  case 323:
+#line 2359 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5065,16 +5087,16 @@
          }
     break;
 
-  case 323:
-#line 2350 "compilers/imcc/imcc.y"
+  case 324:
+#line 2367 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->nkeys = 0;
            IMCC_INFO(interp)->in_slice = 0;
          }
     break;
 
-  case 324:
-#line 2355 "compilers/imcc/imcc.y"
+  case 325:
+#line 2372 "compilers/imcc/imcc.y"
     {
            (yyval.sr) = link_keys(interp,
                           IMCC_INFO(interp)->nkeys,
@@ -5082,21 +5104,21 @@
          }
     break;
 
-  case 325:
-#line 2363 "compilers/imcc/imcc.y"
+  case 326:
+#line 2380 "compilers/imcc/imcc.y"
     { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
     break;
 
-  case 326:
-#line 2365 "compilers/imcc/imcc.y"
+  case 327:
+#line 2382 "compilers/imcc/imcc.y"
     {
            IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
            (yyval.sr) = IMCC_INFO(interp)->keys[0];
          }
     break;
 
-  case 327:
-#line 2373 "compilers/imcc/imcc.y"
+  case 328:
+#line 2390 "compilers/imcc/imcc.y"
     {
            if (IMCC_INFO(interp)->in_slice)
                (yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -5104,54 +5126,54 @@
          }
     break;
 
-  case 328:
-#line 2381 "compilers/imcc/imcc.y"
+  case 329:
+#line 2398 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
     break;
 
-  case 329:
-#line 2382 "compilers/imcc/imcc.y"
+  case 330:
+#line 2399 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
     break;
 
-  case 330:
-#line 2383 "compilers/imcc/imcc.y"
+  case 331:
+#line 2400 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
     break;
 
-  case 331:
-#line 2384 "compilers/imcc/imcc.y"
+  case 332:
+#line 2401 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
     break;
 
-  case 332:
-#line 2385 "compilers/imcc/imcc.y"
+  case 333:
+#line 2402 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 333:
-#line 2389 "compilers/imcc/imcc.y"
+  case 334:
+#line 2406 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 334:
-#line 2390 "compilers/imcc/imcc.y"
+  case 335:
+#line 2407 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 335:
-#line 2391 "compilers/imcc/imcc.y"
+  case 336:
+#line 2408 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
-  case 336:
-#line 2392 "compilers/imcc/imcc.y"
+  case 337:
+#line 2409 "compilers/imcc/imcc.y"
     { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 5144 "compilers/imcc/imcparser.c"
+#line 5166 "compilers/imcc/imcparser.c"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5365,7 +5387,7 @@
 }
 
 
-#line 2398 "compilers/imcc/imcc.y"
+#line 2415 "compilers/imcc/imcc.y"
 
 
 /* I need this prototype somewhere... */

Modified: branches/io_rewiring/compilers/imcc/imcparser.h
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcparser.h	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/imcparser.h	Sun Jun  7 23:41:42 2009	(r39444)
@@ -295,7 +295,7 @@
 
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 typedef union YYSTYPE
-#line 1030 "compilers/imcc/imcc.y"
+#line 1035 "compilers/imcc/imcc.y"
 {
     IdList * idlist;
     int t;

Modified: branches/io_rewiring/compilers/imcc/main.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/main.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/main.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -219,14 +219,9 @@
     "    -L --library add path to library search\n"
     "    -X --dynext add path to dynamic extension search\n"
     "   <Run core options>\n"
-    "    -R --runcore CORE\n"
-    "    --bounds-checks|--slow-core\n"
-    "    --CGP-core\n"
-    "    --fast-core\n"
-    "    --computed-goto-core\n"
-    "    --jit-core\n"
+    "    -R --runcore slow|bounds|fast|jit|cgoto|cgp|cgp-jit\n"
+    "    -R --runcore switch|switch-jit|trace|exec|gcdebug\n"
     "    -p --profile\n"
-    "    --switched-core\n"
     "    -t --trace [flags]\n"
     "   <VM options>\n"
     "    -D --parrot-debug[=HEXFLAGS]\n"
@@ -534,15 +529,15 @@
                 SET_FLAG(PARROT_DESTROY_FLAG);
                 break;
             case 'I':
-                Parrot_add_library_path_from_cstring(interp, opt.opt_arg,
+                Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
                     PARROT_LIB_PATH_INCLUDE);
                 break;
             case 'L':
-                Parrot_add_library_path_from_cstring(interp, opt.opt_arg,
+                Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
                     PARROT_LIB_PATH_LIBRARY);
                 break;
             case 'X':
-                Parrot_add_library_path_from_cstring(interp, opt.opt_arg,
+                Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
                     PARROT_LIB_PATH_DYNEXT);
                 break;
             default:

Modified: branches/io_rewiring/compilers/imcc/parser_util.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/parser_util.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/parser_util.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -330,6 +330,12 @@
     /* in constant */
     int dirs       = 1;
 
+    /* XXX: Maybe the check for n == 0 is the only one required
+     * and the other must be assertions? */
+    if (n == 0 || r[0] == NULL || r[0]->name == NULL)
+        IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
+                    "The opcode '%s' needs arguments", name);
+
     r[0]           = mk_const(interp, r[0]->name, 'P');
     r[0]->pmc_type = enum_class_FixedIntegerArray;
 

Modified: branches/io_rewiring/compilers/imcc/pcc.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/pcc.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/imcc/pcc.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -816,7 +816,12 @@
             if (!(arg->type == VTIDENTIFIER
             ||    arg->type == VTPASM
             ||    arg->type == VTREG))
-                meth = mk_const(interp, arg->name, 'S');
+                if (arg->type & VT_ENCODED) {
+                    meth = mk_const(interp, arg->name, 'U');
+                }
+                else {
+                    meth = mk_const(interp, arg->name, 'S');
+                }
         }
     }
 

Modified: branches/io_rewiring/compilers/nqp/bootstrap/actions.pm
==============================================================================
--- branches/io_rewiring/compilers/nqp/bootstrap/actions.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/nqp/bootstrap/actions.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -339,6 +339,8 @@
     my $params := $past[0];
     if $<declarator> eq 'method' {
         $past.blocktype('method');
+        unshift $past, PAST::Op.new('inline'=>'.lex "self", self',
+            'pasttype'=>'inline');
     }
     for $<signature>[0] {
         my $parameter := $($_<parameter>);
@@ -703,7 +705,12 @@
 
 
 method noun($/, $key) {
-    make $($/{$key});
+    if $key eq 'self' {
+        make PAST::Var.new('name'=>'self', 'node'=>$/);
+    }
+    else {
+        make $($/{$key});
+    }
 }
 ##.sub 'noun' :method
 ##    .param pmc match

Modified: branches/io_rewiring/compilers/nqp/src/Grammar.pg
==============================================================================
--- branches/io_rewiring/compilers/nqp/src/Grammar.pg	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/nqp/src/Grammar.pg	Sun Jun  7 23:41:42 2009	(r39444)
@@ -287,6 +287,7 @@
     | <circumfix> {*}                                      #= circumfix
     | <variable> {*}                                       #= variable
     | <subcall> {*}                                        #= subcall
+    | 'self' >> {*}                                        #= self
     | <value> {*}                                          #= value
     | <name> {*}                                           #= name
 }

Modified: branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir
==============================================================================
--- branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -377,6 +377,8 @@
 ##        my $params := $past[0];
 ##        if $<declarator> eq 'method' {
 ##            $past.blocktype('method');
+##            $past.push(PAST::Op.new('inline'=>'.lex 'self', self);
+##            $past.symbol('self', :scope('lexical'));
 ##        }
 ##        for $<signature>[0] {
 ##            my $parameter := $($_<parameter>);
@@ -400,6 +402,10 @@
     $S0 = match['declarator']
     if $S0 != 'method' goto add_signature
     past.'blocktype'('method')
+    $P3 = get_hll_global ['PAST'], 'Op'
+    $P4 = $P3.'new'('inline'=>'    .lex "self", self', 'pasttype'=>'inline')
+    unshift past, $P4
+    past.'symbol'('self', 'scope'=>'lexical')
   add_signature:
     $P0 = match['signature']
     $P0 = $P0[0]
@@ -738,14 +744,26 @@
 
 
 ##    method noun($/, $key) {
-##        make $($/{$key});
+##        if $key eq 'self' {
+##            make PAST::Var.new(:name('self'), :scope('lexical'), :node($/));
+##        }
+##        else {
+##            make $($/{$key});
+##        }
 ##    }
 .sub 'noun' :method
     .param pmc match
     .param pmc key
+
     $P0 = match[key]
+    if key == 'self' goto make_self
     $P1 = $P0.'ast'()
     match.'!make'($P1)
+    .return()
+  make_self:
+    $P9 = get_hll_global ['PAST'], 'Var'
+    $P1 = $P9.'new'('scope'=>'lexical', 'name'=>'self', 'node'=>$P0)
+    match.'!make'($P1)
 .end
 
 

Modified: branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -326,13 +326,31 @@
     .local string tcode
     tcode = adverbs['transcode']
     unless tcode goto transcode_done
-    push_eh transcode_skip
+    .local pmc tcode_it
+    $P0 = split ' ', tcode
+    tcode_it = iter $P0
+  tcode_loop:
+    unless tcode_it goto transcode_done
+    tcode = shift tcode_it
+    push_eh tcode_enc
     $I0 = find_charset tcode
     $S0 = source
     $S0 = trans_charset $S0, $I0
     assign source, $S0
-  transcode_skip:
     pop_eh
+    goto transcode_done
+  tcode_enc:
+    pop_eh
+    push_eh tcode_fail
+    $I0 = find_encoding tcode
+    $S0 = source
+    $S0 = trans_encoding $S0, $I0
+    assign source, $S0
+    pop_eh
+    goto transcode_done
+  tcode_fail:
+    pop_eh
+    goto tcode_loop
   transcode_done:
 
     .local string target

Modified: branches/io_rewiring/config/auto/gcc.pm
==============================================================================
--- branches/io_rewiring/config/auto/gcc.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/config/auto/gcc.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -93,10 +93,7 @@
     $conf->data->set(
         ccwarn              => "$ccwarn",
         gccversion          => $gccversion,
-        HAS_aligned_funcptr => 1
     );
-    $conf->data->set( HAS_aligned_funcptr => 0 )
-        if $conf->data->get_p5('OSNAME') eq 'hpux';
     return 1;
 }
 

Modified: branches/io_rewiring/config/auto/icu.pm
==============================================================================
--- branches/io_rewiring/config/auto/icu.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/config/auto/icu.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -299,6 +299,7 @@
         print "Trying $arg->{icuconfig} with '--prefix'\n"
             if $arg->{verbose};
         $icuheaders = capture_output("$arg->{icuconfig} --prefix");
+        chomp($icuheaders);
         print "icuheaders:  captured $icuheaders\n"
             if $arg->{verbose};
         ($icuheaders, $arg->{without}) =

Modified: branches/io_rewiring/config/gen/config_pm/config_pir.in
==============================================================================
--- branches/io_rewiring/config/gen/config_pm/config_pir.in	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/config/gen/config_pm/config_pir.in	Sun Jun  7 23:41:42 2009	(r39444)
@@ -8,6 +8,7 @@
 
   .sub _some
   ...
+  load_bytecode 'config.pbc'
   # store the config data into $P0
   $P0 = _config()
   # Retrieve and print a key
@@ -18,7 +19,6 @@
   ...
 
  .end
- .include "library/config.pir"
 
 =head1 DESCRIPTION
 

Modified: branches/io_rewiring/config/gen/makefiles/root.in
==============================================================================
--- branches/io_rewiring/config/gen/makefiles/root.in	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/config/gen/makefiles/root.in	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1485,7 +1485,10 @@
 # integrating them in a single run is difficult.
 
 # Normal test package
-test : test_prep test_pbc_annotation_persistence nqp_test
+test : test_core nqp_test
+
+# Test Parrot core.
+test_core: test_prep test_pbc_annotation_persistence
 	$(PERL) t/harness $(EXTRA_TEST_ARGS)
 
 # Test the NQP compiler

Modified: branches/io_rewiring/config/init/defaults.pm
==============================================================================
--- branches/io_rewiring/config/init/defaults.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/config/init/defaults.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -206,9 +206,6 @@
         make_set_make => $Config{make_set_make},
         make_and      => '&&',
 
-        # for cygwin
-        cygchkdll => '',
-
         # make_c: Command to emulate GNU make's C<-C directory> option:  chdir
         # to C<directory> before executing $(MAKE)
         make_c => '$(PERL) -e \'chdir shift @ARGV; system q{$(MAKE)}, @ARGV; exit $$? >> 8;\'',

Modified: branches/io_rewiring/docs/book/appc_command_line_options.pod
==============================================================================
--- branches/io_rewiring/docs/book/appc_command_line_options.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/book/appc_command_line_options.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -252,37 +252,59 @@
 
 =over 4
 
-=item --bounds-checks
+=item -R slow
+
+Run with the I<slow core>
+
+=item -R bounds
 
 Activate bounds checking. This also runs with the I<slow core> as a
 side effect.
 
-=item --fast-core
+=item -R fast
 
 Run with the I<fast core>.
 
-=item --computed-goto-core
+=item -R cgoto
 
 Run the I<computed goto core> (CGoto).
 
-=item --jit-core
+=item -R jit
 
 Run with the I<JIT core> if available.
 
-=item -p,--profile
+=item -R cgp
 
-Activate profiling. This prints a summary of opcode usage and
-execution times after the program stops. It also runs within the
-I<slow core>.
+Run with the I<CGoto-Prederefed> core.
 
-=item --CGP-core
+=item -R cgp-jit
 
-Run with the I<CGoto-Prederefed> core.
+Run with the I<CGoto-Prederefed with jit> core.
 
-=item --switched-core
+=item -R switch
 
 Run with the I<Switched core>.
 
+=item -R switch-jit
+
+Run with the I<Switched core with jit>.
+
+=item -R exec
+
+Run with the I<exec core>
+(uses JIT at compile time to generate native code)
+
+=item -R gcdebug
+
+Performs a full GC run before every op dispatch
+(good for debugging GC problems)
+
+=item -p,--profile
+
+Activate profiling. This prints a summary of opcode usage and
+execution times after the program stops. It also runs within the
+I<slow core>.
+
 =item -t,--trace
 
 Trace execution. This also turns on the I<slow core>.

Modified: branches/io_rewiring/docs/book/ch03_pir.pod
==============================================================================
--- branches/io_rewiring/docs/book/ch03_pir.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/book/ch03_pir.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1681,7 +1681,7 @@
 Adding a role to a class is called I<composing> that role, and any class
 that has been composed with a role C<does> that role.
 
-Roles are created as PMC and can be manipulated through opcodes and methods
+Roles are created as PMCs and can be manipulated through opcodes and methods
 like other PMCs:
 
   $P0 = new 'Role'
@@ -2362,7 +2362,7 @@
 is especially important when dealing with high-level languages. We'll go into
 detail about annotations and their use in Chapter 10.
 
-Annotations are created using the c<.annotation> keyword. Annotations consist
+Annotations are created using the C<.annotation> keyword. Annotations consist
 of a key/value pair, where the key is a string and the value is an integer,
 a number, or a string. Since annotations are stored compactly as constants in
 the compiled bytecode, PMCs cannot be used.

Modified: branches/io_rewiring/docs/book/ch04_compiler_tools.pod
==============================================================================
--- branches/io_rewiring/docs/book/ch04_compiler_tools.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/book/ch04_compiler_tools.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -253,12 +253,12 @@
 
 =over 4
 
-=item* C<commandline_prompt>
+=item * C<commandline_prompt>
 
 The C<commandline_prompt> method allows you to specify a custom prompt to
 display to users in interactive mode.
 
-=item* C<commandline_banner>
+=item * C<commandline_banner>
 
 The C<commandline_banner> method allows you to specify a banner message that
 displays at the beginning of interactive mode.

Modified: branches/io_rewiring/docs/book/ch10_opcode_reference.pod
==============================================================================
--- branches/io_rewiring/docs/book/ch10_opcode_reference.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/book/ch10_opcode_reference.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -442,6 +442,17 @@
 
 I<Arguments: IR, P, P>
 
+=head3 cmp_pmc
+
+X<cmp_pmc opcode (PASM)>
+
+  cmp_pmc R<DEST>, R<VAL1>, R<VAL2>
+
+Like C<cmp>, but places a PMC in R<DEST>.  This opcode is useful for avoiding
+semipredicate problems in HLLs where two PMCs are not always comparable.
+
+I<Arguments: P, P, P>
+
 =head3 collect
 
 X<collect opcode (PASM)>
@@ -2234,12 +2245,12 @@
 =head3 setstd*
 
 X<setstderr opcode (PASM)>
-X<setstdout opcode (PASM)>
 X<setstdin  opcode (PASM)>
+X<setstdout opcode (PASM)>
 
   setstderr R<DEST>
-  setstdout R<DEST>
   setstdin  R<DEST>
+  setstdout R<DEST>
 
 Set a FileHandle object for the given standard handle.
 

Modified: branches/io_rewiring/docs/pct/pct_optable_guide.pod
==============================================================================
--- branches/io_rewiring/docs/pct/pct_optable_guide.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/pct/pct_optable_guide.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -245,7 +245,7 @@
 course, this fully depends on the specification of your language. Sometimes,
 you need a different rule to define subroutine invocation syntax. This is the
 case when arguments can be other objects than operands of normal operators
-(which, again, are defined by the c<term:> rule).
+(which, again, are defined by the C<term:> rule).
 
 An example to handle indexing (assuming the index is an operand as any other
 operator's operand) is this:

Modified: branches/io_rewiring/docs/pdds/pdd19_pir.pod
==============================================================================
--- branches/io_rewiring/docs/pdds/pdd19_pir.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/pdds/pdd19_pir.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -302,7 +302,7 @@
 constant indicating the PMC type. This allows you to create PMC constants
 representing subroutines; the value of the constant in that case is the
 name of the subroutine. If the referred subroutine has an C<:immediate>
-flag and it returns a value, then that value is stored instead of the
+modifier and it returns a value, then that value is stored instead of the
 subroutine.
 
 C<.const> declarations representing subroutines can only be written
@@ -312,16 +312,16 @@
 =item .globalconst <type> <identifier> = <const>
 
 As C<.const> above, but the defined constant is globally accessible.
-C<.globalconst> may only be used withing a C<.sub>.
+C<.globalconst> may only be used within a C<.sub>.
 
 =item .sub
 
-  .sub <identifier> [:<flag> ...]
-  .sub <quoted string> [:<flag> ...]
+  .sub <identifier> [:<modifier> ...]
+  .sub <quoted string> [:<modifier> ...]
 
 Define a subroutine. All code in a PIR source file must be defined in a
-subroutine. See the section L<Subroutine flags> for available flags.
-Optional flags are a list of I<flag>, separated by  spaces.
+subroutine. See the section L<Subroutine modifiers> for available
+modifiers. Optional modifiers are a list separated by spaces.
 
 The name of the sub may be either a bare identifier or a quoted string
 constant. Bare identifiers must be valid PIR identifiers (see L<Identifiers>
@@ -426,7 +426,7 @@
 
 =back
 
-=head4 Subroutine flags
+=head4 Subroutine modifiers
 
 =over 4
 
@@ -435,7 +435,7 @@
 Define "main" entry point to start execution.  If multiple subroutines are
 marked as B<:main>, the B<last> marked subroutine is used.  Only the first
 file loaded or compiled counts; subs marked as B<:main> are ignored by the
-B<load_bytecode> op. If no B<:main> flag is specified at all, execution
+B<load_bytecode> op. If no B<:main> modifier is specified, execution
 starts at the first subroutine in the file.
 
 =item :load
@@ -459,7 +459,7 @@
 =item :multi(type1, type2...)
 
 Engage in multiple dispatch with the listed types.
-See L<docs/pdds/pdd27_multi_dispatch.pod> for more information on the
+See F<docs/pdds/pdd27_multi_dispatch.pod> for more information on the
 multiple dispatch system.
 
 =item :immediate
@@ -477,7 +477,7 @@
 {{ TODO: need a freeze/thaw reference }}.
 
 For instance, after compilation of the sub 'init', that sub is executed
-immediately (hence the :immediate flag). Instead of storing the sub
+immediately (hence the C<:immediate> modifier). Instead of storing the sub
 'init' in the constants table, the value returned by 'init' is stored,
 which in this example is a FixedIntegerArrray.
 
@@ -561,7 +561,7 @@
   .sub bar :vtable
     # ...
   .end
-   
+
   .sub bar :vtable('foo')
     # ...
   .end
@@ -574,8 +574,8 @@
 C<:vtable('...')>. For example, to have a C<.sub> named I<ToString> also
 be the vtable function C<get_string>), use C<:vtable('get_string')>.
 
-When the B<:vtable> flag is set, the object PMC can be referred to with
-C<self>, as with the B<:method> flag.
+When the B<:vtable> modifier is set, the object PMC can be referred to with
+C<self>, as with the B<:method> modifier.
 
 =item :outer(subname)
 
@@ -599,9 +599,9 @@
 =item :nsentry( <string_constant> )
 
 Specify the name by which the subroutine is stored in the namespace. The
-default name by which a subroutine is stored in the namespace (if this flag
-is missing), is the subroutine's name as given after the C<.sub> directive.
-This flag allows to override this.
+default name by which a subroutine is stored in the namespace (if this
+modifier is missing), is the subroutine's name as given after the
+C<.sub> directive.  This modifier allows to override this.
 
 =back
 
@@ -644,30 +644,30 @@
 Directive to make a call through the Native Calling Interface (NCI).
 The specified subroutine must be loaded using the <dlfunc> op that takes
 the library, function name and function signature as arguments.
-See L<docs/pdds/pdd16_native_call> for details.
+See F<docs/pdds/pdd16_native_call> for details.
 
-=item .set_return <var> [:<flag>]*
+=item .set_return <var> [:<modifier>]*
 
 Between C<.begin_return> and C<.end_return>, specify one or
 more of the return value(s) of the current subroutine.  Available
-flags: C<:flat>, C<:named>.
+modifiers: C<:flat>, C<:named>.
 
-=item .set_yield <var> [:<flag>]*
+=item .set_yield <var> [:<modifier>]*
 
 Between C<.begin_yield> and C<.end_yield>, specify one or
 more of the yield value(s) of the current subroutine.  Available
-flags: C<:flat>, C<:named>.
+modifiers: C<:flat>, C<:named>.
 
-=item .set_arg <var> [:<flag>]*
+=item .set_arg <var> [:<modifier>]*
 
 Between C<.begin_call> and C<.call>, specify an argument to be
-passed.  Available flags: C<:flat>, C<:named>.
+passed.  Available modifiers: C<:flat>, C<:named>.
 
-=item .get_result <var> [:<flag>]*
+=item .get_result <var> [:<modifier>]*
 
 Between C<.call> and C<.end_call>, specify where one or more return
-value(s) should be stored.  Available flags:
-C<:slurpy>, C<:named>, C<:optional>, and C<:opt_flag>.
+value(s) should be stored.  Available modifiers: C<:slurpy>, C<:named>,
+C<:optional>, and C<:opt_flag>.
 
 =back
 
@@ -675,12 +675,12 @@
 
 =over 4
 
-=item .param <type> <identifier> [:<flag>]*
+=item .param <type> <identifier> [:<modifier>]*
 
 At the top of a subroutine, declare a local variable, in the manner
 of C<.local>, into which parameter(s) of the current subroutine should
-be stored. Available flags:
-C<:slurpy>, C<:named>, C<:optional>, C<:opt_flag> and C<:unique_reg>.
+be stored. Available modifiers: C<:slurpy>, C<:named>, C<:optional>,
+C<:opt_flag> and C<:unique_reg>.
 
 =back
 
@@ -688,7 +688,7 @@
 
 See L<PDD03|pdds/pdd03_calling_conventions.pod> for a description of
 the meaning of the flag bits C<SLURPY>, C<OPTIONAL>, C<OPT_FLAG>,
-and C<FLAT>, which correspond to the calling convention flags
+and C<FLAT>, which correspond to the calling convention modifiers
 C<:slurpy>, C<:optional>, C<:opt_flag>, and C<:flat>.
 
 
@@ -711,9 +711,9 @@
 =end PIR_FRAGMENT
 
 
-This is syntactic sugar for the C<get_results> op, but any flags set on the
-targets will be handled automatically by the PIR compiler.
-The C<.get_results> directive must be the first instruction of the exception
+This is syntactic sugar for the C<get_results> op, but any modifiers set
+on the targets will be handled automatically by the PIR compiler.  The
+C<.get_results> directive must be the first instruction of the exception
 handler; only declarations (.lex, .local) may come first.
 
 To resume execution after handling the exception, just invoke the continuation
@@ -846,31 +846,31 @@
 Note that this only works for opcodes that have have a leading C<OUT>
 parameter. [this restriction unimplemented: RT #36283]
 
-=item ([<var1> [:<flag1> ...], ...]) = <var2>([<arg1> [:<flag2> ...], ...])
+=item ([<var1> [:<modifier1> ...], ...]) = <var2>([<arg1> [:<modifier2> ...], ...])
 
 This is short for:
 
   .begin_call
-  .set_arg <arg1> <flag2>
+  .set_arg <arg1> <modifier2>
   ...
   .call <var2>
-  .get_result <var1> <flag1>
+  .get_result <var1> <modifier1>
   ...
   .end_call
 
-=item <var> = <var>([arg [:<flag> ...], ...])
+=item <var> = <var>([arg [:<modifier> ...], ...])
 
-=item <var>([arg [:<flag> ...], ...])
+=item <var>([arg [:<modifier> ...], ...])
 
-=item <var>."_method"([arg [:<flag> ...], ...])
+=item <var>."_method"([arg [:<modifier> ...], ...])
 
-=item <var>.<var>([arg [:<flag> ...], ...])
+=item <var>.<var>([arg [:<modifier> ...], ...])
 
 Function or method call. These notations are shorthand for a longer PCC
 function call. I<var> can denote a global subroutine, a local I<identifier> or
 a I<reg>.
 
-=item .return ([<var> [:<flag> ...], ...])
+=item .return ([<var> [:<modifier> ...], ...])
 
 Return from the current subroutine with zero or more values.
 
@@ -1052,7 +1052,7 @@
 
 EOS
 
-=cut PIR_TODO
+=end PIR_TODO
 
 Using braces, { }, allows you to span multiple lines for an argument.
 See runtime/parrot/include/hllmacros.pir for examples and possible usage.
@@ -1074,7 +1074,7 @@
         })
  .end
 
-=cut PIR
+=end PIR
 
 This will expand the macro C<foo>, after which the input to the PIR parser is:
 
@@ -1087,7 +1087,7 @@
    print "4"
  .end
 
-=cut PIR
+=end PIR
 
 which will result in the output:
 
@@ -1108,7 +1108,7 @@
     # ...
   .endm
 
-=cut PIR
+=end PIR
 
 =head4 Unique local variables
 
@@ -1128,7 +1128,7 @@
     # ...
   .endm
 
-=cut PIR
+=end PIR
 
 The C<.macro_local> directive declares a local variable with a unique name in
 the macro. When the macro C<.foo()> is called, the resulting code that is
@@ -1144,7 +1144,7 @@
 
   .end
 
-=cut
+=end PIR
 
 The user can also declare a local variable with a unique name set to the
 symbolic value of one of the macro parameters.
@@ -1234,7 +1234,7 @@
     .foo("y")
   .end
 
-=begin PIR
+=end PIR
 
 the resulting code that is given to the parser will read as follows:
 
@@ -1258,7 +1258,7 @@
 =head3 Subroutine Definition
 
 A simple subroutine, marked with C<:main>, indicating it's the entry point
-in the file. Other sub flags include C<:load>, C<:init>, etc.
+in the file. Other sub modifiers include C<:load>, C<:init>, etc.
 
 =begin PIR
 

Modified: branches/io_rewiring/docs/running.pod
==============================================================================
--- branches/io_rewiring/docs/running.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/running.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 
 =head1 NAME
@@ -147,35 +147,10 @@
   switch-jit    switch core with JIT
   trace         bounds checking core w/ trace info (see 'parrot --help-debug')
 
-=item --bounds-checks, --slow-core
-
-Select the bounds-checking slow core (default).
-
-=item --computed-goto-core
-
-Select the CGoto core (if available).
-
-=item --CGP-core
-
-Select the CGP (CGoto Predereferenced) core (if available).
-
-=item --fast-core
-
-Select the fast (or function) core.  Bounds checking, profiling, and tracing
-are not available. (That's why it's so fast.)
-
-=item --jit-core
-
-Run with the JIT subsystem (if available).
-
 =item -p, --profile
 
 Run with the slow core and print an execution profile.
 
-=item --switched-core
-
-TODO:  This needs to be documented briefly here and also in glossary.pod.
-
 =item -t, --trace
 
 Run with the slow core and print trace information to B<stderr>. See C<parrot

Modified: branches/io_rewiring/docs/tests.pod
==============================================================================
--- branches/io_rewiring/docs/tests.pod	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/docs/tests.pod	Sun Jun  7 23:41:42 2009	(r39444)
@@ -81,8 +81,6 @@
 C<pir_output_is> and friends.
 
     pir_output_is(<<'CODE',<<'OUT','nothing useful');
-        .include 'library/config.pir'
-
         .sub main :main
             print "hi\n"
         .end

Modified: branches/io_rewiring/examples/languages/abc/src/parser/actions.pm
==============================================================================
--- branches/io_rewiring/examples/languages/abc/src/parser/actions.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/examples/languages/abc/src/parser/actions.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -33,10 +33,10 @@
 
 =item
 
-The C<make> function and C< $(...) > are used to set and retrieve
+The C<make> function and C< .ast > are used to set and retrieve
 the I<result object> for a match.  Here, we use the result object
 to hold the ast representation of any given match.  So, in the
-code below, whenever you see an expression like C<< $($<foo>) >>,
+code below, whenever you see an expression like C<< $<foo>.ast >>,
 we're really saying "the ast of C<< <foo> >>".
 
 =back
@@ -48,7 +48,7 @@
 ##  The ast of the entire program is the ast of the
 ##  top-level <statement_list>.
 method TOP($/) {
-    make $($<statement_list>);
+    make $<statement_list>.ast;
 }
 
 
@@ -61,7 +61,7 @@
 method statement_list($/) {
     my $past := PAST::Stmts.new( :node($/) );
     for $<statement> {
-        $past.push( $($_) );
+        $past.push( $_.ast );
     }
     make $past;
 }
@@ -71,7 +71,7 @@
 ##    In the parse grammar, we've set up $key to tell us the
 ##    name of whatever subrule was matched by this statement.
 ##    We can then use $key to quickly get the subrule's ast
-##    with $( $/{$key} ).
+##    with $/{$key}.ast .
 ##
 ##    bc(1) expression statements also have special semantics
 ##    which we handle here.  If a statement is an expression
@@ -81,7 +81,7 @@
 ##    Similarly, if the statement consists of a simple string, it's
 ##    displayed on the output.
 method statement($/, $key) {
-    my $past := $( $/{$key} );
+    my $past := $/{$key}.ast;
     if ($key eq 'expression' && ~$past.name() ne 'infix:=') {
         my $last := PAST::Var.new( :name('last'),
                                    :scope('package'),
@@ -109,12 +109,12 @@
 ##    matches and set them as the children of a
 ##    PAST::Op node with a pasttype of 'if'.
 method if_statement($/) {
-    my $past := PAST::Op.new( $($<expression>),
-                              $( $<statement>[0] ),
+    my $past := PAST::Op.new( $<expression>.ast,
+                              $<statement>[0].ast,
                               :pasttype('if'),
                               :node( $/ ) );
     if ( $<statement>[1] ) {
-        $past.push( $( $<statement>[1] ) );
+        $past.push( $<statement>[1].ast );
     }
     make $past;
 }
@@ -124,8 +124,8 @@
 ##    This is basically the same as if_statement above, except
 ##    we use a pasttype of 'while'.
 method while_statement($/) {
-    make PAST::Op.new( $($<expression>),
-                       $($<statement>),
+    make PAST::Op.new( $<expression>.ast,
+                       $<statement>.ast,
                        :pasttype('while'),
                        :node($/) );
 }
@@ -140,13 +140,13 @@
     my $past := PAST::Stmts.new( :node($/) );
 
     #  add the initial "expr0;" node
-    $past.push( $( $<expression>[0] ) );
+    $past.push( $<expression>[0].ast );
 
     #  create the "{ body; expr2; }" part
-    my $body := PAST::Stmts.new( $($<statement>), $($<expression>[2]) );
+    my $body := PAST::Stmts.new( $<statement>.ast, $<expression>[2].ast );
 
     #  now create the "while (expr1) { body; expr2; }" part
-    $past.push( PAST::Op.new( $($<expression>[1]), $body, :pasttype('while')));
+    $past.push( PAST::Op.new( $<expression>[1].ast, $body, :pasttype('while')));
 
     make $past;
 }
@@ -156,7 +156,7 @@
 ##    A compound statement is just a list of statements, so we
 ##    return the ast of its embedded <statement_list>.
 method compound_statement($/) {
-    make $($<statement_list>);
+    make $<statement_list>.ast;
 }
 
 
@@ -182,7 +182,7 @@
 ##    is invoked with the expression in $<expr> and a $key of 'end'.
 method expression($/, $key) {
     if ($key eq 'end') {
-        make $($<expr>);
+        make $<expr>.ast;
     }
     else {
         my $past := PAST::Op.new( :name($<type>),
@@ -192,7 +192,7 @@
                                   :node($/)
                                 );
         for @($/) {
-            $past.push( $($_) );
+            $past.push( $_.ast );
         }
         make $past;
     }
@@ -203,7 +203,7 @@
 ##    Like 'statement' above, the $key has been set to let us know
 ##    which term subrule was matched.
 method term($/, $key) {
-    make $( $/{$key} );
+    make $/{$key}.ast;
 }
 
 ##  float/integer:
@@ -246,7 +246,7 @@
                               );
     }
     if ($key eq 'call') {
-        $past := PAST::Op.new( $($<expression>),
+        $past := PAST::Op.new( $<expression>.ast,
                                :name( ~$<name> ),
                                :pasttype('call'),
                                :node( $/ )

Modified: branches/io_rewiring/examples/library/pcre.pir
==============================================================================
--- branches/io_rewiring/examples/library/pcre.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/examples/library/pcre.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -21,10 +21,6 @@
 
 =cut
 
-
-.include 'library/pcre.pir'
-
-
 .sub main :main
     .param pmc argv
 
@@ -35,6 +31,7 @@
     .local pmc func
     .local pmc lib
 
+    load_bytecode 'pcre.pbc'
     func= get_hll_global ['PCRE'], 'init'
     lib= func()
 

Modified: branches/io_rewiring/examples/nci/xlibtest.pir
==============================================================================
--- branches/io_rewiring/examples/nci/xlibtest.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/examples/nci/xlibtest.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -11,16 +11,25 @@
 
 Compile Xlib.pir to Xlib.pbc before usage:
 
-../../parrot -o Xlib.pbc Xlib.pir
+../../parrot -o Xlib.pbc Xlib.pir [ filename ]
 
 Press Escape key to exit.
 
-=cut
+Press S to save to filename
 
+=cut
 
 .include 'Xlibconstants.pir'
 
+# Key for JSON line data
+.const string JKEY_LINES = 'lines'
+
 .sub main :main
+    .param pmc args
+
+    .local string filename
+    filename = args [1]
+    say filename
 
     load_bytecode 'Xlib.pbc'
 
@@ -82,8 +91,18 @@
     codeEscape = display.'KeysymToKeycode'($I0)
 #    say codeEscape
 
+    $I0 = StringToKeysym('S')
+#    print $I0
+#    print '-'
+    .local int codeS
+    codeS = display.'KeysymToKeycode'($I0)
+#    say codeS
+
     .local pmc listline
-    listline = new 'ResizablePMCArray'
+    listline = load(filename)
+
+mainloop:
+
     .local pmc line
 
 # Event loop
@@ -131,16 +150,24 @@
 #    say $S0
 #    eq $S0, 'Escape', finish
 
-    ne $I0, codeEscape, loop
+    if $I0 == codeEscape goto handleescape
+    if $I0 == codeS goto handleS
+    goto loop
+handleescape:
     w.'Unmap'()
     w.'Destroy'()
     goto loop
+handleS:
+    say 'S'
+    save(filename, listline)
+    goto loop
+
 
 press:
     lastpx = event.'x'()
     lastpy = event.'y'()
     w.'DrawPoint'(lastpx, lastpy)
-    line = new 'ResizableIntegerArray'
+    line = new [ 'ResizableIntegerArray' ]
     push listline, line
     push line, lastpx
     push line, lastpy
@@ -243,6 +270,72 @@
 .end
 
 #-----------------------------------------------------------------------
+.sub load
+    .param string filename
+    .local pmc listline
+    if null filename goto newfile
+
+    push_eh newfile
+    .local pmc handle
+    handle = open filename, 'r'
+    pop_eh
+
+    push_eh failed
+    .local string jsonfile
+    jsonfile = handle.'readall'()
+    close handle
+
+    load_bytecode 'compilers/json/JSON.pbc'
+    .local pmc json
+    json = compreg 'JSON'
+    .local pmc jsonobject
+    jsonobject = json(jsonfile)
+    listline = jsonobject [JKEY_LINES]
+    goto finish
+
+failed:
+    .local pmc exception
+    .get_results(exception)
+    pop_eh
+    print "\nERROR LOADING FILE: "
+    print exception
+    print "\n\n"
+
+newfile:
+    listline = new [ 'ResizablePMCArray' ]
+finish:
+    .return(listline)
+.end
+
+#-----------------------------------------------------------------------
+.sub save
+    .param string filename
+    .param pmc listline
+
+    push_eh failed
+    load_bytecode 'JSON.pbc'
+
+    .local pmc jsondata
+    jsondata = new [ 'Hash' ]
+    jsondata [JKEY_LINES] = listline
+    .local string jsonfile
+    jsonfile = _json(jsondata)
+    .local pmc handle
+    handle = open filename, 'w'
+    print handle, jsonfile
+    print handle, "\n"
+    close handle
+    .return()
+failed:
+    .local pmc exception
+    .get_results(exception)
+    pop_eh
+    print "\nERROR SAVING FILE: "
+    print exception
+    print "\n\n"
+.end
+
+#-----------------------------------------------------------------------
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/io_rewiring/examples/tcl/tcltkdemo.pir
==============================================================================
--- branches/io_rewiring/examples/tcl/tcltkdemo.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/examples/tcl/tcltkdemo.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -2,9 +2,8 @@
 # $Id$
 # demonstrate Tcl/Tk GUI using NCI
 
-.include 'runtime/parrot/library/TclLibrary.pir'
-
 .sub try :main
+    load_bytecode 'TclLibrary.pbc'
     .local pmc tcl
     tcl = new 'TclLibrary'
     .local string res

Modified: branches/io_rewiring/include/parrot/embed.h
==============================================================================
--- branches/io_rewiring/include/parrot/embed.h	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/include/parrot/embed.h	Sun Jun  7 23:41:42 2009	(r39444)
@@ -84,12 +84,6 @@
 
 int Parrot_revision(void);
 
-/* Deprecated */
-
-/* with 0.9.1 TT #266 */
-#define Parrot_readbc(i, c)  Parrot_pbc_read((i), (c), 0)
-#define Parrot_loadbc(i, pf) Parrot_pbc_load((i), (pf))
-
 #endif /* PARROT_EMBED_H_GUARD */
 
 /*

Modified: branches/io_rewiring/include/parrot/library.h
==============================================================================
--- branches/io_rewiring/include/parrot/library.h	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/include/parrot/library.h	Sun Jun  7 23:41:42 2009	(r39444)
@@ -39,20 +39,6 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
 PARROT_EXPORT
-void Parrot_add_library_path(PARROT_INTERP,
-    ARGIN(STRING *path),
-    enum_lib_paths which)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-void Parrot_add_library_path_from_cstring(PARROT_INTERP,
-    ARGIN(const char *path),
-    enum_lib_paths which)
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING * Parrot_get_runtime_path(PARROT_INTERP)
         __attribute__nonnull__(1);
@@ -64,6 +50,20 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
+void Parrot_lib_add_path(PARROT_INTERP,
+    ARGIN(STRING *path_str),
+    enum_lib_paths which)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
+void Parrot_lib_add_path_from_cstring(PARROT_INTERP,
+    ARGIN(const char *path),
+    enum_lib_paths which)
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
 PARROT_MALLOC
@@ -100,17 +100,17 @@
         FUNC_MODIFIES(*wo_ext)
         FUNC_MODIFIES(*ext);
 
-#define ASSERT_ARGS_Parrot_add_library_path __attribute__unused__ int _ASSERT_ARGS_CHECK = \
-       PARROT_ASSERT_ARG(interp) \
-    || PARROT_ASSERT_ARG(path)
-#define ASSERT_ARGS_Parrot_add_library_path_from_cstring \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
-       PARROT_ASSERT_ARG(interp) \
-    || PARROT_ASSERT_ARG(path)
 #define ASSERT_ARGS_Parrot_get_runtime_path __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_Parrot_get_runtime_prefix __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_lib_add_path __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(path_str)
+#define ASSERT_ARGS_Parrot_lib_add_path_from_cstring \
+     __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(path)
 #define ASSERT_ARGS_Parrot_locate_runtime_file __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(file_name)

Modified: branches/io_rewiring/include/parrot/runcore_api.h
==============================================================================
--- branches/io_rewiring/include/parrot/runcore_api.h	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/include/parrot/runcore_api.h	Sun Jun  7 23:41:42 2009	(r39444)
@@ -14,6 +14,66 @@
 
 #  define DO_OP(PC, INTERP) ((PC) = (((INTERP)->op_func_table)[*(PC)])((PC), (INTERP)))
 
+/* HEADERIZER BEGIN: src/runcore/main.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+
+PARROT_EXPORT
+void disable_event_checking(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
+void enable_event_checking(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+void do_prederef(void **pc_prederef, PARROT_INTERP, int type)
+        __attribute__nonnull__(2);
+
+void dynop_register(PARROT_INTERP, PMC *lib_pmc)
+        __attribute__nonnull__(1);
+
+void exec_init_prederef(PARROT_INTERP, void *prederef_arena)
+        __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+void * init_jit(PARROT_INTERP, SHIM(opcode_t *pc))
+        __attribute__nonnull__(1);
+
+void Parrot_runcore_destroy(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+void Parrot_setup_event_func_ptrs(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+void prepare_for_run(PARROT_INTERP)
+        __attribute__nonnull__(1);
+
+void runops_int(PARROT_INTERP, size_t offset)
+        __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_disable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_enable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_do_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_exec_init_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_init_jit __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_runcore_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_setup_event_func_ptrs __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_prepare_for_run __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_runops_int __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
+/* HEADERIZER END: src/runcore/main.c */
+
 /* HEADERIZER BEGIN: src/runcore/cores.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 

Modified: branches/io_rewiring/include/parrot/string_funcs.h
==============================================================================
--- branches/io_rewiring/include/parrot/string_funcs.h	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/include/parrot/string_funcs.h	Sun Jun  7 23:41:42 2009	(r39444)
@@ -497,6 +497,16 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING * string_make_from_charset(PARROT_INTERP,
+    ARGIN_NULLOK(const char *buffer),
+    UINTVAL len,
+    INTVAL charset_nr,
+    UINTVAL flags)
+        __attribute__nonnull__(1);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
 INTVAL string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
         __attribute__nonnull__(2);
 
@@ -710,6 +720,8 @@
     || PARROT_ASSERT_ARG(s)
 #define ASSERT_ARGS_string_make __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_string_make_from_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_string_max_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(s)
 #define ASSERT_ARGS_string_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = \

Modified: branches/io_rewiring/include/parrot/sub.h
==============================================================================
--- branches/io_rewiring/include/parrot/sub.h	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/include/parrot/sub.h	Sun Jun  7 23:41:42 2009	(r39444)
@@ -178,7 +178,7 @@
         else { \
             (sub) = Parrot_get_sub_pmc_from_subclass((interp), (pmc)); \
         } \
-    } while (0);
+    } while (0)
 
 /* the first entries must match Parrot_sub, so we can cast
  * these two to the other type

Modified: branches/io_rewiring/lib/Parrot/Install.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Install.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/lib/Parrot/Install.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -5,7 +5,7 @@
 use warnings;
 use File::Basename qw(dirname);
 use File::Copy;
-use File::Path; # mkpath
+use File::Path qw( mkpath );
 use File::Spec;
 use base qw( Exporter );
 our @EXPORT_OK = qw(
@@ -175,9 +175,11 @@
 sub create_directories {
     my($destdir, $directories) = @_;
 
-    mkpath([
-        grep { ! -d } map { $destdir . $_ } keys %$directories
-    ],0,0777);
+    my @dirs_created = mkpath(
+        ( grep { ! -d } map { $destdir . $_ } keys %$directories ),
+        { mode => 0777 },
+    );
+    return 1;
 }
 
 =head2 C<install_files()>

Modified: branches/io_rewiring/lib/Parrot/Manifest.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Manifest.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/lib/Parrot/Manifest.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,11 +1,58 @@
 # $Id$
 # Copyright (C) 2007, Parrot Foundation.
 
+=head1 NAME
+
+Parrot::Manifest - Re-create MANIFEST and MANIFEST.SKIP
+
+=head1 SYNOPSIS
+
+    use Parrot::Manifest;
+
+    $mani = Parrot::Manifest->new($0);
+
+    $manifest_lines_ref = $mani->prepare_manifest();
+    $need_for_files     = $mani->determine_need_for_manifest($manifest_lines_ref);
+    $mani->print_manifest($manifest_lines_ref) if $need_for_files;
+
+    $print_str     = $mani->prepare_manifest_skip();
+    $need_for_skip = $mani->determine_need_for_manifest_skip($print_str);
+    $mani->print_manifest_skip($print_str) if $need_for_skip;
+
+    $print_str     = $mani->prepare_gitignore();
+    $mani->print_gitignore($print_str) if $need_for_skip;
+
+=cut
+
 package Parrot::Manifest;
 use strict;
 use warnings;
 use Carp;
 
+=head1 METHODS
+
+=head2 new
+
+    $mani = Parrot::Manifest->new({
+        script => $0,
+        file => $filename,
+        skip => $skipfilename,
+        gitignore => $gitignoresfilename,
+    })
+
+Creates a Parrot::Manifest object by asking C<svn status> for verbose output,
+and parsing the results.
+
+C<file> is the name of the file that the manifest will eventually be written
+to, and defaults to F<MANIFEST>.  C<skip> is the name of the file that will
+hold the list of files to be skipped, and defaults to F<MANIFEST.SKIP>.
+C<gitignore> contains the same information as F<MANIFEST.SKIP> in a different
+format.  It defaults to F<.gitignore>.  The C<script> parameter is the name of
+the program invoking Parrot::Manifest, for use in messages.
+
+=cut
+
+# ...the results go into $self->{dirs} and $self->{versioned_files}
 sub new {
     my $class   = shift;
     my $argsref = shift;
@@ -55,6 +102,16 @@
     return $self;
 }
 
+=head2 prepare_manifest
+
+    $manifest_lines_ref = $mani->prepare_manifest();
+
+Prepares the manifest from the read in by the C<new()> method, and returns a
+hash of the files.  The keys of the hash are the filenames, and the values are
+strings representing the package and a list of the meta flags.
+
+=cut
+
 sub prepare_manifest {
     my $self = shift;
 
@@ -66,6 +123,32 @@
     return \%manifest_lines;
 }
 
+=head2 determine_need_for_manifest
+
+    $need_for_files =
+        $mani->determine_need_for_manifest($manifest_lines_ref);
+
+Determines the need for the manifest.  The checks are:
+
+=over 4
+
+=item *
+
+If there's no manifest yet, we need one.
+
+=item *
+
+If there's a difference between what's already there and what's in the list,
+we need a new one.
+
+=back
+
+If a new manifest is needed, the return value is C<1>; otherwise it is
+undefined.  The value passed in is the hash as returned from I<e.g.>,
+C<prepare_manifest()>.
+
+=cut
+
 sub determine_need_for_manifest {
     my $self               = shift;
     my $proposed_files_ref = shift;
@@ -84,6 +167,15 @@
     $different_patterns_count ? return 1 : return;
 }
 
+=head2 print_manifest
+
+    $mani->print_manifest($manifest_lines_ref) if $need_for_files;
+
+Writes the manifest to a file.  The example above does so only if an update is
+needed.
+
+=cut
+
 my $text_file_coda = <<'CODA';
 # Local variables:
 #   mode: text
@@ -101,8 +193,8 @@
 #
 # generated by $self->{script} $self->{time} UT
 #
-# See tools/dev/install_files.pl for documentation on the
-# format of this file.
+# See below for documentation on the format of this file.
+#
 # See docs/submissions.pod on how to recreate this file after SVN
 # has been told about new or deleted files.
 END_HEADER
@@ -119,6 +211,9 @@
     return 1;
 }
 
+# Gets the package and the meta flags for the given file.  This function does
+# it based on the directory the file is in.  If a particular file is needed,
+# then _get_special (below) provides that functionality.
 sub _get_manifest_entry {
     my $file    = shift;
 
@@ -156,6 +251,7 @@
     return $loc;
 }
 
+# See comments for _get_manifest_entry, above
 sub _get_special {
     my %special = qw(
         LICENSE                                         [main]doc
@@ -191,6 +287,7 @@
     return \%special;
 }
 
+# Gets files currently listed in manifest, and returns a hash
 sub _get_current_files {
     my $self          = shift;
 
@@ -212,6 +309,15 @@
     return \%current_files;
 }
 
+=head2 prepare_manifest_skip
+
+    $print_str = $mani->prepare_manifest_skip();
+
+Gets a list of the files that SVN ignores, and returns a string that can be
+put into F<MANIFEST.SKIP>.
+
+=cut
+
 sub prepare_manifest_skip {
     my $self      = shift;
 
@@ -220,6 +326,15 @@
     return $self->_compose_manifest_skip($ignores_ref);
 }
 
+=head2 prepare_gitignore
+
+    $print_str = $mani->prepare_gitignore();
+
+Gets a list of the files that SVN ignores, and then writes it to the
+F<.gitignore> file.
+
+=cut
+
 sub prepare_gitignore {
     my $self      = shift;
 
@@ -228,6 +343,27 @@
     return $self->_compose_gitignore($ignores_ref);
 }
 
+=head2 determine_need_for_manifest_skip
+
+    $need_for_skip =
+        $mani->determine_need_for_manifest_skip($print_str);
+
+Determines whether F<MANIFEST.SKIP> is needed.  The tests used are:
+
+=over 4
+
+=item *
+
+If the file doesn't exist, we need one.
+
+=item *
+
+If the proposed and existing contents differ, we need one.
+
+=back
+
+=cut
+
 sub determine_need_for_manifest_skip {
     my $self      = shift;
     my $print_str = shift;
@@ -250,6 +386,14 @@
     }
 }
 
+=head2 print_manifest_skip
+
+    $mani->print_manifest_skip($print_str) if $need_for_skip;
+
+Writes F<MANIFEST.SKIP> to a file.  The example above does so only if needed.
+
+=cut
+
 sub print_manifest_skip {
     my $self      = shift;
     my $print_str = shift;
@@ -264,6 +408,14 @@
     return 1;
 }
 
+=head2 print_gitignore
+
+    $mani->print_gitignore($print_str) if $need_for_skip;
+
+Writes the F<.gitignore> file.  The example above does so only if needed.
+
+=cut
+
 sub print_gitignore {
     my $self      = shift;
     my $print_str = shift;
@@ -278,6 +430,7 @@
     return 1;
 }
 
+# Gets a list of files that SVN ignores
 sub _get_ignores {
     my $self      = shift;
 
@@ -305,6 +458,7 @@
     return \%ignores;
 }
 
+# Turns the list of ignored files into .gitignore format
 sub _compose_gitignore {
     my $self        = shift;
     my $ignores_ref = shift;
@@ -337,6 +491,7 @@
     return $print_str;
 }
 
+# Turns list of ignored files into F<MANIFEST.SKIP> format
 sub _compose_manifest_skip {
     my $self       = shift;
     my $ignore_ref = shift;
@@ -378,6 +533,7 @@
     return $print_str;
 }
 
+# Gets a list of the currently skipped files from F<MANIFEST.SKIP>
 sub _get_current_skips {
     my $self          = shift;
 
@@ -395,6 +551,7 @@
     return \%current_skips;
 }
 
+# Gets list of files we're proposing to skip
 sub _get_proposed_skips {
     my $print_str      = shift;
 
@@ -411,28 +568,61 @@
 
 1;
 
-#################### DOCUMENTATION ####################
+=head1 MANIFEST FORMAT
 
-=head1 NAME
+The format of the F<MANIFEST> (currently F<MANIFEST> and F<MANIFEST.generated>
+are used) is:
 
-Parrot::Manifest - Re-create MANIFEST and MANIFEST.SKIP
+    source_path <whitespace> [package]meta1,meta2,...
 
-=head1 SYNOPSIS
+or you may optionally specify a different destination path:
 
-    use Parrot::Manifest;
+    source_path <whitespace> [package]meta1,meta2,... <whitespace> destination
 
-    $mani = Parrot::Manifest->new($0);
+Additionally, there may be a C<*> in front of the whole line to designate
+a generated file:
 
-    $manifest_lines_ref = $mani->prepare_manifest();
-    $need_for_files     = $mani->determine_need_for_manifest($manifest_lines_ref);
-    $mani->print_manifest($manifest_lines_ref) if $need_for_files;
+    source_path <whitespace> *[package]meta1,meta2,... <whitespace> destination
 
-    $print_str     = $mani->prepare_manifest_skip();
-    $need_for_skip = $mani->determine_need_for_manifest_skip($print_str);
-    $mani->print_manifest_skip($print_str) if $need_for_skip;
+The square brackets around C<package> are literal. C<package> gives
+the name of the RPM that the given file will be installed for, and is
+only used by this script to skip files that are not members of any
+package.
 
-    $print_str     = $mani->prepare_gitignore();
-    $mani->print_gitignore($print_str) if $need_for_skip;
+The various meta flags recognized are:
+
+=over 4
+
+=item C<doc>
+
+Tag this file with C<%doc> in the RPM, and omit the leading path (because
+F<rpm> will put it into a directory of its choosing).
+
+=item C<include>
+
+Write this file to the location given by the C<--includedir> option.
+
+=item C<lib>
+
+Write this file to the location given by the C<--libdir> option.
+
+=item C<bin>
+
+Write this file to the location given by the C<--bindir> option.
+
+=back
+
+The optional C<destination> field provides a general way to change
+where a file will be written to. It will be applied before any
+metadata tags.
+
+Example: if this line is in the F<MANIFEST.generated> file
+
+  languages/snorkfest/snork-compile        [main]bin
+
+and the C<--bindir=/usr/parroty/bin>, then the generated
+F<parrot-E<lt>VERSIONE<gt>-1.E<lt>archE<gt>.rpm> file will contain the file
+C</usr/parroty/bin/snork-compile>.
 
 =head1 SEE ALSO
 

Modified: branches/io_rewiring/lib/Parrot/Ops2pm.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Ops2pm.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/lib/Parrot/Ops2pm.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -323,7 +323,7 @@
     my $cwd     = cwd();
     my $fulldir = File::Spec->catdir( $cwd, $self->{moddir} );
     if ( !-d $fulldir ) {
-        if ( !File::Path::mkpath( $fulldir, 0, 0755 ) ) {
+        if ( !File::Path::mkpath( $fulldir, { mode => 0755 } ) ) {
             -d $fulldir
                 or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
         }
@@ -412,7 +412,7 @@
     my $cwd     = cwd();
     my $fulldir = File::Spec->catdir( $cwd, $self->{inc_dir} );
     if ( !-d $fulldir ) {
-        if ( !File::Path::mkpath( $fulldir, 0, 0755 ) ) {
+        if ( !File::Path::mkpath( $fulldir, { mode => 0755 } ) ) {
             -d $fulldir
                 or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
         }

Modified: branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -168,7 +168,7 @@
         } \\
         else \\
             (dest) = ((Parrot_${pmcname}_attributes *)PMC_data(pmc))->$attrname; \\
-    } while (0);
+    } while (0)
 
 #define SETATTR_${pmcname}_${attrname}(interp, pmc, value) \\
     do { \\
@@ -225,7 +225,7 @@
         } \\
         else \\
             ((Parrot_${pmcname}_attributes *)PMC_data(pmc))->$attrname = (value); \\
-    } while (0);
+    } while (0)
 
 EOA
 

Modified: branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm	Sun Jun  7 23:41:42 2009	(r39444)
@@ -333,7 +333,18 @@
     return $ret;
 }
 
+=item C<pre_method_gen>
+
+Generate switch-bases VTABLE for MULTI
+
+=cut
+
 sub pre_method_gen {
+    my ($self) = @_;
+
+    $self->gen_switch_vtable;
+
+    1;
 }
 
 =item C<gen_methods()>
@@ -407,7 +418,7 @@
         my $full_sig     = $pmcname . "," . $method->{MULTI_full_sig};
         my $functionname = 'Parrot_' . $pmcname . '_' . $method->name;
         push @multi_names, [ $method->symbol, $short_sig, $full_sig,
-                             $pmcname, $functionname ];
+                             $pmcname, $functionname, $method ];
     }
     return ( \@multi_names );
 }
@@ -936,6 +947,138 @@
     return $self->{vtable};
 }
 
+=item C<gen_switch_vtable>
+
+Generate switch-bases VTABLE for MULTI
+
+=cut
+
+sub gen_switch_vtable {
+    my ($self) = @_;
+
+    # No cookies for DynPMC. At least not now.
+    return 1 if $self->is_dynamic;
+
+    # Convert list of multis to name->[(type,,ssig,fsig,ns,func)] hash.
+    my %multi_methods;
+    foreach (@{$self->find_multi_functions}) {
+        my ($name, $ssig, $fsig, $ns, $func, $method) = @$_;
+        my @sig = split /,/, $fsig;
+        push @{ $multi_methods{ $name } }, [ $sig[1], $ssig, $fsig, $ns, $func, $method ];
+    }
+
+    # vtable methods
+    foreach my $method ( @{ $self->vtable->methods } ) {
+        my $vt_method_name = $method->name;
+        next if $vt_method_name eq 'class_init';
+
+        next if $self->implements_vtable($vt_method_name);
+        next unless exists $multi_methods{$vt_method_name};
+
+        my $multis = $multi_methods{$vt_method_name};
+
+        # Gather "case :"
+        my @cases = map { $self->generate_single_case($vt_method_name, $_) } @$multis;
+        my $cases = join "\n", @cases;
+
+        my $body = <<"BODY";
+    INTVAL type = VTABLE_type(INTERP, value);
+    /* For dynpmc fallback to MMD */
+    if ((type >= enum_class_core_max) || (SELF.type() >= enum_class_core_max))
+        type = enum_class_core_max;
+    switch(type) {
+$cases
+    }
+BODY
+
+        my $vtable = $method->clone({
+                body => Parrot::Pmc2c::Emitter->text($body),
+            });
+        $self->add_method($vtable);
+    }
+
+    1;
+}
+
+# Generate signle case for switch VTABLE
+sub generate_single_case {
+    my ($self, $vt_method_name, $multi) = @_;
+
+    my ($type, $ssig, $fsig, $ns, $func, $impl) = @$multi;
+    my $case;
+
+    # Gather parameters names
+    my @parameters = map { s/\s*PMC\s*\*\s*//; $_ } split (/,/, $impl->parameters);
+    my $parameters = join ', ', @parameters;
+    # ISO C forbids return with expression from void functions.
+    my $return = $impl->return_type =~ /^void\s*$/
+                    ? ''
+                    : 'return ';
+
+    if ($type eq 'DEFAULT' || $type eq 'PMC') {
+        # For default case we have to handle return manually.
+        my ($pcc_signature, $retval, $call_tail, $pcc_return)
+                = $self->gen_defaul_case_wrapping($ssig, @parameters);
+
+        $case = <<"CASE";
+        default:
+            if (type < enum_class_core_max)
+                $return$func(INTERP, SELF, $parameters);
+            else {
+                $retval
+                Parrot_mmd_multi_dispatch_from_c_args(INTERP, "$vt_method_name", "$pcc_signature", SELF, $parameters$call_tail);
+                $pcc_return
+            }
+            break;
+CASE
+    }
+    else {
+        $case = <<"CASE";
+        case enum_class_$type:
+            $return$func(INTERP, SELF, $parameters);
+            break;
+CASE
+    }
+
+    $case;
+}
+
+# Generate (pcc_signature, retval holder, pcc_call_tail, return statement)
+# for default case in switch.
+sub gen_defaul_case_wrapping {
+    my ($self, $ssig, @parameters) = @_;
+
+    my $letter = substr($ssig, 0, 1);
+    if ($letter eq 'I') {
+        return (
+            "PP->" . $letter,
+            "INTVAL retval;",
+            ', &retval',
+            'return retval;',
+        );
+    }
+    elsif ($letter eq 'P') {
+        return (
+            'PPP->P',
+            '',
+            ", &$parameters[1]",
+            "return $parameters[1];",
+        );
+    }
+    elsif ($letter eq 'v') {
+        return (
+            'PP->',
+            '',
+            '',
+            'return;',
+        );
+    }
+    else {
+        die "Can't handle signature $ssig!";
+    }
+}
+
+
 1;
 
 # Local Variables:

Modified: branches/io_rewiring/ports/ubuntu/changelog
==============================================================================
--- branches/io_rewiring/ports/ubuntu/changelog	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/ports/ubuntu/changelog	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,7 +1,9 @@
-parrot (1.0.0-1ubuntu1~ppa10~karmic1) karmic; urgency=low
+parrot (1.0.0-1ubuntu1) karmic; urgency=low
   * Resynchronize with Debian unstable.
+  * Add a patch to detect the lpia architecture, to correctly configure for
+    unaligned function pointers.
 
- -- Allison Randal <allison at parrot.org>  Thu, 14 May 2009 17:25:13 -0700
+ -- Allison Randal <allison at parrot.org>  Thu, 28 May 2009 13:13:12 -0700
 
 parrot (1.0.0-1) unstable; urgency=low
   * New upstream release

Modified: branches/io_rewiring/runtime/parrot/library/TclLibrary.pir
==============================================================================
--- branches/io_rewiring/runtime/parrot/library/TclLibrary.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/runtime/parrot/library/TclLibrary.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -204,6 +204,8 @@
     push libnames, 'tcl84'
     push libnames, 'libtcl8.5'
     push libnames, 'libtcl8.4'
+    push libnames, 'libtcl8.5.so'
+    push libnames, 'libtcl8.4.so'
 standard_names_e:
 
     .local pmc libtcl

Modified: branches/io_rewiring/runtime/parrot/library/libpcre.pir
==============================================================================
--- branches/io_rewiring/runtime/parrot/library/libpcre.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/runtime/parrot/library/libpcre.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -35,11 +35,11 @@
     ## allocate space in string for error message
     repeat error, " ", error_size
 
-    PCRE_NCI_compile= get_hll_global ['PCRE::NCI'], 'PCRE_compile'
+    PCRE_NCI_compile = get_hll_global ['PCRE::NCI'], 'PCRE_compile'
 
     .local pmc code
 
-    code= PCRE_NCI_compile( pat, options, error, errptr, NULL )
+    code = PCRE_NCI_compile( pat, options, error, errptr, NULL )
 
     .local int is_code_defined
     is_code_defined = defined code
@@ -66,18 +66,18 @@
 
     ## osize -- 1/(2/3) * 4 * 2
     .local int osize
-    osize= 12
+    osize = 12
 
     ## number of result pairs
     .local int num_result_pairs
-    num_result_pairs= 10
+    num_result_pairs = 10
 
     .local int ovector_length
-    ovector_length= osize * num_result_pairs
+    ovector_length = osize * num_result_pairs
 
     .local pmc ovector
-    ovector= new 'ManagedStruct'
-    ovector= ovector_length
+    ovector = new 'ManagedStruct'
+    ovector = ovector_length
 
     ## on 32 bit systems
     .local pmc PCRE_NCI_exec
@@ -85,7 +85,7 @@
 
     .local int ok
 
-    ok= PCRE_NCI_exec( regex, NULL, s, len, start, options, ovector, 10 )
+    ok = PCRE_NCI_exec( regex, NULL, s, len, start, options, ovector, 10 )
 
     .return( ok, ovector )
 .end

Modified: branches/io_rewiring/runtime/parrot/library/pcre.pir
==============================================================================
--- branches/io_rewiring/runtime/parrot/library/pcre.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/runtime/parrot/library/pcre.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2008, Parrot Foundation.
+# Copyright (C) 2004-2009, Parrot Foundation.
 # $Id$
 
 =head1 TITLE
@@ -8,7 +8,10 @@
 =head1 SYNOPSIS
 
     load_bytecode 'pcre.pbc'
-    lib = pcre_init()
+
+    .local pmc func, lib
+    func = get_hll_global ['PCRE'], 'init'
+    lib = func()
 
     func = get_hll_global ['PCRE'], 'compile'
     ( regex, error, errptr )= func( pat, options )
@@ -194,7 +197,7 @@
 .sub version
     .local pmc pcre_function
 
-    pcre_function= get_hll_global ['PCRE::NCI'], 'PCRE_version'
+    pcre_function = get_hll_global ['PCRE::NCI'], 'PCRE_version'
 
     .local string ver
 

Modified: branches/io_rewiring/src/dynext.c
==============================================================================
--- branches/io_rewiring/src/dynext.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/dynext.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -352,6 +352,14 @@
             return path;
     }
 #endif
+
+    /* And after-finally,  let the OS use his own search */
+    if (!STRING_IS_EMPTY(lib)) {
+        *handle = dlopen_string(interp, lib);
+        if (*handle)
+            return lib;
+    }
+
     err = Parrot_dlerror();
     Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
                 "Couldn't load '%Ss': %s\n",

Modified: branches/io_rewiring/src/embed.c
==============================================================================
--- branches/io_rewiring/src/embed.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/embed.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -106,6 +106,7 @@
     return make_interpreter(parent, PARROT_NO_FLAGS);
 }
 
+
 /*
 
 =item C<void Parrot_init_stacktop(PARROT_INTERP, void *stack_top)>
@@ -388,17 +389,17 @@
 PackFile *
 Parrot_pbc_read(PARROT_INTERP, ARGIN_NULLOK(const char *fullname), const int debug)
 {
+    PackFile *pf;
+    char     *program_code;
     FILE     *io        = NULL;
     INTVAL    is_mapped = 0;
-    char     *program_code;
-    PackFile *pf;
     INTVAL    program_size;
 
 #ifdef PARROT_HAS_HEADER_SYSMMAN
     int       fd        = -1;
 #endif
 
-    if (fullname == NULL || STREQ(fullname, "-")) {
+    if (!fullname || STREQ(fullname, "-")) {
         /* read from STDIN */
         io = stdin;
 
@@ -418,8 +419,9 @@
 
         /* we may need to relax this if we want to read bytecode from pipes */
         if (!Parrot_stat_info_intval(interp, fs, STAT_ISREG)) {
-            Parrot_io_eprintf(interp, "Parrot VM: '%s', is not a regular file %i.\n",
-                    fullname, errno);
+            Parrot_io_eprintf(interp,
+                "Parrot VM: '%s', is not a regular file %i.\n",
+                fullname, errno);
             return NULL;
         }
 
@@ -446,17 +448,18 @@
         INTVAL wanted     = program_size;
         size_t read_result;
 
-        program_code = (char *)mem_sys_allocate(chunk_size);
+        program_code = mem_allocate_n_typed(chunk_size, char);
+        cursor       = program_code;
         program_size = 0;
-        cursor       = (char *)program_code;
 
         while ((read_result = fread(cursor, 1, chunk_size, io)) > 0) {
             program_size += read_result;
+
             if (program_size == wanted)
                 break;
+
             chunk_size   = 1024;
-            program_code =
-                (char *)mem_sys_realloc(program_code, program_size + chunk_size);
+            mem_realloc_n_typed(program_code, program_size + chunk_size, char);
 
             if (!program_code) {
                 Parrot_io_eprintf(interp,
@@ -466,15 +469,17 @@
                 return NULL;
             }
 
-            cursor = (char *)program_code + program_size;
+            cursor = (char *)(program_code + program_size);
         }
 
         if (ferror(io)) {
-            Parrot_io_eprintf(interp, "Parrot VM: Problem reading packfile from PIO:  code %d.\n",
+            Parrot_io_eprintf(interp,
+             "Parrot VM: Problem reading packfile from PIO:  code %d.\n",
                         ferror(io));
             mem_sys_free(program_code);
             return NULL;
         }
+
         fclose(io);
     }
     else {
@@ -507,12 +512,13 @@
             /* try again, now with IO reading the file */
             io = fopen(fullname, "rb");
             if (!io) {
-                Parrot_io_eprintf(interp, "Parrot VM: Can't open %s, code %i.\n",
-                        fullname, errno);
+                Parrot_io_eprintf(interp,
+                    "Parrot VM: Can't open %s, code %i.\n", fullname, errno);
                 return NULL;
             }
             goto again;
         }
+
         is_mapped = 1;
 
 #else   /* PARROT_HAS_HEADER_SYSMMAN */
@@ -539,8 +545,8 @@
         return NULL;
     }
 
+    /* Set :main routine */
     if (!(pf->options & PFOPT_HEADERONLY))
-        /* Set :main routine */
         do_sub_pragmas(interp, pf->cur_cs, PBC_PBC, NULL);
 
     /* JITting and/or prederefing the sub/the bytecode is done
@@ -573,7 +579,7 @@
 void
 Parrot_pbc_load(PARROT_INTERP, NOTNULL(PackFile *pf))
 {
-    if (pf == NULL) {
+    if (!pf) {
         Parrot_io_eprintf(interp, "Invalid packfile\n");
         return;
     }
@@ -582,6 +588,7 @@
     interp->code       = pf->cur_cs;
 }
 
+
 /*
 
 =item C<void Parrot_pbc_fixup_loaded(PARROT_INTERP)>
@@ -599,6 +606,7 @@
     PackFile_fixup_subs(interp, PBC_LOADED, NULL);
 }
 
+
 /*
 
 =item C<static PMC* setup_argv(PARROT_INTERP, int argc, char **argv)>
@@ -614,9 +622,8 @@
 setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
 {
     ASSERT_ARGS(setup_argv)
+    PMC   *userargv = pmc_new(interp, enum_class_ResizableStringArray);
     INTVAL i;
-    PMC   *userargv;
-
 
     if (Interp_debug_TEST(interp, PARROT_START_DEBUG_FLAG)) {
         Parrot_io_eprintf(interp,
@@ -624,14 +631,10 @@
             argc);
     }
 
-    userargv = pmc_new_noinit(interp, enum_class_ResizableStringArray);
-
     /* immediately anchor pmc to root set */
     VTABLE_set_pmc_keyed_int(interp, interp->iglobals,
             (INTVAL)IGLOBALS_ARGV_LIST, userargv);
 
-    VTABLE_init(interp, userargv);
-
     for (i = 0; i < argc; i++) {
         /* Run through argv, adding everything to @ARGS. */
         STRING * const arg =
@@ -726,10 +729,10 @@
 calibrate(PARROT_INTERP)
 {
     ASSERT_ARGS(calibrate)
-    size_t   count  = 1000000;
-    size_t   n      = count;
     opcode_t code[] = { 1 };      /* noop */
     opcode_t *pc    = code;
+    size_t   count  = 1000000;
+    size_t   n      = count;
     FLOATVAL start  = Parrot_floatval_time();
     FLOATVAL now    = start;
 
@@ -869,7 +872,6 @@
 set_current_sub(PARROT_INTERP)
 {
     ASSERT_ARGS(set_current_sub)
-    opcode_t    i;
     Parrot_sub *sub_pmc_sub;
     PMC        *sub_pmc;
 
@@ -877,6 +879,8 @@
     PackFile_FixupTable * const ft     = cur_cs->fixups;
     PackFile_ConstTable * const ct     = cur_cs->const_table;
 
+    opcode_t    i;
+
     /*
      * Walk the fixup table.  The first Sub-like entry should be our
      * entry point with the address at our resume_offset.
@@ -903,7 +907,7 @@
         }
     }
 
-    /* if we didn't find anything put a dummy PMC into current_sub */
+    /* if we didn't find anything, put a dummy PMC into current_sub */
 
     sub_pmc                      = pmc_new(interp, enum_class_Sub);
     PMC_get_sub(interp, sub_pmc, sub_pmc_sub);
@@ -971,7 +975,8 @@
                 Parrot_io_eprintf(interp, "EXEC core");
                 break;
             default:
-                Parrot_ex_throw_from_c_args(interp, NULL, 1, "Unknown run core");
+                Parrot_ex_throw_from_c_args(interp, NULL, 1,
+                     "Unknown run core");
         }
 
         Parrot_io_eprintf(interp, " ***\n");
@@ -1051,11 +1056,12 @@
     return NULL;
 }
 
+
 /*
 
 =item C<static void print_constant_table(PARROT_INTERP)>
 
-Print the contents of the constants table.
+Prints the contents of the constants table.
 
 =cut
 
@@ -1087,17 +1093,20 @@
                 break;
             case PFC_PMC: {
                 Parrot_io_printf(interp, "PMC_CONST(%d): ", i);
+
                 switch (c->u.key->vtable->base_type) {
-                    /* each PBC file has a ParrotInterpreter, but it can't stringify by itself */
+                    /* each PBC file has a ParrotInterpreter, but it can't
+                     * stringify by itself */
                     case enum_class_ParrotInterpreter:
                         Parrot_io_printf(interp, "'ParrotInterpreter'");
                         break;
 
-                    /* FixedIntegerArrays are used for signatures, handy to print */
+                    /* FixedIntegerArrays used for signatures, handy to print */
                     case enum_class_FixedIntegerArray: {
                         INTVAL n = VTABLE_elements(interp, c->u.key);
                         INTVAL i;
                         Parrot_io_printf(interp, "[");
+
                         for (i = 0; i < n; ++i) {
                             INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
                             Parrot_io_printf(interp, "%d", val);
@@ -1237,9 +1246,8 @@
 
 =item C<void Parrot_run_native(PARROT_INTERP, native_func_t func)>
 
-Run the C function C<func> through the program C<[enternative, end]>.
-This ensures that the function is run with the same setup as in other
-run loops.
+Runs the C function C<func> through the program C<[enternative, end]>.  This
+ensures that the function runs with the same setup as in other run loops.
 
 This function is used in some of the source tests in F<t/src> which use
 the interpreter outside a runloop.
@@ -1273,12 +1281,13 @@
     runops(interp, interp->resume_offset);
 }
 
+
 /*
 
 =item C<Parrot_PMC Parrot_compile_string(PARROT_INTERP, Parrot_String type,
 const char *code, Parrot_String *error)>
 
-Compile code string.
+Compiles a code string.
 
 =cut
 
@@ -1289,16 +1298,14 @@
 Parrot_compile_string(PARROT_INTERP, Parrot_String type,
         const char *code, Parrot_String *error)
 {
+    /* For the benefit of embedders that do not load any pbc
+     * before compiling a string */
 
-    /* For the benefit of embedders that does not load any pbc
-     * before compiling a string
-     */
-    if (! interp->initial_pf) {
+    if (!interp->initial_pf) {
         PackFile *pf = PackFile_new_dummy(interp, "compile_string");
         /* Assumption: there is no valid reason to fail to create it.
-         * If the assumption changes, replace the assertio with a
-         * runtime check
-         */
+         * If the assumption changes, replace the assertion with a
+         * runtime check */
         PARROT_ASSERT(interp->initial_pf);
     }
 
@@ -1312,6 +1319,7 @@
     return NULL;
 }
 
+
 /*
 
 =back

Modified: branches/io_rewiring/src/gc/alloc_register.c
==============================================================================
--- branches/io_rewiring/src/gc/alloc_register.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/gc/alloc_register.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -181,6 +181,7 @@
             mem_sys_free(ptr);
             ptr = next;
         }
+        interp->ctx_mem.free_list[slot] = NULL;
     }
     mem_sys_free(interp->ctx_mem.free_list);
 }

Modified: branches/io_rewiring/src/gc/gc_ms.c
==============================================================================
--- branches/io_rewiring/src/gc/gc_ms.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/gc/gc_ms.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -123,6 +123,7 @@
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
+/* the percent of used Arena items at which to trace next time through */
 #define GC_DEBUG_REPLENISH_LEVEL_FACTOR        0.0
 #define GC_DEBUG_UNITS_PER_ALLOC_GROWTH_FACTOR 1
 #define REPLENISH_LEVEL_FACTOR                 0.3
@@ -372,7 +373,7 @@
             if (arena->used == arena->total_objects)
                 Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
 
-            if (pool->num_free_objects <= pool->replenish_level)
+            if (pool->num_free_objects > pool->replenish_level)
                 pool->skip = 1;
         }
     }

Modified: branches/io_rewiring/src/hash.c
==============================================================================
--- branches/io_rewiring/src/hash.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/hash.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -33,7 +33,7 @@
 /* the number of entries above which it's faster to hash the hashval instead of
  * looping over the used HashBuckets directly */
 #define SMALL_HASH_SIZE  4
-#define INITIAL_BUCKETS 16
+#define INITIAL_BUCKETS  4
 
 /* HEADERIZER HFILE: include/parrot/hash.h */
 

Modified: branches/io_rewiring/src/interp/inter_create.c
==============================================================================
--- branches/io_rewiring/src/interp/inter_create.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/interp/inter_create.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -20,6 +20,7 @@
 
 
 #include "parrot/parrot.h"
+#include "parrot/runcore_api.h"
 #include "parrot/oplib/core_ops.h"
 #include "../compilers/imcc/imc.h"
 #include "inter_create.str"
@@ -374,10 +375,9 @@
   */
 
     /* we destroy all child interpreters and the last one too,
-     * if the --leak-test commandline was given
-     */
-    if (! (interp->parent_interpreter ||
-                Interp_flags_TEST(interp, PARROT_DESTROY_FLAG)))
+     * if the --leak-test commandline was given */
+    if (! (interp->parent_interpreter
+    ||    Interp_flags_TEST(interp, PARROT_DESTROY_FLAG)))
         return;
 
     if (interp->parent_interpreter
@@ -419,9 +419,6 @@
         interp->profile = NULL;
     }
 
-    /* deinit op_lib */
-    (void) PARROT_CORE_OPLIB_INIT(0);
-
     destroy_context(interp);
     destroy_runloop_jump_points(interp);
 
@@ -433,6 +430,8 @@
     /* strings, charsets, encodings - only once */
     Parrot_str_finish(interp);
 
+    PARROT_CORE_OPLIB_INIT(0);
+
     if (!interp->parent_interpreter) {
         if (interp->thread_data)
             mem_sys_free(interp->thread_data);
@@ -444,6 +443,9 @@
         if (interp->n_libs > 0) {
             mem_sys_free(interp->op_info_table);
             mem_sys_free(interp->op_func_table);
+
+            /* deinit op_lib */
+            Parrot_runcore_destroy(interp);
         }
 
         MUTEX_DESTROY(interpreter_array_mutex);

Modified: branches/io_rewiring/src/library.c
==============================================================================
--- branches/io_rewiring/src/library.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/library.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -594,10 +594,10 @@
 
 /*
 
-=item C<void Parrot_add_library_path(PARROT_INTERP, STRING *path, enum_lib_paths
+=item C<void Parrot_lib_add_path(PARROT_INTERP, STRING *path_str, enum_lib_paths
 which)>
 
-Add a path to the library searchpath of the given type.
+Add a path to the library searchpath of the given type (passing in a STRING).
 
 =cut
 
@@ -605,41 +605,38 @@
 
 PARROT_EXPORT
 void
-Parrot_add_library_path(PARROT_INTERP,
-        ARGIN(STRING *path),
+Parrot_lib_add_path(PARROT_INTERP,
+        ARGIN(STRING *path_str),
         enum_lib_paths which)
 {
-    ASSERT_ARGS(Parrot_add_library_path)
+    ASSERT_ARGS(Parrot_lib_add_path)
     PMC * const iglobals = interp->iglobals;
     PMC * const lib_paths = VTABLE_get_pmc_keyed_int(interp, iglobals,
         IGLOBALS_LIB_PATHS);
     PMC * const paths = VTABLE_get_pmc_keyed_int(interp, lib_paths, which);
-    VTABLE_push_string(interp, paths, path);
+    VTABLE_push_string(interp, paths, path_str);
 }
 
 /*
 
-=item C<void Parrot_add_library_path_from_cstring(PARROT_INTERP, const char
-*path, enum_lib_paths which)>
+=item C<void Parrot_lib_add_path_from_cstring(PARROT_INTERP, const char *path,
+enum_lib_paths which)>
 
 Add a path to the library searchpath of the given type (passing in a C string).
 
-This function is just an interface to C<Parrot_add_library_path> for low-level
-code.
-
 =cut
 
 */
 
 PARROT_EXPORT
 void
-Parrot_add_library_path_from_cstring(PARROT_INTERP,
+Parrot_lib_add_path_from_cstring(PARROT_INTERP,
         ARGIN(const char *path),
         enum_lib_paths which)
 {
-    ASSERT_ARGS(Parrot_add_library_path_from_cstring)
+    ASSERT_ARGS(Parrot_lib_add_path_from_cstring)
     STRING * const path_str = Parrot_str_new(interp, path, 0);
-    Parrot_add_library_path(interp, path_str, which);
+    Parrot_lib_add_path(interp, path_str, which);
 }
 
 /*

Modified: branches/io_rewiring/src/multidispatch.c
==============================================================================
--- branches/io_rewiring/src/multidispatch.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/multidispatch.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1356,10 +1356,6 @@
         /* Create an NCI sub for the C function */
         PMC    *sub_obj       = constant_pmc_new(interp, enum_class_NCI);
 
-#ifdef PARROT_HAS_ALIGNED_FUNCPTR
-        PARROT_ASSERT((PTR2UINTVAL(func_ptr) & 3) == 0);
-#endif
-
         VTABLE_set_pointer_keyed_str(interp, sub_obj, short_sig,
                                      F2DPTR(func_ptr));
 

Modified: branches/io_rewiring/src/oo.c
==============================================================================
--- branches/io_rewiring/src/oo.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/oo.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -59,6 +59,12 @@
         __attribute__nonnull__(2)
         __attribute__nonnull__(3);
 
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC * get_pmc_proxy(PARROT_INTERP, INTVAL type)
+        __attribute__nonnull__(1);
+
 static void invalidate_all_caches(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -79,6 +85,8 @@
        PARROT_ASSERT_ARG(interp) \
     || PARROT_ASSERT_ARG(_class) \
     || PARROT_ASSERT_ARG(method_name)
+#define ASSERT_ARGS_get_pmc_proxy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+       PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_invalidate_all_caches __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp)
 #define ASSERT_ARGS_invalidate_type_caches __attribute__unused__ int _ASSERT_ARGS_CHECK = \
@@ -236,14 +244,7 @@
         else
             type = pmc_type(interp, VTABLE_get_string(interp, key));
 
-        /* Reject invalid type numbers */
-        if (type > interp->n_vtable_max || type <= 0)
-            classobj = PMCNULL;
-        else {
-            PMC * const type_num = pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, type_num, type);
-            classobj = pmc_new_init(interp, enum_class_PMCProxy, type_num);
-        }
+        classobj = get_pmc_proxy(interp, type);
     }
 
     return classobj;
@@ -299,9 +300,9 @@
 
     /* Now create the underlying structure, and clone attributes list.class. */
     cloned_guts               = mem_allocate_zeroed_typed(Parrot_Object_attributes);
+    PMC_data(cloned)          = cloned_guts;
     cloned_guts->_class       = obj->_class;
     cloned_guts->attrib_store = VTABLE_clone(interp, obj->attrib_store);
-    PMC_data(cloned)          = cloned_guts;
     num_attrs                 = VTABLE_elements(interp, cloned_guts->attrib_store);
     for (i = 0; i < num_attrs; i++) {
         PMC * const to_clone = VTABLE_get_pmc_keyed_int(interp, cloned_guts->attrib_store, i);
@@ -358,6 +359,51 @@
 
 /*
 
+=item C<static PMC * get_pmc_proxy(PARROT_INTERP, INTVAL type)>
+
+Get the PMC proxy for a PMC with the given type, creating it if does not exist.
+If type is not a valid type, return PMCNULL.  This code assumes that
+all PMCProxy objects live in the 'parrot' HLL namespace -- if/when
+we allow PMC types to exist in other HLL namespaces, this code will
+need to be updated.
+
+For internal use only.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC *
+get_pmc_proxy(PARROT_INTERP, INTVAL type)
+{
+    ASSERT_ARGS(get_pmc_proxy)
+
+    /* Check if not a PMC or invalid type number */
+    if (type > interp->n_vtable_max || type <= 0)
+        return PMCNULL;
+    else {
+        PMC * const parrot_hll = Parrot_get_namespace_keyed_str(interp, interp->root_namespace, CONST_STRING(interp, "parrot"));
+        PMC * const pmc_ns =
+            Parrot_make_namespace_keyed_str(interp, parrot_hll,
+                interp->vtables[type]->whoami);
+        PMC * proxy = VTABLE_get_class(interp, pmc_ns);
+
+        /* Create proxy if not found */
+        if (PMC_IS_NULL(proxy)) {
+            PMC * const type_num = pmc_new(interp, enum_class_Integer);
+            VTABLE_set_integer_native(interp, type_num, type);
+            proxy = pmc_new_init(interp, enum_class_PMCProxy, type_num);
+            Parrot_PCCINVOKE(interp, pmc_ns, CONST_STRING(interp, "set_class"), "P->", proxy);
+        }
+        return proxy;
+    }
+}
+
+/*
+
 =item C<PMC * Parrot_oo_get_class_str(PARROT_INTERP, STRING *name)>
 
 Lookup a class object from a builtin string.
@@ -373,35 +419,19 @@
 Parrot_oo_get_class_str(PARROT_INTERP, ARGIN(STRING *name))
 {
     ASSERT_ARGS(Parrot_oo_get_class_str)
+
+    /* First check in current HLL namespace */
     PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp, interp->HLL_namespace,
                            CONTEXT(interp)->current_HLL);
     PMC * const ns     = Parrot_get_namespace_keyed_str(interp, hll_ns, name);
     PMC * const _class = PMC_IS_NULL(ns)
                        ? PMCNULL : VTABLE_get_class(interp, ns);
 
-    /* Look up a low-level class and create a proxy */
-    if (PMC_IS_NULL(_class)) {
-        const INTVAL type = pmc_type(interp, name);
-
-        /* Reject invalid type numbers */
-        if (type > interp->n_vtable_max || type <= 0)
-            return PMCNULL;
-        else {
-            PMC * new_class;
-            PMC * new_ns;
-            PMC * const type_num = pmc_new(interp, enum_class_Integer);
-            VTABLE_set_integer_native(interp, type_num, type);
-            new_ns = ns;
-            new_class = pmc_new_init(interp, enum_class_PMCProxy, type_num);
-            if (ns->vtable->base_type != enum_class_NameSpace) {
-                new_ns = Parrot_make_namespace_keyed_str(interp, hll_ns, name);
-            }
-            Parrot_PCCINVOKE(interp, new_ns, CONST_STRING(interp, "set_class"), "P->", new_class);
-            return new_class;
-        }
-    }
-
-    return _class;
+    /* If not found, check for a PMC */
+    if (PMC_IS_NULL(_class))
+        return get_pmc_proxy(interp, pmc_type(interp, name));
+    else
+        return _class;
 }
 
 
@@ -985,8 +1015,7 @@
                 sizeof (Meth_cache_entry ***) * mc->mc_size);
         }
         else {
-            mc->idx = (Meth_cache_entry ***)mem_sys_allocate_zeroed(
-                sizeof (Meth_cache_entry ***) * (type + 1));
+            mc->idx = mem_allocate_n_zeroed_typed(type + 1, Meth_cache_entry**);
         }
         mc->mc_size = type + 1;
     }

Modified: branches/io_rewiring/src/ops/cmp.ops
==============================================================================
--- branches/io_rewiring/src/ops/cmp.ops	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/ops/cmp.ops	Sun Jun  7 23:41:42 2009	(r39444)
@@ -614,7 +614,6 @@
 
 =item B<cmp_num>(out INT, invar PMC, invar PMC)
 
-
 Sets $1 to -1 if $2 < $3, +1 if $2 > $3, and 0 otherwise.
 
 =cut
@@ -666,6 +665,18 @@
   $1 = VTABLE_cmp_num(interp, $2, $3);
 }
 
+=item B<cmp_pmc>(out PMC, invar PMC, invar PMC)
+
+Does the same thing as the other cmp_* variants, but puts a PMC in $1.  This is
+useful for avoiding the semipredicate problem in HLLs where two aggregate PMCs
+are not always comparable.
+
+=cut
+
+inline op cmp_pmc(out PMC, invar PMC, invar PMC) :base_core {
+  $1 = VTABLE_cmp_pmc(interp, $2, $3);
+}
+
 ########################################
 
 =item B<issame>(out INT, invar PMC, invar PMC)

Modified: branches/io_rewiring/src/ops/io.ops
==============================================================================
--- branches/io_rewiring/src/ops/io.ops	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/ops/io.ops	Sun Jun  7 23:41:42 2009	(r39444)
@@ -90,19 +90,27 @@
 
 #########################################
 
+=item B<setstdin>(invar PMC)
+
+Sets the standard input for a bare C<read> op to go to the supplied PMC.
+Call C<getstdin> first if you care about retaining the previous PMC.
+
 =item B<setstdout>(invar PMC)
 
-Sets the standard output for a bare C<print> op to go to the supplied ParrotIO
-PMC.  Call C<getstdout> first if you care about retaining the previous PMC.
+Sets the standard output for a bare C<print> op to go to the supplied PMC.
+Call C<getstdout> first if you care about retaining the previous PMC.
 
 =item B<setstderr>(invar PMC)
 
-Sets the standard error for a bare C<printerr> op to go to the supplied
-ParrotIO PMC.  Call C<getstderr> first if you care about retaining the previous
-PMC.
+Sets the standard error for a bare C<printerr> op to go to the supplied PMC.
+Call C<getstderr> first if you care about retaining the previous PMC.
 
 =cut
 
+inline op setstdin(invar PMC) :base_io {
+        _PIO_STDIN(interp) = $1;
+}
+
 inline op setstdout(invar PMC) :base_io {
         _PIO_STDOUT(interp) = $1;
 }
@@ -235,7 +243,7 @@
   STRING * const s = $1;
   if (s && Parrot_str_byte_length(interp, s))
     Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
-  Parrot_io_puts(interp, _PIO_STDOUT(interp), "\n");
+  Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
 }
 
 op say(invar PMC) :base_io {
@@ -251,7 +259,7 @@
         STRING * const s = VTABLE_get_string(interp, p);
         if (s)
             Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
-        Parrot_io_puts(interp, _PIO_STDOUT(interp), "\n");
+        Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
     }
 }
 

Modified: branches/io_rewiring/src/ops/ops.num
==============================================================================
--- branches/io_rewiring/src/ops/ops.num	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/ops/ops.num	Sun Jun  7 23:41:42 2009	(r39444)
@@ -380,899 +380,901 @@
 cmp_i_p_sc                      356
 cmp_str_i_p_p                   357
 cmp_num_i_p_p                   358
-issame_i_p_p                    359
-issame_i_s_s                    360
-issame_i_sc_s                   361
-issame_i_s_sc                   362
-issame_i_sc_sc                  363
-isntsame_i_p_p                  364
-isntsame_i_s_s                  365
-isntsame_i_sc_s                 366
-isntsame_i_s_sc                 367
-isntsame_i_sc_sc                368
-istrue_i_p                      369
-isfalse_i_p                     370
-isnull_i_p                      371
-isnull_i_pc                     372
-isgt_i_p_p                      373
-isge_i_p_p                      374
-isle_i_i_i                      375
-isle_i_ic_i                     376
-isle_i_i_ic                     377
-isle_i_n_n                      378
-isle_i_nc_n                     379
-isle_i_n_nc                     380
-isle_i_s_s                      381
-isle_i_sc_s                     382
-isle_i_s_sc                     383
-isle_i_p_p                      384
-islt_i_i_i                      385
-islt_i_ic_i                     386
-islt_i_i_ic                     387
-islt_i_n_n                      388
-islt_i_nc_n                     389
-islt_i_n_nc                     390
-islt_i_s_s                      391
-islt_i_sc_s                     392
-islt_i_s_sc                     393
-islt_i_p_p                      394
-iseq_i_i_i                      395
-iseq_i_ic_i                     396
-iseq_i_i_ic                     397
-iseq_i_n_n                      398
-iseq_i_nc_n                     399
-iseq_i_n_nc                     400
-iseq_i_s_s                      401
-iseq_i_sc_s                     402
-iseq_i_s_sc                     403
-iseq_i_p_p                      404
-isne_i_i_i                      405
-isne_i_ic_i                     406
-isne_i_i_ic                     407
-isne_i_n_n                      408
-isne_i_nc_n                     409
-isne_i_n_nc                     410
-isne_i_s_s                      411
-isne_i_sc_s                     412
-isne_i_s_sc                     413
-isne_i_p_p                      414
-and_i_i_i                       415
-and_i_ic_i                      416
-and_i_i_ic                      417
-and_p_p_p                       418
-not_i                           419
-not_i_i                         420
-not_p                           421
-not_p_p                         422
-or_i_i_i                        423
-or_i_ic_i                       424
-or_i_i_ic                       425
-or_p_p_p                        426
-xor_i_i_i                       427
-xor_i_ic_i                      428
-xor_i_i_ic                      429
-xor_p_p_p                       430
-debug_init                      431
-debug_load_sc                   432
-debug_break                     433
-debug_print                     434
-backtrace                       435
-getline_i                       436
-getfile_s                       437
-close_p                         438
-fdopen_p_i_s                    439
-fdopen_p_ic_s                   440
-fdopen_p_i_sc                   441
-fdopen_p_ic_sc                  442
-getstdin_p                      443
-getstdout_p                     444
-getstderr_p                     445
-setstdout_p                     446
-setstderr_p                     447
-open_p_s_s                      448
-open_p_sc_s                     449
-open_p_s_sc                     450
-open_p_sc_sc                    451
-open_p_s                        452
-open_p_sc                       453
-print_i                         454
-print_ic                        455
-print_n                         456
-print_nc                        457
-print_s                         458
-print_sc                        459
-print_p                         460
-say_i                           461
-say_ic                          462
-say_n                           463
-say_nc                          464
-say_s                           465
-say_sc                          466
-say_p                           467
-printerr_i                      468
-printerr_ic                     469
-printerr_n                      470
-printerr_nc                     471
-printerr_s                      472
-printerr_sc                     473
-printerr_p                      474
-print_p_i                       475
-print_p_ic                      476
-print_p_n                       477
-print_p_nc                      478
-print_p_s                       479
-print_p_sc                      480
-print_p_p                       481
-read_s_i                        482
-read_s_ic                       483
-read_s_p_i                      484
-read_s_p_ic                     485
-readline_s_p                    486
-peek_s                          487
-peek_s_p                        488
-stat_i_s_i                      489
-stat_i_sc_i                     490
-stat_i_s_ic                     491
-stat_i_sc_ic                    492
-stat_i_i_i                      493
-stat_i_ic_i                     494
-stat_i_i_ic                     495
-stat_i_ic_ic                    496
-seek_p_i_i                      497
-seek_p_ic_i                     498
-seek_p_i_ic                     499
-seek_p_ic_ic                    500
-seek_p_i_i_i                    501
-seek_p_ic_i_i                   502
-seek_p_i_ic_i                   503
-seek_p_ic_ic_i                  504
-seek_p_i_i_ic                   505
-seek_p_ic_i_ic                  506
-seek_p_i_ic_ic                  507
-seek_p_ic_ic_ic                 508
-tell_i_p                        509
-tell_i_i_p                      510
-abs_i                           511
-abs_n                           512
-abs_i_i                         513
-abs_n_n                         514
-abs_p                           515
-abs_p_p                         516
-add_i_i                         517
-add_i_ic                        518
-add_n_n                         519
-add_n_nc                        520
-add_p_p                         521
-add_p_i                         522
-add_p_ic                        523
-add_p_n                         524
-add_p_nc                        525
-add_i_i_i                       526
-add_i_ic_i                      527
-add_i_i_ic                      528
-add_n_n_n                       529
-add_n_nc_n                      530
-add_n_n_nc                      531
-add_p_p_p                       532
-add_p_p_i                       533
-add_p_p_ic                      534
-add_p_p_n                       535
-add_p_p_nc                      536
-cmod_i_i_i                      537
-cmod_i_ic_i                     538
-cmod_i_i_ic                     539
-cmod_p_p_i                      540
-cmod_p_p_ic                     541
-cmod_p_p_p                      542
-cmod_n_n_n                      543
-cmod_n_nc_n                     544
-cmod_n_n_nc                     545
-cmod_p_p_n                      546
-cmod_p_p_nc                     547
-dec_i                           548
-dec_n                           549
-dec_p                           550
-div_i_i                         551
-div_i_ic                        552
-div_n_n                         553
-div_n_nc                        554
-div_p_p                         555
-div_p_i                         556
-div_p_ic                        557
-div_p_n                         558
-div_p_nc                        559
-div_i_i_i                       560
-div_i_ic_i                      561
-div_i_i_ic                      562
-div_i_ic_ic                     563
-div_n_n_n                       564
-div_n_nc_n                      565
-div_n_n_nc                      566
-div_n_nc_nc                     567
-div_p_p_p                       568
-div_p_p_i                       569
-div_p_p_ic                      570
-div_p_p_n                       571
-div_p_p_nc                      572
-fdiv_i_i                        573
-fdiv_i_ic                       574
-fdiv_n_n                        575
-fdiv_n_nc                       576
-fdiv_p_p                        577
-fdiv_p_i                        578
-fdiv_p_ic                       579
-fdiv_p_n                        580
-fdiv_p_nc                       581
-fdiv_i_i_i                      582
-fdiv_i_ic_i                     583
-fdiv_i_i_ic                     584
-fdiv_n_n_n                      585
-fdiv_n_nc_n                     586
-fdiv_n_n_nc                     587
-fdiv_p_p_p                      588
-fdiv_p_p_i                      589
-fdiv_p_p_ic                     590
-fdiv_p_p_n                      591
-fdiv_p_p_nc                     592
-ceil_n                          593
-ceil_i_n                        594
-ceil_n_n                        595
-floor_n                         596
-floor_i_n                       597
-floor_n_n                       598
-inc_i                           599
-inc_n                           600
-inc_p                           601
-mod_i_i                         602
-mod_i_ic                        603
-mod_n_n                         604
-mod_n_nc                        605
-mod_p_p                         606
-mod_p_i                         607
-mod_p_ic                        608
-mod_p_n                         609
-mod_p_nc                        610
-mod_i_i_i                       611
-mod_i_ic_i                      612
-mod_i_i_ic                      613
-mod_n_n_n                       614
-mod_n_nc_n                      615
-mod_n_n_nc                      616
-mod_p_p_p                       617
-mod_p_p_i                       618
-mod_p_p_ic                      619
-mod_p_p_n                       620
-mod_p_p_nc                      621
-mul_i_i                         622
-mul_i_ic                        623
-mul_n_n                         624
-mul_n_nc                        625
-mul_p_p                         626
-mul_p_i                         627
-mul_p_ic                        628
-mul_p_n                         629
-mul_p_nc                        630
-mul_i_i_i                       631
-mul_i_ic_i                      632
-mul_i_i_ic                      633
-mul_n_n_n                       634
-mul_n_nc_n                      635
-mul_n_n_nc                      636
-mul_p_p_p                       637
-mul_p_p_i                       638
-mul_p_p_ic                      639
-mul_p_p_n                       640
-mul_p_p_nc                      641
-neg_i                           642
-neg_n                           643
-neg_p                           644
-neg_i_i                         645
-neg_n_n                         646
-neg_p_p                         647
-pow_n_n_n                       648
-pow_n_nc_n                      649
-pow_n_n_nc                      650
-pow_p_p_p                       651
-pow_p_p_i                       652
-pow_p_p_ic                      653
-pow_p_p_n                       654
-pow_p_p_nc                      655
-pow_n_n_i                       656
-pow_n_nc_i                      657
-pow_n_n_ic                      658
-pow_n_nc_ic                     659
-sub_i_i                         660
-sub_i_ic                        661
-sub_n_n                         662
-sub_n_nc                        663
-sub_p_p                         664
-sub_p_i                         665
-sub_p_ic                        666
-sub_p_n                         667
-sub_p_nc                        668
-sub_i_i_i                       669
-sub_i_ic_i                      670
-sub_i_i_ic                      671
-sub_n_n_n                       672
-sub_n_nc_n                      673
-sub_n_n_nc                      674
-sub_p_p_p                       675
-sub_p_p_i                       676
-sub_p_p_ic                      677
-sub_p_p_n                       678
-sub_p_p_nc                      679
-sqrt_n_n                        680
-acos_n_n                        681
-asec_n_n                        682
-asin_n_n                        683
-atan_n_n                        684
-atan_n_n_n                      685
-atan_n_nc_n                     686
-atan_n_n_nc                     687
-cos_n_n                         688
-cosh_n_n                        689
-exp_n_n                         690
-ln_n_n                          691
-log10_n_n                       692
-log2_n_n                        693
-sec_n_n                         694
-sech_n_n                        695
-sin_n_n                         696
-sinh_n_n                        697
-tan_n_n                         698
-tanh_n_n                        699
-gcd_i_i_i                       700
-gcd_i_ic_i                      701
-gcd_i_i_ic                      702
-lcm_i_i_i                       703
-lcm_i_ic_i                      704
-lcm_i_i_ic                      705
-fact_i_i                        706
-fact_n_i                        707
-callmethodcc_p_s                708
-callmethodcc_p_sc               709
-callmethodcc_p_p                710
-callmethod_p_s_p                711
-callmethod_p_sc_p               712
-callmethod_p_p_p                713
-tailcallmethod_p_s              714
-tailcallmethod_p_sc             715
-tailcallmethod_p_p              716
-addmethod_p_s_p                 717
-addmethod_p_sc_p                718
-can_i_p_s                       719
-can_i_p_sc                      720
-does_i_p_s                      721
-does_i_p_sc                     722
-does_i_p_p                      723
-does_i_p_pc                     724
-isa_i_p_s                       725
-isa_i_p_sc                      726
-isa_i_p_p                       727
-isa_i_p_pc                      728
-newclass_p_s                    729
-newclass_p_sc                   730
-newclass_p_p                    731
-newclass_p_pc                   732
-subclass_p_p                    733
-subclass_p_pc                   734
-subclass_p_p_s                  735
-subclass_p_pc_s                 736
-subclass_p_p_sc                 737
-subclass_p_pc_sc                738
-subclass_p_p_p                  739
-subclass_p_pc_p                 740
-subclass_p_p_pc                 741
-subclass_p_pc_pc                742
-subclass_p_s                    743
-subclass_p_sc                   744
-subclass_p_s_s                  745
-subclass_p_sc_s                 746
-subclass_p_s_sc                 747
-subclass_p_sc_sc                748
-subclass_p_s_p                  749
-subclass_p_sc_p                 750
-subclass_p_s_pc                 751
-subclass_p_sc_pc                752
-get_class_p_s                   753
-get_class_p_sc                  754
-get_class_p_p                   755
-get_class_p_pc                  756
-class_p_p                       757
-addparent_p_p                   758
-removeparent_p_p                759
-addrole_p_p                     760
-addattribute_p_s                761
-addattribute_p_sc               762
-removeattribute_p_s             763
-removeattribute_p_sc            764
-getattribute_p_p_s              765
-getattribute_p_p_sc             766
-getattribute_p_p_p_s            767
-getattribute_p_p_pc_s           768
-getattribute_p_p_p_sc           769
-getattribute_p_p_pc_sc          770
-setattribute_p_s_p              771
-setattribute_p_sc_p             772
-setattribute_p_p_s_p            773
-setattribute_p_pc_s_p           774
-setattribute_p_p_sc_p           775
-setattribute_p_pc_sc_p          776
-inspect_p_p                     777
-inspect_p_pc                    778
-inspect_p_p_s                   779
-inspect_p_pc_s                  780
-inspect_p_p_sc                  781
-inspect_p_pc_sc                 782
-pic_infix___ic_p_p              783
-pic_inline_sub___ic_p_p         784
-pic_get_params___pc             785
-pic_set_returns___pc            786
-pic_callr___pc                  787
-new_p_s                         788
-new_p_sc                        789
-new_p_s_p                       790
-new_p_sc_p                      791
-new_p_s_pc                      792
-new_p_sc_pc                     793
-new_p_p                         794
-new_p_pc                        795
-new_p_p_p                       796
-new_p_pc_p                      797
-new_p_p_pc                      798
-new_p_pc_pc                     799
-root_new_p_p                    800
-root_new_p_pc                   801
-root_new_p_p_p                  802
-root_new_p_pc_p                 803
-root_new_p_p_pc                 804
-root_new_p_pc_pc                805
-typeof_s_p                      806
-typeof_p_p                      807
-get_repr_s_p                    808
-find_method_p_p_s               809
-find_method_p_p_sc              810
-defined_i_p                     811
-defined_i_p_ki                  812
-defined_i_p_kic                 813
-defined_i_p_k                   814
-defined_i_p_kc                  815
-exists_i_p_ki                   816
-exists_i_p_kic                  817
-exists_i_p_k                    818
-exists_i_p_kc                   819
-delete_p_k                      820
-delete_p_kc                     821
-delete_p_ki                     822
-delete_p_kic                    823
-elements_i_p                    824
-push_p_i                        825
-push_p_ic                       826
-push_p_n                        827
-push_p_nc                       828
-push_p_s                        829
-push_p_sc                       830
-push_p_p                        831
-pop_i_p                         832
-pop_n_p                         833
-pop_s_p                         834
-pop_p_p                         835
-unshift_p_i                     836
-unshift_p_ic                    837
-unshift_p_n                     838
-unshift_p_nc                    839
-unshift_p_s                     840
-unshift_p_sc                    841
-unshift_p_p                     842
-shift_i_p                       843
-shift_n_p                       844
-shift_s_p                       845
-shift_p_p                       846
-splice_p_p_i_i                  847
-splice_p_p_ic_i                 848
-splice_p_p_i_ic                 849
-splice_p_p_ic_ic                850
-setprop_p_s_p                   851
-setprop_p_sc_p                  852
-getprop_p_s_p                   853
-getprop_p_sc_p                  854
-delprop_p_s                     855
-delprop_p_sc                    856
-prophash_p_p                    857
-freeze_s_p                      858
-thaw_p_s                        859
-thaw_p_sc                       860
-add_multi_s_s_p                 861
-add_multi_sc_s_p                862
-add_multi_s_sc_p                863
-add_multi_sc_sc_p               864
-find_multi_p_s_s                865
-find_multi_p_sc_s               866
-find_multi_p_s_sc               867
-find_multi_p_sc_sc              868
-register_p                      869
-unregister_p                    870
-box_p_i                         871
-box_p_ic                        872
-box_p_n                         873
-box_p_nc                        874
-box_p_s                         875
-box_p_sc                        876
-iter_p_p                        877
-morph_p_p                       878
-morph_p_pc                      879
-clone_s_s                       880
-clone_s_sc                      881
-exchange_i_i                    882
-exchange_p_p                    883
-exchange_n_n                    884
-exchange_s_s                    885
-set_i_i                         886
-set_i_ic                        887
-set_i_n                         888
-set_i_nc                        889
-set_i_s                         890
-set_i_sc                        891
-set_n_n                         892
-set_n_nc                        893
-set_n_i                         894
-set_n_ic                        895
-set_n_s                         896
-set_n_sc                        897
-set_n_p                         898
-set_s_p                         899
-set_s_s                         900
-set_s_sc                        901
-set_s_i                         902
-set_s_ic                        903
-set_s_n                         904
-set_s_nc                        905
-set_p_pc                        906
-set_p_p                         907
-set_p_i                         908
-set_p_ic                        909
-set_p_n                         910
-set_p_nc                        911
-set_p_s                         912
-set_p_sc                        913
-set_i_p                         914
-assign_p_p                      915
-assign_p_i                      916
-assign_p_ic                     917
-assign_p_n                      918
-assign_p_nc                     919
-assign_p_s                      920
-assign_p_sc                     921
-assign_s_s                      922
-assign_s_sc                     923
-setref_p_p                      924
-deref_p_p                       925
-setp_ind_i_p                    926
-setp_ind_ic_p                   927
-setn_ind_i_n                    928
-setn_ind_ic_n                   929
-setn_ind_i_nc                   930
-setn_ind_ic_nc                  931
-sets_ind_i_s                    932
-sets_ind_ic_s                   933
-sets_ind_i_sc                   934
-sets_ind_ic_sc                  935
-seti_ind_i_i                    936
-seti_ind_ic_i                   937
-seti_ind_i_ic                   938
-seti_ind_ic_ic                  939
-set_p_ki_i                      940
-set_p_kic_i                     941
-set_p_ki_ic                     942
-set_p_kic_ic                    943
-set_p_ki_n                      944
-set_p_kic_n                     945
-set_p_ki_nc                     946
-set_p_kic_nc                    947
-set_p_ki_s                      948
-set_p_kic_s                     949
-set_p_ki_sc                     950
-set_p_kic_sc                    951
-set_p_ki_p                      952
-set_p_kic_p                     953
-set_i_p_ki                      954
-set_i_p_kic                     955
-set_n_p_ki                      956
-set_n_p_kic                     957
-set_s_p_ki                      958
-set_s_p_kic                     959
-set_p_p_ki                      960
-set_p_p_kic                     961
-set_p_k_i                       962
-set_p_kc_i                      963
-set_p_k_ic                      964
-set_p_kc_ic                     965
-set_p_k_n                       966
-set_p_kc_n                      967
-set_p_k_nc                      968
-set_p_kc_nc                     969
-set_p_k_s                       970
-set_p_kc_s                      971
-set_p_k_sc                      972
-set_p_kc_sc                     973
-set_p_k_p                       974
-set_p_kc_p                      975
-set_i_p_k                       976
-set_i_p_kc                      977
-set_n_p_k                       978
-set_n_p_kc                      979
-set_s_p_k                       980
-set_s_p_kc                      981
-set_p_p_k                       982
-set_p_p_kc                      983
-clone_p_p                       984
-clone_p_p_p                     985
-clone_p_p_pc                    986
-copy_p_p                        987
-null_s                          988
-null_i                          989
-null_p                          990
-null_n                          991
-cleari                          992
-clearn                          993
-clears                          994
-clearp                          995
-ord_i_s                         996
-ord_i_sc                        997
-ord_i_s_i                       998
-ord_i_sc_i                      999
-ord_i_s_ic                     1000
-ord_i_sc_ic                    1001
-chr_s_i                        1002
-chr_s_ic                       1003
-chopn_s_i                      1004
-chopn_s_ic                     1005
-chopn_s_s_i                    1006
-chopn_s_sc_i                   1007
-chopn_s_s_ic                   1008
-chopn_s_sc_ic                  1009
-concat_s_s                     1010
-concat_s_sc                    1011
-concat_p_p                     1012
-concat_p_s                     1013
-concat_p_sc                    1014
-concat_s_s_s                   1015
-concat_s_sc_s                  1016
-concat_s_s_sc                  1017
-concat_p_p_s                   1018
-concat_p_p_sc                  1019
-concat_p_p_p                   1020
-repeat_s_s_i                   1021
-repeat_s_sc_i                  1022
-repeat_s_s_ic                  1023
-repeat_s_sc_ic                 1024
-repeat_p_p_i                   1025
-repeat_p_p_ic                  1026
-repeat_p_p_p                   1027
-repeat_p_i                     1028
-repeat_p_ic                    1029
-repeat_p_p                     1030
-length_i_s                     1031
-length_i_sc                    1032
-bytelength_i_s                 1033
-bytelength_i_sc                1034
-pin_s                          1035
-unpin_s                        1036
-substr_s_s_i                   1037
-substr_s_sc_i                  1038
-substr_s_s_ic                  1039
-substr_s_sc_ic                 1040
-substr_s_s_i_i                 1041
-substr_s_sc_i_i                1042
-substr_s_s_ic_i                1043
-substr_s_sc_ic_i               1044
-substr_s_s_i_ic                1045
-substr_s_sc_i_ic               1046
-substr_s_s_ic_ic               1047
-substr_s_sc_ic_ic              1048
-substr_s_s_i_i_s               1049
-substr_s_s_ic_i_s              1050
-substr_s_s_i_ic_s              1051
-substr_s_s_ic_ic_s             1052
-substr_s_s_i_i_sc              1053
-substr_s_s_ic_i_sc             1054
-substr_s_s_i_ic_sc             1055
-substr_s_s_ic_ic_sc            1056
-substr_s_i_i_s                 1057
-substr_s_ic_i_s                1058
-substr_s_i_ic_s                1059
-substr_s_ic_ic_s               1060
-substr_s_i_i_sc                1061
-substr_s_ic_i_sc               1062
-substr_s_i_ic_sc               1063
-substr_s_ic_ic_sc              1064
-substr_s_p_i_i                 1065
-substr_s_p_ic_i                1066
-substr_s_p_i_ic                1067
-substr_s_p_ic_ic               1068
-index_i_s_s                    1069
-index_i_sc_s                   1070
-index_i_s_sc                   1071
-index_i_sc_sc                  1072
-index_i_s_s_i                  1073
-index_i_sc_s_i                 1074
-index_i_s_sc_i                 1075
-index_i_sc_sc_i                1076
-index_i_s_s_ic                 1077
-index_i_sc_s_ic                1078
-index_i_s_sc_ic                1079
-index_i_sc_sc_ic               1080
-sprintf_s_s_p                  1081
-sprintf_s_sc_p                 1082
-sprintf_p_p_p                  1083
-new_s                          1084
-new_s_i                        1085
-new_s_ic                       1086
-stringinfo_i_s_i               1087
-stringinfo_i_sc_i              1088
-stringinfo_i_s_ic              1089
-stringinfo_i_sc_ic             1090
-upcase_s_s                     1091
-upcase_s_sc                    1092
-upcase_s                       1093
-downcase_s_s                   1094
-downcase_s_sc                  1095
-downcase_s                     1096
-titlecase_s_s                  1097
-titlecase_s_sc                 1098
-titlecase_s                    1099
-join_s_s_p                     1100
-join_s_sc_p                    1101
-split_p_s_s                    1102
-split_p_sc_s                   1103
-split_p_s_sc                   1104
-split_p_sc_sc                  1105
-charset_i_s                    1106
-charset_i_sc                   1107
-charsetname_s_i                1108
-charsetname_s_ic               1109
-find_charset_i_s               1110
-find_charset_i_sc              1111
-trans_charset_s_i              1112
-trans_charset_s_ic             1113
-trans_charset_s_s_i            1114
-trans_charset_s_sc_i           1115
-trans_charset_s_s_ic           1116
-trans_charset_s_sc_ic          1117
-encoding_i_s                   1118
-encoding_i_sc                  1119
-encodingname_s_i               1120
-encodingname_s_ic              1121
-find_encoding_i_s              1122
-find_encoding_i_sc             1123
-trans_encoding_s_i             1124
-trans_encoding_s_ic            1125
-trans_encoding_s_s_i           1126
-trans_encoding_s_sc_i          1127
-trans_encoding_s_s_ic          1128
-trans_encoding_s_sc_ic         1129
-is_cclass_i_i_s_i              1130
-is_cclass_i_ic_s_i             1131
-is_cclass_i_i_sc_i             1132
-is_cclass_i_ic_sc_i            1133
-is_cclass_i_i_s_ic             1134
-is_cclass_i_ic_s_ic            1135
-is_cclass_i_i_sc_ic            1136
-is_cclass_i_ic_sc_ic           1137
-find_cclass_i_i_s_i_i          1138
-find_cclass_i_ic_s_i_i         1139
-find_cclass_i_i_sc_i_i         1140
-find_cclass_i_ic_sc_i_i        1141
-find_cclass_i_i_s_ic_i         1142
-find_cclass_i_ic_s_ic_i        1143
-find_cclass_i_i_sc_ic_i        1144
-find_cclass_i_ic_sc_ic_i       1145
-find_cclass_i_i_s_i_ic         1146
-find_cclass_i_ic_s_i_ic        1147
-find_cclass_i_i_sc_i_ic        1148
-find_cclass_i_ic_sc_i_ic       1149
-find_cclass_i_i_s_ic_ic        1150
-find_cclass_i_ic_s_ic_ic       1151
-find_cclass_i_i_sc_ic_ic       1152
-find_cclass_i_ic_sc_ic_ic      1153
-find_not_cclass_i_i_s_i_i      1154
-find_not_cclass_i_ic_s_i_i     1155
-find_not_cclass_i_i_sc_i_i     1156
-find_not_cclass_i_ic_sc_i_i    1157
-find_not_cclass_i_i_s_ic_i     1158
-find_not_cclass_i_ic_s_ic_i    1159
-find_not_cclass_i_i_sc_ic_i    1160
-find_not_cclass_i_ic_sc_ic_i   1161
-find_not_cclass_i_i_s_i_ic     1162
-find_not_cclass_i_ic_s_i_ic    1163
-find_not_cclass_i_i_sc_i_ic    1164
-find_not_cclass_i_ic_sc_i_ic   1165
-find_not_cclass_i_i_s_ic_ic    1166
-find_not_cclass_i_ic_s_ic_ic   1167
-find_not_cclass_i_i_sc_ic_ic   1168
-find_not_cclass_i_ic_sc_ic_ic  1169
-escape_s_s                     1170
-compose_s_s                    1171
-compose_s_sc                   1172
-spawnw_i_s                     1173
-spawnw_i_sc                    1174
-spawnw_i_p                     1175
-err_i                          1176
-err_s                          1177
-err_s_i                        1178
-err_s_ic                       1179
-time_i                         1180
-time_n                         1181
-gmtime_s_i                     1182
-gmtime_s_ic                    1183
-localtime_s_i                  1184
-localtime_s_ic                 1185
-decodetime_p_i                 1186
-decodetime_p_ic                1187
-decodelocaltime_p_i            1188
-decodelocaltime_p_ic           1189
-sysinfo_s_i                    1190
-sysinfo_s_ic                   1191
-sysinfo_i_i                    1192
-sysinfo_i_ic                   1193
-sleep_i                        1194
-sleep_ic                       1195
-sleep_n                        1196
-sleep_nc                       1197
-sizeof_i_i                     1198
-sizeof_i_ic                    1199
-store_lex_s_p                  1200
-store_lex_sc_p                 1201
-find_lex_p_s                   1202
-find_lex_p_sc                  1203
-find_caller_lex_p_s            1204
-find_caller_lex_p_sc           1205
-get_namespace_p                1206
-get_namespace_p_p              1207
-get_namespace_p_pc             1208
-get_hll_namespace_p            1209
-get_hll_namespace_p_p          1210
-get_hll_namespace_p_pc         1211
-get_root_namespace_p           1212
-get_root_namespace_p_p         1213
-get_root_namespace_p_pc        1214
-get_global_p_s                 1215
-get_global_p_sc                1216
-get_global_p_p_s               1217
-get_global_p_pc_s              1218
-get_global_p_p_sc              1219
-get_global_p_pc_sc             1220
-get_hll_global_p_s             1221
-get_hll_global_p_sc            1222
-get_hll_global_p_p_s           1223
-get_hll_global_p_pc_s          1224
-get_hll_global_p_p_sc          1225
-get_hll_global_p_pc_sc         1226
-get_root_global_p_s            1227
-get_root_global_p_sc           1228
-get_root_global_p_p_s          1229
-get_root_global_p_pc_s         1230
-get_root_global_p_p_sc         1231
-get_root_global_p_pc_sc        1232
-set_global_s_p                 1233
-set_global_sc_p                1234
-set_global_p_s_p               1235
-set_global_pc_s_p              1236
-set_global_p_sc_p              1237
-set_global_pc_sc_p             1238
-set_hll_global_s_p             1239
-set_hll_global_sc_p            1240
-set_hll_global_p_s_p           1241
-set_hll_global_pc_s_p          1242
-set_hll_global_p_sc_p          1243
-set_hll_global_pc_sc_p         1244
-set_root_global_s_p            1245
-set_root_global_sc_p           1246
-set_root_global_p_s_p          1247
-set_root_global_pc_s_p         1248
-set_root_global_p_sc_p         1249
-set_root_global_pc_sc_p        1250
-find_name_p_s                  1251
-find_name_p_sc                 1252
-find_sub_not_null_p_s          1253
-find_sub_not_null_p_sc         1254
+cmp_pmc_p_p_p                   359
+issame_i_p_p                    360
+issame_i_s_s                    361
+issame_i_sc_s                   362
+issame_i_s_sc                   363
+issame_i_sc_sc                  364
+isntsame_i_p_p                  365
+isntsame_i_s_s                  366
+isntsame_i_sc_s                 367
+isntsame_i_s_sc                 368
+isntsame_i_sc_sc                369
+istrue_i_p                      370
+isfalse_i_p                     371
+isnull_i_p                      372
+isnull_i_pc                     373
+isgt_i_p_p                      374
+isge_i_p_p                      375
+isle_i_i_i                      376
+isle_i_ic_i                     377
+isle_i_i_ic                     378
+isle_i_n_n                      379
+isle_i_nc_n                     380
+isle_i_n_nc                     381
+isle_i_s_s                      382
+isle_i_sc_s                     383
+isle_i_s_sc                     384
+isle_i_p_p                      385
+islt_i_i_i                      386
+islt_i_ic_i                     387
+islt_i_i_ic                     388
+islt_i_n_n                      389
+islt_i_nc_n                     390
+islt_i_n_nc                     391
+islt_i_s_s                      392
+islt_i_sc_s                     393
+islt_i_s_sc                     394
+islt_i_p_p                      395
+iseq_i_i_i                      396
+iseq_i_ic_i                     397
+iseq_i_i_ic                     398
+iseq_i_n_n                      399
+iseq_i_nc_n                     400
+iseq_i_n_nc                     401
+iseq_i_s_s                      402
+iseq_i_sc_s                     403
+iseq_i_s_sc                     404
+iseq_i_p_p                      405
+isne_i_i_i                      406
+isne_i_ic_i                     407
+isne_i_i_ic                     408
+isne_i_n_n                      409
+isne_i_nc_n                     410
+isne_i_n_nc                     411
+isne_i_s_s                      412
+isne_i_sc_s                     413
+isne_i_s_sc                     414
+isne_i_p_p                      415
+and_i_i_i                       416
+and_i_ic_i                      417
+and_i_i_ic                      418
+and_p_p_p                       419
+not_i                           420
+not_i_i                         421
+not_p                           422
+not_p_p                         423
+or_i_i_i                        424
+or_i_ic_i                       425
+or_i_i_ic                       426
+or_p_p_p                        427
+xor_i_i_i                       428
+xor_i_ic_i                      429
+xor_i_i_ic                      430
+xor_p_p_p                       431
+debug_init                      432
+debug_load_sc                   433
+debug_break                     434
+debug_print                     435
+backtrace                       436
+getline_i                       437
+getfile_s                       438
+close_p                         439
+fdopen_p_i_s                    440
+fdopen_p_ic_s                   441
+fdopen_p_i_sc                   442
+fdopen_p_ic_sc                  443
+getstdin_p                      444
+getstdout_p                     445
+getstderr_p                     446
+setstdin_p                      447
+setstdout_p                     448
+setstderr_p                     449
+open_p_s_s                      450
+open_p_sc_s                     451
+open_p_s_sc                     452
+open_p_sc_sc                    453
+open_p_s                        454
+open_p_sc                       455
+print_i                         456
+print_ic                        457
+print_n                         458
+print_nc                        459
+print_s                         460
+print_sc                        461
+print_p                         462
+say_i                           463
+say_ic                          464
+say_n                           465
+say_nc                          466
+say_s                           467
+say_sc                          468
+say_p                           469
+printerr_i                      470
+printerr_ic                     471
+printerr_n                      472
+printerr_nc                     473
+printerr_s                      474
+printerr_sc                     475
+printerr_p                      476
+print_p_i                       477
+print_p_ic                      478
+print_p_n                       479
+print_p_nc                      480
+print_p_s                       481
+print_p_sc                      482
+print_p_p                       483
+read_s_i                        484
+read_s_ic                       485
+read_s_p_i                      486
+read_s_p_ic                     487
+readline_s_p                    488
+peek_s                          489
+peek_s_p                        490
+stat_i_s_i                      491
+stat_i_sc_i                     492
+stat_i_s_ic                     493
+stat_i_sc_ic                    494
+stat_i_i_i                      495
+stat_i_ic_i                     496
+stat_i_i_ic                     497
+stat_i_ic_ic                    498
+seek_p_i_i                      499
+seek_p_ic_i                     500
+seek_p_i_ic                     501
+seek_p_ic_ic                    502
+seek_p_i_i_i                    503
+seek_p_ic_i_i                   504
+seek_p_i_ic_i                   505
+seek_p_ic_ic_i                  506
+seek_p_i_i_ic                   507
+seek_p_ic_i_ic                  508
+seek_p_i_ic_ic                  509
+seek_p_ic_ic_ic                 510
+tell_i_p                        511
+tell_i_i_p                      512
+abs_i                           513
+abs_n                           514
+abs_i_i                         515
+abs_n_n                         516
+abs_p                           517
+abs_p_p                         518
+add_i_i                         519
+add_i_ic                        520
+add_n_n                         521
+add_n_nc                        522
+add_p_p                         523
+add_p_i                         524
+add_p_ic                        525
+add_p_n                         526
+add_p_nc                        527
+add_i_i_i                       528
+add_i_ic_i                      529
+add_i_i_ic                      530
+add_n_n_n                       531
+add_n_nc_n                      532
+add_n_n_nc                      533
+add_p_p_p                       534
+add_p_p_i                       535
+add_p_p_ic                      536
+add_p_p_n                       537
+add_p_p_nc                      538
+cmod_i_i_i                      539
+cmod_i_ic_i                     540
+cmod_i_i_ic                     541
+cmod_p_p_i                      542
+cmod_p_p_ic                     543
+cmod_p_p_p                      544
+cmod_n_n_n                      545
+cmod_n_nc_n                     546
+cmod_n_n_nc                     547
+cmod_p_p_n                      548
+cmod_p_p_nc                     549
+dec_i                           550
+dec_n                           551
+dec_p                           552
+div_i_i                         553
+div_i_ic                        554
+div_n_n                         555
+div_n_nc                        556
+div_p_p                         557
+div_p_i                         558
+div_p_ic                        559
+div_p_n                         560
+div_p_nc                        561
+div_i_i_i                       562
+div_i_ic_i                      563
+div_i_i_ic                      564
+div_i_ic_ic                     565
+div_n_n_n                       566
+div_n_nc_n                      567
+div_n_n_nc                      568
+div_n_nc_nc                     569
+div_p_p_p                       570
+div_p_p_i                       571
+div_p_p_ic                      572
+div_p_p_n                       573
+div_p_p_nc                      574
+fdiv_i_i                        575
+fdiv_i_ic                       576
+fdiv_n_n                        577
+fdiv_n_nc                       578
+fdiv_p_p                        579
+fdiv_p_i                        580
+fdiv_p_ic                       581
+fdiv_p_n                        582
+fdiv_p_nc                       583
+fdiv_i_i_i                      584
+fdiv_i_ic_i                     585
+fdiv_i_i_ic                     586
+fdiv_n_n_n                      587
+fdiv_n_nc_n                     588
+fdiv_n_n_nc                     589
+fdiv_p_p_p                      590
+fdiv_p_p_i                      591
+fdiv_p_p_ic                     592
+fdiv_p_p_n                      593
+fdiv_p_p_nc                     594
+ceil_n                          595
+ceil_i_n                        596
+ceil_n_n                        597
+floor_n                         598
+floor_i_n                       599
+floor_n_n                       600
+inc_i                           601
+inc_n                           602
+inc_p                           603
+mod_i_i                         604
+mod_i_ic                        605
+mod_n_n                         606
+mod_n_nc                        607
+mod_p_p                         608
+mod_p_i                         609
+mod_p_ic                        610
+mod_p_n                         611
+mod_p_nc                        612
+mod_i_i_i                       613
+mod_i_ic_i                      614
+mod_i_i_ic                      615
+mod_n_n_n                       616
+mod_n_nc_n                      617
+mod_n_n_nc                      618
+mod_p_p_p                       619
+mod_p_p_i                       620
+mod_p_p_ic                      621
+mod_p_p_n                       622
+mod_p_p_nc                      623
+mul_i_i                         624
+mul_i_ic                        625
+mul_n_n                         626
+mul_n_nc                        627
+mul_p_p                         628
+mul_p_i                         629
+mul_p_ic                        630
+mul_p_n                         631
+mul_p_nc                        632
+mul_i_i_i                       633
+mul_i_ic_i                      634
+mul_i_i_ic                      635
+mul_n_n_n                       636
+mul_n_nc_n                      637
+mul_n_n_nc                      638
+mul_p_p_p                       639
+mul_p_p_i                       640
+mul_p_p_ic                      641
+mul_p_p_n                       642
+mul_p_p_nc                      643
+neg_i                           644
+neg_n                           645
+neg_p                           646
+neg_i_i                         647
+neg_n_n                         648
+neg_p_p                         649
+pow_n_n_n                       650
+pow_n_nc_n                      651
+pow_n_n_nc                      652
+pow_p_p_p                       653
+pow_p_p_i                       654
+pow_p_p_ic                      655
+pow_p_p_n                       656
+pow_p_p_nc                      657
+pow_n_n_i                       658
+pow_n_nc_i                      659
+pow_n_n_ic                      660
+pow_n_nc_ic                     661
+sub_i_i                         662
+sub_i_ic                        663
+sub_n_n                         664
+sub_n_nc                        665
+sub_p_p                         666
+sub_p_i                         667
+sub_p_ic                        668
+sub_p_n                         669
+sub_p_nc                        670
+sub_i_i_i                       671
+sub_i_ic_i                      672
+sub_i_i_ic                      673
+sub_n_n_n                       674
+sub_n_nc_n                      675
+sub_n_n_nc                      676
+sub_p_p_p                       677
+sub_p_p_i                       678
+sub_p_p_ic                      679
+sub_p_p_n                       680
+sub_p_p_nc                      681
+sqrt_n_n                        682
+acos_n_n                        683
+asec_n_n                        684
+asin_n_n                        685
+atan_n_n                        686
+atan_n_n_n                      687
+atan_n_nc_n                     688
+atan_n_n_nc                     689
+cos_n_n                         690
+cosh_n_n                        691
+exp_n_n                         692
+ln_n_n                          693
+log10_n_n                       694
+log2_n_n                        695
+sec_n_n                         696
+sech_n_n                        697
+sin_n_n                         698
+sinh_n_n                        699
+tan_n_n                         700
+tanh_n_n                        701
+gcd_i_i_i                       702
+gcd_i_ic_i                      703
+gcd_i_i_ic                      704
+lcm_i_i_i                       705
+lcm_i_ic_i                      706
+lcm_i_i_ic                      707
+fact_i_i                        708
+fact_n_i                        709
+callmethodcc_p_s                710
+callmethodcc_p_sc               711
+callmethodcc_p_p                712
+callmethod_p_s_p                713
+callmethod_p_sc_p               714
+callmethod_p_p_p                715
+tailcallmethod_p_s              716
+tailcallmethod_p_sc             717
+tailcallmethod_p_p              718
+addmethod_p_s_p                 719
+addmethod_p_sc_p                720
+can_i_p_s                       721
+can_i_p_sc                      722
+does_i_p_s                      723
+does_i_p_sc                     724
+does_i_p_p                      725
+does_i_p_pc                     726
+isa_i_p_s                       727
+isa_i_p_sc                      728
+isa_i_p_p                       729
+isa_i_p_pc                      730
+newclass_p_s                    731
+newclass_p_sc                   732
+newclass_p_p                    733
+newclass_p_pc                   734
+subclass_p_p                    735
+subclass_p_pc                   736
+subclass_p_p_s                  737
+subclass_p_pc_s                 738
+subclass_p_p_sc                 739
+subclass_p_pc_sc                740
+subclass_p_p_p                  741
+subclass_p_pc_p                 742
+subclass_p_p_pc                 743
+subclass_p_pc_pc                744
+subclass_p_s                    745
+subclass_p_sc                   746
+subclass_p_s_s                  747
+subclass_p_sc_s                 748
+subclass_p_s_sc                 749
+subclass_p_sc_sc                750
+subclass_p_s_p                  751
+subclass_p_sc_p                 752
+subclass_p_s_pc                 753
+subclass_p_sc_pc                754
+get_class_p_s                   755
+get_class_p_sc                  756
+get_class_p_p                   757
+get_class_p_pc                  758
+class_p_p                       759
+addparent_p_p                   760
+removeparent_p_p                761
+addrole_p_p                     762
+addattribute_p_s                763
+addattribute_p_sc               764
+removeattribute_p_s             765
+removeattribute_p_sc            766
+getattribute_p_p_s              767
+getattribute_p_p_sc             768
+getattribute_p_p_p_s            769
+getattribute_p_p_pc_s           770
+getattribute_p_p_p_sc           771
+getattribute_p_p_pc_sc          772
+setattribute_p_s_p              773
+setattribute_p_sc_p             774
+setattribute_p_p_s_p            775
+setattribute_p_pc_s_p           776
+setattribute_p_p_sc_p           777
+setattribute_p_pc_sc_p          778
+inspect_p_p                     779
+inspect_p_pc                    780
+inspect_p_p_s                   781
+inspect_p_pc_s                  782
+inspect_p_p_sc                  783
+inspect_p_pc_sc                 784
+pic_infix___ic_p_p              785
+pic_inline_sub___ic_p_p         786
+pic_get_params___pc             787
+pic_set_returns___pc            788
+pic_callr___pc                  789
+new_p_s                         790
+new_p_sc                        791
+new_p_s_p                       792
+new_p_sc_p                      793
+new_p_s_pc                      794
+new_p_sc_pc                     795
+new_p_p                         796
+new_p_pc                        797
+new_p_p_p                       798
+new_p_pc_p                      799
+new_p_p_pc                      800
+new_p_pc_pc                     801
+root_new_p_p                    802
+root_new_p_pc                   803
+root_new_p_p_p                  804
+root_new_p_pc_p                 805
+root_new_p_p_pc                 806
+root_new_p_pc_pc                807
+typeof_s_p                      808
+typeof_p_p                      809
+get_repr_s_p                    810
+find_method_p_p_s               811
+find_method_p_p_sc              812
+defined_i_p                     813
+defined_i_p_ki                  814
+defined_i_p_kic                 815
+defined_i_p_k                   816
+defined_i_p_kc                  817
+exists_i_p_ki                   818
+exists_i_p_kic                  819
+exists_i_p_k                    820
+exists_i_p_kc                   821
+delete_p_k                      822
+delete_p_kc                     823
+delete_p_ki                     824
+delete_p_kic                    825
+elements_i_p                    826
+push_p_i                        827
+push_p_ic                       828
+push_p_n                        829
+push_p_nc                       830
+push_p_s                        831
+push_p_sc                       832
+push_p_p                        833
+pop_i_p                         834
+pop_n_p                         835
+pop_s_p                         836
+pop_p_p                         837
+unshift_p_i                     838
+unshift_p_ic                    839
+unshift_p_n                     840
+unshift_p_nc                    841
+unshift_p_s                     842
+unshift_p_sc                    843
+unshift_p_p                     844
+shift_i_p                       845
+shift_n_p                       846
+shift_s_p                       847
+shift_p_p                       848
+splice_p_p_i_i                  849
+splice_p_p_ic_i                 850
+splice_p_p_i_ic                 851
+splice_p_p_ic_ic                852
+setprop_p_s_p                   853
+setprop_p_sc_p                  854
+getprop_p_s_p                   855
+getprop_p_sc_p                  856
+delprop_p_s                     857
+delprop_p_sc                    858
+prophash_p_p                    859
+freeze_s_p                      860
+thaw_p_s                        861
+thaw_p_sc                       862
+add_multi_s_s_p                 863
+add_multi_sc_s_p                864
+add_multi_s_sc_p                865
+add_multi_sc_sc_p               866
+find_multi_p_s_s                867
+find_multi_p_sc_s               868
+find_multi_p_s_sc               869
+find_multi_p_sc_sc              870
+register_p                      871
+unregister_p                    872
+box_p_i                         873
+box_p_ic                        874
+box_p_n                         875
+box_p_nc                        876
+box_p_s                         877
+box_p_sc                        878
+iter_p_p                        879
+morph_p_p                       880
+morph_p_pc                      881
+clone_s_s                       882
+clone_s_sc                      883
+exchange_i_i                    884
+exchange_p_p                    885
+exchange_n_n                    886
+exchange_s_s                    887
+set_i_i                         888
+set_i_ic                        889
+set_i_n                         890
+set_i_nc                        891
+set_i_s                         892
+set_i_sc                        893
+set_n_n                         894
+set_n_nc                        895
+set_n_i                         896
+set_n_ic                        897
+set_n_s                         898
+set_n_sc                        899
+set_n_p                         900
+set_s_p                         901
+set_s_s                         902
+set_s_sc                        903
+set_s_i                         904
+set_s_ic                        905
+set_s_n                         906
+set_s_nc                        907
+set_p_pc                        908
+set_p_p                         909
+set_p_i                         910
+set_p_ic                        911
+set_p_n                         912
+set_p_nc                        913
+set_p_s                         914
+set_p_sc                        915
+set_i_p                         916
+assign_p_p                      917
+assign_p_i                      918
+assign_p_ic                     919
+assign_p_n                      920
+assign_p_nc                     921
+assign_p_s                      922
+assign_p_sc                     923
+assign_s_s                      924
+assign_s_sc                     925
+setref_p_p                      926
+deref_p_p                       927
+setp_ind_i_p                    928
+setp_ind_ic_p                   929
+setn_ind_i_n                    930
+setn_ind_ic_n                   931
+setn_ind_i_nc                   932
+setn_ind_ic_nc                  933
+sets_ind_i_s                    934
+sets_ind_ic_s                   935
+sets_ind_i_sc                   936
+sets_ind_ic_sc                  937
+seti_ind_i_i                    938
+seti_ind_ic_i                   939
+seti_ind_i_ic                   940
+seti_ind_ic_ic                  941
+set_p_ki_i                      942
+set_p_kic_i                     943
+set_p_ki_ic                     944
+set_p_kic_ic                    945
+set_p_ki_n                      946
+set_p_kic_n                     947
+set_p_ki_nc                     948
+set_p_kic_nc                    949
+set_p_ki_s                      950
+set_p_kic_s                     951
+set_p_ki_sc                     952
+set_p_kic_sc                    953
+set_p_ki_p                      954
+set_p_kic_p                     955
+set_i_p_ki                      956
+set_i_p_kic                     957
+set_n_p_ki                      958
+set_n_p_kic                     959
+set_s_p_ki                      960
+set_s_p_kic                     961
+set_p_p_ki                      962
+set_p_p_kic                     963
+set_p_k_i                       964
+set_p_kc_i                      965
+set_p_k_ic                      966
+set_p_kc_ic                     967
+set_p_k_n                       968
+set_p_kc_n                      969
+set_p_k_nc                      970
+set_p_kc_nc                     971
+set_p_k_s                       972
+set_p_kc_s                      973
+set_p_k_sc                      974
+set_p_kc_sc                     975
+set_p_k_p                       976
+set_p_kc_p                      977
+set_i_p_k                       978
+set_i_p_kc                      979
+set_n_p_k                       980
+set_n_p_kc                      981
+set_s_p_k                       982
+set_s_p_kc                      983
+set_p_p_k                       984
+set_p_p_kc                      985
+clone_p_p                       986
+clone_p_p_p                     987
+clone_p_p_pc                    988
+copy_p_p                        989
+null_s                          990
+null_i                          991
+null_p                          992
+null_n                          993
+cleari                          994
+clearn                          995
+clears                          996
+clearp                          997
+ord_i_s                         998
+ord_i_sc                        999
+ord_i_s_i                      1000
+ord_i_sc_i                     1001
+ord_i_s_ic                     1002
+ord_i_sc_ic                    1003
+chr_s_i                        1004
+chr_s_ic                       1005
+chopn_s_i                      1006
+chopn_s_ic                     1007
+chopn_s_s_i                    1008
+chopn_s_sc_i                   1009
+chopn_s_s_ic                   1010
+chopn_s_sc_ic                  1011
+concat_s_s                     1012
+concat_s_sc                    1013
+concat_p_p                     1014
+concat_p_s                     1015
+concat_p_sc                    1016
+concat_s_s_s                   1017
+concat_s_sc_s                  1018
+concat_s_s_sc                  1019
+concat_p_p_s                   1020
+concat_p_p_sc                  1021
+concat_p_p_p                   1022
+repeat_s_s_i                   1023
+repeat_s_sc_i                  1024
+repeat_s_s_ic                  1025
+repeat_s_sc_ic                 1026
+repeat_p_p_i                   1027
+repeat_p_p_ic                  1028
+repeat_p_p_p                   1029
+repeat_p_i                     1030
+repeat_p_ic                    1031
+repeat_p_p                     1032
+length_i_s                     1033
+length_i_sc                    1034
+bytelength_i_s                 1035
+bytelength_i_sc                1036
+pin_s                          1037
+unpin_s                        1038
+substr_s_s_i                   1039
+substr_s_sc_i                  1040
+substr_s_s_ic                  1041
+substr_s_sc_ic                 1042
+substr_s_s_i_i                 1043
+substr_s_sc_i_i                1044
+substr_s_s_ic_i                1045
+substr_s_sc_ic_i               1046
+substr_s_s_i_ic                1047
+substr_s_sc_i_ic               1048
+substr_s_s_ic_ic               1049
+substr_s_sc_ic_ic              1050
+substr_s_s_i_i_s               1051
+substr_s_s_ic_i_s              1052
+substr_s_s_i_ic_s              1053
+substr_s_s_ic_ic_s             1054
+substr_s_s_i_i_sc              1055
+substr_s_s_ic_i_sc             1056
+substr_s_s_i_ic_sc             1057
+substr_s_s_ic_ic_sc            1058
+substr_s_i_i_s                 1059
+substr_s_ic_i_s                1060
+substr_s_i_ic_s                1061
+substr_s_ic_ic_s               1062
+substr_s_i_i_sc                1063
+substr_s_ic_i_sc               1064
+substr_s_i_ic_sc               1065
+substr_s_ic_ic_sc              1066
+substr_s_p_i_i                 1067
+substr_s_p_ic_i                1068
+substr_s_p_i_ic                1069
+substr_s_p_ic_ic               1070
+index_i_s_s                    1071
+index_i_sc_s                   1072
+index_i_s_sc                   1073
+index_i_sc_sc                  1074
+index_i_s_s_i                  1075
+index_i_sc_s_i                 1076
+index_i_s_sc_i                 1077
+index_i_sc_sc_i                1078
+index_i_s_s_ic                 1079
+index_i_sc_s_ic                1080
+index_i_s_sc_ic                1081
+index_i_sc_sc_ic               1082
+sprintf_s_s_p                  1083
+sprintf_s_sc_p                 1084
+sprintf_p_p_p                  1085
+new_s                          1086
+new_s_i                        1087
+new_s_ic                       1088
+stringinfo_i_s_i               1089
+stringinfo_i_sc_i              1090
+stringinfo_i_s_ic              1091
+stringinfo_i_sc_ic             1092
+upcase_s_s                     1093
+upcase_s_sc                    1094
+upcase_s                       1095
+downcase_s_s                   1096
+downcase_s_sc                  1097
+downcase_s                     1098
+titlecase_s_s                  1099
+titlecase_s_sc                 1100
+titlecase_s                    1101
+join_s_s_p                     1102
+join_s_sc_p                    1103
+split_p_s_s                    1104
+split_p_sc_s                   1105
+split_p_s_sc                   1106
+split_p_sc_sc                  1107
+charset_i_s                    1108
+charset_i_sc                   1109
+charsetname_s_i                1110
+charsetname_s_ic               1111
+find_charset_i_s               1112
+find_charset_i_sc              1113
+trans_charset_s_i              1114
+trans_charset_s_ic             1115
+trans_charset_s_s_i            1116
+trans_charset_s_sc_i           1117
+trans_charset_s_s_ic           1118
+trans_charset_s_sc_ic          1119
+encoding_i_s                   1120
+encoding_i_sc                  1121
+encodingname_s_i               1122
+encodingname_s_ic              1123
+find_encoding_i_s              1124
+find_encoding_i_sc             1125
+trans_encoding_s_i             1126
+trans_encoding_s_ic            1127
+trans_encoding_s_s_i           1128
+trans_encoding_s_sc_i          1129
+trans_encoding_s_s_ic          1130
+trans_encoding_s_sc_ic         1131
+is_cclass_i_i_s_i              1132
+is_cclass_i_ic_s_i             1133
+is_cclass_i_i_sc_i             1134
+is_cclass_i_ic_sc_i            1135
+is_cclass_i_i_s_ic             1136
+is_cclass_i_ic_s_ic            1137
+is_cclass_i_i_sc_ic            1138
+is_cclass_i_ic_sc_ic           1139
+find_cclass_i_i_s_i_i          1140
+find_cclass_i_ic_s_i_i         1141
+find_cclass_i_i_sc_i_i         1142
+find_cclass_i_ic_sc_i_i        1143
+find_cclass_i_i_s_ic_i         1144
+find_cclass_i_ic_s_ic_i        1145
+find_cclass_i_i_sc_ic_i        1146
+find_cclass_i_ic_sc_ic_i       1147
+find_cclass_i_i_s_i_ic         1148
+find_cclass_i_ic_s_i_ic        1149
+find_cclass_i_i_sc_i_ic        1150
+find_cclass_i_ic_sc_i_ic       1151
+find_cclass_i_i_s_ic_ic        1152
+find_cclass_i_ic_s_ic_ic       1153
+find_cclass_i_i_sc_ic_ic       1154
+find_cclass_i_ic_sc_ic_ic      1155
+find_not_cclass_i_i_s_i_i      1156
+find_not_cclass_i_ic_s_i_i     1157
+find_not_cclass_i_i_sc_i_i     1158
+find_not_cclass_i_ic_sc_i_i    1159
+find_not_cclass_i_i_s_ic_i     1160
+find_not_cclass_i_ic_s_ic_i    1161
+find_not_cclass_i_i_sc_ic_i    1162
+find_not_cclass_i_ic_sc_ic_i   1163
+find_not_cclass_i_i_s_i_ic     1164
+find_not_cclass_i_ic_s_i_ic    1165
+find_not_cclass_i_i_sc_i_ic    1166
+find_not_cclass_i_ic_sc_i_ic   1167
+find_not_cclass_i_i_s_ic_ic    1168
+find_not_cclass_i_ic_s_ic_ic   1169
+find_not_cclass_i_i_sc_ic_ic   1170
+find_not_cclass_i_ic_sc_ic_ic  1171
+escape_s_s                     1172
+compose_s_s                    1173
+compose_s_sc                   1174
+spawnw_i_s                     1175
+spawnw_i_sc                    1176
+spawnw_i_p                     1177
+err_i                          1178
+err_s                          1179
+err_s_i                        1180
+err_s_ic                       1181
+time_i                         1182
+time_n                         1183
+gmtime_s_i                     1184
+gmtime_s_ic                    1185
+localtime_s_i                  1186
+localtime_s_ic                 1187
+decodetime_p_i                 1188
+decodetime_p_ic                1189
+decodelocaltime_p_i            1190
+decodelocaltime_p_ic           1191
+sysinfo_s_i                    1192
+sysinfo_s_ic                   1193
+sysinfo_i_i                    1194
+sysinfo_i_ic                   1195
+sleep_i                        1196
+sleep_ic                       1197
+sleep_n                        1198
+sleep_nc                       1199
+sizeof_i_i                     1200
+sizeof_i_ic                    1201
+store_lex_s_p                  1202
+store_lex_sc_p                 1203
+find_lex_p_s                   1204
+find_lex_p_sc                  1205
+find_caller_lex_p_s            1206
+find_caller_lex_p_sc           1207
+get_namespace_p                1208
+get_namespace_p_p              1209
+get_namespace_p_pc             1210
+get_hll_namespace_p            1211
+get_hll_namespace_p_p          1212
+get_hll_namespace_p_pc         1213
+get_root_namespace_p           1214
+get_root_namespace_p_p         1215
+get_root_namespace_p_pc        1216
+get_global_p_s                 1217
+get_global_p_sc                1218
+get_global_p_p_s               1219
+get_global_p_pc_s              1220
+get_global_p_p_sc              1221
+get_global_p_pc_sc             1222
+get_hll_global_p_s             1223
+get_hll_global_p_sc            1224
+get_hll_global_p_p_s           1225
+get_hll_global_p_pc_s          1226
+get_hll_global_p_p_sc          1227
+get_hll_global_p_pc_sc         1228
+get_root_global_p_s            1229
+get_root_global_p_sc           1230
+get_root_global_p_p_s          1231
+get_root_global_p_pc_s         1232
+get_root_global_p_p_sc         1233
+get_root_global_p_pc_sc        1234
+set_global_s_p                 1235
+set_global_sc_p                1236
+set_global_p_s_p               1237
+set_global_pc_s_p              1238
+set_global_p_sc_p              1239
+set_global_pc_sc_p             1240
+set_hll_global_s_p             1241
+set_hll_global_sc_p            1242
+set_hll_global_p_s_p           1243
+set_hll_global_pc_s_p          1244
+set_hll_global_p_sc_p          1245
+set_hll_global_pc_sc_p         1246
+set_root_global_s_p            1247
+set_root_global_sc_p           1248
+set_root_global_p_s_p          1249
+set_root_global_pc_s_p         1250
+set_root_global_p_sc_p         1251
+set_root_global_pc_sc_p        1252
+find_name_p_s                  1253
+find_name_p_sc                 1254
+find_sub_not_null_p_s          1255
+find_sub_not_null_p_sc         1256

Modified: branches/io_rewiring/src/ops/set.ops
==============================================================================
--- branches/io_rewiring/src/ops/set.ops	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/ops/set.ops	Sun Jun  7 23:41:42 2009	(r39444)
@@ -490,33 +490,40 @@
 =cut
 
 inline op copy(inout PMC, invar PMC) :base_mem {
-  PMC   * const clone = VTABLE_clone(interp, $2);
-
-  /* Preserve the metadata on the destination. */
-  PMC   * const meta  = VTABLE_getprops(interp, $1);
-
-  /* avoid leaks and unreachable memory by destroying the destination PMC */
-  if (PObj_active_destroy_TEST($1))
-      VTABLE_destroy(interp, $1);
-
-  /* the source PMC knows how to clone itself, but we must reuse the
-   destination header */
-  memmove($1, clone, sizeof (PMC));
-
-  /* don't let the clone's destruction destroy the destination's data */
-  PObj_active_destroy_CLEAR(clone);
-  if (PObj_is_PMC_EXT_TEST(clone))
-    clone->pmc_ext = NULL;
-
-  /* Restore metadata. */
-  if (!PMC_IS_NULL(meta)) {
-      PMC * const iter = VTABLE_get_iter(interp, meta);
-      while (VTABLE_get_bool(interp, iter)) {
-          STRING * const key = VTABLE_shift_string(interp, iter);
-          PMC * const value  = VTABLE_get_pmc_keyed_str(interp, meta, key);
-          VTABLE_setprop(interp, $1, key, value);
-      }
-  }
+    if (PMC_IS_NULL($1)) {
+        opcode_t *dest = expr NEXT();
+        opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+                EXCEPTION_NULL_REG_ACCESS, "Null PMC in copy");
+        goto ADDRESS(handler);
+    }
+    else {
+        PMC   * const clone = VTABLE_clone(interp, $2);
+        /* Preserve the metadata on the destination. */
+        PMC   * const meta  = VTABLE_getprops(interp, $1);
+
+        /* avoid leaks and unreachable memory by destroying the destination PMC */
+        if (PObj_active_destroy_TEST($1))
+            VTABLE_destroy(interp, $1);
+
+        /* the source PMC knows how to clone itself, but we must reuse the
+         * destination header */
+        memmove($1, clone, sizeof (PMC));
+
+        /* don't let the clone's destruction destroy the destination's data */
+        PObj_active_destroy_CLEAR(clone);
+        if (PObj_is_PMC_EXT_TEST(clone))
+            clone->pmc_ext = NULL;
+
+        /* Restore metadata. */
+        if (!PMC_IS_NULL(meta)) {
+            PMC * const iter = VTABLE_get_iter(interp, meta);
+            while (VTABLE_get_bool(interp, iter)) {
+                STRING * const key = VTABLE_shift_string(interp, iter);
+                PMC * const value  = VTABLE_get_pmc_keyed_str(interp, meta, key);
+                VTABLE_setprop(interp, $1, key, value);
+            }
+        }
+    }
 }
 
 =back

Modified: branches/io_rewiring/src/packfile.c
==============================================================================
--- branches/io_rewiring/src/packfile.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/packfile.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -38,7 +38,8 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void byte_code_destroy(SHIM_INTERP, ARGMOD(PackFile_Segment *self))
+static void byte_code_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+        __attribute__nonnull__(1)
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*self);
 
@@ -335,7 +336,8 @@
         __attribute__nonnull__(3);
 
 #define ASSERT_ARGS_byte_code_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
-       PARROT_ASSERT_ARG(self)
+       PARROT_ASSERT_ARG(interp) \
+    || PARROT_ASSERT_ARG(self)
 #define ASSERT_ARGS_byte_code_new __attribute__unused__ int _ASSERT_ARGS_CHECK = 0
 #define ASSERT_ARGS_clone_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = \
        PARROT_ASSERT_ARG(interp) \
@@ -2518,7 +2520,7 @@
 */
 
 static void
-byte_code_destroy(SHIM_INTERP, ARGMOD(PackFile_Segment *self))
+byte_code_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
 {
     ASSERT_ARGS(byte_code_destroy)
     PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
@@ -4694,6 +4696,12 @@
         if (!pf)
             Parrot_ex_throw_from_c_args(interp, NULL, 1,
                 "Unable to append PBC to the current directory");
+
+        mem_sys_free(pf->header);
+        pf->header = NULL;
+        mem_sys_free(pf->dirp);
+        pf->dirp   = NULL;
+
     }
     else {
         STRING *err;
@@ -4764,9 +4772,9 @@
     parrot_split_path_ext(interp, path, &found_path, &found_ext);
     name_length = Parrot_str_length(interp, lang_name);
     found_path = Parrot_str_substr(interp, found_path, -name_length, name_length, NULL, 0);
-    Parrot_add_library_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
+    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
             PARROT_LIB_PATH_INCLUDE);
-    Parrot_add_library_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
+    Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
             PARROT_LIB_PATH_DYNEXT);
 
 

Modified: branches/io_rewiring/src/packfile/pf_items.c
==============================================================================
--- branches/io_rewiring/src/packfile/pf_items.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/packfile/pf_items.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1306,42 +1306,43 @@
 PF_fetch_string(PARROT_INTERP, ARGIN_NULLOK(PackFile *pf), ARGIN(const opcode_t **cursor))
 {
     ASSERT_ARGS(PF_fetch_string)
-    UINTVAL flags;
-    opcode_t charset_nr;
-    size_t size;
-    STRING *s;
+    STRING   *s;
+    UINTVAL   flags    = PF_fetch_opcode(pf, cursor);
     const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
-    const char *charset_name;
+    size_t    size;
+    opcode_t  charset_nr;
 
-    flags = PF_fetch_opcode(pf, cursor);
     /* don't let PBC mess our internals - only constant or not */
-    flags &= (PObj_constant_FLAG | PObj_private7_FLAG);
-    charset_nr = PF_fetch_opcode(pf, cursor);
+    flags      &= (PObj_constant_FLAG | PObj_private7_FLAG);
+    charset_nr  = PF_fetch_opcode(pf, cursor);
 
     /* These may need to be separate */
-    size = (size_t)PF_fetch_opcode(pf, cursor);
+    size        = (size_t)PF_fetch_opcode(pf, cursor);
+
     TRACE_PRINTF(("PF_fetch_string(): flags=0x%04x, ", flags));
     TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
     TRACE_PRINTF(("size=%ld.\n", size));
-    charset_name = Parrot_charset_c_name(interp, charset_nr);
-    s = string_make(interp, (const char *)*cursor, size, charset_name, flags);
+
+    s            = string_make_from_charset(interp, (const char *)*cursor,
+                        size, charset_nr, flags);
 
     /* print only printable characters */
     TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",
                       s->strstart, OFFS(pf, *cursor)));
 
-/*    s = string_make(interp, *cursor, size,
-            encoding_lookup_index(encoding),
-                               flags); */
     TRACE_PRINTF_ALIGN(("-s ROUND_UP_B: cursor=0x%x, size=%d, wordsize=%d\n",
                         (const char *)*cursor + size, size, wordsize));
+
     size = ROUND_UP_B(size, wordsize);
+
     TRACE_PRINTF(("PF_fetch_string(): round size up to %ld.\n", size));
     *((const unsigned char **) (cursor)) += size;
+
     TRACE_PRINTF_ALIGN(("+s ROUND_UP_B: cursor=0x%x, size=%d\n", *cursor, size));
     return s;
 }
 
+
 /*
 
 =item C<opcode_t* PF_store_string(opcode_t *cursor, const STRING *s)>

Modified: branches/io_rewiring/src/pmc.c
==============================================================================
--- branches/io_rewiring/src/pmc.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -225,6 +225,7 @@
     return pmc;
 }
 
+
 /*
 
 =item C<static void check_pmc_reuse_flags(PARROT_INTERP, UINTVAL srcflags,

Modified: branches/io_rewiring/src/pmc/bigint.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/bigint.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/bigint.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -311,7 +311,6 @@
 static void
 bigint_abs(PARROT_INTERP, PMC *self, PMC *dest) {
     BIGINT *bi_self, *bi_dest;
-    pmc_reuse(interp, dest, enum_class_BigInt, 0);
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
     mpz_abs(bi_dest->b, bi_self->b);
@@ -320,7 +319,6 @@
 static void
 bigint_neg(PARROT_INTERP, PMC *self, PMC *dest) {
     BIGINT *bi_self, *bi_dest;
-    pmc_reuse(interp, dest, enum_class_BigInt, 0);
     GETATTR_BigInt_bi(interp, self, bi_self);
     GETATTR_BigInt_bi(interp, dest, bi_dest);
     mpz_neg(bi_dest->b, bi_self->b);
@@ -837,14 +835,14 @@
     }
 
     MULTI PMC *add(BigInt value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_add_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *add(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -859,7 +857,7 @@
     }
 
     VTABLE PMC *add_int(INTVAL value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_add_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -893,20 +891,14 @@
 
 
     MULTI PMC *subtract(BigInt value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_sub_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *subtract(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -921,10 +913,7 @@
     }
 
     VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_sub_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -958,14 +947,14 @@
 
 
     MULTI PMC *multiply(BigInt value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_mul_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *multiply(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -980,7 +969,7 @@
     }
 
     VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_mul_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1011,10 +1000,7 @@
     }
 
     VTABLE PMC *pow_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_pow_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1023,7 +1009,7 @@
     MULTI PMC *pow(PMC *value, PMC *dest) {
         /* XXX only Integer RHS currently */
         const INTVAL r = VTABLE_get_integer(INTERP, value);
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_pow_bigint_int(INTERP, SELF, r, dest);
         return dest;
@@ -1031,10 +1017,7 @@
 
     MULTI PMC *divide(BigInt value, PMC *dest) {
         BIGINT *bi;
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_div_bigint(INTERP, SELF, value, dest);
 #if 0
@@ -1050,10 +1033,7 @@
     }
 
     MULTI PMC *divide(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1068,10 +1048,7 @@
     }
 
     VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_div_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1095,14 +1072,14 @@
     }
 
     MULTI PMC *floor_divide(BigInt value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_fdiv_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *floor_divide(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1117,10 +1094,7 @@
     }
 
     VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_fdiv_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1146,20 +1120,14 @@
     }
 
     MULTI PMC *modulus(BigInt value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_mod_bigint(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *modulus(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1229,7 +1197,7 @@
 */
 
     VTABLE PMC *absolute(PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_abs(INTERP, SELF, dest);
         return dest;
@@ -1253,7 +1221,7 @@
 */
 
     VTABLE PMC *neg(PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_neg(INTERP, SELF, dest);
         return dest;
@@ -1282,10 +1250,7 @@
 */
 
     MULTI PMC *bitwise_shl(BigInt value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_bitwise_shl_bigint_int(INTERP, SELF,
                                       VTABLE_get_integer(INTERP, value),
@@ -1294,10 +1259,7 @@
     }
 
     MULTI PMC *bitwise_shl(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_bitwise_shl_bigint_int(INTERP, SELF,
                 VTABLE_get_integer(interp, value), dest);
@@ -1312,10 +1274,7 @@
     }
 
     VTABLE PMC *bitwise_shl_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_bitwise_shl_bigint_int(INTERP, SELF, value, dest);
         return dest;
@@ -1363,10 +1322,7 @@
 */
 
     MULTI PMC *bitwise_shr(BigInt value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_bitwise_shr_bigint_int(INTERP, SELF,
                                       VTABLE_get_integer(INTERP, value),
@@ -1375,10 +1331,7 @@
     }
 
     MULTI PMC *bitwise_shr(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_bitwise_shr_bigint_int(INTERP, SELF,
                 VTABLE_get_integer(interp, value), dest);
@@ -1394,10 +1347,7 @@
     }
 
     VTABLE PMC *bitwise_shr_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_bitwise_shr_bigint_int(INTERP, SELF, value, dest);
         return dest;

Modified: branches/io_rewiring/src/pmc/bignum.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/bignum.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/bignum.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -546,7 +546,6 @@
 static void
 bignum_abs(PARROT_INTERP, PMC *self, PMC *dest) {
     BIGNUM *bn_self, *bn_dest;
-    pmc_reuse(interp, dest, enum_class_BigNum, 0);
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
     mpf_abs(bn_dest->b, bn_self->b);
@@ -555,7 +554,6 @@
 static void
 bignum_neg(PARROT_INTERP, PMC *self, PMC *dest) {
     BIGNUM *bn_self, *bn_dest;
-    pmc_reuse(interp, dest, enum_class_BigNum, 0);
     GETATTR_BigNum_bn(interp, self, bn_self);
     GETATTR_BigNum_bn(interp, dest, bn_dest);
     mpf_neg(bn_dest->b, bn_self->b);
@@ -1133,8 +1131,12 @@
         bignum_add_bignum(INTERP, SELF, value, SELF);
     }
 
-    MULTI void i_add(FLOATVAL value) {
-        bignum_add_bignum_float(INTERP, SELF, value, SELF);
+    MULTI void i_add(Integer value) {
+        bignum_add_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
+    }
+
+    MULTI void i_add(Float value) {
+        bignum_add_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
     }
 
     MULTI void i_add(DEFAULT value) {
@@ -1149,9 +1151,7 @@
     }
 
     VTABLE void i_add_float(FLOATVAL value) {
-        Parrot_ex_throw_from_c_args(INTERP, NULL,
-            EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-            "BigNum: no multiple dispatch variant 'i_add_float' for FLOATVAL");
+        bignum_add_bignum_float(INTERP, SELF, value, SELF);
     }
 
 /*
@@ -1163,20 +1163,14 @@
 */
 
     MULTI PMC *subtract(BigNum value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_sub_bignum(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *subtract(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1190,10 +1184,7 @@
     }
 
     VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_sub_bignum_int(INTERP, SELF, value, dest);
         return dest;
@@ -1203,8 +1194,12 @@
         bignum_sub_bignum(INTERP, SELF, value, SELF);
     }
 
-    MULTI void i_subtract(FLOATVAL value) {
-        bignum_sub_bignum_float(INTERP, SELF, value, SELF);
+    MULTI void i_subtract(Integer value) {
+        bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
+    }
+
+    MULTI void i_subtract(Float value) {
+        bignum_sub_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
     }
 
     MULTI void i_subtract(DEFAULT value) {
@@ -1219,9 +1214,7 @@
     }
 
     VTABLE void i_subtract_float(FLOATVAL value) {
-        Parrot_ex_throw_from_c_args(INTERP, NULL,
-            EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-            "BigNum: no multiple dispatch variant 'i_subtract_float' for FLOATVAL");
+        bignum_sub_bignum_float(INTERP, SELF, value, SELF);
     }
 
 /*
@@ -1264,8 +1257,8 @@
         bignum_mul_bignum(INTERP, SELF, value, SELF);
     }
 
-    MULTI void i_multiply(FLOATVAL value) {
-        bignum_mul_bignum_float(INTERP, SELF, value, SELF);
+    MULTI void i_multiply(Float value) {
+        bignum_mul_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
     }
 
     MULTI void i_multiply(Integer value) {
@@ -1284,9 +1277,7 @@
     }
 
     VTABLE void i_multiply_float(FLOATVAL value) {
-        Parrot_ex_throw_from_c_args(INTERP, NULL,
-            EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-            "BigNum: no multiple dispatch variant 'i_multiply_float' for FLOATVAL");
+        bignum_mul_bignum_float(INTERP, SELF, value, SELF);
     }
 
 /*
@@ -1298,10 +1289,7 @@
 */
 
     VTABLE PMC *pow_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_pow_bignum_int(INTERP, SELF, value, dest);
         return dest;
@@ -1326,10 +1314,7 @@
 
     MULTI PMC *divide(BigNum value, PMC *dest) {
         BIGNUM *bn;
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_div_bignum(INTERP, SELF, value, dest);
 #if 0
@@ -1345,10 +1330,7 @@
     }
 
     MULTI PMC *divide(Integer value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1362,10 +1344,7 @@
     }
 
     VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_div_bignum_int(INTERP, SELF, value, dest);
         return dest;
@@ -1377,6 +1356,9 @@
     MULTI void i_divide(Integer value) {
         bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
     }
+    MULTI void i_divide(Float value) {
+        bignum_div_bignum_float(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+    }
     MULTI void i_divide(DEFAULT value) {
          Parrot_ex_throw_from_c_args(INTERP, NULL,
             EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
@@ -1397,14 +1379,14 @@
 */
 
     MULTI PMC *floor_divide(BigNum value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_fdiv_bignum(INTERP, SELF, value, dest);
         return dest;
     }
 
     MULTI PMC *floor_divide(Integer value, PMC *dest) {
-        dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_fdiv_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
         return dest;
@@ -1418,10 +1400,7 @@
     }
 
     VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
-        if (dest)
-            pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, SELF->vtable->base_type);
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bignum_fdiv_bignum_int(INTERP, SELF, value, dest);
         return dest;

Modified: branches/io_rewiring/src/pmc/continuation.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/continuation.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/continuation.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -134,11 +134,17 @@
 */
 
     VTABLE PMC *clone() {
-        Parrot_cont * const cc_self = PMC_cont(SELF);
-        Parrot_cont * const cc      = new_continuation(INTERP, cc_self);
-        PMC         * const ret     = pmc_new(INTERP, enum_class_Continuation);
+        Parrot_cont * const cc_self  = PMC_cont(SELF);
+        Parrot_cont * const cc       = new_continuation(INTERP, cc_self);
+        PMC         * const ret      = pmc_new(INTERP, enum_class_Continuation);
+        Parrot_cont * const ret_cont = PMC_cont(ret);
 
         PObj_custom_mark_destroy_SETALL(ret);
+
+        /* free ret's PMC_cont */
+        Parrot_free_context(interp, ret_cont->from_ctx, 1);
+        mem_sys_free(ret_cont);
+
         cc->runloop_id = cc_self->runloop_id;
         PMC_cont(ret)  = cc;
 

Modified: branches/io_rewiring/src/pmc/coroutine.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/coroutine.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/coroutine.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -8,7 +8,7 @@
 
 =head1 DESCRIPTION
 
-C<Coroutine> extends C<Continuation> to provide a subroutine that can
+C<Coroutine> extends C<Sub> to provide a subroutine that can
 stop in the middle, and start back up later at the point at which it
 stopped. See the L<Glossary|docs/glossary.pod> for more information.
 
@@ -76,41 +76,33 @@
 
     VTABLE void init() {
         Parrot_Coroutine_attributes *attrs =
-            mem_allocate_zeroed_typed(Parrot_Coroutine_attributes);
-        attrs->sub = (Parrot_sub*)new_coroutine(INTERP);
+            mem_allocate_typed(Parrot_Coroutine_attributes);
+
+        attrs->sub     = (Parrot_sub *)new_coroutine(INTERP);
         PMC_data(SELF) = attrs;
+
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 
+
 /*
 
-=item C<void destroy()>
+=item C<PMC * clone()>
 
-Destroys the coroutine.
+Clones the coroutine.
 
 =cut
 
 */
 
-    VTABLE void destroy() {
-        Parrot_Coroutine_attributes *attrs = PARROT_COROUTINE(SELF);
-        Parrot_sub                  *sub   = attrs->sub;
-
-        if (sub->ctx)
-            Parrot_free_context(interp, sub->ctx, 1);
-
-        SUPER();
-    }
-
     VTABLE PMC *clone() {
-        Parrot_coro * const coro_sub = mem_allocate_typed(Parrot_coro);
         PMC         * const ret      = pmc_new(INTERP, SELF->vtable->base_type);
         Parrot_sub         *sub;
+        Parrot_sub         *coro_sub;
 
         PObj_custom_mark_destroy_SETALL(ret);
 
-        SET_ATTR_sub(INTERP, ret, (Parrot_sub *)coro_sub);
-
+        PMC_get_sub(INTERP, ret,  coro_sub);
         PMC_get_sub(INTERP, SELF, sub);
         memcpy(coro_sub, sub, sizeof (Parrot_coro));
 
@@ -132,7 +124,7 @@
     VTABLE opcode_t *invoke(void *next) {
         PackFile_ByteCode  *wanted_seg;
         Parrot_Coroutine_attributes *attrs = PARROT_COROUTINE(SELF);
-        Parrot_coro * const co = (Parrot_coro*)attrs->sub;
+        Parrot_coro * const co = (Parrot_coro *)attrs->sub;
         opcode_t    * dest     = co->address;
 
         if (Interp_trace_TEST(INTERP, PARROT_TRACE_SUB_CALL_FLAG))
@@ -262,17 +254,15 @@
 
     VTABLE void mark() {
         Parrot_Coroutine_attributes *attrs = PARROT_COROUTINE(SELF);
-        Parrot_coro * const co = (Parrot_coro *)attrs->sub;
+        Parrot_coro * const          co    = (Parrot_coro *)attrs->sub;
 
+        /* co->ctx marked in SUPER(), so do not mark here */
         if (co) {
-            if (co->ctx)
-                mark_context(INTERP, co->ctx);
             if (co->dynamic_state)
                 mark_stack(INTERP, co->dynamic_state);
 
+            SUPER();
         }
-
-        SUPER();
     }
 }
 

Modified: branches/io_rewiring/src/pmc/eventhandler.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/eventhandler.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/eventhandler.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2007-2008, Parrot Foundation.
+Copyright (C) 2007-2009, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -138,25 +138,8 @@
 
             if (! PMC_IS_NULL(e->code))
                 Parrot_gc_mark_PObj_alive(INTERP, (PObj *)e->code);
-        }
-    }
-
-/*
 
-=item C<void destroy()>
-
-Frees any memory held by this PMC.
-
-=cut
-
-*/
-
-    VTABLE void destroy() {
-        Parrot_EventHandler_attributes *e = PMC_data_typed(SELF, Parrot_EventHandler_attributes *);
-
-        if (e) {
-            mem_sys_free(e);
-            PMC_data(SELF) = NULL;
+            SUPER();
         }
     }
 

Modified: branches/io_rewiring/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/fixedintegerarray.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/fixedintegerarray.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -659,6 +659,7 @@
         Parrot_FixedIntegerArray_attributes *attrs =
             mem_allocate_zeroed_typed(Parrot_FixedIntegerArray_attributes);
         PMC_data(SELF) = attrs;
+        PObj_active_destroy_SET(SELF);
 
         if (info->extra_flags == EXTRA_IS_NULL) {
             IMAGE_IO * const io = info->image_io;

Modified: branches/io_rewiring/src/pmc/float.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/float.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/float.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -33,8 +33,11 @@
 
     VTABLE void init() {
         Parrot_Float_attributes * const fattr = mem_allocate_zeroed_typed(Parrot_Float_attributes);
-        fattr->fv = 0.0;
+
+        fattr->fv      = 0.0;
         PMC_data(SELF) = fattr;
+
+        PObj_active_destroy_SET(SELF);
     }
 /*
 

Modified: branches/io_rewiring/src/pmc/integer.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/integer.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/integer.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -364,7 +364,7 @@
 
     MULTI PMC *add(Complex value, PMC *dest) {
         const INTVAL a = SELF.get_integer();
-        dest           = pmc_new(INTERP, VTABLE_type(interp, value));
+        dest           = pmc_new(INTERP, VTABLE_type(INTERP, value));
 
         VTABLE_set_number_native(INTERP, dest,
                 a + VTABLE_get_number_keyed_int(INTERP, value, 0));
@@ -425,32 +425,26 @@
 
 */
 
-    VTABLE void i_add(PMC *value) {
-        const INTVAL type = value->vtable->base_type;
+    MULTI void i_add(Integer value) {
+        STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value));
+    }
 
-        switch (type) {
-            case enum_class_Integer:
-                STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value));
-                break;
 
-            case enum_class_Complex:
-                pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
-                VTABLE_set_number_native(INTERP, SELF,
-                        SELF.get_integer() + VTABLE_get_number(INTERP, value));
-                break;
+    MULTI void i_add(Complex value) {
+        const INTVAL a = SELF.get_integer();
 
-            default:
-                VTABLE_set_number_native(INTERP, SELF,
-                        SELF.get_integer() + VTABLE_get_number(INTERP, value));
-                break;
-        }
+        pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
+        VTABLE_set_number_native(INTERP, SELF,
+                SELF.get_integer() + VTABLE_get_number(INTERP, value));
     }
 
+
     MULTI void i_add(DEFAULT value) {
         VTABLE_set_number_native(INTERP, SELF,
                 SELF.get_integer() + VTABLE_get_number(INTERP, value));
     }
 
+
     VTABLE void i_add_int(INTVAL b) {
         const INTVAL a = SELF.get_integer();
         const INTVAL c = a + b;

Modified: branches/io_rewiring/src/pmc/lexpad.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/lexpad.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/lexpad.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -80,6 +80,9 @@
     VTABLE void init_pmc(PMC *lexinfo) {
         Parrot_LexPad_attributes * const attrs =
             mem_allocate_zeroed_typed(Parrot_LexPad_attributes);
+
+        PObj_active_destroy_SET(SELF);
+
         attrs->lexinfo = lexinfo;
         PMC_data(SELF) = attrs;
     }

Modified: branches/io_rewiring/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/resizablestringarray.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/resizablestringarray.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -36,7 +36,6 @@
 */
 
     VTABLE void init() {
-
         Parrot_ResizableStringArray_attributes *attrs =
             mem_allocate_zeroed_typed(Parrot_ResizableStringArray_attributes);
 

Modified: branches/io_rewiring/src/pmc/scalar.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/scalar.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/scalar.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -76,7 +76,7 @@
             dest = pmc_new(interp, enum_class_BigInt);
 
         VTABLE_set_integer_native(interp, dest, base);
-        interp->vtables[enum_class_BigInt]->bitwise_shl_int(interp, dest, shift_amount, dest);
+        VTABLE_i_bitwise_shl_int(interp, dest, shift_amount);
     }
 
     return dest;
@@ -257,10 +257,7 @@
 
     MULTI PMC *subtract(Complex value, PMC *dest) {
         const FLOATVAL a = SELF.get_number();
-        if (dest)
-            pmc_reuse(INTERP, dest, value->vtable->base_type, 0);
-        else
-            dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
+        dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
 
         VTABLE_set_number_native(INTERP, dest,
                 a - VTABLE_get_number_keyed_int(INTERP, value, 0));
@@ -866,7 +863,7 @@
         return dest;
     }
 
-    MULTI PMC *bitwise_xor_int(INTVAL value, PMC *dest) {
+    VTABLE PMC *bitwise_xor_int(INTVAL value, PMC *dest) {
         const INTVAL result = SELF.get_integer() ^ value;
 
         dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));

Modified: branches/io_rewiring/src/pmc/string.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/string.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/string.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -241,8 +241,10 @@
     VTABLE void set_string_native(STRING *value) {
         /* Only allow constant PMCs to embed constant strings */
         if (PObj_constant_TEST(SELF) && !PObj_constant_TEST(value)) {
-             const char *copy = Parrot_str_to_cstring(INTERP, value);
-             value            = Parrot_str_new_constant(INTERP, copy);
+            char *copy = Parrot_str_to_cstring(INTERP, value);
+            value      = Parrot_str_new_init(INTERP, copy, strlen(copy),
+                    PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, PObj_constant_FLAG);
+            Parrot_str_free_cstring(copy);
         }
 
         SET_ATTR_str_val(INTERP, SELF, value);
@@ -259,8 +261,11 @@
 */
 
     VTABLE void assign_string_native(STRING *value) {
-        SET_ATTR_str_val(INTERP, SELF,
-                Parrot_str_set(INTERP, SELF.get_string(), value));
+        if (!STRING_IS_NULL(value))
+            SET_ATTR_str_val(INTERP, SELF,
+                    Parrot_str_set(INTERP, SELF.get_string(), value));
+        else
+            SET_ATTR_str_val(INTERP, SELF, NULL);
     }
 
 /*

Modified: branches/io_rewiring/src/pmc/stringhandle.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/stringhandle.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/stringhandle.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -11,15 +11,40 @@
 The StringHandle PMC performs I/O operations, but on an internal string rather
 than an external file. Commonly used as a mock FileHandle for testing.
 
-=head2 Vtable Functions
+=cut
+
+*/
+
+#include "../src/io/io_private.h"
+
+PARROT_INLINE
+static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(STRING *s));
+
+/*
+
+=head2 Internal Functions
 
 =over 4
 
+=item C<static int encoding_is_utf8()>
+
+Helper function for internal usage. Return 1 if the string argument is
+not null and has utf8 encoding, 0 otherwise.
+
+=back
+
 =cut
 
 */
 
-#include "../src/io/io_private.h"
+PARROT_INLINE
+static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(STRING *s))
+{
+    if (STRING_IS_NULL(s))
+        return 0;
+    else
+        return Parrot_str_equal(interp, s, CONST_STRING(interp, "utf8"));
+}
 
 pmclass StringHandle extends Handle need_ext {
     ATTR INTVAL  flags;               /* Filehandle flags             */
@@ -31,6 +56,10 @@
 
 /*
 
+=head2 Vtable Functions
+
+=over 4
+
 =item C<void init()>
 
 Initializes a newly created StringHandle object.
@@ -176,8 +205,7 @@
             STRING *encoding;
 
             GET_ATTR_encoding(INTERP, SELF, encoding);
-            if (!STRING_IS_NULL(encoding)
-            &&  Parrot_str_equal(INTERP, encoding, CONST_STRING(INTERP, "utf8")))
+            if (encoding_is_utf8(INTERP, encoding))
                 new_string = string_make(INTERP, "", 0, "unicode", 0);
             else
                 new_string = Parrot_str_new(INTERP, "", 0);
@@ -294,9 +322,7 @@
         if (STRING_IS_NULL(string_result)) {
             STRING *encoding;
             GET_ATTR_encoding(INTERP, SELF, encoding);
-            if (!STRING_IS_NULL(encoding) &&
-                    Parrot_str_equal(INTERP, encoding,
-                        Parrot_str_new_constant(INTERP, "utf8")))
+            if (encoding_is_utf8(INTERP, encoding))
                 string_result = string_make(INTERP, "", 0, "unicode", 0);
             else
                 string_result = Parrot_str_new_constant(INTERP, "");
@@ -383,9 +409,9 @@
 
     METHOD buffer_type(STRING *new_type :optional, INTVAL got_type :opt_flag) {
         INTVAL flags;
-        STRING * const nobuffer_string   = Parrot_str_new_constant(INTERP, "unbuffered");
-        STRING * const linebuffer_string = Parrot_str_new_constant(INTERP, "line-buffered");
-        STRING * const fullbuffer_string = Parrot_str_new_constant(INTERP, "full-buffered");
+        STRING * const nobuffer_string   = CONST_STRING(INTERP, "unbuffered");
+        STRING * const linebuffer_string = CONST_STRING(INTERP, "line-buffered");
+        STRING * const fullbuffer_string = CONST_STRING(INTERP, "full-buffered");
 
         GET_ATTR_flags(INTERP, SELF, flags);
 

Modified: branches/io_rewiring/src/pmc/sub.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/sub.pmc	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc/sub.pmc	Sun Jun  7 23:41:42 2009	(r39444)
@@ -120,9 +120,10 @@
     VTABLE STRING *get_string() {
         Parrot_sub *sub;
         PMC_get_sub(INTERP, SELF, sub);
-        if (sub->name != NULL) {
+
+        if (sub->name)
             return Parrot_str_copy(INTERP, sub->name);
-        }
+
         return NULL;
     }
 
@@ -260,10 +261,8 @@
 
         PARROT_ASSERT(!PMC_IS_NULL(ccont));
 
-        /*
-         * plain subroutine call
-         * create new context, place it in interpreter
-         */
+        /* plain subroutine call
+         * create new context, place it in interpreter */
         context               = Parrot_set_new_context(INTERP, sub->n_regs_used);
         context->current_sub  = SELF;
         context->caller_ctx   = caller_ctx;
@@ -280,8 +279,7 @@
 
         /* if this is an outer sub, then we need to set sub->ctx
          * to the new context (refcounted) and convert the
-         * retcontinuation to a normal continuation.
-         */
+         * retcontinuation to a normal continuation.  */
         if (PObj_get_FLAGS(SELF) & SUB_FLAG_IS_OUTER) {
             /* release any previously held context */
             if (sub->ctx)
@@ -360,9 +358,9 @@
             Parrot_switch_to_cs(INTERP, sub->seg, 1);
 
         if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
-            if (!(*pc == PARROT_OP_get_params_pc ||
-                        (*pc == PARROT_OP_push_eh_ic &&
-                         pc[2] == PARROT_OP_get_params_pc))) {
+            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 */
                 --context->recursion_depth;
@@ -395,9 +393,17 @@
         /* we have to mark it ourselves */
         PObj_custom_mark_destroy_SETALL(ret);
 
-        /* first set the sub struct, Parrot_str_copy may cause GC */
         PMC_get_sub(INTERP, ret, sub);
+
+        /* release any previously held contexts */
+        if (sub->ctx)
+            Parrot_free_context(INTERP, sub->ctx, 1);
+        if (sub->outer_ctx)
+            Parrot_free_context(INTERP, sub->outer_ctx, 1);
+
         PMC_get_sub(INTERP, SELF, dest_sub);
+
+        /* first set the sub struct, Parrot_str_copy may cause GC */
         *sub = *dest_sub;
 
         if (sub->name)
@@ -406,6 +412,7 @@
         /* Be sure not to share arg_info. */
         dest_sub->arg_info = NULL;
 
+        /* mark any newly held contexts */
         if (sub->ctx)
             Parrot_context_ref(INTERP, sub->ctx);
         if (sub->outer_ctx)
@@ -433,18 +440,28 @@
         if (other->vtable->base_type == SELF->vtable->base_type) {
             Parrot_sub *my_sub;
             Parrot_sub *other_sub;
-
-            /* copy the sub struct */
             PMC_get_sub(INTERP, SELF, my_sub);
             PMC_get_sub(INTERP, other, other_sub);
-            memcpy(my_sub, other_sub, sizeof (struct Parrot_sub));
+
+            /* Increase reference count of destination before
+             * freeing the one in self, to avoid problems in
+             * case of self assignment */
+            if (other_sub->ctx)
+                Parrot_context_ref(interp, other_sub->ctx);
+            /* get rid of this context, if attached */
+            if (my_sub->ctx)
+                Parrot_free_context(INTERP, my_sub->ctx, 1);
+
+            /* copy the sub struct */
+            memmove(my_sub, other_sub, sizeof (Parrot_sub));
 
             /* copy the name so it's a different string in memory */
-            if (my_sub->name != NULL)
+            if (my_sub->name)
                 my_sub->name = Parrot_str_copy(INTERP, my_sub->name);
         }
         else
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+            Parrot_ex_throw_from_c_args(INTERP, NULL,
+                EXCEPTION_INVALID_OPERATION,
                 "Can't assign a non-Sub type to a Sub");
     }
 
@@ -500,15 +517,14 @@
 */
 
     MULTI INTVAL is_equal(PMC *value) {
-
         Parrot_sub *my_sub, *value_sub;
 
         PMC_get_sub(INTERP, SELF, my_sub);
         PMC_get_sub(INTERP, value, value_sub);
 
-        return SELF->vtable == value->vtable &&
-            (my_sub)->start_offs == (value_sub)->start_offs &&
-            (my_sub)->seg        == (value_sub)->seg;
+        return SELF->vtable         == value->vtable
+        &&     (my_sub)->start_offs == (value_sub)->start_offs
+        &&     (my_sub)->seg        == (value_sub)->seg;
     }
 
 /*
@@ -630,6 +646,7 @@
             int    i;
 
             PMC_get_sub(INTERP, SELF, sub);
+
             /* we get relative offsets */
             sub->start_offs   = (size_t) VTABLE_shift_integer(INTERP, io);
             sub->end_offs     = (size_t) VTABLE_shift_integer(INTERP, io);
@@ -666,13 +683,13 @@
     {
         /* Create a hash, then use inspect_str to get all of the data to
          * fill it up with. */
-        PMC    * const metadata    = pmc_new(interp, enum_class_Hash);
-        STRING * const pos_required_str    = CONST_STRING(interp, "pos_required");
-        STRING * const pos_optional_str      = CONST_STRING(interp, "pos_optional");
-        STRING * const named_required_str   = CONST_STRING(interp, "named_required");
-        STRING * const named_optional_str   = CONST_STRING(interp, "named_optional");
-        STRING * const pos_slurpy_str = CONST_STRING(interp, "pos_slurpy");
-        STRING * const named_slurpy_str   = CONST_STRING(interp, "named_slurpy");
+        PMC    * const metadata          = pmc_new(interp, enum_class_Hash);
+        STRING * const pos_required_str  = CONST_STRING(interp, "pos_required");
+        STRING * const pos_optional_str  = CONST_STRING(interp, "pos_optional");
+        STRING * const named_required_str = CONST_STRING(interp, "named_required");
+        STRING * const named_optional_str = CONST_STRING(interp, "named_optional");
+        STRING * const pos_slurpy_str    = CONST_STRING(interp, "pos_slurpy");
+        STRING * const named_slurpy_str  = CONST_STRING(interp, "named_slurpy");
 
         VTABLE_set_pmc_keyed_str(interp, metadata, pos_required_str,
             VTABLE_inspect_str(interp, SELF, pos_required_str));
@@ -737,12 +754,13 @@
     VTABLE PMC *inspect_str(STRING *what)
     {
         Parrot_sub *sub;
-        INTVAL count_found = -1;
-        PMC *retval;
+        PMC        *retval;
+        INTVAL      count_found = -1;
 
         PMC_get_sub(INTERP, SELF, sub);
+
         /* If the argument info hasn't been generated yet, generate it. */
-        if (sub->arg_info == NULL) {
+        if (!sub->arg_info) {
             /* Get pointer into the bytecode where this sub starts. */
             opcode_t *pc = sub->seg->base.data + sub->start_offs;
 
@@ -751,8 +769,8 @@
 
             /* If the first instruction is a get_params... */
             if (*pc == PARROT_OP_get_params_pc) {
-                int     i, sig_length;
                 PMC    *sig;
+                int     i, sig_length;
 
                 /* Get the signature (the next thing in the bytecode). */
                 pc++;
@@ -761,6 +779,7 @@
 
                 /* Iterate over the signature and compute argument counts. */
                 sig_length = VTABLE_elements(INTERP, sig);
+
                 for (i = 0; i < sig_length; i++) {
                     int sig_item = VTABLE_get_integer_keyed_int(INTERP, sig, i);;
                     if (PARROT_ARG_SLURPY_ARRAY_ISSET(sig_item)){
@@ -908,6 +927,15 @@
         RETURN(PMC *lexinfo);
     }
 
+    METHOD get_subid() {
+        Parrot_sub *sub;
+        STRING     *subid;
+
+        PMC_get_sub(INTERP, SELF, sub);
+        subid = sub->subid ? sub->subid : CONST_STRING(interp, "");
+        RETURN(STRING *subid);
+    }
+
     METHOD get_outer() {
         Parrot_sub *sub;
         PMC        *outersub;

Modified: branches/io_rewiring/src/pmc_freeze.c
==============================================================================
--- branches/io_rewiring/src/pmc_freeze.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/pmc_freeze.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -742,8 +742,11 @@
 op_append(PARROT_INTERP, ARGIN(STRING *s), opcode_t b, size_t len)
 {
     ASSERT_ARGS(op_append)
+    char *str_pos;
+
     op_check_size(interp, s, len);
-    *((opcode_t *)((ptrcast_t)s->strstart + s->bufused)) = b;
+    str_pos = s->strstart + s->bufused;
+    *((opcode_t *)(str_pos)) = b;
     s->bufused += len;
     s->strlen += len;
 }
@@ -1759,7 +1762,6 @@
      * collected under us.
      */
     if (1 || (Parrot_str_byte_length(interp, image) > THAW_BLOCK_GC_SIZE)) {
-        Parrot_gc_mark_and_sweep(interp, 1);
         Parrot_block_GC_mark(interp);
         Parrot_block_GC_sweep(interp);
         gc_block = 1;

Modified: branches/io_rewiring/src/runcore/main.c
==============================================================================
--- branches/io_rewiring/src/runcore/main.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/runcore/main.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -49,7 +49,7 @@
 #include "../pmc/pmc_parrotlibrary.h"
 
 
-/* HEADERIZER HFILE: none */
+/* HEADERIZER HFILE: include/parrot/runcore_api.h */
 /* XXX Needs to get done at the same time as the other interpreter files */
 
 /* HEADERIZER BEGIN: static */
@@ -300,6 +300,7 @@
 void
 do_prederef(void **pc_prederef, PARROT_INTERP, int type)
 {
+    ASSERT_ARGS(do_prederef)
     const size_t     offset = pc_prederef - interp->code->prederef.code;
     opcode_t * const pc     = ((opcode_t *)interp->code->base.data) + offset;
     const op_info_t *opinfo;
@@ -620,6 +621,7 @@
 void
 exec_init_prederef(PARROT_INTERP, void *prederef_arena)
 {
+    ASSERT_ARGS(exec_init_prederef)
     load_prederef(interp, PARROT_CGP_CORE);
 
     if (!interp->code->prederef.code) {
@@ -648,6 +650,7 @@
 void *
 init_jit(PARROT_INTERP, SHIM(opcode_t *pc))
 {
+    ASSERT_ARGS(init_jit)
 #if JIT_CAPABLE
     opcode_t          *code_start;
     UINTVAL            code_size;          /* in opcodes */
@@ -695,7 +698,9 @@
 void
 prepare_for_run(PARROT_INTERP)
 {
+    ASSERT_ARGS(prepare_for_run)
     void *ignored;
+
     switch (interp->run_core) {
         case PARROT_JIT_CORE:
             ignored = init_jit(interp, interp->code->base.data);
@@ -892,6 +897,7 @@
 void
 runops_int(PARROT_INTERP, size_t offset)
 {
+    ASSERT_ARGS(runops_int)
     opcode_t *(*core) (PARROT_INTERP, opcode_t *) = NULL;
 
     /* setup event function ptrs */
@@ -1009,6 +1015,7 @@
 void
 Parrot_setup_event_func_ptrs(PARROT_INTERP)
 {
+    ASSERT_ARGS(Parrot_setup_event_func_ptrs)
     const size_t       n         = interp->op_count;
     const oplib_init_f init_func = get_core_op_lib_init(interp, interp->run_core);
     op_lib_t * const   lib       = init_func(1);
@@ -1034,6 +1041,36 @@
 
 /*
 
+=item C<void Parrot_runcore_destroy(PARROT_INTERP)>
+
+Shuts down the runcores and deallocates any dynops memory.
+
+=cut
+
+*/
+
+void
+Parrot_runcore_destroy(PARROT_INTERP)
+{
+    ASSERT_ARGS(Parrot_runcore_destroy)
+    op_lib_t    *cg_lib;
+
+#ifdef HAVE_COMPUTED_GOTO
+    cg_lib = PARROT_CORE_CGP_OPLIB_INIT(1);
+    if (cg_lib->op_func_table)
+        mem_sys_free(cg_lib->op_func_table);
+    cg_lib->op_func_table = NULL;
+
+    cg_lib = PARROT_CORE_CG_OPLIB_INIT(1);
+    if (cg_lib->op_func_table)
+        mem_sys_free(cg_lib->op_func_table);
+    cg_lib->op_func_table = NULL;
+#endif
+}
+
+
+/*
+
 =back
 
 =head2 Dynamic Loading Functions
@@ -1051,6 +1088,7 @@
 void
 dynop_register(PARROT_INTERP, PMC *lib_pmc)
 {
+    ASSERT_ARGS(dynop_register)
     op_lib_t *lib, *core;
     oplib_init_f init_func;
     op_func_t *new_func_table, *new_evc_func_table;
@@ -1341,6 +1379,7 @@
 void
 disable_event_checking(PARROT_INTERP)
 {
+    ASSERT_ARGS(disable_event_checking)
     /* restore func table */
     PARROT_ASSERT(interp->save_func_table);
     notify_func_table(interp, interp->save_func_table, 0);
@@ -1366,6 +1405,7 @@
 void
 enable_event_checking(PARROT_INTERP)
 {
+    ASSERT_ARGS(enable_event_checking)
     /* put table in place */
     notify_func_table(interp, interp->evc_func_table, 1);
 }

Modified: branches/io_rewiring/src/runcore/trace.c
==============================================================================
--- branches/io_rewiring/src/runcore/trace.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/runcore/trace.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -45,7 +45,7 @@
 /* HEADERIZER END: static */
 
 /*
- 
+
 =item C<Interp * debugger_or_interp(PARROT_INTERP)>
 
 Get debugger if available
@@ -55,6 +55,8 @@
 PARROT_CANNOT_RETURN_NULL
 Interp *
 debugger_or_interp(PARROT_INTERP) {
+    ASSERT_ARGS(debugger_or_interp)
+
     return interp->pdb && interp->pdb->debugger
             ? interp->pdb->debugger
             : interp;

Modified: branches/io_rewiring/src/string/api.c
==============================================================================
--- branches/io_rewiring/src/string/api.c	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/src/string/api.c	Sun Jun  7 23:41:42 2009	(r39444)
@@ -684,6 +684,7 @@
     return s;
 }
 
+
 /*
 
 =item C<STRING * string_make(PARROT_INTERP, const char *buffer, UINTVAL len,
@@ -720,7 +721,7 @@
         UINTVAL len, ARGIN_NULLOK(const char *charset_name), UINTVAL flags)
 {
     ASSERT_ARGS(string_make)
-    const CHARSET  *charset;
+    const CHARSET *charset;
 
     if (!charset_name)
         charset_name = "ascii";
@@ -731,12 +732,57 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
             "Can't make '%s' charset strings", charset_name);
 
-
     return Parrot_str_new_init(interp, buffer, len,
         charset->preferred_encoding, charset, flags);
 
 }
 
+
+/*
+
+=item C<STRING * string_make_from_charset(PARROT_INTERP, const char *buffer,
+UINTVAL len, INTVAL charset_nr, UINTVAL flags)>
+
+Creates and returns a new Parrot string using C<len> bytes of string data read
+from C<buffer>.
+
+The value of C<charset_name> specifies the string's representation.  It must be
+a valid charset identifier.
+
+    'iso-8859-1'
+    'ascii'
+    'binary'
+    'unicode'
+
+The encoding is implicitly guessed; C<unicode> implies the C<utf-8> encoding,
+and the other three assume C<fixed-8> encoding.
+
+The value of C<flags> is optionally one or more C<PObj_*> flags C<OR>-ed
+together.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING *
+string_make_from_charset(PARROT_INTERP, ARGIN_NULLOK(const char *buffer),
+    UINTVAL len, INTVAL charset_nr, UINTVAL flags)
+{
+    ASSERT_ARGS(string_make_from_charset)
+    const CHARSET *charset = Parrot_get_charset(interp, charset_nr);
+
+    if (!charset)
+        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+            "Invalid charset number '%d' specified", charset_nr);
+
+    return Parrot_str_new_init(interp, buffer, len,
+        charset->preferred_encoding, charset, flags);
+}
+
+
 /*
 
 =item C<STRING * Parrot_str_new_init(PARROT_INTERP, const char *buffer, UINTVAL
@@ -2358,19 +2404,27 @@
 Parrot_str_to_hashval(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
 {
     ASSERT_ARGS(Parrot_str_to_hashval)
-    register size_t h;
-    const UINTVAL seed = interp->hash_seed;
+    String_iter iter;
+    UINTVAL     offs;
+    size_t      hashval = interp->hash_seed;
 
     if (!s)
-        return seed;
+        return hashval;
 
     /* ZZZZZ workaround for something not setting up encodings right */
     saneify_string(s);
 
-    h          = CHARSET_COMPUTE_HASH(interp, s, seed);
-    s->hashval = h;
+    ENCODING_ITER_INIT(interp, s, &iter);
+
+    for (offs = 0; offs < s->strlen; ++offs) {
+        const UINTVAL c = iter.get_and_advance(interp, &iter);
+        hashval += hashval << 5;
+        hashval += c;
+    }
+
+    s->hashval = hashval;
 
-    return h;
+    return hashval;
 }
 
 

Modified: branches/io_rewiring/t/compilers/imcc/syn/file.t
==============================================================================
--- branches/io_rewiring/t/compilers/imcc/syn/file.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/compilers/imcc/syn/file.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -33,7 +33,8 @@
 
 my $ended_ok = 0;
 
-my ($FOO, $temp_pasm) = create_tempfile( SUFFIX => '.pasm', DIR => cwd(), UNLINK => 1 );
+#my ($FOO, $temp_pasm) = create_tempfile( SUFFIX => '.pasm', DIR => cwd(), UNLINK => 1 );
+my ($FOO, $temp_pasm) = create_tempfile( SUFFIX => '.pasm', UNLINK => 1 );
 
 print $FOO <<'ENDF';
   .macro_const BAR 42

Modified: branches/io_rewiring/t/compilers/imcc/syn/pcc.t
==============================================================================
--- branches/io_rewiring/t/compilers/imcc/syn/pcc.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/compilers/imcc/syn/pcc.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,5 +1,5 @@
 #!perl
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -7,7 +7,7 @@
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
 use Parrot::Config;
-use Parrot::Test tests => 22;
+use Parrot::Test tests => 23;
 
 ##############################
 # Parrot Calling Conventions
@@ -542,6 +542,27 @@
 
 pir_output_is( $too_many_params, "didn't segfault\n", "calling a sub with way too many params" );
 
+pir_output_is( <<'CODE', <<'OUT', 'Unicode allowed in method names, TT #730' );
+.sub 'main' :main
+    $P0 = newclass 'Foo'
+    $P1 = new $P0
+    $S0 = unicode:"foo\x{b1}"
+    $P1.$S0(1)
+    $P1.unicode:"foo\x{b1}"(2)
+.end
+
+.namespace ['Foo']
+.sub unicode:"foo\x{b1}" :method
+    .param int count
+    print 'ok '
+    print count
+    say ' - Unicode method names allowed'
+.end
+CODE
+ok 1 - Unicode method names allowed
+ok 2 - Unicode method names allowed
+OUT
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/io_rewiring/t/compilers/json/from_parrot.t
==============================================================================
--- branches/io_rewiring/t/compilers/json/from_parrot.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/compilers/json/from_parrot.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -30,10 +30,10 @@
     .local string s
     s = ''
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( s, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 ""
 OUT
@@ -45,10 +45,10 @@
     .local string s
     s = 'abcdeABCDE01234$%^&*'
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( s, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 "abcdeABCDE01234$%^&*"
 OUT
@@ -60,10 +60,10 @@
     .local string s
     s = "abcde\\ABCDE\"01234\n$%^&*"
     # XXX more escapes need to be tested; see http://www.json.org/
+    load_bytecode 'JSON.pbc'
     $S0 = _json( s, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 "abcde\\ABCDE\"01234\n$%^&*"
 OUT
@@ -74,6 +74,7 @@
 .sub test :main
     .local int i
     i = 0
+    load_bytecode 'JSON.pbc'
     $S0 = _json( i, 0 )
     say $S0
     i = 35
@@ -89,7 +90,6 @@
     $S0 = _json( i, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 0
 35
@@ -104,6 +104,7 @@
 .sub test :main
     .local num n
     n = 0.0
+    load_bytecode 'JSON.pbc'
     $S0 = _json( n )
     say $S0
     n = 2.50
@@ -116,7 +117,6 @@
     $S0 = _json( n )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 0
 2.5
@@ -130,6 +130,7 @@
 .sub test :main
     .local string s
     s = "abcde\\ABCDE\"01234\n$%^&*"
+    load_bytecode 'JSON.pbc'
     $S0 = _json( s, 1 )
     print $S0
 
@@ -143,7 +144,6 @@
     $S0 = _json( n, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 "abcde\\ABCDE\"01234\n$%^&*"
 -42
@@ -169,10 +169,10 @@
     array[8] = 8
     array[9] = 9
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( array, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 [0,1,2,3,4,5,6,7,8,9]
 OUT
@@ -196,10 +196,10 @@
     array[8] = 8
     array[9] = 9
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( array, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 [
   0,
@@ -230,10 +230,10 @@
     array[4] = -2147483648
     array[5] = 2147483647
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( array, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 [
   35,
@@ -260,10 +260,10 @@
     array[4] = "json"
     array[5] = 0.0
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( array, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 [
   0,
@@ -287,10 +287,10 @@
     hash["gamma"] = 3.1
     hash["delta"] = "DELTA"
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( hash, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 {
   "alpha" : 29,
@@ -312,10 +312,10 @@
     hash["gamma"] = 3.1
     hash["delta"] = "DELTA"
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( hash, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 {"alpha":29,"beta":"B","delta":"DELTA","gamma":3.1}
 OUT
@@ -349,10 +349,10 @@
     world["population"] = 1234567890
     world["some_country"] = country
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( world, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 {
   "population" : 1234567890,
@@ -400,10 +400,10 @@
     world["population"] = 1234567890
     world["some_country"] = country
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( world, 0 )
     say $S0
 .end
-.include 'library/JSON.pir'
 CODE
 {"population":1234567890,"some_country":[[{"Perl":"Highway","Python":"Grove","Ruby":"Lane"},{}],[]]}
 OUT
@@ -416,6 +416,7 @@
 
     s = new 'String'
     s = ''
+    load_bytecode 'JSON.pbc'
     $S0 = _json( s, 0 )
     say $S0
     $S0 = _json( s, 1 )
@@ -428,7 +429,6 @@
     $S0 = _json( s, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 ""
 ""
@@ -444,6 +444,7 @@
 
     i = new 'Integer'
     i = 0
+    load_bytecode 'JSON.pbc'
     $S0 = _json( i, 0 )
     say $S0
     $S0 = _json( i, 1 )
@@ -456,7 +457,6 @@
     $S0 = _json( i, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 0
 0
@@ -472,6 +472,7 @@
 
     b = new 'Boolean'
     b = 0
+    load_bytecode 'JSON.pbc'
     $S0 = _json( b, 0 )
     say $S0
     $S0 = _json( b, 1 )
@@ -484,7 +485,6 @@
     $S0 = _json( b, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 false
 false
@@ -499,6 +499,7 @@
     .local pmc n
     null n
 
+    load_bytecode 'JSON.pbc'
     $S0 = _json( n, 0 )
     say $S0
     $S0 = _json( n, 1 )
@@ -510,7 +511,6 @@
     $S0 = _json( n, 1 )
     print $S0
 .end
-.include 'library/JSON.pir'
 CODE
 null
 null

Modified: branches/io_rewiring/t/library/pcre.t
==============================================================================
--- branches/io_rewiring/t/library/pcre.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/library/pcre.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -1,10 +1,11 @@
 #!perl
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
 # $Id$
 
 use strict;
 use warnings;
 use lib qw( t . lib ../lib ../../lib );
+
 use Test::More;
 use Parrot::Test tests => 1;
 
@@ -26,22 +27,22 @@
 # if we keep pcre, we need a config test
 my $cmd = ( $^O =~ /MSWin32/ ) ? "pcregrep --version" : "pcre-config --version";
 my $has_pcre = !Parrot::Test::run_command( $cmd, STDERR => File::Spec->devnull, );
-my $pcre_libpath = "";
+my $pcre_libpath = '';
 
 # It's possible that libpcre is installed in some non-standard path...
 if ($has_pcre && ($^O !~ /MSWin32/)) {
     # Extract the library path for non-windows platforms (in case it isn't in
     # the normal lookup locations)
-    my $outfile = "pcre-config.out";
-    Parrot::Test::run_command("pcre-config --prefix", STDOUT => $outfile);
+    my $outfile = 'pcre-config.out';
+    Parrot::Test::run_command('pcre-config --prefix', STDOUT => $outfile);
     my $out = Parrot::Test::slurp_file($outfile);
     unlink $outfile;
     chomp $out;
-    $pcre_libpath="$out/lib";
+    $pcre_libpath = "$out/lib";
 }
 
 SKIP: {
-    skip( "no pcre-config", Test::Builder->new()->expected_tests() )
+    skip( 'no pcre-config', Test::Builder->new()->expected_tests() )
         unless $has_pcre;
 
 ## 1
@@ -65,22 +66,21 @@
     .local pmc func
     .local pmc lib
 
-
     get_global func, ['PCRE'], 'init'
     if_null func, NOK1
     branch OK1
 NOK1:
     print 'not '
 OK1:
-    say "ok 1"
+    say 'ok 1'
 
-    lib= func()
+    lib = func()
     if_null lib, NOK2
     branch OK2
 NOK2:
     print 'not '
 OK2:
-    say "ok 2"
+    say 'ok 2'
 
 
     .local string s
@@ -101,7 +101,7 @@
     if is_code_defined goto OK3
     print 'not '
 OK3:
-    say "ok 3"
+    say 'ok 3'
 
     .local int ok
     .local pmc result
@@ -112,18 +112,18 @@
     unless ok < 0 goto OK4
     print 'not '
 OK4:
-    say "ok 4"
+    say 'ok 4'
 
     .local int i
-    i= 0
+    i = 0
     .local string match
 
-    func= get_global ['PCRE'], 'dollar'
-    match= func( s, ok, result, i )
+    func = get_global ['PCRE'], 'dollar'
+    match = func( s, ok, result, i )
     if 'a' == match goto OK5
     print 'not '
 OK5:
-    say "ok 5"
+    say 'ok 5'
 
 .end
 CODE

Modified: branches/io_rewiring/t/oo/proxy.t
==============================================================================
--- branches/io_rewiring/t/oo/proxy.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/oo/proxy.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -19,14 +19,17 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(9)
+    plan(11)
 
     typeof_a_low_level_object()
     typeof_a_high_level_object()
     typeof_a_class_object()
     proxy_as_parent_of_class()
     proxy_as_parent_of_class_with_new()
-
+    proxy_no_method_conflict()
+    .local pmc proxy_no_invade
+    proxy_no_invade = get_root_global ['foo'], 'proxy_no_invade'
+    proxy_no_invade()
 .end
 
 .sub typeof_a_low_level_object
@@ -81,6 +84,36 @@
     is ($S0, 'Foo;Bar', 'object is typeof Foo;Bar')
 .end
 
+.sub proxy_no_method_conflict
+    $P0 = new 'Complex'
+    $P0['real'] = 1
+    $P1 = $P0.'Complex'()
+    $S0 = $P1
+    is($S0, "1+0i", 'Complex method survived')
+.end
+
+.namespace ['Complex']
+.sub 'Complex' :method
+    .return (self)
+.end
+
+.HLL 'foo'
+
+.sub proxy_no_invade
+    .local pmc is
+    is = get_root_global ['parrot'], 'is'
+
+    $P0 = new 'Class'
+    $I0 = isa $P0, 'Sub'
+    $P1 = get_root_global ['foo'], 'Sub'
+    $I1 = 0
+    if null $P1 goto do_test
+    inc $I1
+do_test:
+    is($I1, 0, 'No proxy in current HLL namespace, TT #715')
+.end
+
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/io_rewiring/t/op/copy.t
==============================================================================
--- branches/io_rewiring/t/op/copy.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/op/copy.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -19,10 +19,11 @@
 .sub 'main' :main
     .include 'test_more.pir'
 
-    plan(3)
+    plan(4)
 
     test_basic()
     test_rt48467()
+    test_tonull()
 .end
 
 .sub 'test_basic'
@@ -63,6 +64,22 @@
     is( dest, 3.2, 'copy should make independent copies' )
 .end
 
+.sub 'test_tonull'
+    null $P1
+    $P2 = new 'Undef'
+    .local string msg
+    msg = 'failed'
+    push_eh catch
+    copy $P1, $P2
+    goto check
+catch:
+    .get_results($P3)
+    msg = $P3 ['message']
+check:
+    pop_eh
+    is( msg, 'Null PMC in copy', 'copy to null throws' )
+.end
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/io_rewiring/t/op/stringu.t
==============================================================================
--- branches/io_rewiring/t/op/stringu.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/op/stringu.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 27;
+use Parrot::Test tests => 28;
 use Parrot::Config;
 
 =head1 NAME
@@ -435,23 +435,75 @@
 OUTPUT
 }
 
-pasm_output_is( <<'CODE', <<OUTPUT, "UTF-8 and Unicode literals", todo => 'TT #24' );
-    set S0, unicode:"\u00ab"
-    length I0, S0
-    say I0
-    say S0
-    set S0, iso-8859-1:"\xab"
-    length I0, S0
-    say I0
-    say S0
-    end
+pir_output_is( <<'CODE', <<OUTPUT, "UTF-8 and Unicode hash keys");
+.sub 'main'
+    .local string str0, str1
+    str0 = unicode:"\u00ab"
+    str1 = iso-8859-1:"\xab"
+
+    .local pmc hash
+    hash = new 'Hash'
+    hash[str0] = 'hello'
+
+    $I0 = iseq str0, str1
+    say $I0
+
+    $S0 = hash[str0]
+    $S1 = hash[str1]
+    $I0 = iseq $S0, $S1
+    say $I0
+    say $S0
+    say $S1
+.end
 CODE
 1
-\xc2\xab
 1
-\xc2\xab
+hello
+hello
 OUTPUT
 
+pir_output_is( <<'CODE', <<OUTPUT, "UTF-8 and Unicode hash keys, full bucket" );
+.sub 'main'
+    .local string str0, str1
+    str0 = unicode:"infix:\u00b1"
+    str1 = iso-8859-1:"infix:\xb1"
+
+    .local pmc hash
+    hash = new 'Hash'
+    hash[str0] = 'hello'
+
+    $I0 = 0
+  fill_loop:
+    unless $I0 < 200 goto fill_done
+    inc $I0
+    $S0 = $I0
+    $S0 = concat 'infix:', $S0
+    hash[$S0] = 'foo'
+    goto fill_loop
+  fill_done:
+
+    $I0 = iseq str0, str1
+    #print "iseq str0, str1               => "
+    say $I0
+
+    $S0 = hash[str0]
+    $S1 = hash[str1]
+    $I0 = iseq $S0, $S1
+    #print "iseq hash[str0], hash[str1]   => "
+    say $I0
+    say $S0
+    say $S1
+.end
+CODE
+1
+1
+hello
+hello
+OUTPUT
+
+
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/io_rewiring/t/pmc/multidispatch.t
==============================================================================
--- branches/io_rewiring/t/pmc/multidispatch.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/pmc/multidispatch.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -25,7 +25,7 @@
 
 =cut
 
-pir_output_is( <<'CODE', <<'OUTPUT', 'Integer_divide_Integer  10 / 3 = 1003' );
+pir_output_is( <<'CODE', <<'OUTPUT', 'Integer_divide_Integer  10 / 3 = 1003', todo => 'TT #452' );
 
 .sub 'test' :main
     .local pmc divide
@@ -57,7 +57,7 @@
 1003
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "1+1=3" );
+pir_output_is( <<'CODE', <<'OUTPUT', "1+1=3", todo => 'TT #452' );
 
 .sub _main
     .local pmc add
@@ -89,7 +89,7 @@
 3
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "PASM divide - override builtin 10 / 3 = 42" );
+pir_output_is( <<'CODE', <<'OUTPUT', "PASM divide - override builtin 10 / 3 = 42", todo => 'TT #452' );
 
 .sub _main
     .local pmc divide
@@ -117,7 +117,7 @@
 42
 OUTPUT
 
-pir_output_is( <<'CODE', <<'OUTPUT', "INTVAL return numeq" );
+pir_output_is( <<'CODE', <<'OUTPUT', "INTVAL return numeq", todo => 'TT #452' );
 
 .sub _main
     .local pmc comp
@@ -220,7 +220,7 @@
 EOF
 close $TEMP;
 
-pir_output_is( <<"CODE", <<'OUTPUT', "PASM MMD divide - loaded sub" );
+pir_output_is( <<"CODE", <<'OUTPUT', "PASM MMD divide - loaded sub", todo => 'TT #452' );
 .sub _main
     .local pmc divide
     load_bytecode "$temp_pir"
@@ -239,7 +239,7 @@
 42
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - new result" );
+pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - new result", todo => 'TT #452' );
 .include "datatypes.pasm"
     get_global P10, "Integer_bxor_Intval"
     add_multi "bitwise_xor_int", "Integer,INTVAL,PMC", P10
@@ -264,7 +264,7 @@
 1
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - existing result" );
+pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - existing result", todo => 'TT #452' );
 .include "datatypes.pasm"
     get_global P10, "Integer_bxor_Intval"
     add_multi "bitwise_xor_int", "Integer,INTVAL,PMC", P10
@@ -289,7 +289,7 @@
 1
 OUTPUT
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - mixed" );
+pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - mixed", todo => 'TT #452' );
 .include "datatypes.pasm"
     get_global P10, "Integer_bxor_Intval"
     add_multi "bitwise_xor_int", "Integer,INTVAL,PMC", P10

Modified: branches/io_rewiring/t/pmc/string.t
==============================================================================
--- branches/io_rewiring/t/pmc/string.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/pmc/string.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -20,7 +20,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(164)
+    plan(165)
 
     set_or_get_strings()
     setting_integers()
@@ -70,6 +70,7 @@
     out_of_bounds_substr_negative_offset()
     exception_to_int_2()
     exception_to_int_3()
+    assign_null_string()
 
     # END_OF_TESTS
 
@@ -1017,6 +1018,20 @@
     .exception_is( 'invalid conversion to int - bad base 37' )
 .end
 
+.sub assign_null_string
+    .local pmc s
+    .local string m
+    s = new ['String']
+    null m
+    assign s, m
+    m = 'Any other thing'
+    m = s
+    $I0 = 0
+    if null m goto check
+    inc $I0
+check:
+    is( $I0, 0, 'assign null string, TT #729' )
+.end
 
 # Local Variables:
 #   mode: cperl

Modified: branches/io_rewiring/t/pmc/sub.t
==============================================================================
--- branches/io_rewiring/t/pmc/sub.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/pmc/sub.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -9,7 +9,7 @@
 use Test::More;
 use Parrot::Test::Util 'create_tempfile';
 
-use Parrot::Test tests => 68;
+use Parrot::Test tests => 69;
 use Parrot::Config;
 
 =head1 NAME
@@ -1589,6 +1589,39 @@
 lived
 OUTPUT
 
+pir_output_is( <<'CODE', <<'OUTPUT', '.get_subid' );
+.sub 'main'
+    .const 'Sub' foo = 'foo'
+    $S0 = foo.'get_subid'()
+    say $S0
+
+    $P0 = get_global 'bar'
+    $S0 = $P0.'get_subid'()
+    say $S0
+
+    $P0 = get_global 'baz'
+    $S0 = $P0.'get_subid'()
+    say $S0
+.end
+
+.sub '' :subid('foo')
+    say 'foo'
+.end
+
+.sub 'bar'
+    say 'bar'
+.end
+
+.sub 'baz' :subid('bazsubid')
+    say 'baz'
+.end
+CODE
+foo
+bar
+bazsubid
+OUTPUT
+
+
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/io_rewiring/t/pmc/sys.t
==============================================================================
--- branches/io_rewiring/t/pmc/sys.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/pmc/sys.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -36,6 +36,7 @@
      print O, "\tsay \\"Hello, World!\\"\\n"
      print O, ".end\\n"
      close O
+     load_bytecode 'config.pbc'
     .local pmc conf_hash
     conf_hash = _config()
     .local string slash
@@ -51,7 +52,6 @@
     say \$I0
 .end
 
-.include "library/config.pir"
 CODE
 Hello, World!
 0
@@ -59,6 +59,7 @@
 
 pir_output_is( <<'CODE', <<'OUT', "conf_hash is read-only")
 .sub _test :main
+     load_bytecode 'config.pbc'
     .local pmc conf_hash
     conf_hash = _config()
     push_eh is_ro
@@ -70,7 +71,6 @@
 end:
 .end
 
-.include 'library/config.pir'
 CODE
 hash is read-only
 OUT

Modified: branches/io_rewiring/t/steps/auto_gcc-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_gcc-01.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/steps/auto_gcc-01.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -5,7 +5,7 @@
 
 use strict;
 use warnings;
-use Test::More tests => 123;
+use Test::More tests => 122;
 use Carp;
 use lib qw( lib t/configure/testlib );
 use_ok('config::init::defaults');
@@ -288,8 +288,6 @@
         "gccversion defined as expected");
     is($conf->data->get( 'gccversion' ), q{3.1},
         "Got expected value for gccversion");
-    is($conf->data->get( 'HAS_aligned_funcptr' ), 0,
-        "Got expected value for HAS_aligned_funcptr");
     like($step->result(), qr/^yes/, "Got expected result");
 }
 

Modified: branches/io_rewiring/t/steps/auto_icu-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_icu-01.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/steps/auto_icu-01.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -228,7 +228,7 @@
     my $expected_include_dir =
         $expected_dir . $conf->data->get('slash') .  q{include};
     mkdir $expected_dir or croak "Unable to make testing directory";
-    mkpath($expected_include_dir, 0, 0755)
+    mkpath($expected_include_dir, { mode => 0755 })
         or croak "Unable to make second-level testing directory";
     ($icuheaders, $without) =
         $step->_handle_icuheaders($conf, qq{$expected_dir\n}, 0);

Modified: branches/io_rewiring/t/steps/auto_jit-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_jit-01.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/steps/auto_jit-01.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -50,7 +50,7 @@
     my $cpuarch = 'bar';
     my $osname = 'baz';
     my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
-    mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
     is( $step->_check_jitcapability($corejit, $cpuarch, $osname, 8), 0,
         "Got expected value for _check_jitcapability(): no core.jit case");
@@ -65,7 +65,7 @@
     my $cpuarch = 'bar';
     my $osname = 'baz';
     my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
-    mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
     open my $FH, '>', $corejit
         or croak "Unable to open handle to file for testing";
@@ -84,7 +84,7 @@
     my $cpuarch = 'bar';
     my $osname = 'baz';
     my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
-    mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
     open my $FH, '>', $corejit
         or croak "Unable to open handle to file for testing";
@@ -106,7 +106,7 @@
     my $cpuarch = 'i386';
     my $osname = 'darwin';
     my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
-    mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
     open my $FH, '>', $corejit
         or croak "Unable to open handle to file for testing";
@@ -128,7 +128,7 @@
     my $cpuarch = 'i386';
     my $osname = 'MSWin32';
     my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
-    mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
     open my $FH, '>', $corejit
         or croak "Unable to open handle to file for testing";
@@ -152,8 +152,8 @@
     my $cpuarch = 'bar';
     my $jitarchname = "${cpuarch}-baz";
     my $asmdir = File::Spec->catdir( $jitbase, $cpuarch );
-    mkpath( $asmdir, 0, 755 ) or croak "Unable to make testing directory";
-    mkpath( q{src}, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $asmdir, { mode => 0755 } ) or croak "Unable to make testing directory";
+    mkpath( q{src}, { mode => 0755 } ) or croak "Unable to make testing directory";
 
     ok(auto::jit::_handle_asm( {
         conf        => $conf,
@@ -175,8 +175,8 @@
     my $cpuarch = 'bar';
     my $jitarchname = "${cpuarch}-baz";
     my $asmdir = File::Spec->catdir( $jitbase, $cpuarch );
-    mkpath( $asmdir, 0, 755 ) or croak "Unable to make testing directory";
-    mkpath( q{src}, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $asmdir, { mode => 0755 } ) or croak "Unable to make testing directory";
+    mkpath( q{src}, { mode => 0755 } ) or croak "Unable to make testing directory";
 
     my $sjit =
         File::Spec->catfile( $jitbase, $cpuarch, qq{${jitarchname}.s} );
@@ -205,8 +205,8 @@
     my $cpuarch = 'bar';
     my $jitarchname = "${cpuarch}-baz";
     my $asmdir = File::Spec->catdir( $jitbase, $cpuarch );
-    mkpath( $asmdir, 0, 755 ) or croak "Unable to make testing directory";
-    mkpath( q{src}, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $asmdir, { mode => 0755 } ) or croak "Unable to make testing directory";
+    mkpath( q{src}, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $asm = File::Spec->catfile( $jitbase, $cpuarch, q{asm.s} );
     open my $FH, '>', $asm
         or croak "Unable to open handle to file for testing";
@@ -314,7 +314,7 @@
     my $cpuarch = 'i386';
     my $osname = 'darwin';
     my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
-    mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
     my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
     open my $FH, '>', $corejit
         or croak "Unable to open handle to file for testing";

Modified: branches/io_rewiring/t/steps/auto_pmc-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_pmc-01.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/steps/auto_pmc-01.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -95,7 +95,7 @@
     ok( chdir $tdir, 'changed to temp directory for testing' );
 
     my $pmcdir = qq{$tdir/src/pmc};
-    ok(mkpath($pmcdir, 0, 0755), "Able to make directory for testing");
+    ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
     my $num = qq{$pmcdir/pmc.num};
     open my $IN3, ">", $num or croak "Unable to open file for writing: $!";
     print $IN3 "# comment line\n";
@@ -132,7 +132,7 @@
     ok( chdir $tdir, 'changed to temp directory for testing' );
 
     my $pmcdir = qq{$tdir/src/pmc};
-    ok(mkpath($pmcdir, 0, 0755), "Able to make directory for testing");
+    ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
     eval { my $order_ref = auto::pmc::get_pmc_order(); };
     like($@,
         qr/Can't read src\/pmc\/pmc\.num/, "Got expected 'die' message");

Modified: branches/io_rewiring/t/steps/gen_platform-01.t
==============================================================================
--- branches/io_rewiring/t/steps/gen_platform-01.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/steps/gen_platform-01.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -120,7 +120,7 @@
     chdir $tdir or croak "Unable to change to temporary directory";
     $conf->data->set( platform_asm => 1 );
     my $platform = 'aix';
-    mkpath( 'src', 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( 'src', { mode => 0755 } ) or croak "Unable to make testing directory";
     my $asmfile = File::Spec->catfile( 'src', 'platform_asm.s' );
     open my $FH, '>', $asmfile or croak "Unable to open handle for writing";
     print $FH "Hello asm\n";
@@ -140,7 +140,7 @@
     $conf->data->set( platform_asm => 1 );
     my $platform = 'aix';
 
-    mkpath( 'src', 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( 'src', { mode => 0755 } ) or croak "Unable to make testing directory";
 
     my $asmfile = File::Spec->catfile( 'src', 'platform_asm.s' );
     open my $FH, '>', $asmfile or croak "Unable to open handle for writing";
@@ -148,7 +148,7 @@
     close $FH or croak "Unable to close handle after writing";
 
     my $path = File::Spec->catdir( 'config', 'gen', 'platform', $platform );
-    mkpath( $path, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $path, { mode => 0755 } ) or croak "Unable to make testing directory";
 
     my $configfile = File::Spec->catfile( $path, 'asm.s' );
     open my $FH2, '>', $configfile or croak "Unable to open handle for writing";
@@ -172,12 +172,12 @@
     my $platform = 'darwin';
 
     my $path = File::Spec->catdir( 'config', 'gen', 'platform', $platform );
-    mkpath( $path, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $path, { mode => 0755 } ) or croak "Unable to make testing directory";
     copy qq{$cwd/config/gen/platform/$platform/begin.c},
         qq{$path/begin.c}
             or croak "Unable to copy file for testing";
 
-    mkpath( 'src', 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( 'src', { mode => 0755 } ) or croak "Unable to make testing directory";
     my $plat_c = q{src/platform.c};
     open my $PLATFORM_C, '>', $plat_c
         or croak "Unable to open handle for writing";

Modified: branches/io_rewiring/t/tools/install/02-install_files.t
==============================================================================
--- branches/io_rewiring/t/tools/install/02-install_files.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/install/02-install_files.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -10,7 +10,6 @@
 use Carp;
 use Cwd;
 use File::Copy;
-use File::Path qw( mkpath );
 use File::Temp qw( tempdir );
 use lib qw( lib );
 use Parrot::Install qw(

Modified: branches/io_rewiring/t/tools/install/03-lines_to_files.t
==============================================================================
--- branches/io_rewiring/t/tools/install/03-lines_to_files.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/install/03-lines_to_files.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -10,7 +10,6 @@
 use Carp;
 use Cwd;
 use File::Copy;
-use File::Path qw( mkpath );
 use File::Temp qw( tempdir );
 use lib qw( lib );
 use Parrot::Install qw(

Modified: branches/io_rewiring/t/tools/install/dev_overall.t
==============================================================================
--- branches/io_rewiring/t/tools/install/dev_overall.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/install/dev_overall.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -116,7 +116,8 @@
         src/pmc
     );
     my @created =
-        mkpath( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed );
+        mkpath( ( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed ),
+            { mode => 0777} );
     print STDERR "dirs created:  @created\n" if $DEBUG;
     foreach my $f ( keys %testfiles ) {
         my $src = File::Spec->catfile( $cwd, $testlibdir, $f );

Modified: branches/io_rewiring/t/tools/install/overall.t
==============================================================================
--- branches/io_rewiring/t/tools/install/overall.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/install/overall.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -101,7 +101,8 @@
         compilers/pge
     );
     my @created =
-        mkpath( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed );
+        mkpath( ( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed ),
+            { mode => 0777 } );
     print STDERR "dirs created:  @created\n" if $DEBUG;
     foreach my $f ( keys %testfiles ) {
         my $src = File::Spec->catfile( $cwd, $testlibdir, $f );

Modified: branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t
==============================================================================
--- branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -32,7 +32,7 @@
     my $tdir = tempdir( CLEANUP => 1 );
     chdir $tdir or croak "Unable to change to testing directory: $!";
     my $opsdir = File::Spec->catdir ( $tdir, 'src', 'ops' );
-    mkpath( $opsdir, 0, 755 ) or croak "Unable to make testing directory";
+    mkpath( $opsdir, { mode => 0755 } ) or croak "Unable to make testing directory";
 
     ##### Stage 1:  Generate ops.num de novo #####
 

Modified: branches/io_rewiring/t/tools/ops2pm/10-print_module.t
==============================================================================
--- branches/io_rewiring/t/tools/ops2pm/10-print_module.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/ops2pm/10-print_module.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -188,7 +188,7 @@
 Directory failure:  can it be provoked?
 
   if ( !-d $fulldir ) {
-    File::Path::mkpath( $fulldir, 0, 0755 )
+    File::Path::mkpath( $fulldir, { mode => 0755 } )
       or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
   }
 

Modified: branches/io_rewiring/t/tools/ops2pm/11-print_h.t
==============================================================================
--- branches/io_rewiring/t/tools/ops2pm/11-print_h.t	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/t/tools/ops2pm/11-print_h.t	Sun Jun  7 23:41:42 2009	(r39444)
@@ -120,7 +120,7 @@
 Directory failure:  can it be provoked?
 
   if ( !-d $fulldir ) {
-    File::Path::mkpath( $fulldir, 0, 0755 )
+    File::Path::mkpath( $fulldir, { mode => 0755 } )
       or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
   }
 

Modified: branches/io_rewiring/tools/dev/create_language.pl
==============================================================================
--- branches/io_rewiring/tools/dev/create_language.pl	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/dev/create_language.pl	Sun Jun  7 23:41:42 2009	(r39444)
@@ -210,7 +210,7 @@
             while (<$PARROT_CONFIG>) {
                 if (/(\w+) => '(.*)'/) { $config{$1} = $2 }
             }
-            close $PARROT_CONFIG or die $!;
+            close $PARROT_CONFIG;
             last if %config;
         }
     }
@@ -360,11 +360,16 @@
 # the default target
 all: @lclang@$(EXE)
 
+installable: installable_ at lclang@$(EXE)
+
 ##  targets for building a standalone executable
 @lclang@$(EXE): @lclang at .pbc
 	$(PBC_TO_EXE) @lclang at .pbc
 	@win32_libparrot_copy@
 
+installable_ at lclang@$(EXE): @lclang at .pbc
+	$(PBC_TO_EXE) @lclang at .pbc --install
+
 # the compiler .pbc
 @lclang at .pbc: Makefile $(PARROT) $(SOURCES) $(BUILTINS_PIR)
 	$(PARROT) $(PARROT_ARGS) -o @lclang at .pbc @lclang at .pir

Modified: branches/io_rewiring/tools/dev/fetch_languages.pl
==============================================================================
--- branches/io_rewiring/tools/dev/fetch_languages.pl	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/dev/fetch_languages.pl	Sun Jun  7 23:41:42 2009	(r39444)
@@ -266,6 +266,12 @@
     },
 
     {
+        name       => 'steme',
+        scm        => 'GIT',
+        repository => 'git://github.com/tene/steme.git'
+    },
+
+    {
         name       => 'tcl',
         scm        => 'SVN',
         repository => 'http://partcl.googlecode.com/svn/trunk'

Modified: branches/io_rewiring/tools/dev/install_dev_files.pl
==============================================================================
--- branches/io_rewiring/tools/dev/install_dev_files.pl	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/dev/install_dev_files.pl	Sun Jun  7 23:41:42 2009	(r39444)
@@ -46,9 +46,9 @@
 
 =back
 
-=head2 See Also
+=head1 SEE ALSO
 
-See F<tools/dev/install_files.pl> for a detailed description of the MANIFEST
+See F<lib/Parrot/Manifest.pm> for a detailed description of the MANIFEST
 format.
 
 =cut

Modified: branches/io_rewiring/tools/dev/install_files.pl
==============================================================================
--- branches/io_rewiring/tools/dev/install_files.pl	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/dev/install_files.pl	Sun Jun  7 23:41:42 2009	(r39444)
@@ -46,64 +46,11 @@
 
 =back
 
-=head2 MANIFEST Format
-
-The format of the MANIFEST (currently MANIFEST and MANIFEST.generated
-are used) is:
-
-    source_path <whitespace> [package]meta1,meta2,...
-
-or you may optionally specify a different destination path:
-
-    source_path <whitespace> [package]meta1,meta2,... <whitespace> destination
-
-Additionally, there may be a * in front of the whole line to designate
-a generated file:
-
-    source_path <whitespace> *[package]meta1,meta2,... <whitespace> destination
-
-The square brackets around C<package> are literal. C<package> gives
-the name of the RPM that the given file will be installed for, and is
-only used by this script to skip files that are not members of any
-package.
-
-The various meta flags recognized are:
-
-=over 4
-
-=item C<doc>
-
-Tag this file with %doc in the RPM, and omit the leading path (because
-rpm will put it into a directory of its choosing)
-
-=item C<include>
-
-Write this file to the location given by the C<--includedir> option
-
-=item C<lib>
-
-Write this file to the location given by the C<--libdir> option
-
-=item C<bin>
-
-Write this file to the location given by the C<--bindir> option
-
-=back
-
-The optional C<destination> field provides a general way to change
-where a file will be written to. It will be applied before any
-metadata tags.
-
-Example: if this line is in the MANIFEST.generated file
-
-  languages/snorkfest/snork-compile        [main]bin
-
-and the --bindir=/usr/parroty/bin, then the generated
-parrot-<VERSION>-1.<arch>.rpm file will contain the file
-/usr/parroty/bin/snork-compile.
-
 =head1 SEE ALSO
 
+See F<lib/Parrot/Manifest.pm> for a detailed description of the MANIFEST
+format.
+
 F<tools/dev/mk_manifests.pl>
 
 =cut

Modified: branches/io_rewiring/tools/dev/parrot-fuzzer
==============================================================================
--- branches/io_rewiring/tools/dev/parrot-fuzzer	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/dev/parrot-fuzzer	Sun Jun  7 23:41:42 2009	(r39444)
@@ -60,10 +60,10 @@
 
 =item C<--runcore=--some-runcore>
 
-Specify which runcore to use when running Parrot.  By default, --slow-core is
-used.  This option is passed directly to the parrot exectuable.  Other runcores
-include C<--CGP-core>, C<--fast-core>, C<--computed-goto-core>, C<--jit-core>,
-C<--switched-core> and C<--profile>.
+Specify which runcore to use when running Parrot.  The default is the C<slow>
+core.  This option corresponds directly to Parrot's C<--runcore> option.  Other
+runcores include C<fast>, C<jit>, C<cgoto>, C<cgp>, C<cgp-jit>, and C<switch>.
+See Parrot's help for more details.
 
 =item C<--ignore_blacklist>
 

Modified: branches/io_rewiring/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/io_rewiring/tools/dev/pbc_to_exe.pir	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/dev/pbc_to_exe.pir	Sun Jun  7 23:41:42 2009	(r39444)
@@ -18,8 +18,6 @@
 
 =cut
 
-.include 'library/config.pir'
-
 .sub 'main' :main
     .param pmc    argv
     .local string infile
@@ -31,6 +29,7 @@
 
     .local string gcc
     .local int    is_gcc
+    load_bytecode 'config.pbc'
     $P0 = '_config'()
     gcc    = $P0['gccversion']
     $I0    = length gcc

Modified: branches/io_rewiring/tools/install/smoke_languages.pl
==============================================================================
--- branches/io_rewiring/tools/install/smoke_languages.pl	Sun Jun  7 01:55:16 2009	(r39443)
+++ branches/io_rewiring/tools/install/smoke_languages.pl	Sun Jun  7 23:41:42 2009	(r39444)
@@ -9,7 +9,7 @@
 use Getopt::Long;
 use File::Spec::Functions;
 
-use Test::More tests => 31;
+use Test::More tests => 32;
 
 =head1 NAME
 
@@ -489,6 +489,19 @@
 
 SKIP:
 {
+skip("steme", 1) unless (-d "$langdir/steme");
+$filename = 'test.scm';
+open $FH, '>', $filename
+        or die "Can't open $filename ($!).\n";
+print $FH "( say \"Hello, World!\" )\n";
+close $FH;
+$out = `$parrot $langdir/steme/steme.pbc $filename`;
+ok($out eq "Hello, World!\n", "check steme");
+unlink($filename);
+}
+
+SKIP:
+{
 skip("Squaak", 1) unless (-d "$langdir/squaak");
 $filename = 'test.squaak';
 open $FH, '>', $filename


More information about the parrot-commits mailing list