[svn:parrot] r46294 - in branches/codestring: . compilers/imcc config/auto/zlib config/gen/makefiles config/gen/platform/generic config/gen/platform/win32 docs docs/pdds docs/project examples/embed examples/pir examples/tutorial include/parrot lib/Parrot/Pmc2c ports/debian ports/debian/patches ports/fedora/2.3.0 ports/suse/2.2.0 runtime/parrot/library runtime/parrot/library/ProfTest src src/dynpmc src/gc src/interp src/ops src/packfile src/pmc src/runcore src/string t/dynpmc t/native_pbc t/oo t/op t/pmc t/src tools/dev tools/docs tools/util

coke at svn.parrot.org coke at svn.parrot.org
Wed May 5 00:05:23 UTC 2010


Author: coke
Date: Wed May  5 00:05:19 2010
New Revision: 46294
URL: https://trac.parrot.org/parrot/changeset/46294

Log:
merge latest changes from trunk

Added:
   branches/codestring/src/dynpmc/file.pmc
      - copied unchanged from r46293, trunk/src/dynpmc/file.pmc
   branches/codestring/src/dynpmc/os.pmc
      - copied unchanged from r46293, trunk/src/dynpmc/os.pmc
   branches/codestring/t/dynpmc/file.t
      - copied unchanged from r46293, trunk/t/dynpmc/file.t
   branches/codestring/t/dynpmc/os.t
      - copied unchanged from r46293, trunk/t/dynpmc/os.t
Deleted:
   branches/codestring/ports/debian/patches/01_fix_doc_install.patch
   branches/codestring/ports/debian/patches/02_fix_man_whatis.patch
   branches/codestring/src/pmc/file.pmc
   branches/codestring/src/pmc/os.pmc
   branches/codestring/t/op/pushaction.t
   branches/codestring/t/pmc/file.t
   branches/codestring/t/pmc/os.t
Modified:
   branches/codestring/   (props changed)
   branches/codestring/DEPRECATED.pod
   branches/codestring/MANIFEST
   branches/codestring/MANIFEST.SKIP
   branches/codestring/MANIFEST.generated
   branches/codestring/PBC_COMPAT
   branches/codestring/compilers/imcc/cfg.c
   branches/codestring/compilers/imcc/pbc.c
   branches/codestring/config/auto/zlib/   (props changed)
   branches/codestring/config/auto/zlib/zlib_c.in
   branches/codestring/config/gen/makefiles/docs.in
   branches/codestring/config/gen/makefiles/root.in
   branches/codestring/config/gen/platform/generic/env.c
   branches/codestring/config/gen/platform/generic/exec.c
   branches/codestring/config/gen/platform/win32/env.c
   branches/codestring/config/gen/platform/win32/exec.c
   branches/codestring/docs/   (props changed)
   branches/codestring/docs/embed.pod
   branches/codestring/docs/pdds/pdd17_pmc.pod
   branches/codestring/docs/pdds/pdd28_strings.pod
   branches/codestring/docs/project/debian_packaging_guide.pod
   branches/codestring/examples/embed/Makefile
   branches/codestring/examples/pir/io.pir
   branches/codestring/examples/tutorial/40_file_ops.pir
   branches/codestring/include/parrot/gc_api.h
   branches/codestring/include/parrot/pmc_freeze.h
   branches/codestring/include/parrot/pobj.h
   branches/codestring/include/parrot/runcore_trace.h   (props changed)
   branches/codestring/include/parrot/string_funcs.h
   branches/codestring/include/parrot/sub.h
   branches/codestring/include/parrot/thread.h
   branches/codestring/lib/Parrot/Pmc2c/PMCEmitter.pm
   branches/codestring/ports/debian/changelog
   branches/codestring/ports/debian/patches/series
   branches/codestring/ports/fedora/2.3.0/   (props changed)
   branches/codestring/ports/suse/2.2.0/   (props changed)
   branches/codestring/runtime/parrot/library/ProfTest/PIRProfile.nqp
   branches/codestring/runtime/parrot/library/osutils.pir
   branches/codestring/src/debug.c
   branches/codestring/src/dynpmc/Defines.in
   branches/codestring/src/dynpmc/Rules.in
   branches/codestring/src/dynpmc/gziphandle.pmc
   branches/codestring/src/frame_builder.c
   branches/codestring/src/gc/alloc_resources.c
   branches/codestring/src/gc/api.c
   branches/codestring/src/gc/mark_sweep.c
   branches/codestring/src/hll.c
   branches/codestring/src/interp/inter_cb.c
   branches/codestring/src/interp/inter_create.c   (contents, props changed)
   branches/codestring/src/misc.c
   branches/codestring/src/ops/core.ops
   branches/codestring/src/ops/ops.num
   branches/codestring/src/ops/set.ops
   branches/codestring/src/packfile.c
   branches/codestring/src/packfile/pf_items.c
   branches/codestring/src/pmc.c
   branches/codestring/src/pmc/bigint.pmc
   branches/codestring/src/pmc/callcontext.pmc
   branches/codestring/src/pmc/fixedbooleanarray.pmc
   branches/codestring/src/pmc/hash.pmc
   branches/codestring/src/pmc/imageio.pmc
   branches/codestring/src/pmc/object.pmc
   branches/codestring/src/pmc/opcode.pmc
   branches/codestring/src/pmc/oplib.pmc
   branches/codestring/src/pmc/packfile.pmc
   branches/codestring/src/pmc/packfilefixupentry.pmc
   branches/codestring/src/pmc/parrotinterpreter.pmc
   branches/codestring/src/pmc/pmc.num
   branches/codestring/src/pmc/resizablebooleanarray.pmc
   branches/codestring/src/pmc/scalar.pmc
   branches/codestring/src/pmc/string.pmc
   branches/codestring/src/pmc/threadinterpreter.pmc
   branches/codestring/src/pmc_freeze.c
   branches/codestring/src/runcore/cores.c   (contents, props changed)
   branches/codestring/src/runcore/trace.c   (props changed)
   branches/codestring/src/spf_render.c
   branches/codestring/src/string/api.c
   branches/codestring/src/sub.c
   branches/codestring/src/thread.c
   branches/codestring/t/native_pbc/annotations.pbc
   branches/codestring/t/native_pbc/integer_1.pbc
   branches/codestring/t/native_pbc/number_1.pbc
   branches/codestring/t/native_pbc/string_1.pbc
   branches/codestring/t/oo/methods.t
   branches/codestring/t/pmc/eval.t
   branches/codestring/t/pmc/exception-old.t
   branches/codestring/t/pmc/string.t
   branches/codestring/t/src/embed.t   (contents, props changed)
   branches/codestring/tools/dev/mk_gitignore.pl   (props changed)
   branches/codestring/tools/dev/pbc_to_exe.pir
   branches/codestring/tools/docs/filename_and_chapter.pl
   branches/codestring/tools/util/pgegrep

Modified: branches/codestring/DEPRECATED.pod
==============================================================================
--- branches/codestring/DEPRECATED.pod	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/DEPRECATED.pod	Wed May  5 00:05:19 2010	(r46294)
@@ -22,36 +22,35 @@
 shipped, this feature may be removed in B<any> upcoming release, and
 you should no longer rely on it.
 
-Whenever deprecated items are removed, information
-regarding how to cope with the removal should be added to
-L<https://trac.parrot.org/parrot/wiki/Deprecation>.
+If you find a feature you once used was removed after a deprecation
+cycle, L<https://trac.parrot.org/parrot/wiki/Deprecation>. Otherwise
+please open a documentation ticket via Trac[1].
 
-When running parrot, you can receive warnings about deprecated opcodes.
+=head1 Are you using any Deprecated Features?
+
+When running parrot, you can receive warnings about deprecations.
 Either run parrot with the C<-w> option to enable all warnings, or
-specifically by including this C<PIR> code:
+deprecations specifically by including this snippet:
+
+=begin PIR_FRAGMENT
 
  .include 'warnings.pasm'
  warningson .PARROT_WARNINGS_DEPRECATED_FLAG
 
+=end PIR_FRAGMENT
+
 =head1 PMCS
 
 =over 4
 
-=item gziphandle [experimental]
+=item GzipHandle [experimental]
 
 L<https://trac.parrot.org/parrot/ticket/1580>
 
-=item packfiledebug [experimental]
+=item PackfileDebug [experimental]
 
 L<https://trac.parrot.org/parrot/ticket/1599>
 
-=item moved to dynpmc [eligible in 1.1]
-
-AddrRegistry, CodeString, Env, Eval, File, OS, PCCMETHOD_Test, StringHandle,
-and Timer.
-
-L<https://trac.parrot.org/parrot/ticket/448>
-
 =item multiple dispatch within core PMCs [eligible in 1.1]
 
 L<https://trac.parrot.org/parrot/ticket/452>
@@ -109,8 +108,6 @@
 
 =item Auto-vivification of nested aggregates [eligible in 2.4]
 
-Auto-vivifation of nested aggregated is deprecated.
-
 E.g.
 
   $P0 = new ['Hash']
@@ -120,13 +117,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/1561>
 
-=item PMC must use manual_attrs or auto_attrs flag [eligible in 2.4]
-
-PMCs must no longer use default value for manual/auto attribute allocation,
-manual_attrs or auto_attrs must be specified.
-
-L<http://trac.parrot.org/parrot/ticket/1506>
-
 =item Method lower on String [eligible in 3.1]
 
 Use the downcase opcode or subclass with a method name consistent with your
@@ -197,10 +187,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/1583>
 
-=item pushaction, pushmark, popmark [eligible in 2.4]
-
-L<https://trac.parrot.org/parrot/ticket/876>
-
 =item new_callback_p_p_p_s [eligible in 2.4]
 
 To be replaced with new_callback_p_p_p_p_s.
@@ -219,20 +205,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/1207>
 
-=item substr_s_i_i_s [eligible in 2.4]
-
-This op will be replaced with replace_s_s_i_i_s op to clearly indicate
-semantic. Part of COW removal.
-
-L<https://trac.parrot.org/parrot/ticket/1540>
-
-=item substr_s_s_i_i_s [eligible in 2.4]
-
-This op is deprecated. Use replace_s_s_i_i_s or substr_s_s_i_i (or both)
-instead. Part of COW removal.
-
-L<https://trac.parrot.org/parrot/ticket/1540>
-
 =item inplace string updates. [eligible in 2.4]
 
 All "inplace" string update ops are deprecated. E.g. "chopn_s", etc.
@@ -313,18 +285,6 @@
 
 L<https://trac.parrot.org/parrot/ticket/1584>
 
-=item STRING_is_null function [eligible in 2.4]
-
-renamed to Parrot_str_is_null
-
-L<https://trac.parrot.org/parrot/ticket/1585>
-
-=item Parrot_string_* [eligible in 2.4]
-
-rename Parrot_string_cstring to Parrot_str_cstring
-
-L<https://trac.parrot.org/parrot/ticket/1586>
-
 =item STRING COW [eligible in 2.4]
 
 COW strings are to be removed. All "inplace" string modification
@@ -439,12 +399,10 @@
 
 =over 4
 
-=item Threads and Parallelism
+=item Threads and Parallelism [experimental]
 
 L<https://trac.parrot.org/parrot/ticket/1601>
 
-All threads and parallelism constructs are experimental
-
 =back
 
 =head1 Footnotes

Modified: branches/codestring/MANIFEST
==============================================================================
--- branches/codestring/MANIFEST	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/MANIFEST	Wed May  5 00:05:19 2010	(r46294)
@@ -1,7 +1,7 @@
 # ex: set ro:
 # $Id$
 #
-# generated by tools/dev/mk_manifest_and_skip.pl Mon May  3 05:14:11 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Tue May  4 01:57:56 2010 UT
 #
 # See below for documentation on the format of this file.
 #
@@ -1238,10 +1238,12 @@
 src/dynpmc/Rules.in                                         []
 src/dynpmc/dynlexpad.pmc                                    []
 src/dynpmc/ext.pir                                          []
+src/dynpmc/file.pmc                                         []
 src/dynpmc/foo.pmc                                          []
 src/dynpmc/foo2.pmc                                         []
 src/dynpmc/gziphandle.pmc                                   []
 src/dynpmc/main.pasm                                        []
+src/dynpmc/os.pmc                                           []
 src/dynpmc/pccmethod_test.pmc                               []
 src/dynpmc/rational.pmc                                     []
 src/dynpmc/rotest.pmc                                       []
@@ -1338,7 +1340,6 @@
 src/pmc/exception.pmc                                       []
 src/pmc/exceptionhandler.pmc                                []
 src/pmc/exporter.pmc                                        []
-src/pmc/file.pmc                                            []
 src/pmc/filehandle.pmc                                      []
 src/pmc/fixedbooleanarray.pmc                               []
 src/pmc/fixedfloatarray.pmc                                 []
@@ -1368,7 +1369,6 @@
 src/pmc/oplib.pmc                                           []
 src/pmc/orderedhash.pmc                                     []
 src/pmc/orderedhashiterator.pmc                             []
-src/pmc/os.pmc                                              []
 src/pmc/packfile.pmc                                        []
 src/pmc/packfileannotation.pmc                              []
 src/pmc/packfileannotations.pmc                             []
@@ -1616,9 +1616,11 @@
 t/dynoplibs/math.t                                          [test]
 t/dynoplibs/obscure.t                                       [test]
 t/dynpmc/dynlexpad.t                                        [test]
+t/dynpmc/file.t                                             [test]
 t/dynpmc/foo.t                                              [test]
 t/dynpmc/foo2.t                                             [test]
 t/dynpmc/gziphandle.t                                       [test]
+t/dynpmc/os.t                                               [test]
 t/dynpmc/pccmethod_test.t                                   [test]
 t/dynpmc/rational.t                                         [test]
 t/dynpmc/rotest.t                                           [test]
@@ -1755,7 +1757,6 @@
 t/op/literal.t                                              [test]
 t/op/load_bytecode.t                                        [test]
 t/op/number.t                                               [test]
-t/op/pushaction.t                                           [test]
 t/op/say.t                                                  [test]
 t/op/spawnw.t                                               [test]
 t/op/sprintf.t                                              [test]
@@ -1809,7 +1810,6 @@
 t/pmc/exception.t                                           [test]
 t/pmc/exceptionhandler.t                                    [test]
 t/pmc/exporter.t                                            [test]
-t/pmc/file.t                                                [test]
 t/pmc/filehandle.t                                          [test]
 t/pmc/fixedbooleanarray.t                                   [test]
 t/pmc/fixedfloatarray.t                                     [test]
@@ -1850,7 +1850,6 @@
 t/pmc/oplib.t                                               [test]
 t/pmc/orderedhash.t                                         [test]
 t/pmc/orderedhashiterator.t                                 [test]
-t/pmc/os.t                                                  [test]
 t/pmc/packfile.t                                            [test]
 t/pmc/packfileannotation.t                                  [test]
 t/pmc/packfileannotations.t                                 [test]

Modified: branches/codestring/MANIFEST.SKIP
==============================================================================
--- branches/codestring/MANIFEST.SKIP	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/MANIFEST.SKIP	Wed May  5 00:05:19 2010	(r46294)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Sat May  1 17:14:25 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Tue May  4 14:32:03 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for
@@ -242,6 +242,8 @@
 ^docs/.*\.tmp/
 ^docs/Makefile$
 ^docs/Makefile/
+^docs/build$
+^docs/build/
 ^docs/doc-prep$
 ^docs/doc-prep/
 ^docs/html$

Modified: branches/codestring/MANIFEST.generated
==============================================================================
--- branches/codestring/MANIFEST.generated	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/MANIFEST.generated	Wed May  5 00:05:19 2010	(r46294)
@@ -72,6 +72,10 @@
 runtime/parrot/dynext/dynlexpad.dll               [library]
 runtime/parrot/dynext/dynlexpad.dylib             [library]
 runtime/parrot/dynext/dynlexpad.so                [library]
+runtime/parrot/dynext/file.bundle                 [library]
+runtime/parrot/dynext/file.dll                    [library]
+runtime/parrot/dynext/file.dylib                  [library]
+runtime/parrot/dynext/file.so                     [library]
 runtime/parrot/dynext/gziphandle.bundle           [library]
 runtime/parrot/dynext/gziphandle.dll              [library]
 runtime/parrot/dynext/gziphandle.dylib            [library]
@@ -88,6 +92,10 @@
 runtime/parrot/dynext/obscure_ops.dll             [library]
 runtime/parrot/dynext/obscure_ops.dylib           [library]
 runtime/parrot/dynext/obscure_ops.so              [library]
+runtime/parrot/dynext/os.bundle                   [library]
+runtime/parrot/dynext/os.dll                      [library]
+runtime/parrot/dynext/os.dylib                    [library]
+runtime/parrot/dynext/os.so                       [library]
 runtime/parrot/dynext/rational.bundle             [library]
 runtime/parrot/dynext/rational.dll                [library]
 runtime/parrot/dynext/rational.dylib              [library]

Modified: branches/codestring/PBC_COMPAT
==============================================================================
--- branches/codestring/PBC_COMPAT	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/PBC_COMPAT	Wed May  5 00:05:19 2010	(r46294)
@@ -27,6 +27,8 @@
 
 # please insert tab separated entries at the top of the list
 
+6.14	2010.05.03	coke	remove popaction, pushmark, pushaction ops.
+6.13	2010.05.03	coke	move File/OS pmcs to src/dynpmc
 6.12	2010.05.02	plobsing	store constant PMC strings as top level constant strings    
 6.11	2010.04.29	tewk	remove ParrotRunningThread
 6.10	2010.04.29	NotFound	packfiledebug.pmc

Modified: branches/codestring/compilers/imcc/cfg.c
==============================================================================
--- branches/codestring/compilers/imcc/cfg.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/compilers/imcc/cfg.c	Wed May  5 00:05:19 2010	(r46294)
@@ -949,18 +949,6 @@
                  *
                  * TT #1244: emit warning in propagate_need()
                  */
-#if 0
-                if (pred->index == 0) {
-                    Instruction *ins = r->life_info[i]->first_ins;
-                    int bbi = ins->bbindex;
-                    for (; ins && ins->bbindex == bbi; ins = ins->next)
-                        if (instruction_reads(ins, r))
-                            break;
-                    IMCC_warning("propagate_need",
-                            "'%s' might be used uninitialized in %s:%d\n",
-                            r->name, function, ins->line);
-                }
-#endif
                 propagate_need(pred, r, i);
             }
         }

Modified: branches/codestring/compilers/imcc/pbc.c
==============================================================================
--- branches/codestring/compilers/imcc/pbc.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/compilers/imcc/pbc.c	Wed May  5 00:05:19 2010	(r46294)
@@ -994,8 +994,8 @@
             &&  Parrot_charset_number_of_str(interp, s)
             ==  Parrot_charset_number_of_str(interp, sc)
             &&  Parrot_encoding_number_of_str(interp, s)
-            ==  Parrot_encoding_number_of_str(interp, sc)
-            ) {
+            ==  Parrot_encoding_number_of_str(interp, sc))
+            {
                 return i;
             }
         }
@@ -1343,17 +1343,6 @@
     }
 
     sub->subid = ct->constants[unit->subid->color]->u.string;
-
-#if 0
-    if (unit->subid) {
-        sub->subid = IMCC_string_from__STRINGC(interp, unit->subid);
-        UNIT_FREE_CHAR(unit->subid);
-        }
-    /* If the unit has no subid, set the subid to match the name. */
-    else
-        sub->subid = sub->name;
-#endif
-
     ns_pmc     = NULL;
 
     if (ns_const >= 0 && ns_const < ct->const_count) {

Modified: branches/codestring/config/auto/zlib/zlib_c.in
==============================================================================
--- branches/codestring/config/auto/zlib/zlib_c.in	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/auto/zlib/zlib_c.in	Wed May  5 00:05:19 2010	(r46294)
@@ -5,6 +5,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <zlib.h>
 
 int

Modified: branches/codestring/config/gen/makefiles/docs.in
==============================================================================
--- branches/codestring/config/gen/makefiles/docs.in	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/gen/makefiles/docs.in	Wed May  5 00:05:19 2010	(r46294)
@@ -51,8 +51,10 @@
 	$(PERL) -I../lib ../tools/docs/write_docs.pl --silent --version=$(VERSION)
 
 # The pdf target is to generate a parrot PDF document.
-# It will not work on Windows. It use the Unix syntax to specify the
-# path of files. May be that will be changed.
+# If you are missing the command 'pdflatex' then you have first to install a
+# LaTeX distribution with it. For Windows and UNIX downloads are for example
+# available from: http://miktex.org, http://tug.org/texlive or
+# http://www.ctan.org
 pdf: ../tools/docs/filename_and_chapter.pl
 	$(MKPATH) build/modified_pod
 	$(PERL) ../tools/docs/filename_and_chapter.pl

Modified: branches/codestring/config/gen/makefiles/root.in
==============================================================================
--- branches/codestring/config/gen/makefiles/root.in	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/gen/makefiles/root.in	Wed May  5 00:05:19 2010	(r46294)
@@ -115,6 +115,9 @@
 # generated by config/init/headers.pm
 NONGEN_HEADERS   = @TEMP_nongen_headers@
 
+# The headerizer
+HEADERIZER       = $(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl
+
 include src/dynpmc/Defines.mak
 include src/dynoplibs/Defines.mak
 include compilers/imcc/Defines.mak
@@ -762,7 +765,7 @@
 	@echo "Fetch from source repository:"
 	@echo "  update:            svn update."
 	@echo "  status:            svn status."
-	@echo "  patch:             Create a patch to attach to https:////trac.parrot.org/"
+	@echo "  patch:             Create a patch to attach to https://trac.parrot.org/"
 	@echo ""
 	@echo "Development:"
 	@echo "  lint:              An alias for sunlint."
@@ -771,11 +774,12 @@
 	@echo "  splint:            Code checking with splint."
 	@echo "  splint-all:        Splint all of Parrot, for the masochist only."
 	@echo "  headerizer:        Recreate header files for C-source files"
-	@echo "  apilist:           Show list of PARROT_EXPORT functions"
+	@echo "  apilist:           Show list of PARROT_API functions"
+	@echo "  exportlist:        Show list of PARROT_EXPORT functions"
 	@echo "  malloclist:        Show list of PARROT_MALLOC functions"
 	@echo "  cover:             Run test suite coverage analysis."
 	@echo "  tags-vi:           Create tags for the vi editor."
-	@echo "  tags-emacs:        Create tags for the EMACS editor."
+	@echo "  tags-emacs:        Create tags for the Emacs editor."
 	@echo "  perlcritic:        Check Perl code with Perl::Critic."
 	@echo ""
 	@echo "Release:"
@@ -808,7 +812,7 @@
 	@rpath_blib@ $(ALL_PARROT_LIBS) $(LINKFLAGS) $(LINK_DYNAMIC)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;1
 
-$(PBC_TO_EXE) : tools/dev/pbc_to_exe.pir runtime/parrot/library/config.pir $(PARROT)
+$(PBC_TO_EXE) : tools/dev/pbc_to_exe.pir runtime/parrot/library/config.pir $(PARROT) $(DYNEXT_DIR)/os$(LOAD_EXT)
 	$(PARROT) -o pbc_to_exe.pbc tools/dev/pbc_to_exe.pir
 	$(PARROT) pbc_to_exe.pbc pbc_to_exe.pbc
 
@@ -1597,8 +1601,8 @@
 htmlhelp-clean :
 	$(MAKE) docs htmlhelp-clean
 
-#UNLESS(win32):pdf:
-#UNLESS(win32):	$(MAKE) docs pdf
+pdf:
+	$(MAKE) docs pdf
 
 pdf-clean:
 	$(MAKE) docs pdf-clean
@@ -2518,13 +2522,16 @@
     $(PIRC_O_FILES)
 
 headerizer : src/core_pmcs.c
-	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl $(HEADERIZER_O_FILES) compilers/imcc/imcc.y
+	$(HEADERIZER) $(HEADERIZER_O_FILES) compilers/imcc/imcc.y
 
 apilist: src/core_pmcs.c
-	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl --macro=PARROT_EXPORT $(HEADERIZER_O_FILES)
+	$(HEADERIZER) --macro=PARROT_API $(HEADERIZER_O_FILES)
+
+exportlist: src/core_pmcs.c
+	$(HEADERIZER) --macro=PARROT_EXPORT $(HEADERIZER_O_FILES)
 
 malloclist: src/core_pmcs.c
-	$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl --macro=PARROT_MALLOC $(HEADERIZER_O_FILES)
+	$(HEADERIZER) --macro=PARROT_MALLOC $(HEADERIZER_O_FILES)
 
 include src/dynpmc/Rules.mak
 include src/dynoplibs/Rules.mak

Modified: branches/codestring/config/gen/platform/generic/env.c
==============================================================================
--- branches/codestring/config/gen/platform/generic/env.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/gen/platform/generic/env.c	Wed May  5 00:05:19 2010	(r46294)
@@ -37,8 +37,8 @@
 void
 Parrot_setenv(PARROT_INTERP, STRING *str_name, STRING *str_value)
 {
-    char *name  = Parrot_str_to_cstring(interp, str_name);
-    char *value = Parrot_str_to_cstring(interp, str_value);
+    char * const name  = Parrot_str_to_cstring(interp, str_name);
+    char * const value = Parrot_str_to_cstring(interp, str_value);
 #ifdef PARROT_HAS_SETENV
     setenv(name, value, 1);
 #else
@@ -96,8 +96,8 @@
 char *
 Parrot_getenv(PARROT_INTERP, STRING *str_name)
 {
-    char *name  = Parrot_str_to_cstring(interp, str_name);
-    char *value = getenv(name);
+    char * const name  = Parrot_str_to_cstring(interp, str_name);
+    char        *value = getenv(name);
     Parrot_str_free_cstring(name);
     return value;
 }

Modified: branches/codestring/config/gen/platform/generic/exec.c
==============================================================================
--- branches/codestring/config/gen/platform/generic/exec.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/gen/platform/generic/exec.c	Wed May  5 00:05:19 2010	(r46294)
@@ -55,7 +55,7 @@
     else {
         /* child */
         char * const cmd    = Parrot_str_to_cstring(interp, command);
-        int          status = execlp("sh", "sh", "-c", cmd, (void *)NULL);
+        const int    status = execlp("sh", "sh", "-c", cmd, (void *)NULL);
 
         /* if we get here, something's horribly wrong, but free anyway... */
         Parrot_str_free_cstring(cmd);

Modified: branches/codestring/config/gen/platform/win32/env.c
==============================================================================
--- branches/codestring/config/gen/platform/win32/env.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/gen/platform/win32/env.c	Wed May  5 00:05:19 2010	(r46294)
@@ -46,8 +46,8 @@
 void
 Parrot_setenv(PARROT_INTERP, STRING *str_name, STRING *str_value)
 {
-    char * name  = Parrot_str_to_cstring(interp, str_name);
-    char * value = Parrot_str_to_cstring(interp, str_value);
+    char * const name  = Parrot_str_to_cstring(interp, str_name);
+    char * const value = Parrot_str_to_cstring(interp, str_value);
     assert(name  != NULL);
     assert(value != NULL);
 
@@ -99,9 +99,9 @@
 char *
 Parrot_getenv(PARROT_INTERP, ARGIN(STRING *str_name))
 {
-    char *name       = Parrot_str_to_cstring(interp, str_name);
-    const DWORD size = GetEnvironmentVariable(name, NULL, 0);
-    char *buffer     = NULL;
+    char * const name = Parrot_str_to_cstring(interp, str_name);
+    const DWORD size  = GetEnvironmentVariable(name, NULL, 0);
+    char *buffer      = NULL;
 
     if (size == 0) {
         Parrot_str_free_cstring(name);

Modified: branches/codestring/config/gen/platform/win32/exec.c
==============================================================================
--- branches/codestring/config/gen/platform/win32/exec.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/config/gen/platform/win32/exec.c	Wed May  5 00:05:19 2010	(r46294)
@@ -41,10 +41,9 @@
     DWORD status = 0;
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
-    int free_it = 0;
-    char* cmd = (char *)mem_sys_allocate(command->strlen + 4);
-    char* shell = Parrot_getenv(interp, Parrot_str_new(interp, "ComSpec", strlen("ComSpec")));
-    char* cmdin = Parrot_str_to_cstring(interp, command);
+    char* const cmd   = (char *)mem_sys_allocate(command->strlen + 4);
+    char* const shell = Parrot_getenv(interp, Parrot_str_new(interp, "ComSpec", strlen("ComSpec")));
+    char* const cmdin = Parrot_str_to_cstring(interp, command);
 
     strcpy(cmd, "/c ");
     strcat(cmd, cmdin);
@@ -67,7 +66,7 @@
     }
     CloseHandle(pi.hProcess);
     CloseHandle(pi.hThread);
-    if (free_it) free(shell);
+    Parrot_str_free_cstring(shell);
     mem_sys_free(cmd);
 
     /* Return exit code left shifted by 8 for POSIX emulation. */
@@ -108,8 +107,8 @@
 
     /* Now build command line. */
     for (i = 0; i < pmclen; i++) {
-        STRING *s = VTABLE_get_string_keyed_int(interp, cmdargs, i);
-        char *cs  = Parrot_str_to_cstring(interp, s);
+        STRING * const s  = VTABLE_get_string_keyed_int(interp, cmdargs, i);
+        char   * const cs = Parrot_str_to_cstring(interp, s);
         if (cmdlinepos + (int)s->strlen + 3 > cmdlinelen) {
             cmdlinelen += s->strlen + 4;
             cmdline = (char *)mem_sys_realloc(cmdline, cmdlinelen);

Modified: branches/codestring/docs/embed.pod
==============================================================================
--- branches/codestring/docs/embed.pod	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/docs/embed.pod	Wed May  5 00:05:19 2010	(r46294)
@@ -1587,7 +1587,7 @@
 
 =item C<Parrot_str_indexed>
 
-=item C<Parrot_string_cstring>
+=item C<Parrot_str_cstring>
 
 =item C<Parrot_str_init>
 

Modified: branches/codestring/docs/pdds/pdd17_pmc.pod
==============================================================================
--- branches/codestring/docs/pdds/pdd17_pmc.pod	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/docs/pdds/pdd17_pmc.pod	Wed May  5 00:05:19 2010	(r46294)
@@ -48,7 +48,6 @@
         VTABLE *vtable;
         DPOINTER *data;
         PMC *_metadata;
-        struct _Sync *_synchronize;    # [Note: may be deprecated, see STM]
     }
 
 C<flags> holds a set of flags associated with the PMC; these are documented

Modified: branches/codestring/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/codestring/docs/pdds/pdd28_strings.pod	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/docs/pdds/pdd28_strings.pod	Wed May  5 00:05:19 2010	(r46294)
@@ -614,11 +614,10 @@
 Old Perl 5-style behavior where "aa" goes to "bb". Only useful for ASCII
 strings, and not terribly useful even there.
 
-=head4 Parrot_string_cstring
+=head4 Parrot_str_cstring
 
 Unsafe, and behavior handled by Parrot_str_to_cstring.
 
-
 =head4 Parrot_str_split
 
 Splits the string C<str> at the delimiter C<delim>.

Modified: branches/codestring/docs/project/debian_packaging_guide.pod
==============================================================================
--- branches/codestring/docs/project/debian_packaging_guide.pod	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/docs/project/debian_packaging_guide.pod	Wed May  5 00:05:19 2010	(r46294)
@@ -82,36 +82,42 @@
 
 =item 6.
 
+Make sure you have C<quilt> installed. Run:
+
+  $ aptitude install quilt
+
+=item 7.
+
 Regenerate the debian/control file. From the
 ~/deb/parrot/parrot-<version>/ directory, run:
 
   $ debian/rules debian-control-stamp
 
-=item 7.
+=item 8.
 
 Install all dependencies:
 
   $ sudo /usr/lib/pbuilder/pbuilder-satisfydepends
 
-=item 8.
+=item 9.
 
 Build the packages. From ~/deb/parrot/parrot_<version>/, run:
 
   $ export DEBSIGN_KEYID="<gpg key id>"
   $ debuild
 
-=item 9.
+=item 10.
 
 Check the package for errors. From ~/deb/parrot, run:
 
   $ lintian -i parrot_<version>.changes
 
-=item 10.
+=item 11.
 
 Commit all changes made to the files in the debian/ directory to the Parrot
 repository.
 
-=item 11.
+=item 12.
 
 Upload the packages to http://alioth.debian.org. (If you don't have admin
 privileges, ask someone who does.) From any of the project pages, click on the
@@ -166,7 +172,7 @@
 =item 2.
 
 Set up a chroot environment for building packages. See
-<http://www.perlfoundation.org/parrot/index.cgi?debian_chroot_setup>.
+<http://trac.parrot.org/parrot/wiki/ChrootSetup>.
 
 =back
 

Modified: branches/codestring/examples/embed/Makefile
==============================================================================
--- branches/codestring/examples/embed/Makefile	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/examples/embed/Makefile	Wed May  5 00:05:19 2010	(r46294)
@@ -12,6 +12,7 @@
 
 CC = $(shell parrot_config cc)
 CCFLAGS = $(shell parrot_config ccflags)
+CCWARN = $(shell parrot_config ccwarn)
 LD = $(shell parrot_config ld)
 LD_OUT = $(shell parrot_config ld_out)
 LINKFLAGS = $(shell parrot_config inst_libparrot_linkflags) $(shell parrot_config rpath_lib)
@@ -28,7 +29,7 @@
 #-----------------------------------------------------------------------
 
 cotorra$(O): cotorra.c
-	$(CC) $(CCFLAGS) -c -I $(INCLUDEDIR) cotorra.c
+	$(CC) $(CCFLAGS) $(CCWARN) -c -I $(INCLUDEDIR) cotorra.c
 
 cotorra$(EXE): cotorra$(O)
 	$(LD) $(LD_OUT)cotorra$(EXE) cotorra$(O) $(CONFIG)$(O) $(LINKFLAGS)

Modified: branches/codestring/examples/pir/io.pir
==============================================================================
--- branches/codestring/examples/pir/io.pir	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/examples/pir/io.pir	Wed May  5 00:05:19 2010	(r46294)
@@ -37,6 +37,7 @@
     print $S0
 
     # now clean up after ourselves.
+    $P0 = loadlib 'os'
     $P1 = new "OS"
     $P1."rm"(test_fn)
 

Modified: branches/codestring/examples/tutorial/40_file_ops.pir
==============================================================================
--- branches/codestring/examples/tutorial/40_file_ops.pir	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/examples/tutorial/40_file_ops.pir	Wed May  5 00:05:19 2010	(r46294)
@@ -20,6 +20,7 @@
     close filein
 
     # Be nice and remove the temporary file we created.
+    $P0 = loadlib 'os'
     $P1 = new ['OS']
     $P1.'rm'('40_file_ops_data.txt')
 .end

Modified: branches/codestring/include/parrot/gc_api.h
==============================================================================
--- branches/codestring/include/parrot/gc_api.h	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/include/parrot/gc_api.h	Wed May  5 00:05:19 2010	(r46294)
@@ -179,11 +179,6 @@
 int Parrot_gc_active_sized_buffers(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-void Parrot_gc_add_pmc_sync(PARROT_INTERP, ARGMOD(PMC *pmc))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*pmc);
-
 void Parrot_gc_allocate_buffer_storage_aligned(PARROT_INTERP,
     ARGOUT(Buffer *buffer),
     size_t size)
@@ -257,10 +252,6 @@
         __attribute__nonnull__(2)
         FUNC_MODIFIES(*pmc);
 
-void Parrot_gc_free_pmc_sync(SHIM_INTERP, ARGMOD(PMC *p))
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*p);
-
 void Parrot_gc_free_string_header(PARROT_INTERP, ARGMOD(STRING *s))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2)
@@ -370,9 +361,6 @@
 #define ASSERT_ARGS_Parrot_gc_active_sized_buffers \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_gc_add_pmc_sync __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_gc_allocate_buffer_storage_aligned \
      __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
@@ -419,8 +407,6 @@
 #define ASSERT_ARGS_Parrot_gc_free_pmc_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
-#define ASSERT_ARGS_Parrot_gc_free_pmc_sync __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(p))
 #define ASSERT_ARGS_Parrot_gc_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))

Modified: branches/codestring/include/parrot/pmc_freeze.h
==============================================================================
--- branches/codestring/include/parrot/pmc_freeze.h	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/include/parrot/pmc_freeze.h	Wed May  5 00:05:19 2010	(r46294)
@@ -122,6 +122,7 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 STRING * Parrot_freeze_pbc(PARROT_INTERP,
     ARGIN(PMC *pmc),
     ARGIN(const PackFile_ConstTable *pf))
@@ -147,8 +148,9 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
-PMC * Parrot_freeze_strings(PARROT_INTERP, PMC *pmc)
-        __attribute__nonnull__(1);
+PMC * Parrot_freeze_strings(PARROT_INTERP, ARGIN(PMC *pmc))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
@@ -200,7 +202,8 @@
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_freeze_strings __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
+       PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_Parrot_thaw __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(image))

Modified: branches/codestring/include/parrot/pobj.h
==============================================================================
--- branches/codestring/include/parrot/pobj.h	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/include/parrot/pobj.h	Wed May  5 00:05:19 2010	(r46294)
@@ -83,8 +83,6 @@
     const struct _charset  *charset;
 };
 
-struct _Sync;   /* forward decl */
-
 /* note that cache and flags are isomorphic with Buffer and PObj */
 struct PMC {
     Parrot_UInt     flags;
@@ -92,17 +90,11 @@
     DPOINTER       *data;
 
     PMC *_metadata;      /* properties */
-    /*
-     * PMC access synchronization for shared PMCs
-     * s. parrot/thread.h
-     */
-    struct _Sync *_synchronize;
 };
 
 #define PMC_data(pmc)                   (pmc)->data
 #define PMC_data_typed(pmc, type) (type)(pmc)->data
 #define PMC_metadata(pmc)         ((pmc)->_metadata)
-#define PMC_sync(pmc)             ((pmc)->_synchronize)
 
 #define POBJ_FLAG(n) ((UINTVAL)1 << (n))
 /* PObj flags */

Modified: branches/codestring/include/parrot/string_funcs.h
==============================================================================
--- branches/codestring/include/parrot/string_funcs.h	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/include/parrot/string_funcs.h	Wed May  5 00:05:19 2010	(r46294)
@@ -114,6 +114,12 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
+PARROT_PURE_FUNCTION
+PARROT_CANNOT_RETURN_NULL
+const char * Parrot_str_cstring(SHIM_INTERP, ARGIN(const STRING *str))
+        __attribute__nonnull__(2);
+
+PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PARROT_MALLOC
 STRING * Parrot_str_downcase(PARROT_INTERP, ARGIN_NULLOK(const STRING *s))
@@ -380,12 +386,6 @@
         __attribute__nonnull__(1);
 
 PARROT_EXPORT
-PARROT_PURE_FUNCTION
-PARROT_CANNOT_RETURN_NULL
-const char * Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
 STRING * string_chr(PARROT_INTERP, UINTVAL character)
@@ -399,11 +399,6 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-PARROT_HOT
-PARROT_PURE_FUNCTION
-INTVAL STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
-
-PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 STRING * string_make(PARROT_INTERP,
@@ -502,6 +497,8 @@
 #define ASSERT_ARGS_Parrot_str_copy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_Parrot_str_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_Parrot_str_downcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_str_equal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -590,14 +587,11 @@
     , PARROT_ASSERT_ARG(s))
 #define ASSERT_ARGS_Parrot_str_upcase __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_string_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(str))
 #define ASSERT_ARGS_string_chr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_string_increment __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(s))
-#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #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 = (\

Modified: branches/codestring/include/parrot/sub.h
==============================================================================
--- branches/codestring/include/parrot/sub.h	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/include/parrot/sub.h	Wed May  5 00:05:19 2010	(r46294)
@@ -31,9 +31,6 @@
     SUB_FLAG_PF_IMMEDIATE = PObj_private6_FLAG,
     SUB_FLAG_PF_POSTCOMP  = PObj_private7_FLAG,
 
-    /* [temporary expedient.  -- rgr, 13-Jul-08.] */
-    SUB_FLAG_NEWCLOSURE   = SUB_FLAG_PF_IMMEDIATE,
-
     SUB_FLAG_PF_MASK      = SUB_FLAG_PF_ANON
                           | SUB_FLAG_PF_MAIN
                           | SUB_FLAG_PF_LOAD

Modified: branches/codestring/include/parrot/thread.h
==============================================================================
--- branches/codestring/include/parrot/thread.h	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/include/parrot/thread.h	Wed May  5 00:05:19 2010	(r46294)
@@ -147,12 +147,6 @@
 /* TODO use thread pools instead */
 VAR_SCOPE Shared_gc_info *shared_gc_info;
 
-typedef struct _Sync {
-    Parrot_Interp owner;                /* that interpreter, that owns
-                                           the arena, where the PMC is in */
-    Parrot_mutex pmc_lock;              /* for wr access to PMCs content */
-} Sync;
-
 /* HEADERIZER BEGIN: src/thread.c */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
@@ -164,6 +158,12 @@
 void Parrot_shared_gc_unblock(PARROT_INTERP)
         __attribute__nonnull__(1);
 
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+PMC * pt_thread_create(PARROT_INTERP, INTVAL type, INTVAL clone_flags)
+        __attribute__nonnull__(1);
+
 void pt_add_to_interpreters(PARROT_INTERP,
     ARGIN_NULLOK(Parrot_Interp new_interp))
         __attribute__nonnull__(1);
@@ -194,9 +194,6 @@
 void pt_suspend_self_for_gc(PARROT_INTERP)
         __attribute__nonnull__(1);
 
-PMC * pt_thread_create(PARROT_INTERP, INTVAL type, INTVAL clone_flags)
-        __attribute__nonnull__(1);
-
 int pt_thread_create_run(PARROT_INTERP,
     INTVAL type,
     INTVAL clone_flags,
@@ -213,11 +210,13 @@
 void pt_thread_kill(UINTVAL tid);
 void pt_thread_prepare_for_run(Parrot_Interp d, NULLOK(Parrot_Interp s));
 int pt_thread_run(PARROT_INTERP,
-    PMC *thread_interp_pmc,
+    ARGMOD(PMC *thread_interp_pmc),
     ARGIN(PMC *sub),
     ARGIN_NULLOK(PMC *arg))
         __attribute__nonnull__(1)
-        __attribute__nonnull__(3);
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3)
+        FUNC_MODIFIES(*thread_interp_pmc);
 
 void pt_thread_wait_with(PARROT_INTERP, ARGMOD(Parrot_mutex *mutex))
         __attribute__nonnull__(1)
@@ -239,6 +238,8 @@
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_Parrot_shared_gc_unblock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
+#define ASSERT_ARGS_pt_thread_create __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pt_add_to_interpreters __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pt_clone_code __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -258,8 +259,6 @@
     , PARROT_ASSERT_ARG(pmc))
 #define ASSERT_ARGS_pt_suspend_self_for_gc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_pt_thread_create __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_pt_thread_create_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(sub))
@@ -270,6 +269,7 @@
 #define ASSERT_ARGS_pt_thread_prepare_for_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_pt_thread_run __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
+    , PARROT_ASSERT_ARG(thread_interp_pmc) \
     , PARROT_ASSERT_ARG(sub))
 #define ASSERT_ARGS_pt_thread_wait_with __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \

Modified: branches/codestring/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/codestring/lib/Parrot/Pmc2c/PMCEmitter.pm	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/lib/Parrot/Pmc2c/PMCEmitter.pm	Wed May  5 00:05:19 2010	(r46294)
@@ -741,8 +741,9 @@
     my $flag_auto_attrs = $self->{flags}{auto_attrs};
     my $flag_manual_attrs = $self->{flags}{manual_attrs};
     die 'manual_attrs and auto_attrs can not be used together'
+         . 'in PMC ' . $self->name
         if ($flag_auto_attrs && $flag_manual_attrs);
-    warn 'PMC has attributes but no auto_attrs or manual_attrs'
+    die 'PMC ' . $self->name . ' has attributes but no auto_attrs or manual_attrs'
         if (@{$self->attributes} && ! ($flag_auto_attrs || $flag_manual_attrs));
 
     if ( @{$self->attributes} &&  $flag_auto_attrs) {

Modified: branches/codestring/ports/debian/changelog
==============================================================================
--- branches/codestring/ports/debian/changelog	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/ports/debian/changelog	Wed May  5 00:05:19 2010	(r46294)
@@ -1,3 +1,13 @@
+parrot (2.3.0-1) unstable; urgency=low
+  * New upstream release
+  * debian/patches:
+    - Removed 01_fix_doc_install.patch, change included upstream.
+    - Removed 02_fix_man_whatis.patch, change included upstream.
+  * control.in
+    - Removed package dependency on libgdbm-dev, no longer used.
+
+ -- Allison Randal <allison at parrot.org>  Tue, 27 Apr 2010 18:03:12 +0100
+
 parrot (2.0.0-1) unstable; urgency=low
   * New upstream release
   * parrot-devel.install.in

Deleted: branches/codestring/ports/debian/patches/01_fix_doc_install.patch
==============================================================================
--- branches/codestring/ports/debian/patches/01_fix_doc_install.patch	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,11 +0,0 @@
---- parrot-2.0.0.orig/config/gen/makefiles/root.in
-+++ parrot-2.0.0/config/gen/makefiles/root.in
-@@ -2664,6 +2664,7 @@
-     --buildprefix=$(BUILDPREFIX) \
-     --prefix=$(PREFIX) \
-     --docdir=$(DOC_DIR) \
-+    --destdir=$(DESTDIR) \
-     --versiondir=$(VERSION_DIR) \
-     MANIFEST MANIFEST.generated
- 
-

Deleted: branches/codestring/ports/debian/patches/02_fix_man_whatis.patch
==============================================================================
--- branches/codestring/ports/debian/patches/02_fix_man_whatis.patch	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,22 +0,0 @@
---- parrot-2.0.0.orig/tools/dev/pbc_to_exe.pir
-+++ parrot-2.0.0/tools/dev/pbc_to_exe.pir
-@@ -4,7 +4,7 @@
- 
- =head1 NAME
- 
--pbc_to_exe
-+pbc_to_exe - Generate executables from Parrot bytecode
- 
- =head1 DESCRIPTION
- 
---- parrot-2.0.0.orig/src/parrot_debugger.c
-+++ parrot-2.0.0/src/parrot_debugger.c
-@@ -4,7 +4,7 @@
- 
- =head1 NAME
- 
--parrot_debugger
-+parrot_debugger - The Parrot Debugger
- 
- =head1 DESCRIPTION
- 

Modified: branches/codestring/ports/debian/patches/series
==============================================================================
--- branches/codestring/ports/debian/patches/series	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/ports/debian/patches/series	Wed May  5 00:05:19 2010	(r46294)
@@ -1,3 +1 @@
-01_fix_doc_install.patch
-02_fix_man_whatis.patch
 03_fix_nqp_man.patch

Modified: branches/codestring/runtime/parrot/library/ProfTest/PIRProfile.nqp
==============================================================================
--- branches/codestring/runtime/parrot/library/ProfTest/PIRProfile.nqp	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/runtime/parrot/library/ProfTest/PIRProfile.nqp	Wed May  5 00:05:19 2010	(r46294)
@@ -92,6 +92,7 @@
     my $pprof_fh  := pir::new__p_sc('FileHandle');
     self<profile> := $pprof_fh.readall($tmp_pprof);
 
+    pir::loadlib__ps('os');
     pir::new__p_sc('OS').rm($tmp_pir);
     pir::new__p_sc('OS').rm($tmp_pprof);
 }

Modified: branches/codestring/runtime/parrot/library/osutils.pir
==============================================================================
--- branches/codestring/runtime/parrot/library/osutils.pir	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/runtime/parrot/library/osutils.pir	Wed May  5 00:05:19 2010	(r46294)
@@ -9,6 +9,12 @@
 
 =over 4
 
+=cut
+
+.sub '' :init :load :anon
+    $P0 = loadlib 'os'
+.end
+
 =item system
 
 =cut

Modified: branches/codestring/src/debug.c
==============================================================================
--- branches/codestring/src/debug.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/debug.c	Wed May  5 00:05:19 2010	(r46294)
@@ -1157,22 +1157,6 @@
     /* Erase the stopped flag */
     pdb->state &= ~PDB_STOPPED;
 
-    /* Testing use of the debugger runloop */
-    #if 0
-
-    /* Execute */
-    for (; n && pdb->cur_opcode; --n)
-        DO_OP(pdb->cur_opcode, pdb->debugee);
-
-    /* Set the stopped flag */
-    pdb->state |= PDB_STOPPED;
-
-    /* If program ended */
-
-    if (!pdb->cur_opcode)
-        (void)PDB_program_end(interp);
-    #endif
-
     debugee     = pdb->debugee;
 
     new_runloop_jump_point(debugee);
@@ -1684,27 +1668,6 @@
         PDB_skip_breakpoint(interp, ln);
     }
 
-    /* Run while no break point is reached */
-    /*
-    while (!PDB_break(interp))
-        DO_OP(pdb->cur_opcode, pdb->debugee);
-    */
-
-    #if 0
-    pdb->tracing           = 0;
-    Parrot_runcore_switch(pdb->debugee, CONST_STRING(interp, "debugger"));
-
-    new_internal_exception(pdb->debugee);
-    if (setjmp(pdb->debugee->exceptions->destination)) {
-        Parrot_io_eprintf(pdb->debugee, "Unhandled exception while debugging: %Ss\n",
-            pdb->debugee->exceptions->msg);
-        pdb->state |= PDB_STOPPED;
-        return;
-    }
-    runops_int(pdb->debugee, pdb->debugee->code->base.data - pdb->cur_opcode);
-    if (!pdb->cur_opcode)
-        (void)PDB_program_end(interp);
-    #endif
     pdb->state |= PDB_RUNNING;
     pdb->state &= ~PDB_BREAK;
     pdb->state &= ~PDB_STOPPED;

Modified: branches/codestring/src/dynpmc/Defines.in
==============================================================================
--- branches/codestring/src/dynpmc/Defines.in	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/dynpmc/Defines.in	Wed May  5 00:05:19 2010	(r46294)
@@ -4,7 +4,9 @@
 DYNPMC_TARGETS = \
 #IF(has_zlib):    $(DYNEXT_DIR)/gziphandle$(LOAD_EXT) \
     $(DYNEXT_DIR)/dynlexpad$(LOAD_EXT) \
+    $(DYNEXT_DIR)/file$(LOAD_EXT) \
     $(DYNEXT_DIR)/foo_group$(LOAD_EXT) \
+    $(DYNEXT_DIR)/os$(LOAD_EXT) \
     $(DYNEXT_DIR)/pccmethod_test$(LOAD_EXT) \
     $(DYNEXT_DIR)/rotest$(LOAD_EXT) \
     $(DYNEXT_DIR)/rational$(LOAD_EXT) \

Modified: branches/codestring/src/dynpmc/Rules.in
==============================================================================
--- branches/codestring/src/dynpmc/Rules.in	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/dynpmc/Rules.in	Wed May  5 00:05:19 2010	(r46294)
@@ -14,6 +14,23 @@
 src/dynpmc/dynlexpad.dump: src/dynpmc/dynlexpad.pmc vtable.dump $(CLASS_O_FILES)
 	$(PMC2CD) src/dynpmc/dynlexpad.pmc
 
+
+
+$(DYNEXT_DIR)/file$(LOAD_EXT): src/dynpmc/file$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/file$(LOAD_EXT) src/dynpmc/file$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/file$(O): src/dynpmc/file.c $(DYNPMC_H_FILES)
+
+src/dynpmc/file.c: src/dynpmc/file.dump
+	$(PMC2CC) src/dynpmc/file.pmc
+
+src/dynpmc/file.dump: src/dynpmc/file.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/file.pmc
+
+
+
 $(DYNEXT_DIR)/foo_group$(LOAD_EXT): $(DYNPMC_FOO_OBJS) src/dynpmc/foo_group$(O)
 	$(LD)  @ld_out@$(DYNEXT_DIR)/foo_group$(LOAD_EXT) src/dynpmc/foo_group$(O) $(DYNPMC_FOO_OBJS) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -42,6 +59,38 @@
 src/dynpmc/foo2.dump: src/dynpmc/foo2.pmc src/dynpmc/foo.dump vtable.dump $(CLASS_O_FILES)
 	$(PMC2CD) src/dynpmc/foo2.pmc
 
+
+
+$(DYNEXT_DIR)/gziphandle$(LOAD_EXT): src/dynpmc/gziphandle$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/gziphandle$(LOAD_EXT) src/dynpmc/gziphandle$(O) $(LINKARGS) $(LIB_ZLIB)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/gziphandle$(O): src/dynpmc/gziphandle.c $(DYNPMC_H_FILES)
+
+src/dynpmc/gziphandle.c: src/dynpmc/gziphandle.dump
+	$(PMC2CC) src/dynpmc/gziphandle.pmc
+
+src/dynpmc/gziphandle.dump: src/dynpmc/gziphandle.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/gziphandle.pmc
+
+
+
+$(DYNEXT_DIR)/os$(LOAD_EXT): src/dynpmc/os$(O)
+	$(LD)  @ld_out@$(DYNEXT_DIR)/os$(LOAD_EXT) src/dynpmc/os$(O) $(LINKARGS)
+#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux):   $(CHMOD) 0775 $@
+
+src/dynpmc/os$(O): src/dynpmc/os.c $(DYNPMC_H_FILES)
+
+src/dynpmc/os.c: src/dynpmc/os.dump
+	$(PMC2CC) src/dynpmc/os.pmc
+
+src/dynpmc/os.dump: src/dynpmc/os.pmc vtable.dump $(CLASS_O_FILES)
+	$(PMC2CD) src/dynpmc/os.pmc
+
+
+
 $(DYNEXT_DIR)/pccmethod_test$(LOAD_EXT): src/dynpmc/pccmethod_test$(O)
 	$(LD)  @ld_out@$(DYNEXT_DIR)/pccmethod_test$(LOAD_EXT) src/dynpmc/pccmethod_test$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -54,6 +103,8 @@
 src/dynpmc/pccmethod_test.dump: src/dynpmc/pccmethod_test.pmc vtable.dump $(CLASS_O_FILES)
 	$(PMC2CD) src/dynpmc/pccmethod_test.pmc
 
+
+
 $(DYNEXT_DIR)/rotest$(LOAD_EXT): src/dynpmc/rotest$(O)
 	$(LD)  @ld_out@$(DYNEXT_DIR)/rotest$(LOAD_EXT) src/dynpmc/rotest$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -67,6 +118,8 @@
 src/dynpmc/rotest.dump: src/dynpmc/rotest.pmc vtable.dump $(CLASS_O_FILES)
 	$(PMC2CD) src/dynpmc/rotest.pmc
 
+
+
 $(DYNEXT_DIR)/rational$(LOAD_EXT): src/dynpmc/rational$(O)
 	$(LD)  @ld_out@$(DYNEXT_DIR)/rational$(LOAD_EXT) src/dynpmc/rational$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -80,6 +133,8 @@
 src/dynpmc/rational.dump: src/dynpmc/rational.pmc vtable.dump $(CLASS_O_FILES)
 	$(PMC2CD) src/dynpmc/rational.pmc
 
+
+
 $(DYNEXT_DIR)/subproxy$(LOAD_EXT): src/dynpmc/subproxy$(O)
 	$(LD)  @ld_out@$(DYNEXT_DIR)/subproxy$(LOAD_EXT) src/dynpmc/subproxy$(O) $(LINKARGS)
 #IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
@@ -92,17 +147,3 @@
 
 src/dynpmc/subproxy.dump: src/dynpmc/subproxy.pmc vtable.dump $(CLASS_O_FILES)
 	$(PMC2CD) src/dynpmc/subproxy.pmc
-
-$(DYNEXT_DIR)/gziphandle$(LOAD_EXT): src/dynpmc/gziphandle$(O)
-	$(LD)  @ld_out@$(DYNEXT_DIR)/gziphandle$(LOAD_EXT) src/dynpmc/gziphandle$(O) $(LINKARGS) $(LIB_ZLIB)
-#IF(win32):	if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-#IF(cygwin or hpux):   $(CHMOD) 0775 $@
-
-src/dynpmc/gziphandle$(O): src/dynpmc/gziphandle.c $(DYNPMC_H_FILES)
-
-src/dynpmc/gziphandle.c: src/dynpmc/gziphandle.dump
-	$(PMC2CC) src/dynpmc/gziphandle.pmc
-
-src/dynpmc/gziphandle.dump: src/dynpmc/gziphandle.pmc vtable.dump $(CLASS_O_FILES)
-	$(PMC2CD) src/dynpmc/gziphandle.pmc
-

Copied: branches/codestring/src/dynpmc/file.pmc (from r46293, trunk/src/dynpmc/file.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/codestring/src/dynpmc/file.pmc	Wed May  5 00:05:19 2010	(r46294, copy of r46293, trunk/src/dynpmc/file.pmc)
@@ -0,0 +1,287 @@
+/*
+Copyright (C) 2001-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/file.pmc - File PMC
+
+=head1 DESCRIPTION
+
+C<File> is a singleton class which provides access to File functions.
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+#ifdef WIN32
+#  include <direct.h>
+#endif
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+/* TT #1050 apparently, strerror_r is thread-safe and should be used instead.*/
+
+static PMC *File_PMC;
+pmclass File dynpmc singleton {
+
+/*
+
+=item C<void *get_pointer()>
+
+=item C<void set_pointer(void *ptr)>
+
+These two functions are part of the singleton creation interface. For more
+information see F<src/pmc.c>.
+
+=cut
+
+*/
+    void class_init() {
+        File_PMC = NULL;
+    }
+
+    VTABLE void *get_pointer() {
+        return File_PMC;
+    }
+
+    VTABLE void set_pointer(void *ptr) {
+        File_PMC = (PMC *)ptr;
+    }
+
+/*
+
+=item C<INTVAL exists(STRING *file)>
+
+Returns a true value (1) if the supplied file or directory exists.
+
+=cut
+
+*/
+
+    METHOD exists(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(interp, path);
+#ifdef WIN32
+        const int error = stat(cpath, &info);
+#else
+        const int error = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error)
+            RETURN(INTVAL 0);
+
+        RETURN(INTVAL 1);
+    }
+
+/*
+
+=item C<INTVAL is_dir(STRING *path)>
+
+Returns a true value (1) if the supplied path is a directory.
+
+=cut
+
+*/
+
+    METHOD is_dir(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(interp, path);
+#ifdef WIN32
+        const int error = stat(cpath, &info);
+#else
+        const int error = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISDIR(info.st_mode))
+            RETURN(INTVAL 1);
+        else
+            RETURN(INTVAL 0);
+    }
+
+/*
+
+=item C<INTVAL is_file(STRING *path)>
+
+Returns a true value (1) if the supplied path is a plain file.
+
+=cut
+
+*/
+
+    METHOD is_file(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(interp, path);
+#ifdef WIN32
+        int error   = stat(cpath, &info);
+#else
+        int error   = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISREG(info.st_mode))
+            RETURN(INTVAL 1);
+        else
+            RETURN(INTVAL 0);
+    }
+
+/*
+
+=item C<INTVAL is_link(STRING *path)>
+
+Returns a true value (1) if the supplied path is a link.
+
+=cut
+
+*/
+
+    METHOD is_link(STRING *path) {
+#ifdef WIN32
+        /* I love win32 implementations */
+        RETURN(INTVAL 0);
+#else
+        struct stat info;
+
+        char * const cpath = Parrot_str_to_cstring(interp, path);
+        const int    error = lstat(cpath, &info);
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISLNK(info.st_mode))
+            RETURN(INTVAL 1);
+        else
+            RETURN(INTVAL 0);
+#endif
+    }
+
+/*
+
+=item C<void copy(STRING *from, STRING *to)>
+
+Copy the contents from file represented by path C<from> to the path
+C<to>.
+
+Uses the "work everywhere method". It is good enough to start with.
+
+NOTE: I'm sure that there should be more efficient ways to do this. Be
+free to change or give me hints on how to change it. -- ambs
+
+=cut
+
+*/
+
+    METHOD copy(STRING *from, STRING *to) {
+#define CHUNK_SIZE 1024
+
+        char * const cfrom  = Parrot_str_to_cstring(interp, from);
+        FILE * const source = fopen(cfrom, "rb");
+
+        Parrot_str_free_cstring(cfrom);
+
+        if (source) {
+            char * const cto    = Parrot_str_to_cstring(interp, to);
+            FILE * const target = fopen(cto, "w+b");
+
+            Parrot_str_free_cstring(cto);
+
+            if (target) {
+                while (!feof(source)) {
+                    char buf[CHUNK_SIZE];
+                    const size_t bytes_read = fread(buf, 1, CHUNK_SIZE, source);
+
+                    if (bytes_read) {
+                        const size_t bytes_written = fwrite(buf, 1, bytes_read, target);
+                        if (bytes_read != bytes_written) {
+                            Parrot_ex_throw_from_c_args(interp, NULL,
+                                EXCEPTION_EXTERNAL_ERROR, "Error writing file");
+                            break;
+                        }
+                    }
+                }
+                fclose(target);
+            }
+            else {
+                const char * const errmsg = strerror(errno);
+                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
+                    errmsg);
+            }
+            fclose(source);
+        }
+        else {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+#undef CHUNK_SIZE
+    }
+
+/*
+
+=item C<void rename(STRING *from, STRING *to)>
+
+Rename a file C<from> to the path C<to>.
+
+=cut
+
+*/
+
+    METHOD rename(STRING *from, STRING *to) {
+        char * const cfrom = Parrot_str_to_cstring(interp, from);
+        char * const   cto = Parrot_str_to_cstring(interp, to);
+        const int    error = rename(cfrom, cto);
+
+        Parrot_str_free_cstring(cfrom);
+        Parrot_str_free_cstring(cto);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+}
+
+/*
+
+=back
+
+=head1 SEE ALS0
+
+   stat(2), rename(2)
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/codestring/src/dynpmc/gziphandle.pmc
==============================================================================
--- branches/codestring/src/dynpmc/gziphandle.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/dynpmc/gziphandle.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -76,11 +76,11 @@
 */
     METHOD open(STRING *filename, STRING *mode :optional,
                                INTVAL has_mode :opt_flag) {
-        char *path  = Parrot_str_to_cstring(INTERP, filename);
+        char * const path  = Parrot_str_to_cstring(INTERP, filename);
         gzFile file;
 
         if (has_mode) {
-            char *mod = Parrot_str_to_cstring(INTERP, mode);
+            char * const mod = Parrot_str_to_cstring(INTERP, mode);
             file      = gzopen(path, mod);
             Parrot_str_free_cstring(mod);
         }
@@ -161,8 +161,9 @@
     METHOD print(PMC *value) {
         gzFile file;
         STRING * const str = VTABLE_get_string(INTERP, value);
-        char *buf = Parrot_str_to_cstring(INTERP, str);
-        UINTVAL len =  Parrot_str_byte_length(INTERP, str);
+        char   * const buf = Parrot_str_to_cstring(INTERP, str);
+        const UINTVAL  len =  Parrot_str_byte_length(INTERP, str);
+
         GET_ATTR_file(INTERP, SELF, file);
         (void)gzwrite(file, buf, len);
         Parrot_str_free_cstring(buf);
@@ -181,8 +182,9 @@
     METHOD puts(STRING *value) {
         INTVAL status;
         gzFile file;
-        char *buf = Parrot_str_to_cstring(INTERP, value);
-        UINTVAL len =  Parrot_str_byte_length(INTERP, value);
+        char * const  buf = Parrot_str_to_cstring(INTERP, value);
+        const UINTVAL len =  Parrot_str_byte_length(INTERP, value);
+
         GET_ATTR_file(INTERP, SELF, file);
         status =  gzwrite(file, buf, len);
         Parrot_str_free_cstring(buf);
@@ -248,7 +250,7 @@
         char *buf;
         STRING *dst = NULL;
         UINTVAL srcLen, bufSize, dstLen;
-        char *src = Parrot_str_to_cstring(INTERP, str);
+        char * const src = Parrot_str_to_cstring(INTERP, str);
 
         if (!src)
             Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_ILL_INHERIT,

Copied: branches/codestring/src/dynpmc/os.pmc (from r46293, trunk/src/dynpmc/os.pmc)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/codestring/src/dynpmc/os.pmc	Wed May  5 00:05:19 2010	(r46294, copy of r46293, trunk/src/dynpmc/os.pmc)
@@ -0,0 +1,610 @@
+/*
+Copyright (C) 2001-2010, Parrot Foundation.
+$Id$
+
+=head1 NAME
+
+src/pmc/os.pmc - Files and Directories PMC
+
+=head1 DESCRIPTION
+
+C<OS> is a singleton class which provides access to the filesystem
+files and directories.
+
+=head2 Methods
+
+=over 4
+
+=cut
+
+*/
+
+#if defined(_MSC_VER)
+#  include <direct.h>
+#  include <io.h>
+#  include <tchar.h>
+#  include <windows.h>
+#elif defined(__BORLANDC__)
+#  include <dir.h>
+#  include <dirent.h>
+#else
+#  include <dirent.h>
+#endif
+
+/* XXX Check if we need to deallocate strerror strings */
+/* XXX apparently, strerror_r is thread-safe and should be used instead.*/
+
+/* HEADERIZER HFILE: none */
+/* HEADERIZER BEGIN: static */
+/* HEADERIZER END: static */
+
+static PMC *OS_PMC;
+pmclass OS dynpmc singleton {
+
+/*
+
+=item C<void *get_pointer()>
+
+=item C<void set_pointer(void *ptr)>
+
+These two functions are part of the singleton creation interface. For more
+information see F<src/pmc.c>.
+
+=cut
+
+*/
+
+    void class_init() {
+        OS_PMC = NULL;
+    }
+
+    VTABLE void *get_pointer() {
+        return OS_PMC;
+    }
+
+    VTABLE void set_pointer(void *ptr) {
+        OS_PMC = (PMC *)ptr;
+    }
+
+
+/*
+
+=item C<STRING *cwd()>
+
+Returns the current working directory.
+
+=cut
+
+*/
+
+    METHOD cwd() {
+        char *cwd;
+#ifdef _MSC_VER
+        cwd = _getcwd(NULL, 0);
+        /* capitalize the drive letter */
+        cwd[0] = (char)toupper((unsigned char)cwd[0]);
+#else
+#  ifdef PATH_MAX
+        cwd = getcwd(NULL, PATH_MAX+1);
+#  else
+        cwd = getcwd(NULL, 0);
+#  endif
+#endif
+        if (cwd) {
+            STRING * const scwd = Parrot_str_new(INTERP, cwd, strlen(cwd));
+            free(cwd);
+            RETURN(STRING *scwd);
+        }
+        else {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+/*
+
+=item C<void chdir(STRING *path)>
+
+Changes the current working directory to the one specified by C<path>.
+
+=cut
+
+*/
+
+    METHOD chdir(STRING *path) {
+        int error;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef _MSC_VER
+        error = _chdir(cpath);
+#else
+        error = chdir(cpath);
+#endif
+        Parrot_str_free_cstring(cpath);
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+/*
+
+=item C<void rm(STRING *path)>
+
+Calls C<remove> to remove the file or empty directory specified by
+C<path>.
+
+=cut
+
+*/
+
+    METHOD rm(STRING *path) {
+        struct stat info;
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        int          error = stat(cpath, &info);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_str_free_cstring(cpath);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        if (S_ISDIR(info.st_mode)) {
+#ifdef _MSC_VER
+            error = _rmdir(cpath);
+#else
+            error = rmdir(cpath);
+#endif
+            Parrot_str_free_cstring(cpath);
+            if (error) {
+                const char * const errmsg = strerror(errno);
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                    errmsg);
+            }
+        }
+        else {
+            error = remove(cpath);
+            Parrot_str_free_cstring(cpath);
+            if (error) {
+                const char * const errmsg = strerror(errno);
+                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                    errmsg);
+            }
+        }
+    }
+
+/*
+
+=item C<void mkdir(STRING *path, STRING *mode)>
+
+Creates a directory specified by C<path> with mode C<mode>.
+
+=cut
+
+*/
+
+    METHOD mkdir(STRING *path, INTVAL mode) {
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        /* should we validate mode? */
+#ifdef WIN32
+        const int error = _mkdir(cpath);
+#else
+        const int error = mkdir(cpath, (mode_t)mode);
+#endif
+        Parrot_str_free_cstring(cpath);
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+/*
+
+=item C<fixedpmcarray *stat(STRING *path)>
+
+Stats a file, and returns a 13 position array as in Perl:
+
+     0 dev      device number of filesystem
+     1 ino      inode number
+     2 mode     file mode  (type and permissions)
+     3 nlink    number of (hard) links to the file
+     4 uid      numeric user ID of file's owner
+     5 gid      numeric group ID of file's owner
+     6 rdev     the device identifier (special files only)
+     7 size     total size of file, in bytes
+     8 atime    last access time in seconds since the epoch
+     9 mtime    last modify time in seconds since the epoch
+    10 ctime    inode change time in seconds since the epoch (*)
+    11 blksize  preferred block size for file system I/O
+    12 blocks   actual number of blocks allocated
+
+11 and 12 are not available under Windows.
+
+=cut
+
+TT #849:  Provide a mechanism for setting 'mtime' and 'atime':
+https://trac.parrot.org/parrot/ticket/849
+
+*/
+
+    METHOD stat(STRING *path) {
+        struct stat   info;
+        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
+        const int     error = stat(cpath, &info);
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+        else {
+            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+            VTABLE_set_integer_native(INTERP, array, 13);
+
+            VTABLE_set_integer_keyed_int(INTERP, array,  0,
+                    (INTVAL)info.st_dev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  1,
+                    (INTVAL)info.st_ino);
+            VTABLE_set_integer_keyed_int(INTERP, array,  2,
+                    (INTVAL)info.st_mode);
+            VTABLE_set_integer_keyed_int(INTERP, array,  3,
+                    (INTVAL)info.st_nlink);
+            VTABLE_set_integer_keyed_int(INTERP, array,  4,
+                    (INTVAL)info.st_uid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  5,
+                    (INTVAL)info.st_gid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  6,
+                    (INTVAL)info.st_rdev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  7,
+                    (INTVAL)info.st_size);
+            VTABLE_set_integer_keyed_int(INTERP, array,  8,
+                    (INTVAL)info.st_atime);
+            VTABLE_set_integer_keyed_int(INTERP, array,  9,
+                    (INTVAL)info.st_mtime);
+            VTABLE_set_integer_keyed_int(INTERP, array, 10,
+                    (INTVAL)info.st_ctime);
+#ifndef WIN32
+            VTABLE_set_integer_keyed_int(INTERP, array, 11,
+                    (INTVAL)info.st_blksize);
+            VTABLE_set_integer_keyed_int(INTERP, array, 12,
+                    (INTVAL)info.st_blocks);
+#endif
+            RETURN(PMC *array);
+        }
+    }
+
+/*
+
+=item C<fixedpmcarray *lstat(STRING *path)>
+
+Stats a file, and returns a 13 position array as in Perl:
+
+     0 dev      device number of filesystem
+     1 ino      inode number
+     2 mode     file mode  (type and permissions)
+     3 nlink    number of (hard) links to the file
+     4 uid      numeric user ID of file's owner
+     5 gid      numeric group ID of file's owner
+     6 rdev     the device identifier (special files only)
+     7 size     total size of file, in bytes
+     8 atime    last access time in seconds since the epoch
+     9 mtime    last modify time in seconds since the epoch
+    10 ctime    inode change time in seconds since the epoch (*)
+    11 blksize  preferred block size for file system I/O
+    12 blocks   actual number of blocks allocated
+
+11 and 12 are not available under Windows.
+
+=cut
+
+*/
+
+    METHOD lstat(STRING *path) {
+        struct stat info;
+
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+#ifdef WIN32
+        const int error = stat(cpath, &info);
+#else
+        const int error = lstat(cpath, &info);
+#endif
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+        else {
+            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
+            VTABLE_set_integer_native(INTERP, array, 13);
+
+            VTABLE_set_integer_keyed_int(INTERP, array,  0,
+                    (INTVAL)info.st_dev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  1,
+                    (INTVAL)info.st_ino);
+            VTABLE_set_integer_keyed_int(INTERP, array,  2,
+                    (INTVAL)info.st_mode);
+            VTABLE_set_integer_keyed_int(INTERP, array,  3,
+                    (INTVAL)info.st_nlink);
+            VTABLE_set_integer_keyed_int(INTERP, array,  4,
+                    (INTVAL)info.st_uid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  5,
+                    (INTVAL)info.st_gid);
+            VTABLE_set_integer_keyed_int(INTERP, array,  6,
+                    (INTVAL)info.st_rdev);
+            VTABLE_set_integer_keyed_int(INTERP, array,  7,
+                    (INTVAL)info.st_size);
+            VTABLE_set_integer_keyed_int(INTERP, array,  8,
+                    (INTVAL)info.st_atime);
+            VTABLE_set_integer_keyed_int(INTERP, array,  9,
+                    (INTVAL)info.st_mtime);
+            VTABLE_set_integer_keyed_int(INTERP, array, 10,
+                    (INTVAL)info.st_ctime);
+#ifndef WIN32
+            VTABLE_set_integer_keyed_int(INTERP, array, 11,
+                    (INTVAL)info.st_blksize);
+            VTABLE_set_integer_keyed_int(INTERP, array, 12,
+                    (INTVAL)info.st_blocks);
+#endif
+            RETURN(PMC *array);
+        }
+    }
+
+/*
+
+=item C<void symlink(STRING *from, STRING *to)>
+
+Creates a symlink, where available
+
+=cut
+
+*/
+
+    METHOD symlink(STRING *from, STRING *to) {
+#ifndef WIN32
+        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
+        char * const cto   = Parrot_str_to_cstring(INTERP, to);
+        const int error    = symlink(cfrom, cto);
+
+        Parrot_str_free_cstring(cfrom);
+        Parrot_str_free_cstring(cto);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
+                "Win32 does not support symlinks!");
+#endif
+    }
+
+/*
+
+=item C<void link(STRING *from, STRING *to)>
+
+Creates a hard link, where available(?)
+
+=cut
+
+*/
+
+    METHOD link(STRING *from, STRING *to) {
+#ifndef WIN32
+        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
+        char * const cto   = Parrot_str_to_cstring(INTERP, to);
+        const int    error = link(cfrom, cto);
+
+        Parrot_str_free_cstring(cfrom);
+        Parrot_str_free_cstring(cto);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "link() failed for OS PMC: %s\n", errmsg);
+        }
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
+                "Win32 is not POSIX. Need win32 developer!");
+#endif
+    }
+
+/*
+
+=item C<INTVAL umask(INTVAL mask)>
+
+umask sets the process's file mode creation mask (and returns the
+previous one).
+
+=cut
+
+*/
+
+    METHOD umask(INTVAL mask) {
+#ifndef _MSC_VER
+        const INTVAL old = umask((mode_t)mask);
+        RETURN(INTVAL old);
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL,
+            EXCEPTION_UNIMPLEMENTED,
+            "Win32 is not POSIX. Need Win32 developer!");
+#endif
+    }
+
+/*
+
+=item C<INTVAL chroot(STRING *path)>
+
+it makes the named directory the new root directory for all further
+pathnames that begin with a "/" by your process and all its children.
+
+B<NOTE>: perl restricts this operation to superusers. It might be a good
+idea to do the same with parrot.
+
+=cut
+
+*/
+
+    METHOD chroot(STRING *path) {
+#ifndef WIN32
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+        const int    error = chroot(cpath);
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+#else
+        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
+                "Win32 is not POSIX. Need Win32 developer!");
+#endif
+    }
+
+
+/*
+
+=item C<PMC *readdir(STRING *path)>
+
+reads entries from a directory.
+
+=cut
+
+*/
+    METHOD readdir(STRING *path) {
+        PMC   * array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
+#ifndef _MSC_VER
+        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
+        DIR   * const   dir = opendir(cpath);
+        struct dirent *dirent;
+
+        Parrot_str_free_cstring(cpath);
+
+        if (!dir) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+
+        while ((dirent = readdir(dir)) != NULL) {
+            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP, dirent->d_name, 0));
+        }
+
+        closedir(dir);
+#else
+        WIN32_FIND_DATA file_find_data;
+        char * cpath;
+        HANDLE hFind = INVALID_HANDLE_VALUE;
+
+        /* Add \* to the directory name and start search. */
+        STRING *last_char = Parrot_str_substr(interp, path,
+                                              Parrot_str_length(interp, path) - 1, 1, NULL, 0);
+        int trailing_slash = Parrot_str_equal(interp, last_char, string_from_literal(interp, "\\"))
+                             ||
+                             Parrot_str_equal(interp, last_char, string_from_literal(interp, "/"));
+        cpath = Parrot_str_to_cstring(interp, Parrot_str_concat(interp,
+                path, string_from_literal(interp, trailing_slash ? "*" : "\\*"), 0));
+        hFind = FindFirstFile(cpath, &file_find_data);
+        Parrot_str_free_cstring(cpath);
+        if (hFind == INVALID_HANDLE_VALUE)
+        {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "Unable to readdir");
+        }
+
+        /* Loop over all directories and add to result array. */
+        do
+        {
+            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP,
+                    file_find_data.cFileName, 0));
+        }
+        while (FindNextFile(hFind, &file_find_data) != 0);
+        if (GetLastError() != ERROR_NO_MORE_FILES)
+        {
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "Error during readdir");
+        }
+        FindClose(hFind);
+#endif
+        RETURN(PMC *array);
+    }
+/*
+=item C<rename(STRING *oldpath, STRING *newpath)>
+
+This method is a wrapper for rename(2). On error a SystemError exception is
+thrown.
+
+=cut
+
+*/
+    METHOD rename(STRING *oldpath, STRING *newpath) {
+        char * const coldpath = Parrot_str_to_cstring(INTERP, oldpath);
+        char * const cnewpath = Parrot_str_to_cstring(INTERP, newpath);
+        const int    ret      = rename(coldpath, cnewpath);
+
+        Parrot_str_free_cstring(coldpath);
+        Parrot_str_free_cstring(cnewpath);
+
+        if (ret < 0) {
+            const char * const errmsg = strerror(errno) ;
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                "%s", errmsg);
+        }
+    }
+
+/*
+
+=item C<chmod(STRING *path, INTVAL mode)>
+
+=cut
+
+*/
+
+    METHOD chmod(STRING *path, INTVAL mode) {
+        char * const cpath = Parrot_str_to_cstring(INTERP, path);
+
+#ifndef WIN32
+        const int    error = chmod(cpath, mode);
+#else
+        const int    error = _chmod(cpath, mode);
+#endif
+
+        Parrot_str_free_cstring(cpath);
+
+        if (error) {
+            const char * const errmsg = strerror(errno);
+            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+                errmsg);
+        }
+    }
+
+}
+
+/*
+
+=back
+
+=head1 SEE ALS0
+
+   chdir(2), getcwd(3), unlink(2), mkdir(2), stat(2), lstat(2),
+   symlink(2), link(2), umask(2), chroot(2)
+
+=cut
+
+*/
+
+/*
+ * Local variables:
+ *   c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */

Modified: branches/codestring/src/frame_builder.c
==============================================================================
--- branches/codestring/src/frame_builder.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/frame_builder.c	Wed May  5 00:05:19 2010	(r46294)
@@ -299,7 +299,7 @@
     const int ST_SIZE_OF           = 124;
     const int JIT_ALLOC_SIZE       = 1024;
 
-    char      *signature_str      = Parrot_str_to_cstring(interp, signature);
+    char    * const signature_str  = Parrot_str_to_cstring(interp, signature);
     /* skip over the result */
     char      *sig                = signature_str + 1;
     size_t     stack_space_needed = calc_signature_needs(sig,

Modified: branches/codestring/src/gc/alloc_resources.c
==============================================================================
--- branches/codestring/src/gc/alloc_resources.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/gc/alloc_resources.c	Wed May  5 00:05:19 2010	(r46294)
@@ -1433,14 +1433,11 @@
 
         for (i = 0; i < cur_arena->used; ++i) {
             if (!PObj_on_free_list_TEST(p) && PObj_is_PMC_TEST(p)) {
-                if (PObj_is_PMC_shared_TEST(p))
-                    PMC_sync(p)->owner = dest_interp;
-                else
-                    Parrot_ex_throw_from_c_args(dest_interp, NULL,
-                        EXCEPTION_INTERP_ERROR,
-                        "Unshared PMC still alive after interpreter"
-                        "destruction. address=%p, base_type=%d\n",
-                        p, p->vtable->base_type);
+                Parrot_ex_throw_from_c_args(dest_interp, NULL,
+                    EXCEPTION_INTERP_ERROR,
+                    "Unshared PMC still alive after interpreter"
+                    "destruction. address=%p, base_type=%d\n",
+                    p, p->vtable->base_type);
             }
 
             p = (PMC *)((char *)p + object_size);

Modified: branches/codestring/src/gc/api.c
==============================================================================
--- branches/codestring/src/gc/api.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/gc/api.c	Wed May  5 00:05:19 2010	(r46294)
@@ -177,13 +177,6 @@
         /* if object is a PMC and contains buffers or PMCs, then attach the PMC
          * to the chained mark list. */
         if (PObj_is_special_PMC_TEST(obj)) {
-            if (PObj_is_PMC_shared_TEST(obj)) {
-                Parrot_Interp i = PMC_sync(obj)->owner;
-
-                if (!i->mem_pools->gc_mark_ptr)
-                    i->mem_pools->gc_mark_ptr = obj;
-            }
-
             if (PObj_custom_mark_TEST(obj))
                 VTABLE_mark(interp, obj);
         }
@@ -336,9 +329,6 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ALLOCATION_ERROR,
             "Parrot VM: PMC allocation failed!\n");
 
-    if (flags & PObj_is_PMC_shared_FLAG)
-        Parrot_gc_add_pmc_sync(interp, pmc);
-
     PObj_get_FLAGS(pmc) = PObj_is_PMC_FLAG|flags;
     pmc->vtable         = NULL;
     PMC_data(pmc)       = NULL;
@@ -366,59 +356,6 @@
 
 /*
 
-=item C<void Parrot_gc_free_pmc_sync(PARROT_INTERP, PMC *p)>
-
-Frees the PMC_sync field of the PMC, if one exists.
-
-=cut
-
-*/
-
-void
-Parrot_gc_free_pmc_sync(SHIM_INTERP, ARGMOD(PMC *p))
-{
-    ASSERT_ARGS(Parrot_gc_free_pmc_sync)
-
-    if (PObj_is_PMC_shared_TEST(p) && PMC_sync(p)) {
-        MUTEX_DESTROY(PMC_sync(p)->pmc_lock);
-        mem_internal_free(PMC_sync(p));
-        PMC_sync(p) = NULL;
-    }
-}
-
-/*
-
-=item C<void Parrot_gc_add_pmc_sync(PARROT_INTERP, PMC *pmc)>
-
-Adds a C<Sync*> structure to the given C<PMC>. Initializes the PMC's owner
-field and the synchronization mutext. Throws an exception if Sync allocation
-fails.
-
-=cut
-
-*/
-
-void
-Parrot_gc_add_pmc_sync(PARROT_INTERP, ARGMOD(PMC *pmc))
-{
-    ASSERT_ARGS(Parrot_gc_add_pmc_sync)
-
-    /* This mutex already exists, leave it alone. */
-    if (PMC_sync(pmc))
-        return;
-
-    PMC_sync(pmc) = mem_gc_allocate_zeroed_typed(interp, Sync);
-
-    if (!PMC_sync(pmc))
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ALLOCATION_ERROR,
-            "Parrot VM: PMC Sync allocation failed!\n");
-
-    PMC_sync(pmc)->owner = interp;
-    MUTEX_INIT(PMC_sync(pmc)->pmc_lock);
-}
-
-/*
-
 =item C<STRING * Parrot_gc_new_string_header(PARROT_INTERP, UINTVAL flags)>
 
 Returns a new C<STRING> header from the string pool or the constant string

Modified: branches/codestring/src/gc/mark_sweep.c
==============================================================================
--- branches/codestring/src/gc/mark_sweep.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/gc/mark_sweep.c	Wed May  5 00:05:19 2010	(r46294)
@@ -355,25 +355,6 @@
 {
     ASSERT_ARGS(mark_special)
 
-    /*
-     * If the object is shared, we have to use the arena and gc
-     * pointers of the originating interpreter.
-     *
-     * We are possibly changing another interpreter's data here, so
-     * the mark phase of GC must run only on one interpreter of a pool
-     * at a time. However, freeing unused objects can occur in parallel.
-     * And: to be sure that a shared object is dead, we have to finish
-     * the mark phase of all interpreters in a pool that might reference
-     * the object.
-     */
-    if (PObj_is_PMC_shared_TEST(obj)) {
-        interp = PMC_sync(obj)->owner;
-        PARROT_ASSERT(interp);
-
-        if (!mem_pools->gc_mark_ptr)
-            mem_pools->gc_mark_ptr = obj;
-    }
-
     PObj_get_FLAGS(obj) |= PObj_custom_GC_FLAG;
 
     /* clearing the flag is much more expensive then testing */

Modified: branches/codestring/src/hll.c
==============================================================================
--- branches/codestring/src/hll.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/hll.c	Wed May  5 00:05:19 2010	(r46294)
@@ -52,16 +52,6 @@
 /* for shared HLL data, do COW stuff */
 #define START_READ_HLL_INFO(interp, hll_info)
 #define END_READ_HLL_INFO(interp, hll_info)
-#define START_WRITE_HLL_INFO(interp, hll_info) \
-    do { \
-        if (PObj_is_PMC_shared_TEST(hll_info) && PMC_sync((interp)->HLL_info)) { \
-            (hll_info) = (interp)->HLL_info = \
-                Parrot_clone((interp), (interp)->HLL_info); \
-            if (PMC_sync((interp)->HLL_info)) \
-                mem_internal_free(PMC_sync((interp)->HLL_info)); \
-        } \
-    } while (0)
-#define END_WRITE_HLL_INFO(interp, hll_info)
 
 
 /*
@@ -160,8 +150,6 @@
 
     hll_info = interp->HLL_info;
 
-    START_WRITE_HLL_INFO(interp, hll_info);
-
     idx      = VTABLE_elements(interp, hll_info);
     entry    = new_hll_entry(interp, hll_name);
 
@@ -190,9 +178,6 @@
     VTABLE_set_pointer(interp, type_hash, parrot_new_intval_hash(interp));
     VTABLE_set_pmc_keyed_int(interp, entry, e_HLL_typemap, type_hash);
 
-    /* UNLOCK */
-    END_WRITE_HLL_INFO(interp, hll_info);
-
     return idx;
 }
 
@@ -217,8 +202,6 @@
     PMC   *hll_info = interp->HLL_info;
     INTVAL nelements, i;
 
-    START_WRITE_HLL_INFO(interp, hll_info);
-
     nelements = VTABLE_elements(interp, hll_info);
 
     for (i = 0; i < nelements; ++i) {
@@ -246,8 +229,6 @@
         VTABLE_set_string_native(interp, name, hll_lib);
         VTABLE_set_pmc_keyed_int(interp, new_entry, e_HLL_lib, name);
 
-        END_WRITE_HLL_INFO(interp, hll_info);
-
         return 0;
     }
 }
@@ -357,15 +338,6 @@
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_GLOBAL_NOT_FOUND,
             "no such HLL ID (%vd)", hll_id);
 
-    /* the type might already be registered in a non-conflicting way, in which
-     * ca se we can avoid copying */
-    if (PObj_is_PMC_shared_TEST(hll_info) && PMC_sync(hll_info)) {
-        if (hll_type == Parrot_get_HLL_type(interp, hll_id, core_type))
-            return;
-    }
-
-    START_WRITE_HLL_INFO(interp, hll_info);
-
     entry     = VTABLE_get_pmc_keyed_int(interp, hll_info, hll_id);
     PARROT_ASSERT(!PMC_IS_NULL(entry));
 
@@ -373,8 +345,6 @@
     PARROT_ASSERT(!PMC_IS_NULL(type_hash));
 
     VTABLE_set_integer_keyed_int(interp, type_hash, core_type, hll_type);
-
-    END_WRITE_HLL_INFO(interp, hll_info);
 }
 
 /*

Modified: branches/codestring/src/interp/inter_cb.c
==============================================================================
--- branches/codestring/src/interp/inter_cb.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/interp/inter_cb.c	Wed May  5 00:05:19 2010	(r46294)
@@ -314,11 +314,6 @@
       case 'v':
         pasm_sig[1] = 'v';
         break;
-#if 0
-      case '2':
-      case '3':
-      case '4':
-#endif
       case 'l':
         i_param = (INTVAL)(long) external_data;
         goto case_I;
@@ -334,14 +329,6 @@
         pasm_sig[1] = 'I';
         param = (void*) i_param;
         break;
-#if 0
-      case 'f':
-      case 'd':
-        /* these types don't fit into a pointer, they will not
-         * work
-         */
-        break;
-#endif
       case 'p':
         /* created a UnManagedStruct */
         p_param = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
@@ -349,11 +336,6 @@
         pasm_sig[1] = 'P';
         param = (void*) p_param;
         break;
-#if 0
-      case 'P':
-        pasm_sig[1] = 'P';
-        break;
-#endif
       case 't':
         pasm_sig[1] = 'S';
         param = Parrot_str_new(interp, external_data, 0);

Modified: branches/codestring/src/interp/inter_create.c
==============================================================================
--- branches/codestring/src/interp/inter_create.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/interp/inter_create.c	Wed May  5 00:05:19 2010	(r46294)
@@ -241,11 +241,6 @@
     /* param count mismatch is an error by default */
     PARROT_ERRORS_on(interp, PARROT_ERRORS_PARAM_COUNT_FLAG);
 
-#if 0
-    /* TODO not yet - too many test failures */
-    PARROT_ERRORS_on(interp, PARROT_ERRORS_RESULT_COUNT_FLAG);
-#endif
-
     create_initial_context(interp);
 
     /* clear context introspection vars */

Modified: branches/codestring/src/misc.c
==============================================================================
--- branches/codestring/src/misc.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/misc.c	Wed May  5 00:05:19 2010	(r46294)
@@ -113,8 +113,7 @@
                  size_t len, ARGIN(const char *pat), va_list args)
 {
     ASSERT_ARGS(Parrot_vsnprintf)
-    char   *str_ret;
-    size_t  str_len;
+
     if (len == 0)
         return;
     --len;
@@ -122,8 +121,8 @@
         const STRING * const ret = Parrot_vsprintf_c(interp, pat, args);
         /* string_transcode(interp, ret, NULL, NULL, &ret); */
 
-        str_ret = Parrot_str_to_cstring(interp, ret);
-        str_len = strlen(str_ret);
+        char     * const str_ret = Parrot_str_to_cstring(interp, ret);
+        const    size_t  str_len = strlen(str_ret);
         if (len > str_len) {
             len = str_len;
         }

Modified: branches/codestring/src/ops/core.ops
==============================================================================
--- branches/codestring/src/ops/core.ops	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/ops/core.ops	Wed May  5 00:05:19 2010	(r46294)
@@ -710,21 +710,6 @@
 extended exit status, create an exception with severity B<EXCEPT_exit>
 and throw it.
 
-=item B<pushmark>(in INT)
-
-Push a mark labeled $1 onto the dynamic environment.
-
-=item B<popmark>(in INT)
-
-Pop all items off the dynamic environment to the given mark.
-
-=item B<pushaction>(invar PMC)
-
-Push the given Sub PMC $1 onto the dynamic environment.  If the dynamic
-environment is unwound due to a C<popmark>, subroutine return, or an exception,
-the subroutine will be invoked with an integer argument: C<0> means a normal
-return; C<1> means an exception has been raised.
-
 =cut
 
 inline op push_eh(inconst LABEL) {
@@ -850,36 +835,6 @@
     goto ADDRESS(dest);
 }
 
-inline op pushmark(in INT) {
-    PMC * const newint = Parrot_pmc_new(interp, enum_class_Integer);
-    VTABLE_set_integer_native(interp, newint, $1);
-    VTABLE_push_pmc(interp, interp->dynamic_env, newint);
-}
-
-inline op popmark(in INT) {
-    opcode_t * dest;
-    opcode_t * const ret = expr NEXT();
-    int found = 0;
-    while (VTABLE_elements(interp, interp->dynamic_env)) {
-        PMC * const item = VTABLE_pop_pmc(interp, interp->dynamic_env);
-        if (item->vtable->base_type == enum_class_Integer
-         && VTABLE_get_integer(interp, item) == $1) {
-            found = 1;
-            break;
-        }
-
-        else if (item->vtable->base_type == enum_class_Sub
-              || item->vtable->base_type == enum_class_NCI)
-            Parrot_pcc_invoke_sub_from_c_args(interp, item, "I->", 0);
-    }
-    if (!found)
-        dest = Parrot_ex_throw_from_op_args(interp, ret, 1, "Mark %d not found", $1);
-}
-
-inline op pushaction(invar PMC) {
-    VTABLE_push_pmc(interp, interp->dynamic_env, $1);
-}
-
 =back
 
 =cut

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

Modified: branches/codestring/src/ops/set.ops
==============================================================================
--- branches/codestring/src/ops/set.ops	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/ops/set.ops	Wed May  5 00:05:19 2010	(r46294)
@@ -511,7 +511,6 @@
         /* don't let the clone's destruction destroy the destination's data */
         PObj_custom_destroy_CLEAR(clone);
         PMC_data(clone)        = NULL;
-        PMC_sync(clone)        = NULL;
         PMC_metadata(clone)    = NULL;
 
         /* Restore metadata. */

Modified: branches/codestring/src/packfile.c
==============================================================================
--- branches/codestring/src/packfile.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/packfile.c	Wed May  5 00:05:19 2010	(r46294)
@@ -2335,7 +2335,7 @@
     size = 1 + default_packed_size(self);
 
     for (i = 0; i < dir->num_segments; ++i) {
-        char *name = Parrot_str_to_cstring(interp, dir->segments[i]->name);
+        char * const name = Parrot_str_to_cstring(interp, dir->segments[i]->name);
         /* type, offset, size */
         size += 3;
         size += PF_size_cstring(name);

Modified: branches/codestring/src/packfile/pf_items.c
==============================================================================
--- branches/codestring/src/packfile/pf_items.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/packfile/pf_items.c	Wed May  5 00:05:19 2010	(r46294)
@@ -153,14 +153,6 @@
 static opcode_t fetch_op_le_8(ARGIN(const unsigned char *b))
         __attribute__nonnull__(1);
 
-PARROT_WARN_UNUSED_RESULT
-static opcode_t fetch_op_mixed_be(ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-static opcode_t fetch_op_mixed_le(ARGIN(const unsigned char *b))
-        __attribute__nonnull__(1);
-
 #define ASSERT_ARGS_cvt_num12_num16 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(dest) \
     , PARROT_ASSERT_ARG(src))
@@ -211,10 +203,6 @@
        PARROT_ASSERT_ARG(b))
 #define ASSERT_ARGS_fetch_op_le_8 __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_op_mixed_be __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_fetch_op_mixed_le __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(b))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -819,86 +807,6 @@
 }
 #endif
 
-#if 0
-
-/*
-
-=item C<static opcode_t fetch_op_mixed_le(const unsigned char *b)>
-
-opcode fetch helper function
-
-This is mostly wrong or at least untested
-
-Fetch an opcode and convert to LE
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static opcode_t
-fetch_op_mixed_le(ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_op_mixed_le)
-#  if OPCODE_T_SIZE == 4
-    union {
-        unsigned char buf[8];
-        opcode_t o[2];
-    } u;
-    /* wordsize = 8 then */
-    fetch_buf_le_8(u.buf, b);
-    return u.o[0]; /* or u.o[1] */
-#  else
-    union {
-        unsigned char buf[4];
-        opcode_t o;
-    } u;
-
-    /* wordsize = 4 */
-    u.o = 0;
-    fetch_buf_le_4(u.buf, b);
-    return u.o;
-#  endif
-}
-
-/*
-
-=item C<static opcode_t fetch_op_mixed_be(const unsigned char *b)>
-
-Fetch an opcode and convert to BE. Determines size of opcode from
-C<OPCODE_T_SIZE> macro, and proceeds accordingly.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-static opcode_t
-fetch_op_mixed_be(ARGIN(const unsigned char *b))
-{
-    ASSERT_ARGS(fetch_op_mixed_be)
-#  if OPCODE_T_SIZE == 4
-    union {
-        unsigned char buf[8];
-        opcode_t o[2];
-    } u;
-    /* wordsize = 8 then */
-    fetch_buf_be_8(u.buf, b);
-    return u.o[1]; /* or u.o[0] */
-#  else
-    union {
-        unsigned char buf[4];
-        opcode_t o;
-    } u;
-    /* wordsize = 4 */
-    u.o = 0;
-    fetch_buf_be_4(u.buf, b);
-    return u.o;
-#  endif
-}
-
-#endif
-
 /*
 
 =item C<static opcode_t fetch_op_be_4(const unsigned char *b)>
@@ -1329,7 +1237,7 @@
     TRACE_PRINTF(("size=%ld.\n", size));
 
     s = string_make_from_charset(interp, (const char *)*cursor,
-                        size, charset_nr, flags | PObj_external_FLAG);
+                        size, charset_nr, flags);
 
     /* print only printable characters */
     TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",

Modified: branches/codestring/src/pmc.c
==============================================================================
--- branches/codestring/src/pmc.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc.c	Wed May  5 00:05:19 2010	(r46294)
@@ -119,9 +119,6 @@
 
     PObj_gc_CLEAR(pmc);
 
-    if (PObj_is_PMC_shared_TEST(pmc) && PMC_sync(pmc))
-        Parrot_gc_free_pmc_sync(interp, pmc);
-
     if (pmc->vtable->attr_size)
         Parrot_gc_free_pmc_attributes(interp, pmc);
     else
@@ -441,9 +438,6 @@
          * const PMC is const too
          * see e.g. t/pmc/sarray_13.pir
          */
-#if 0
-        flags |= PObj_constant_FLAG;
-#endif
         --base_type;
         vtable = interp->vtables[base_type];
     }
@@ -855,7 +849,6 @@
     &&  (_class == _class->vtable->pmc_class))
         interp->vtables[type]->pmc_class = _class;
     else {
-        Parrot_gc_free_pmc_sync(interp, _class);
         gc_flag_CLEAR(is_special_PMC, _class);
         PObj_is_PMC_shared_CLEAR(_class);
         interp->vtables[type]->pmc_class = _class;

Modified: branches/codestring/src/pmc/bigint.pmc
==============================================================================
--- branches/codestring/src/pmc/bigint.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/bigint.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -1352,15 +1352,6 @@
         dest = Parrot_pmc_new(INTERP, VTABLE_type(INTERP, SELF));
 
         bigint_div_bigint(INTERP, SELF, value, dest);
-#if 0
-        /* to downgrade or not that's the question */
-        GETATTR_BigInt_bi(interp, dest, bi);
-        if (mpz_fits_slong_p(bi->b)) {
-            long iresult = mpz_get_si(bi->b);
-            VTABLE_morph(interp, dest, enum_class_Integer);
-            VTABLE_set_integer_native(interp, dest, iresult);
-        }
-#endif
         return dest;
     }
 

Modified: branches/codestring/src/pmc/callcontext.pmc
==============================================================================
--- branches/codestring/src/pmc/callcontext.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/callcontext.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -991,7 +991,7 @@
 
     VTABLE void unshift_pmc(PMC *value) {
         Pcc_cell *cells;
-        INTVAL    size = STATICSELF.elements();
+        INTVAL size = STATICSELF.elements();
         INTVAL    i;
 
         ensure_positionals_storage(INTERP, SELF, size + 1);
@@ -1008,7 +1008,7 @@
     VTABLE PMC * shift_pmc() {
         Pcc_cell *cells;
         PMC      *retval;
-        INTVAL    size = STATICSELF.elements();
+        const INTVAL size = STATICSELF.elements();
         INTVAL    i;
 
         if (size < 1)
@@ -1029,7 +1029,7 @@
     VTABLE STRING * shift_string() {
         Pcc_cell *cells;
         STRING   *retval;
-        INTVAL    size = STATICSELF.elements();
+        const INTVAL size = STATICSELF.elements();
         INTVAL    i;
 
         if (size < 1)

Deleted: branches/codestring/src/pmc/file.pmc
==============================================================================
--- branches/codestring/src/pmc/file.pmc	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,287 +0,0 @@
-/*
-Copyright (C) 2001-2010, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/file.pmc - File PMC
-
-=head1 DESCRIPTION
-
-C<File> is a singleton class which provides access to File functions.
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#ifdef WIN32
-#  include <direct.h>
-#endif
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER BEGIN: static */
-/* HEADERIZER END: static */
-
-/* TT #1050 apparently, strerror_r is thread-safe and should be used instead.*/
-
-static PMC *File_PMC;
-pmclass File singleton {
-
-/*
-
-=item C<void *get_pointer()>
-
-=item C<void set_pointer(void *ptr)>
-
-These two functions are part of the singleton creation interface. For more
-information see F<src/pmc.c>.
-
-=cut
-
-*/
-    void class_init() {
-        File_PMC = NULL;
-    }
-
-    VTABLE void *get_pointer() {
-        return File_PMC;
-    }
-
-    VTABLE void set_pointer(void *ptr) {
-        File_PMC = (PMC *)ptr;
-    }
-
-/*
-
-=item C<INTVAL exists(STRING *file)>
-
-Returns a true value (1) if the supplied file or directory exists.
-
-=cut
-
-*/
-
-    METHOD exists(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-#ifdef WIN32
-        const int error = stat(cpath, &info);
-#else
-        const int error = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error)
-            RETURN(INTVAL 0);
-
-        RETURN(INTVAL 1);
-    }
-
-/*
-
-=item C<INTVAL is_dir(STRING *path)>
-
-Returns a true value (1) if the supplied path is a directory.
-
-=cut
-
-*/
-
-    METHOD is_dir(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-#ifdef WIN32
-        const int error = stat(cpath, &info);
-#else
-        const int error = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISDIR(info.st_mode))
-            RETURN(INTVAL 1);
-        else
-            RETURN(INTVAL 0);
-    }
-
-/*
-
-=item C<INTVAL is_file(STRING *path)>
-
-Returns a true value (1) if the supplied path is a plain file.
-
-=cut
-
-*/
-
-    METHOD is_file(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-#ifdef WIN32
-        int error   = stat(cpath, &info);
-#else
-        int error   = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISREG(info.st_mode))
-            RETURN(INTVAL 1);
-        else
-            RETURN(INTVAL 0);
-    }
-
-/*
-
-=item C<INTVAL is_link(STRING *path)>
-
-Returns a true value (1) if the supplied path is a link.
-
-=cut
-
-*/
-
-    METHOD is_link(STRING *path) {
-#ifdef WIN32
-        /* I love win32 implementations */
-        RETURN(INTVAL 0);
-#else
-        struct stat info;
-
-        char * const cpath = Parrot_str_to_cstring(interp, path);
-        const int    error = lstat(cpath, &info);
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISLNK(info.st_mode))
-            RETURN(INTVAL 1);
-        else
-            RETURN(INTVAL 0);
-#endif
-    }
-
-/*
-
-=item C<void copy(STRING *from, STRING *to)>
-
-Copy the contents from file represented by path C<from> to the path
-C<to>.
-
-Uses the "work everywhere method". It is good enough to start with.
-
-NOTE: I'm sure that there should be more efficient ways to do this. Be
-free to change or give me hints on how to change it. -- ambs
-
-=cut
-
-*/
-
-    METHOD copy(STRING *from, STRING *to) {
-#define CHUNK_SIZE 1024
-
-        char * const cfrom  = Parrot_str_to_cstring(interp, from);
-        FILE * const source = fopen(cfrom, "rb");
-
-        Parrot_str_free_cstring(cfrom);
-
-        if (source) {
-            char * const cto    = Parrot_str_to_cstring(interp, to);
-            FILE * const target = fopen(cto, "w+b");
-
-            Parrot_str_free_cstring(cto);
-
-            if (target) {
-                while (!feof(source)) {
-                    char buf[CHUNK_SIZE];
-                    const size_t bytes_read = fread(buf, 1, CHUNK_SIZE, source);
-
-                    if (bytes_read) {
-                        const size_t bytes_written = fwrite(buf, 1, bytes_read, target);
-                        if (bytes_read != bytes_written) {
-                            Parrot_ex_throw_from_c_args(interp, NULL,
-                                EXCEPTION_EXTERNAL_ERROR, "Error writing file");
-                            break;
-                        }
-                    }
-                }
-                fclose(target);
-            }
-            else {
-                const char * const errmsg = strerror(errno);
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                    errmsg);
-            }
-            fclose(source);
-        }
-        else {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-#undef CHUNK_SIZE
-    }
-
-/*
-
-=item C<void rename(STRING *from, STRING *to)>
-
-Rename a file C<from> to the path C<to>.
-
-=cut
-
-*/
-
-    METHOD rename(STRING *from, STRING *to) {
-        char * const cfrom = Parrot_str_to_cstring(interp, from);
-        char * const   cto = Parrot_str_to_cstring(interp, to);
-        const int    error = rename(cfrom, cto);
-
-        Parrot_str_free_cstring(cfrom);
-        Parrot_str_free_cstring(cto);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-}
-
-/*
-
-=back
-
-=head1 SEE ALS0
-
-   stat(2), rename(2)
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/codestring/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/codestring/src/pmc/fixedbooleanarray.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/fixedbooleanarray.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -581,13 +581,11 @@
         SUPER(info);
 
         {
-            unsigned char * bit_array;
-            UINTVAL         threshold;
             const INTVAL    size      = VTABLE_shift_integer(INTERP, info);
             STRING * const  s         = VTABLE_shift_string(INTERP, info);
 
-            bit_array = (unsigned char *)Parrot_str_to_cstring(INTERP, s);
-            threshold = Parrot_str_byte_length(interp, s) * BITS_PER_CHAR;
+            unsigned char * const bit_array = (unsigned char *)Parrot_str_to_cstring(INTERP, s);
+            const UINTVAL   threshold = Parrot_str_byte_length(interp, s) * BITS_PER_CHAR;
 
             SET_ATTR_size(INTERP, SELF, size);
             SET_ATTR_resize_threshold(INTERP, SELF, threshold);

Modified: branches/codestring/src/pmc/hash.pmc
==============================================================================
--- branches/codestring/src/pmc/hash.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/hash.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -96,7 +96,7 @@
     }
 
     VTABLE void destroy() {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         if (hash)
             parrot_hash_destroy(INTERP, hash);
     }
@@ -111,7 +111,7 @@
 */
 
     VTABLE void mark() {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         if (hash != NULL)
             parrot_mark_hash(INTERP, hash);
     }
@@ -129,7 +129,7 @@
     VTABLE PMC *clone() {
         PMC * const dest = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
 
-        parrot_hash_clone(INTERP, (Hash *)SELF.get_pointer(),
+        parrot_hash_clone(INTERP, (Hash *)STATICSELF.get_pointer(),
                    (Hash *)VTABLE_get_pointer(INTERP, dest));
 
         return dest;
@@ -146,7 +146,7 @@
 */
 
     VTABLE void set_pointer(void *ptr) {
-        Hash * const old_hash = (Hash *)SELF.get_pointer();
+        Hash * const old_hash = (Hash *)STATICSELF.get_pointer();
         Hash * const new_hash = (Hash *)ptr;
 
         PARROT_HASH(SELF)->hash = new_hash;
@@ -226,7 +226,7 @@
 
 */
     METHOD get_key_type() {
-        const INTVAL ret = ((Hash *)SELF.get_pointer())->key_type;
+        const INTVAL ret = ((Hash *)STATICSELF.get_pointer())->key_type;
         RETURN(INTVAL ret);
     }
 
@@ -242,7 +242,7 @@
 =cut
 */
     METHOD set_value_type(INTVAL type) {
-        Hash *old_hash = (Hash *)SELF.get_pointer();
+        Hash *old_hash = (Hash *)STATICSELF.get_pointer();
         Hash *new_hash;
 
         /*
@@ -276,7 +276,7 @@
     }
 
     METHOD get_value_type() {
-        INTVAL ret = ((Hash *)SELF.get_pointer())->entry_type;
+        INTVAL ret = ((Hash *)STATICSELF.get_pointer())->entry_type;
         RETURN(INTVAL ret);
     }
 
@@ -306,7 +306,7 @@
 */
 
     VTABLE INTVAL get_integer() {
-        return parrot_hash_size(INTERP, (Hash *)SELF.get_pointer());
+        return parrot_hash_size(INTERP, (Hash *)STATICSELF.get_pointer());
     }
 
     VTABLE FLOATVAL get_number() {
@@ -340,20 +340,20 @@
         INTVAL       j;
 
         for (j = 0; j < n; ++j) {
-            STRING * const key       = VTABLE_shift_string(INTERP, iter);
-            char *         key_str;
-            size_t         i, str_len;
+            STRING * const key      = VTABLE_shift_string(INTERP, iter);
+            char *   const key_str  = Parrot_str_to_cstring(INTERP, key);
+            const size_t   str_len  = strlen(key_str);
+            size_t         i;
             int            all_digit = 1;
             PMC           *val;
 
-            key_str = Parrot_str_to_cstring(INTERP, key);
-            str_len = strlen(key_str);
             for (i = 0; i < str_len; ++i) {
                 if (!isdigit((unsigned char)key_str[i])) {
                     all_digit = 0;
                     break;
                 }
             }
+
             Parrot_str_free_cstring(key_str);
 
             if (all_digit) {
@@ -389,7 +389,7 @@
 */
 
     VTABLE INTVAL get_integer_keyed_str(STRING *key) {
-        const Hash * const hash = (Hash*)SELF.get_pointer();
+        const Hash * const hash = (Hash*)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_string(INTERP, hash, key));
 
@@ -400,7 +400,7 @@
     }
 
     VTABLE INTVAL get_integer_keyed_int(INTVAL key) {
-        const Hash * const hash = (Hash*)SELF.get_pointer();
+        const Hash * const hash = (Hash*)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_int(INTERP, hash, key));
 
@@ -421,7 +421,7 @@
 
     /* Handling Keys */
     VTABLE INTVAL get_integer_keyed(PMC *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_pmc(INTERP, hash, key));
         PMC        *valpmc;
@@ -450,7 +450,7 @@
 */
 
     VTABLE void set_integer_keyed(PMC *key, INTVAL value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
+        Hash   * const hash    = (Hash *)STATICSELF.get_pointer();
         void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
         PMC    * const nextkey = key_next(INTERP, key);
         PMC    *box;
@@ -476,7 +476,7 @@
     }
 
     VTABLE void set_integer_keyed_int(INTVAL key, INTVAL value) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         parrot_hash_put(INTERP, hash, hash_key_from_int(INTERP, hash, key),
                 hash_value_from_int(INTERP, hash, value));
     }
@@ -490,7 +490,7 @@
 */
 
     VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
                 hash_value_from_int(INTERP, hash, value));
     }
@@ -507,7 +507,7 @@
 */
 
     VTABLE FLOATVAL get_number_keyed_str(STRING *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_string(INTERP, hash, key));
 
@@ -518,7 +518,7 @@
     }
 
     VTABLE FLOATVAL get_number_keyed_int(INTVAL key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_int(INTERP, hash, key));
 
@@ -541,7 +541,7 @@
     VTABLE FLOATVAL get_number_keyed(PMC *key) {
         PMC               *nextkey;
         PMC               *valpmc;
-        const Hash * const hash   = (Hash *)SELF.get_pointer();
+        const Hash * const hash   = (Hash *)STATICSELF.get_pointer();
         void       * const keystr = hash_key_from_pmc(INTERP, hash, key);
         HashBucket * const b      = parrot_hash_get_bucket(INTERP, hash, keystr);
 
@@ -569,7 +569,7 @@
 */
 
     VTABLE STRING *get_string_keyed_str(STRING *key) {
-        const Hash * const hash = (Hash*)SELF.get_pointer();
+        const Hash * const hash = (Hash*)STATICSELF.get_pointer();
         HashBucket * const b =
             parrot_hash_get_bucket(INTERP, hash, hash_key_from_string(INTERP, hash, key));
 
@@ -580,7 +580,7 @@
     }
 
     VTABLE STRING *get_string_keyed_int(INTVAL key) {
-        const Hash * const hash = (Hash*)SELF.get_pointer();
+        const Hash * const hash = (Hash*)STATICSELF.get_pointer();
         HashBucket * const b =
             parrot_hash_get_bucket(INTERP, hash, hash_key_from_int(INTERP, hash, key));
 
@@ -601,7 +601,7 @@
 */
 
     VTABLE STRING *get_string_keyed(PMC *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_pmc(INTERP, hash, key));
         PMC        *valpmc;
@@ -630,7 +630,7 @@
 */
 
     VTABLE void set_string_keyed(PMC *key, STRING *value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
+        Hash   * const hash    = (Hash *)STATICSELF.get_pointer();
         void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
         PMC    * const nextkey = key_next(INTERP, key);
         PMC    *box;
@@ -664,14 +664,14 @@
 */
 
     VTABLE void set_string_keyed_str(STRING *key, STRING *value) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         parrot_hash_put(INTERP, hash,
                 hash_key_from_string(INTERP, hash, key),
                 hash_value_from_string(INTERP, hash, value));
     }
 
     VTABLE void set_string_keyed_int(INTVAL key, STRING *value) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         parrot_hash_put(INTERP, hash,
                 hash_key_from_int(INTERP, hash, key),
                 hash_value_from_string(INTERP, hash, value));
@@ -715,7 +715,7 @@
     }
 
     VTABLE PMC *get_pmc_keyed_int(INTVAL key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b    = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_int(INTERP, hash, key));
 
@@ -727,7 +727,7 @@
 
     /* Compound Key */
     VTABLE PMC *get_pmc_keyed(PMC *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_pmc(INTERP, hash, key));
         PMC        *valpmc;
@@ -756,7 +756,7 @@
 */
 
     VTABLE void set_number_keyed(PMC *key, FLOATVAL value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
+        Hash   * const hash    = (Hash *)STATICSELF.get_pointer();
         void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
         PMC    * const nextkey = key_next(INTERP, key);
         PMC    *box            = PMCNULL;
@@ -769,7 +769,7 @@
             return;
         }
 
-        b = parrot_hash_get_bucket(INTERP, (Hash *)SELF.get_pointer(), keystr);
+        b = parrot_hash_get_bucket(INTERP, (Hash *)STATICSELF.get_pointer(), keystr);
         if (b)
             box = hash_value_to_pmc(INTERP, hash, b->value);
 
@@ -793,7 +793,7 @@
     VTABLE void set_number_keyed_str(STRING *key, FLOATVAL value) {
         PMC * const val  = get_number_pmc(INTERP, value);
 
-        parrot_hash_put(INTERP, (Hash *)SELF.get_pointer(), key, val);
+        parrot_hash_put(INTERP, (Hash *)STATICSELF.get_pointer(), key, val);
     }
 
 /*
@@ -805,7 +805,7 @@
 */
 
     VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
-        Hash   * const hash    = (Hash *)SELF.get_pointer();
+        Hash   * const hash    = (Hash *)STATICSELF.get_pointer();
         void   * const keystr  = hash_key_from_pmc(INTERP, hash, key);
         PMC    * const nextkey = key_next(INTERP, key);
         PMC    *box;
@@ -841,7 +841,7 @@
 */
 
     VTABLE void set_pmc_keyed_str(STRING *key, PMC *value) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         parrot_hash_put(INTERP, hash, hash_key_from_string(INTERP, hash, key),
                 hash_value_from_pmc(INTERP, hash, value));
     }
@@ -855,7 +855,7 @@
 */
 
     VTABLE INTVAL exists_keyed_str(STRING *key) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_string(INTERP, hash, key));
         return b != NULL;
@@ -872,7 +872,7 @@
 */
 
     VTABLE INTVAL exists_keyed(PMC *key) {
-        Hash       * const h  = (Hash *)SELF.get_pointer();
+        Hash       * const h  = (Hash *)STATICSELF.get_pointer();
         void       * const sx = hash_key_from_pmc(INTERP, h, key);
         HashBucket * const b  = parrot_hash_get_bucket(INTERP, h, sx);
 
@@ -898,7 +898,7 @@
 */
 
     VTABLE INTVAL defined_keyed_str(STRING *key) {
-        const Hash * const hash = (Hash *)SELF.get_pointer();
+        const Hash * const hash = (Hash *)STATICSELF.get_pointer();
         HashBucket * const b = parrot_hash_get_bucket(INTERP, hash,
                 hash_key_from_string(INTERP, hash, key));
 
@@ -920,7 +920,7 @@
 */
 
     VTABLE INTVAL defined_keyed(PMC *key) {
-        Hash       * const h  = (Hash *)SELF.get_pointer();
+        Hash       * const h  = (Hash *)STATICSELF.get_pointer();
         void       * const sx = hash_key_from_pmc(INTERP, h, key);
         HashBucket * const b  = parrot_hash_get_bucket(INTERP, h, sx);
 
@@ -946,7 +946,7 @@
 */
 
     VTABLE void delete_keyed_str(STRING *key) {
-        Hash * const hash = (Hash *)SELF.get_pointer();
+        Hash * const hash = (Hash *)STATICSELF.get_pointer();
         parrot_hash_delete(INTERP, hash, hash_key_from_string(INTERP, hash, key));
     }
 
@@ -961,7 +961,7 @@
 */
 
     VTABLE void delete_keyed(PMC *key) {
-        Hash       * const h  = (Hash *)SELF.get_pointer();
+        Hash       * const h  = (Hash *)STATICSELF.get_pointer();
         void       * const sx = hash_key_from_pmc(INTERP, h, key);
         HashBucket * const b  = parrot_hash_get_bucket(INTERP, h, sx);
 
@@ -988,7 +988,7 @@
 */
 
     VTABLE INTVAL get_bool() {
-        return parrot_hash_size(INTERP, (Hash *)SELF.get_pointer()) != 0;
+        return parrot_hash_size(INTERP, (Hash *)STATICSELF.get_pointer()) != 0;
     }
 
 /*
@@ -1002,7 +1002,7 @@
 */
 
     VTABLE INTVAL elements() {
-        return parrot_hash_size(INTERP, (Hash *)SELF.get_pointer());
+        return parrot_hash_size(INTERP, (Hash *)STATICSELF.get_pointer());
     }
 
 /*
@@ -1031,7 +1031,7 @@
 
     VTABLE INTVAL is_same(PMC *other) {
         return (INTVAL)(other->vtable == SELF->vtable &&
-            VTABLE_get_pointer(INTERP, other) == SELF.get_pointer());
+            VTABLE_get_pointer(INTERP, other) == STATICSELF.get_pointer());
     }
 
 /*
@@ -1109,7 +1109,7 @@
 */
 
     VTABLE void visit(PMC *info) {
-        parrot_hash_visit(INTERP, (Hash *)SELF.get_pointer(), info);
+        parrot_hash_visit(INTERP, (Hash *)STATICSELF.get_pointer(), info);
         SUPER(info);
     }
 
@@ -1124,7 +1124,7 @@
 */
 
     VTABLE void freeze(PMC *info) {
-        Hash     * const hash = (Hash *)SELF.get_pointer();;
+        Hash     * const hash = (Hash *)STATICSELF.get_pointer();;
 
         SUPER(info);
         VTABLE_push_integer(INTERP, info, VTABLE_elements(INTERP, SELF));
@@ -1178,7 +1178,7 @@
                                                     (Hash_key_type)k_type, cmp_fn, key_fn));
             }
 
-            hash = (Hash *)SELF.get_pointer();
+            hash = (Hash *)STATICSELF.get_pointer();
 
             PARROT_ASSERT((INTVAL)hash->key_type == k_type);
             PARROT_ASSERT(hash->entry_type       == v_type);

Modified: branches/codestring/src/pmc/imageio.pmc
==============================================================================
--- branches/codestring/src/pmc/imageio.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/imageio.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -546,8 +546,8 @@
                     && Parrot_charset_number_of_str(interp, v)
                     ==  Parrot_charset_number_of_str(interp, sc)
                     &&  Parrot_encoding_number_of_str(interp, v)
-                    ==  Parrot_encoding_number_of_str(interp, sc)
-                    ) {
+                    ==  Parrot_encoding_number_of_str(interp, sc))
+                    {
                         STATICSELF.push_integer(i);
                         return;
                     }

Modified: branches/codestring/src/pmc/object.pmc
==============================================================================
--- branches/codestring/src/pmc/object.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/object.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -888,7 +888,6 @@
         VTABLE_setprop(INTERP, ret, CONST_STRING(interp, "_ro"), _true);
 
         SELF->vtable->pmc_class = master->vtables[type_num]->pmc_class;
-        Parrot_gc_add_pmc_sync(INTERP, ret);
         PObj_is_PMC_shared_SET(ret);
 
         data = PARROT_CLASS(classobj)->parents;

Modified: branches/codestring/src/pmc/opcode.pmc
==============================================================================
--- branches/codestring/src/pmc/opcode.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/opcode.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -45,7 +45,7 @@
     }
 
     VTABLE void set_string_native(STRING *name) {
-        char * cstr = Parrot_str_to_cstring(INTERP, name);
+        char * const cstr = Parrot_str_to_cstring(INTERP, name);
         const INTVAL num = INTERP->op_lib->op_code(INTERP, cstr, 1);
         Parrot_str_free_cstring(cstr);
         if (num == -1)

Modified: branches/codestring/src/pmc/oplib.pmc
==============================================================================
--- branches/codestring/src/pmc/oplib.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/oplib.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -56,7 +56,7 @@
     /* Look up an opnumber given the name of the op. First we look for the
        specific name, then the more general short name. */
     VTABLE INTVAL get_integer_keyed_str(STRING *name) {
-        char * cstr = Parrot_str_to_cstring(INTERP, name);
+        char * const cstr = Parrot_str_to_cstring(INTERP, name);
         INTVAL num = INTERP->op_lib->op_code(INTERP, cstr, 1);
         if (num == -1)
             num = INTERP->op_lib->op_code(INTERP, cstr, 0);
@@ -105,7 +105,7 @@
 
     METHOD op_family(STRING *shortname)
     {
-        char *sname = Parrot_str_to_cstring(INTERP, shortname);
+        char * const sname = Parrot_str_to_cstring(INTERP, shortname);
         const op_lib_t * const op_lib = INTERP->op_lib;
         const op_info_t * const table = op_lib->op_info_table;
         PMC *result = PMCNULL;

Deleted: branches/codestring/src/pmc/os.pmc
==============================================================================
--- branches/codestring/src/pmc/os.pmc	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,612 +0,0 @@
-/*
-Copyright (C) 2001-2010, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/pmc/os.pmc - Files and Directories PMC
-
-=head1 DESCRIPTION
-
-C<OS> is a singleton class which provides access to the filesystem
-files and directories.
-
-=head2 Methods
-
-=over 4
-
-=cut
-
-*/
-
-#if defined(_MSC_VER)
-#  include <direct.h>
-#  include <io.h>
-#  include <tchar.h>
-#  include <windows.h>
-#elif defined(__BORLANDC__)
-#  include <dir.h>
-#  include <dirent.h>
-#else
-#  include <dirent.h>
-#endif
-
-/* XXX Check if we need to deallocate strerror strings */
-/* XXX apparently, strerror_r is thread-safe and should be used instead.*/
-
-/* HEADERIZER HFILE: none */
-/* HEADERIZER BEGIN: static */
-/* HEADERIZER END: static */
-
-static PMC *OS_PMC;
-pmclass OS singleton {
-
-/*
-
-=item C<void *get_pointer()>
-
-=item C<void set_pointer(void *ptr)>
-
-These two functions are part of the singleton creation interface. For more
-information see F<src/pmc.c>.
-
-=cut
-
-*/
-
-    void class_init() {
-        OS_PMC = NULL;
-    }
-
-    VTABLE void *get_pointer() {
-        return OS_PMC;
-    }
-
-    VTABLE void set_pointer(void *ptr) {
-        OS_PMC = (PMC *)ptr;
-    }
-
-
-/*
-
-=item C<STRING *cwd()>
-
-Returns the current working directory.
-
-=cut
-
-*/
-
-    METHOD cwd() {
-        char *cwd;
-#ifdef _MSC_VER
-        cwd = _getcwd(NULL, 0);
-        /* capitalize the drive letter */
-        cwd[0] = (char)toupper((unsigned char)cwd[0]);
-#else
-#  ifdef PATH_MAX
-        cwd = getcwd(NULL, PATH_MAX+1);
-#  else
-        cwd = getcwd(NULL, 0);
-#  endif
-#endif
-        if (cwd) {
-            STRING * const scwd = Parrot_str_new(INTERP, cwd, strlen(cwd));
-            free(cwd);
-            RETURN(STRING *scwd);
-        }
-        else {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-/*
-
-=item C<void chdir(STRING *path)>
-
-Changes the current working directory to the one specified by C<path>.
-
-=cut
-
-*/
-
-    METHOD chdir(STRING *path) {
-        int error;
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-#ifdef _MSC_VER
-        error = _chdir(cpath);
-#else
-        error = chdir(cpath);
-#endif
-        Parrot_str_free_cstring(cpath);
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-/*
-
-=item C<void rm(STRING *path)>
-
-Calls C<remove> to remove the file or empty directory specified by
-C<path>.
-
-=cut
-
-*/
-
-    METHOD rm(STRING *path) {
-        struct stat info;
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-        int          error = stat(cpath, &info);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_str_free_cstring(cpath);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        if (S_ISDIR(info.st_mode)) {
-#ifdef _MSC_VER
-            error = _rmdir(cpath);
-#else
-            error = rmdir(cpath);
-#endif
-            Parrot_str_free_cstring(cpath);
-            if (error) {
-                const char * const errmsg = strerror(errno);
-                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                    errmsg);
-            }
-        }
-        else {
-            error = remove(cpath);
-            Parrot_str_free_cstring(cpath);
-            if (error) {
-                const char * const errmsg = strerror(errno);
-                Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                    errmsg);
-            }
-        }
-    }
-
-/*
-
-=item C<void mkdir(STRING *path, STRING *mode)>
-
-Creates a directory specified by C<path> with mode C<mode>.
-
-=cut
-
-*/
-
-    METHOD mkdir(STRING *path, INTVAL mode) {
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-        /* should we validate mode? */
-#ifdef WIN32
-        const int error = _mkdir(cpath);
-#else
-        const int error = mkdir(cpath, (mode_t)mode);
-#endif
-        Parrot_str_free_cstring(cpath);
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-/*
-
-=item C<fixedpmcarray *stat(STRING *path)>
-
-Stats a file, and returns a 13 position array as in Perl:
-
-     0 dev      device number of filesystem
-     1 ino      inode number
-     2 mode     file mode  (type and permissions)
-     3 nlink    number of (hard) links to the file
-     4 uid      numeric user ID of file's owner
-     5 gid      numeric group ID of file's owner
-     6 rdev     the device identifier (special files only)
-     7 size     total size of file, in bytes
-     8 atime    last access time in seconds since the epoch
-     9 mtime    last modify time in seconds since the epoch
-    10 ctime    inode change time in seconds since the epoch (*)
-    11 blksize  preferred block size for file system I/O
-    12 blocks   actual number of blocks allocated
-
-11 and 12 are not available under Windows.
-
-=cut
-
-TT #849:  Provide a mechanism for setting 'mtime' and 'atime':
-https://trac.parrot.org/parrot/ticket/849
-
-*/
-
-    METHOD stat(STRING *path) {
-        struct stat   info;
-        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
-        const int     error = stat(cpath, &info);
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-        else {
-            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
-            VTABLE_set_integer_native(INTERP, array, 13);
-
-            VTABLE_set_integer_keyed_int(INTERP, array,  0,
-                    (INTVAL)info.st_dev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  1,
-                    (INTVAL)info.st_ino);
-            VTABLE_set_integer_keyed_int(INTERP, array,  2,
-                    (INTVAL)info.st_mode);
-            VTABLE_set_integer_keyed_int(INTERP, array,  3,
-                    (INTVAL)info.st_nlink);
-            VTABLE_set_integer_keyed_int(INTERP, array,  4,
-                    (INTVAL)info.st_uid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  5,
-                    (INTVAL)info.st_gid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  6,
-                    (INTVAL)info.st_rdev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  7,
-                    (INTVAL)info.st_size);
-            VTABLE_set_integer_keyed_int(INTERP, array,  8,
-                    (INTVAL)info.st_atime);
-            VTABLE_set_integer_keyed_int(INTERP, array,  9,
-                    (INTVAL)info.st_mtime);
-            VTABLE_set_integer_keyed_int(INTERP, array, 10,
-                    (INTVAL)info.st_ctime);
-#ifndef WIN32
-            VTABLE_set_integer_keyed_int(INTERP, array, 11,
-                    (INTVAL)info.st_blksize);
-            VTABLE_set_integer_keyed_int(INTERP, array, 12,
-                    (INTVAL)info.st_blocks);
-#endif
-            RETURN(PMC *array);
-        }
-    }
-
-/*
-
-=item C<fixedpmcarray *lstat(STRING *path)>
-
-Stats a file, and returns a 13 position array as in Perl:
-
-     0 dev      device number of filesystem
-     1 ino      inode number
-     2 mode     file mode  (type and permissions)
-     3 nlink    number of (hard) links to the file
-     4 uid      numeric user ID of file's owner
-     5 gid      numeric group ID of file's owner
-     6 rdev     the device identifier (special files only)
-     7 size     total size of file, in bytes
-     8 atime    last access time in seconds since the epoch
-     9 mtime    last modify time in seconds since the epoch
-    10 ctime    inode change time in seconds since the epoch (*)
-    11 blksize  preferred block size for file system I/O
-    12 blocks   actual number of blocks allocated
-
-11 and 12 are not available under Windows.
-
-=cut
-
-*/
-
-    METHOD lstat(STRING *path) {
-        struct stat info;
-
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-#ifdef WIN32
-        const int error = stat(cpath, &info);
-#else
-        const int error = lstat(cpath, &info);
-#endif
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-        else {
-            PMC * const array = Parrot_pmc_new(INTERP, enum_class_FixedPMCArray);
-            VTABLE_set_integer_native(INTERP, array, 13);
-
-            VTABLE_set_integer_keyed_int(INTERP, array,  0,
-                    (INTVAL)info.st_dev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  1,
-                    (INTVAL)info.st_ino);
-            VTABLE_set_integer_keyed_int(INTERP, array,  2,
-                    (INTVAL)info.st_mode);
-            VTABLE_set_integer_keyed_int(INTERP, array,  3,
-                    (INTVAL)info.st_nlink);
-            VTABLE_set_integer_keyed_int(INTERP, array,  4,
-                    (INTVAL)info.st_uid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  5,
-                    (INTVAL)info.st_gid);
-            VTABLE_set_integer_keyed_int(INTERP, array,  6,
-                    (INTVAL)info.st_rdev);
-            VTABLE_set_integer_keyed_int(INTERP, array,  7,
-                    (INTVAL)info.st_size);
-            VTABLE_set_integer_keyed_int(INTERP, array,  8,
-                    (INTVAL)info.st_atime);
-            VTABLE_set_integer_keyed_int(INTERP, array,  9,
-                    (INTVAL)info.st_mtime);
-            VTABLE_set_integer_keyed_int(INTERP, array, 10,
-                    (INTVAL)info.st_ctime);
-#ifndef WIN32
-            VTABLE_set_integer_keyed_int(INTERP, array, 11,
-                    (INTVAL)info.st_blksize);
-            VTABLE_set_integer_keyed_int(INTERP, array, 12,
-                    (INTVAL)info.st_blocks);
-#endif
-            RETURN(PMC *array);
-        }
-    }
-
-/*
-
-=item C<void symlink(STRING *from, STRING *to)>
-
-Creates a symlink, where available
-
-=cut
-
-*/
-
-    METHOD symlink(STRING *from, STRING *to) {
-#ifndef WIN32
-        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
-        char * const cto   = Parrot_str_to_cstring(INTERP, to);
-        const int error    = symlink(cfrom, cto);
-
-        Parrot_str_free_cstring(cfrom);
-        Parrot_str_free_cstring(cto);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
-                "Win32 does not support symlinks!");
-#endif
-    }
-
-/*
-
-=item C<void link(STRING *from, STRING *to)>
-
-Creates a hard link, where available(?)
-
-=cut
-
-*/
-
-    METHOD link(STRING *from, STRING *to) {
-#ifndef WIN32
-        char * const cfrom = Parrot_str_to_cstring(INTERP, from);
-        char * const cto   = Parrot_str_to_cstring(INTERP, to);
-        const int    error = link(cfrom, cto);
-
-        Parrot_str_free_cstring(cfrom);
-        Parrot_str_free_cstring(cto);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "link() failed for OS PMC: %s\n", errmsg);
-        }
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-                "Win32 is not POSIX. Need win32 developer!");
-#endif
-    }
-
-/*
-
-=item C<INTVAL umask(INTVAL mask)>
-
-umask sets the process's file mode creation mask (and returns the
-previous one).
-
-=cut
-
-*/
-
-    METHOD umask(INTVAL mask) {
-#ifndef _MSC_VER
-        const INTVAL old = umask((mode_t)mask);
-        RETURN(INTVAL old);
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL,
-            EXCEPTION_UNIMPLEMENTED,
-            "Win32 is not POSIX. Need Win32 developer!");
-#endif
-    }
-
-/*
-
-=item C<INTVAL chroot(STRING *path)>
-
-it makes the named directory the new root directory for all further
-pathnames that begin with a "/" by your process and all its children.
-
-B<NOTE>: perl restricts this operation to superusers. It might be a good
-idea to do the same with parrot.
-
-=cut
-
-*/
-
-    METHOD chroot(STRING *path) {
-#ifndef WIN32
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-        const int    error = chroot(cpath);
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-#else
-        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
-                "Win32 is not POSIX. Need Win32 developer!");
-#endif
-    }
-
-
-/*
-
-=item C<PMC *readdir(STRING *path)>
-
-reads entries from a directory.
-
-=cut
-
-*/
-    METHOD readdir(STRING *path) {
-        PMC   * array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
-#ifndef _MSC_VER
-        char  * const cpath = Parrot_str_to_cstring(INTERP, path);
-        DIR           *dir  = opendir(cpath);
-        struct dirent *dirent;
-        STRING        *retval;
-
-        Parrot_str_free_cstring(cpath);
-
-        if (!dir) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-
-        while ((dirent = readdir(dir)) != NULL) {
-            retval = Parrot_str_new(INTERP, dirent->d_name, 0) ;
-            VTABLE_push_string(INTERP, array, retval);
-        }
-
-        closedir(dir);
-#else
-        WIN32_FIND_DATA file_find_data;
-        char * cpath;
-        HANDLE hFind = INVALID_HANDLE_VALUE;
-
-        /* Add \* to the directory name and start search. */
-        STRING *last_char = Parrot_str_substr(interp, path,
-                                              Parrot_str_length(interp, path) - 1, 1, NULL, 0);
-        int trailing_slash = Parrot_str_equal(interp, last_char, string_from_literal(interp, "\\"))
-                             ||
-                             Parrot_str_equal(interp, last_char, string_from_literal(interp, "/"));
-        cpath = Parrot_str_to_cstring(interp, Parrot_str_concat(interp,
-                path, string_from_literal(interp, trailing_slash ? "*" : "\\*"), 0));
-        hFind = FindFirstFile(cpath, &file_find_data);
-        Parrot_str_free_cstring(cpath);
-        if (hFind == INVALID_HANDLE_VALUE)
-        {
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "Unable to readdir");
-        }
-
-        /* Loop over all directories and add to result array. */
-        do
-        {
-            VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP,
-                    file_find_data.cFileName, 0));
-        }
-        while (FindNextFile(hFind, &file_find_data) != 0);
-        if (GetLastError() != ERROR_NO_MORE_FILES)
-        {
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "Error during readdir");
-        }
-        FindClose(hFind);
-#endif
-        RETURN(PMC *array);
-    }
-/*
-=item C<rename(STRING *oldpath, STRING *newpath)>
-
-This method is a wrapper for rename(2). On error a SystemError exception is
-thrown.
-
-=cut
-
-*/
-    METHOD rename(STRING *oldpath, STRING *newpath) {
-        char * const coldpath = Parrot_str_to_cstring(INTERP, oldpath);
-        char * const cnewpath = Parrot_str_to_cstring(INTERP, newpath);
-        const int    ret      = rename(coldpath, cnewpath);
-
-        Parrot_str_free_cstring(coldpath);
-        Parrot_str_free_cstring(cnewpath);
-
-        if (ret < 0) {
-            const char * const errmsg = strerror(errno) ;
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                "%s", errmsg);
-        }
-    }
-
-/*
-
-=item C<chmod(STRING *path, INTVAL mode)>
-
-=cut
-
-*/
-
-    METHOD chmod(STRING *path, INTVAL mode) {
-        char * const cpath = Parrot_str_to_cstring(INTERP, path);
-
-#ifndef WIN32
-        const int    error = chmod(cpath, mode);
-#else
-        const int    error = _chmod(cpath, mode);
-#endif
-
-        Parrot_str_free_cstring(cpath);
-
-        if (error) {
-            const char * const errmsg = strerror(errno);
-            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
-                errmsg);
-        }
-    }
-
-}
-
-/*
-
-=back
-
-=head1 SEE ALS0
-
-   chdir(2), getcwd(3), unlink(2), mkdir(2), stat(2), lstat(2),
-   symlink(2), link(2), umask(2), chroot(2)
-
-=cut
-
-*/
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/codestring/src/pmc/packfile.pmc
==============================================================================
--- branches/codestring/src/pmc/packfile.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/packfile.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -175,7 +175,7 @@
         Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF);
         PackFile                   * const pf    = PackFile_new(interp, 0);
         const opcode_t             * const ptr   =
-                (const opcode_t *)Parrot_string_cstring(interp, str);
+                (const opcode_t *)Parrot_str_cstring(interp, str);
 
         const int length = Parrot_str_byte_length(interp, str);
 
@@ -256,7 +256,7 @@
 
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such integer key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(interp, key));
     }
 
 /*
@@ -280,7 +280,7 @@
 
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such string key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(interp, key));
     }
 
 
@@ -356,7 +356,7 @@
         }
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such integer key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(interp, key));
     }
 
 
@@ -400,7 +400,7 @@
 
         Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_KEY_NOT_FOUND,
                        "Packfile: No such string key \"%s\"",
-                       Parrot_string_cstring(interp, key));
+                       Parrot_str_cstring(interp, key));
     }
 
 /*

Modified: branches/codestring/src/pmc/packfilefixupentry.pmc
==============================================================================
--- branches/codestring/src/pmc/packfilefixupentry.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/packfilefixupentry.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -102,7 +102,7 @@
                 mem_gc_allocate_zeroed_typed(INTERP, PackFile_FixupEntry);
 
         entry->type     = attrs->type;
-        entry->name     = strdup(Parrot_string_cstring(interp, attrs->name));
+        entry->name     = strdup(Parrot_str_cstring(interp, attrs->name));
         entry->offset   = attrs->offset;
         return entry;
     }

Modified: branches/codestring/src/pmc/parrotinterpreter.pmc
==============================================================================
--- branches/codestring/src/pmc/parrotinterpreter.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/parrotinterpreter.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -82,7 +82,6 @@
     if (flags & PARROT_CLONE_HLL) {
         /* we'd like to share the HLL data. Give it a PMC_sync structure
            if it doesn't have one already */
-        Parrot_gc_add_pmc_sync(s, s->HLL_info);
         d->HLL_info = s->HLL_info;
         Parrot_regenerate_HLL_namespaces(d);
     }

Modified: branches/codestring/src/pmc/pmc.num
==============================================================================
--- branches/codestring/src/pmc/pmc.num	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/pmc.num	Wed May  5 00:05:19 2010	(r46294)
@@ -77,8 +77,5 @@
 parrotclass.pmc    49
 parrotobject.pmc    50
 
-os.pmc    51
-file.pmc    52
-
-oplib.pmc    53
-opcode.pmc    54
+oplib.pmc    51
+opcode.pmc    52

Modified: branches/codestring/src/pmc/resizablebooleanarray.pmc
==============================================================================
--- branches/codestring/src/pmc/resizablebooleanarray.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/resizablebooleanarray.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -454,12 +454,12 @@
 
 */
     VTABLE void thaw(PMC *info) {
-        unsigned char   *bit_array;
+
         const UINTVAL    head_pos = VTABLE_shift_integer(INTERP, info);
         const UINTVAL    tail_pos = VTABLE_shift_integer(INTERP, info);
         STRING * const   s        = VTABLE_shift_string(INTERP, info);
 
-        bit_array      = (unsigned char*)Parrot_str_to_cstring(INTERP, s);
+        unsigned char * const bit_array = (unsigned char*)Parrot_str_to_cstring(INTERP, s);
         SET_ATTR_size(INTERP, SELF, tail_pos);
         SET_ATTR_resize_threshold(INTERP, SELF, head_pos);
         SET_ATTR_bit_array(INTERP, SELF, bit_array);

Modified: branches/codestring/src/pmc/scalar.pmc
==============================================================================
--- branches/codestring/src/pmc/scalar.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/scalar.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -944,7 +944,6 @@
         VTABLE_setprop(INTERP, ret, CONST_STRING(INTERP, "_ro"), _true);
 
         /* We're sharing this, so make sure it has a PMC_sync */
-        Parrot_gc_add_pmc_sync(INTERP, ret);
         PObj_is_PMC_shared_SET(ret);
 
         /* XXX FIXME workaround lack of metadata sharing*/

Modified: branches/codestring/src/pmc/string.pmc
==============================================================================
--- branches/codestring/src/pmc/string.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/string.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -633,7 +633,7 @@
 
         /* TODO verify encoding */
         const STRING *me  = VTABLE_get_string(INTERP, SELF);
-        char         *str = Parrot_str_to_cstring(INTERP, me);
+        char  * const str = Parrot_str_to_cstring(INTERP, me);
         UINTVAL       i   = 0;
         size_t        j   = 0;
         size_t        len = strlen(str);
@@ -823,38 +823,6 @@
 
 /*
 
-=item C<void reverse(STRING *src)>
-
-Reverse the ascii STRING C<src> in place.
-
-=cut
-
-*/
-
-    METHOD reverse(STRING *src) {
-        INTVAL         i;
-        unsigned char *p;
-        INTVAL         len = Parrot_str_byte_length(interp, src);
-
-        if (!len)
-            RETURN(void);
-
-        if (src->charset != Parrot_ascii_charset_ptr)
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_ENCODING,
-                "Can't reverse non-ascii");
-
-        p = (unsigned char *)Buffer_bufstart(src);
-
-        for (i = 0, --len; i < len; ++i, --len) {
-            const unsigned char ch = p[len];
-
-            p[len] = p[i];
-            p[i]   = ch;
-        }
-    }
-
-/*
-
 =item C<INTEGER is_integer(STRING *src)>
 
 Checks if the ascii STRING C<str> is just an integer.

Modified: branches/codestring/src/pmc/threadinterpreter.pmc
==============================================================================
--- branches/codestring/src/pmc/threadinterpreter.pmc	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc/threadinterpreter.pmc	Wed May  5 00:05:19 2010	(r46294)
@@ -26,8 +26,15 @@
 /* HEADERIZER BEGIN: static */
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 
-static void stop_GC(Interp *parent, Interp *thread);
-#define ASSERT_ARGS_stop_GC __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
+static void stop_GC(ARGMOD(Interp *parent), ARGMOD(Interp *thread))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        FUNC_MODIFIES(*parent)
+        FUNC_MODIFIES(*thread);
+
+#define ASSERT_ARGS_stop_GC __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+       PARROT_ASSERT_ARG(parent) \
+    , PARROT_ASSERT_ARG(thread))
 /* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
 /* HEADERIZER END: static */
 
@@ -38,7 +45,7 @@
  * XXX a quick hack to pass the few tests
  */
 static void
-stop_GC(Interp *parent, Interp *thread)
+stop_GC(ARGMOD(Interp *parent), ARGMOD(Interp *thread))
 {
     ASSERT_ARGS(stop_GC)
     Parrot_block_GC_mark(parent);
@@ -49,7 +56,7 @@
 
 
 
-pmclass ThreadInterpreter extends ParrotInterpreter no_ro {
+pmclass ThreadInterpreter extends ParrotInterpreter no_ro manual_attrs {
 
 /*
 

Modified: branches/codestring/src/pmc_freeze.c
==============================================================================
--- branches/codestring/src/pmc_freeze.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/pmc_freeze.c	Wed May  5 00:05:19 2010	(r46294)
@@ -72,12 +72,14 @@
 
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
 STRING *
-Parrot_freeze_pbc(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(const PackFile_ConstTable *pf)) {
+Parrot_freeze_pbc(PARROT_INTERP, ARGIN(PMC *pmc), ARGIN(const PackFile_ConstTable *pf))
+{
     ASSERT_ARGS(Parrot_freeze_pbc)
-    PMC *pf_pmc, *visitor;
+    PMC *visitor;
 
-    pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
+    PMC * const pf_pmc = Parrot_pmc_new(interp, enum_class_UnManagedStruct);
     VTABLE_set_pointer(interp, pf_pmc, (void *)pf);
 
     visitor  = Parrot_pmc_new_init(interp, enum_class_ImageIO, pf_pmc);
@@ -156,10 +158,10 @@
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 PMC *
-Parrot_freeze_strings(PARROT_INTERP, PMC *pmc)
+Parrot_freeze_strings(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze_strings)
-    PMC *visitor = Parrot_pmc_new(interp, enum_class_ImageIOStrings);
+    PMC * const visitor = Parrot_pmc_new(interp, enum_class_ImageIOStrings);
     VTABLE_set_pmc(interp, visitor, pmc);
     return VTABLE_get_pmc(interp, visitor);
 }

Modified: branches/codestring/src/runcore/cores.c
==============================================================================
--- branches/codestring/src/runcore/cores.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/runcore/cores.c	Wed May  5 00:05:19 2010	(r46294)
@@ -564,13 +564,9 @@
          * using a distinct interpreter for tracing should be ok
          * - just in case, make it easy to switch
          */
-#if 0
-        debugger = interp:
-#else
         Parrot_debugger_init(interp);
         PARROT_ASSERT(interp->pdb);
         debugger = interp->pdb->debugger;
-#endif
         PARROT_ASSERT(debugger);
 
         /* set the top of the stack so GC can trace it for GC-able pointers
@@ -640,10 +636,6 @@
 
     if (Interp_trace_TEST(interp, PARROT_TRACE_OPS_FLAG))
         return runops_trace_core(interp, pc);
-#if 0
-    if (interp->debugger && interp->debugger->pdb)
-        return Parrot_debug(interp, interp->debugger, pc);
-#endif
 
     while (pc) {
         if (pc < code_start || pc >= code_end)

Modified: branches/codestring/src/spf_render.c
==============================================================================
--- branches/codestring/src/spf_render.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/spf_render.c	Wed May  5 00:05:19 2010	(r46294)
@@ -159,20 +159,6 @@
             len += Parrot_str_byte_length(interp, prefix);
         }
         /* XXX sharp + fill ??? */
-
-#if 0
-        /* precision - only for floats, which is handled elsewhere */
-        if (info->flags & FLAG_PREC) {
-            info->flags |= FLAG_WIDTH;
-            if (string_ord(interp, str, 0) == '-' ||
-                    string_ord(interp, str, 0) == '+') {
-                info->width = info->prec + 1;
-            }
-            else {
-                info->width = info->prec;
-            }
-        }
-#endif
     }
     else {
         /* string precision */

Modified: branches/codestring/src/string/api.c
==============================================================================
--- branches/codestring/src/string/api.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/string/api.c	Wed May  5 00:05:19 2010	(r46294)
@@ -85,26 +85,6 @@
 
 /*
 
-=item C<INTVAL STRING_is_null(PARROT_INTERP, const STRING *s)>
-
-Tests if the given STRING is STRINGNULL.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_HOT
-PARROT_PURE_FUNCTION
-INTVAL
-STRING_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
-{
-    ASSERT_ARGS(STRING_is_null)
-    return STRING_IS_NULL(s);
-}
-
-/*
-
 =back
 
 =head2 Basic String Functions
@@ -2736,7 +2716,7 @@
 
 /*
 
-=item C<const char * Parrot_string_cstring(PARROT_INTERP, const STRING *str)>
+=item C<const char * Parrot_str_cstring(PARROT_INTERP, const STRING *str)>
 
 Returns a C string from a Parrot string.  Both sides are treated
 as constants -- i.e. do not resize the result.
@@ -2749,9 +2729,9 @@
 PARROT_PURE_FUNCTION
 PARROT_CANNOT_RETURN_NULL
 const char *
-Parrot_string_cstring(SHIM_INTERP, ARGIN(const STRING *str))
+Parrot_str_cstring(SHIM_INTERP, ARGIN(const STRING *str))
 {
-    ASSERT_ARGS(Parrot_string_cstring)
+    ASSERT_ARGS(Parrot_str_cstring)
     /* TODO handle NULL and friends */
     return str->strstart;
 }

Modified: branches/codestring/src/sub.c
==============================================================================
--- branches/codestring/src/sub.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/sub.c	Wed May  5 00:05:19 2010	(r46294)
@@ -435,18 +435,6 @@
     if (PMC_IS_NULL(sub->outer_sub))
         return;
 
-#if 0
-    /* verify that the current sub is sub_pmc's :outer */
-    PMC_get_sub(interp, sub->outer_sub, outer_sub);
-    if (Parrot_str_not_equal(interp, current_sub->subid,
-                         outer_sub->subid)) {
-        Parrot_ex_throw_from_c_args(interp, NULL,
-            EXCEPTION_INVALID_OPERATION, "'%Ss' isn't the :outer of '%Ss'",
-            current_sub->name, sub->name);
-        return;
-    }
-#endif
-
     /* set the sub's outer context to the current context */
     sub->outer_ctx = ctx;
 }

Modified: branches/codestring/src/thread.c
==============================================================================
--- branches/codestring/src/thread.c	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/src/thread.c	Wed May  5 00:05:19 2010	(r46294)
@@ -339,8 +339,6 @@
     if (is_ro)
         pmc->vtable = pmc->vtable->ro_variant_vtable;
 
-    Parrot_gc_add_pmc_sync(interp, pmc);
-
     PObj_is_PMC_shared_SET(pmc);
 
     /* make sure metadata doesn't go away unexpectedly */
@@ -713,12 +711,15 @@
 
 */
 
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 PMC *
 pt_thread_create(PARROT_INTERP, INTVAL type, INTVAL clone_flags)
 {
     ASSERT_ARGS(pt_thread_create)
-    PMC *new_interp_pmc = pmc_new(interp, type);
-    Interp *new_interp  = (Interp *)VTABLE_get_pointer(interp, new_interp_pmc);
+    PMC    * const new_interp_pmc = pmc_new(interp, type);
+    Interp * const new_interp     = (Interp *)VTABLE_get_pointer(interp, new_interp_pmc);
 
     clone_interpreter(new_interp, interp, clone_flags);
     pt_thread_prepare_for_run(new_interp, interp);
@@ -738,10 +739,11 @@
 */
 
 int
-pt_thread_run(PARROT_INTERP, PMC *thread_interp_pmc, ARGIN(PMC *sub), ARGIN_NULLOK(PMC *arg))
+pt_thread_run(PARROT_INTERP, ARGMOD(PMC *thread_interp_pmc), ARGIN(PMC *sub),
+        ARGIN_NULLOK(PMC *arg))
 {
     ASSERT_ARGS(pt_thread_run)
-    Interp *thread_interp = (Interp *)VTABLE_get_pointer(interp, thread_interp_pmc);
+    Interp * const thread_interp = (Interp *)VTABLE_get_pointer(interp, thread_interp_pmc);
 
     SETATTR_ParrotInterpreter_sub(interp,
                                   thread_interp_pmc, pt_transfer_sub(thread_interp, interp, sub));
@@ -1060,32 +1062,6 @@
         return;
     }
 
-#if 0
-    for (i = 0; i < n_interpreters; ++i) {
-        Parrot_Interp other_interp;
-        other_interp = interpreter_array[i];
-        if (!other_interp)
-            continue;
-
-        if (is_suspended_for_gc(other_interp) &&
-            other_interp != interp &&
-            (other_interp->thread_data->state & THREAD_STATE_SUSPENDED_GC))
-        {
-            PMC *successp;
-            /* this means that someone else already got this far,
-             * so we have a suspend event in our queue to ignore
-             */
-            /* XXX still reachable? */
-            DEBUG_ONLY(fprintf(stderr, "apparently someone else is doing it [%p]\n", other_interp));
-            fprintf(stderr, "??? found later (%p)\n", other_interp);
-            successp = Parrot_cx_delete_suspend_for_gc(interp);
-            PARROT_ASSERT(successp);
-            UNLOCK(interpreter_array_mutex);
-            return;
-        }
-    }
-#endif
-
     /* now send all the non-suspended threads to suspend for GC */
     for (i = 0; i < n_interpreters; ++i) {
         Parrot_Interp other_interp = interpreter_array[i];

Copied: branches/codestring/t/dynpmc/file.t (from r46293, trunk/t/dynpmc/file.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/codestring/t/dynpmc/file.t	Wed May  5 00:05:19 2010	(r46294, copy of r46293, trunk/t/dynpmc/file.t)
@@ -0,0 +1,338 @@
+#! perl
+# Copyright (C) 2001-2006, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+
+use Test::More;
+use Parrot::Test tests => 9;
+
+use Parrot::Config;
+
+use Cwd;
+use File::Temp;
+use File::Spec::Functions;
+
+my $tempdir = File::Temp::tempdir( CLEANUP => 1 );
+
+our ( $MSWin32, $cygwin );
+$MSWin32 = 1 if $^O =~ m!MSWin32!;
+$cygwin  = 1 if $^O =~ m!cygwin!;
+
+=head1 NAME
+
+t/pmc/file.t - Files functions
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/file.t
+
+=head1 DESCRIPTION
+
+Tests the C<File> PMC.
+
+=cut
+
+my $xpto = catdir( $tempdir, 'xpto' );
+mkdir $xpto unless -d $xpto;
+
+my $otpx = catfile( $xpto, 'otpx' );
+
+open my $fh, '>', $otpx or die $!;
+print $fh 'xpto';
+close $fh;
+
+# test is_dir
+pir_output_is( <<"CODE", <<"OUT", "Test is_dir" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$xpto'
+        \$I1 = \$P1."is_dir"(\$S1)
+
+        if \$I1 goto ok1
+        print "not "
+
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$otpx'
+        \$I1 = \$P1."is_dir"(\$S1)
+        \$I1 = !\$I1
+
+        if \$I1 goto ok2
+        print "not "
+
+ok2:
+        print "ok 2\\n"
+
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+
+# test is_dir
+pir_error_output_like( <<"CODE", <<"OUT", "Test is_dir error" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        #make a filename that's long enough to cause lstat to fail
+        \$I0 = 1000
+loop:
+        \$S0 = concat \$S0, "1234567890"
+        \$I0 = \$I0 - 1
+        if \$I0 goto loop
+
+        \$I1 = \$P1."is_dir"(\$S0)
+
+        end
+.end
+CODE
+/^[\\w \t\r\n]+current instr\.:/
+OUT
+
+# test is_file
+pir_output_is( <<"CODE", <<"OUT", "Test is_file" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$xpto'
+        \$I1 = \$P1."is_file"(\$S1)
+        \$I1 = !\$I1
+
+        if \$I1 goto ok1
+        print "not "
+
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$otpx'
+        \$I1 = \$P1."is_file"(\$S1)
+
+        if \$I1 goto ok2
+        print "not "
+
+ok2:
+        print "ok 2\\n"
+
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+
+# test is_file
+pir_error_output_like( <<"CODE", <<"OUT", "Test is_file error" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        #make a filename that's long enough to cause lstat to fail
+        \$I0 = 1000
+loop:
+        \$S0 = concat \$S0, "1234567890"
+        \$I0 = \$I0 - 1
+        if \$I0 goto loop
+
+        \$I1 = \$P1."is_file"(\$S0)
+
+        end
+.end
+CODE
+/^[\\w \t\r\n]+current instr\.:/
+OUT
+
+SKIP: {
+    skip "Links not available under Windows", 1 if $MSWin32;
+
+    my $lotpx = catfile( $xpto, 'lotpx' );
+    symlink $otpx, $lotpx;
+
+    # test is_link
+    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to files" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$lotpx'
+        \$I1 = \$P1."is_link"(\$S1)
+
+        if \$I1 goto ok1
+        print "not "
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$otpx'
+        \$I1 = \$P1."is_link"(\$S1)
+        \$I1 = !\$I1
+        if \$I1 goto ok2
+        print "not "
+ok2:
+        print "ok 2\\n"
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+
+}
+
+SKIP: {
+    skip "Links not available under Windows", 1 if $MSWin32;
+
+    my $xptol = catdir( $xpto, 'xptol' );
+    symlink $xpto, $xptol;
+
+    # test is_link
+    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to directories" );
+.sub main :main
+        \$P0 = loadlib 'file'
+        \$P1 = new ['File']
+
+        \$S1 = '$xptol'
+        \$I1 = \$P1."is_link"(\$S1)
+
+        if \$I1 goto ok1
+        print "not "
+ok1:
+        print "ok 1\\n"
+
+        \$S1 = '$xpto'
+        \$I1 = \$P1."is_link"(\$S1)
+        \$I1 = !\$I1
+        if \$I1 goto ok2
+        print "not "
+ok2:
+        print "ok 2\\n"
+        end
+.end
+CODE
+ok 1
+ok 2
+OUT
+}
+
+my $otpxcopy = catdir( $xpto, 'otpxcopy' );
+
+# test copy
+pir_output_is( <<"CODE", <<"OUT", "Test copy for files" );
+.sub main :main
+       \$S1 = '$otpx'
+       \$S2 = '$otpxcopy'
+
+       \$P0 = loadlib 'file'
+       \$P0 = loadlib 'os'
+       \$P1 = new ['File']
+       \$P2 = new ['OS']
+
+       \$P1."copy"(\$S1,\$S2)
+       print "ok\\n"
+
+       \$P3 = \$P2."stat"(\$S1)
+       \$P4 = \$P2."stat"(\$S2)
+
+       \$I1 = \$P3[7]
+       \$I2 = \$P4[7]
+
+       if \$I1 == \$I2 goto ok
+       print "not "
+ok:
+       print "ok\\n"
+
+       end
+.end
+CODE
+ok
+ok
+OUT
+
+# test rename
+SKIP: {
+    skip 'file exists', 1 if $MSWin32;
+
+    pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
+.sub main :main
+       \$S1 = '$otpx'
+       \$S2 = '$otpxcopy'
+
+       \$P0 = loadlib 'file'
+       \$P0 = loadlib 'os'
+       \$P1 = new ['File']
+       \$P2 = new ['OS']
+
+       \$P3 = \$P2."stat"(\$S1)
+       \$I1 = \$P3[7]
+
+       \$P1."rename"(\$S1,\$S2)
+       print "ok\\n"
+
+       \$P4 = \$P2."stat"(\$S2)
+       \$I2 = \$P4[7]
+
+       if \$I1 == \$I2 goto ok
+       print "not "
+ok:
+       print "ok\\n"
+
+       end
+.end
+CODE
+ok
+ok
+OUT
+}
+
+my $bad_file = catfile( $xpto, 'not a file' );
+
+# test exists
+pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
+.sub main :main
+       \$P0 = loadlib 'file'
+       \$P1 = new ['File']
+       \$I1 = \$P1.'exists'( '$otpxcopy' )
+
+       if \$I1 goto file_exists
+       print "not "
+
+  file_exists:
+       print "ok 1 - file exists\\n"
+
+       \$I1 = \$P1.'exists'( '$xpto' )
+
+       if \$I1 goto dir_exists
+       print "not "
+
+  dir_exists:
+       print "ok 2 - directory exists\\n"
+
+       \$I1 = \$P1.'exists'( '$bad_file' )
+
+       if \$I1 == 0 goto file_does_not_exist
+       print "not "
+
+  file_does_not_exist:
+       print "ok 3 - file does not exist\\n"
+
+       end
+.end
+CODE
+ok 1 - file exists
+ok 2 - directory exists
+ok 3 - file does not exist
+OUT
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

Copied: branches/codestring/t/dynpmc/os.t (from r46293, trunk/t/dynpmc/os.t)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ branches/codestring/t/dynpmc/os.t	Wed May  5 00:05:19 2010	(r46294, copy of r46293, trunk/t/dynpmc/os.t)
@@ -0,0 +1,463 @@
+#! perl
+# Copyright (C) 2001-2009, Parrot Foundation.
+# $Id$
+
+use strict;
+use warnings;
+use lib qw( . lib ../lib ../../lib );
+use Test::More;
+use Parrot::Test tests => 16;
+use Parrot::Config;
+use Cwd;
+use File::Spec;
+
+my $MSWin32 = $^O =~ m!MSWin32!;
+my $cygwin  = $^O =~ m!cygwin!;
+my $solaris = $^O =~ m!solaris!;
+my $MSVC = $PConfig{cc} =~ m/\bcl(?:\.exe)?/i;
+
+=head1 NAME
+
+t/pmc/os.t - Files and Dirs
+
+=head1 SYNOPSIS
+
+    % prove t/pmc/os.t
+
+=head1 DESCRIPTION
+
+Tests the C<OS> PMC.
+
+=cut
+
+END {
+    # Clean up environment on exit
+    rmdir "xpto"  if -d "xpto";
+    unlink "xpto" if -f "xpto";
+}
+
+# test 'cwd'
+my $cwd = File::Spec->canonpath(getcwd);
+if (File::Spec->case_tolerant(substr($cwd,0,2))) {
+    $cwd = lc($cwd);
+    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        print $S2
+        print "\n"
+        end
+.end
+CODE
+$cwd
+OUT
+}
+else {
+    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = $P1."cwd"()
+        print $S1
+        print "\n"
+        end
+.end
+CODE
+$cwd
+OUT
+}
+
+#  TEST chdir
+chdir "src";
+my $upcwd = File::Spec->canonpath(getcwd);
+chdir '..';
+
+if (File::Spec->case_tolerant(substr($cwd,0,2))) {
+    $cwd = lc($cwd);
+    $upcwd = lc($upcwd);
+
+    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "src"
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        end
+.end
+CODE
+$upcwd
+$cwd
+OUT
+}
+else {
+    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "src"
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        end
+.end
+CODE
+$upcwd
+$cwd
+OUT
+}
+
+# Test mkdir
+
+my $xpto = $upcwd;
+$xpto =~ s/src([\/\\]?)$/xpto$1/;
+
+if (File::Spec->case_tolerant(substr($cwd,0,2))) {
+
+    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $I1 = 0o555
+        $P1."mkdir"($S1,$I1)
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        $S2 = downcase $S1
+        say $S2
+
+        end
+.end
+CODE
+$xpto
+$cwd
+OUT
+}
+else {
+    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $I1 = 0o555
+        $P1."mkdir"($S1,$I1)
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        $S1 = ".."
+        $P1."chdir"($S1)
+
+        $S1 = $P1."cwd"()
+        say $S1
+
+        end
+.end
+CODE
+$xpto
+$cwd
+OUT
+}
+
+# Test remove on a directory
+mkdir "xpto" unless -d "xpto";
+
+pir_output_is( <<'CODE', <<'OUT', 'Test rm call in a directory' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $P1."rm"($S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+ok( !-d $xpto, "Test that rm removed the directory" );
+rmdir $xpto if -d $xpto;    # this way next test doesn't fail if this one does
+
+# test stat
+
+open my $X, '>', "xpto";
+print $X "xpto";
+close $X;
+
+my $stat;
+
+my $count = $MSWin32 ? 11 : 13;
+my @s = stat('xpto');
+if ( $cygwin ) {
+    # Mask inode number (fudge it)
+    $s[1] &= 0xffffffff;
+}
+
+if ( $MSWin32 ) {
+    $stat = sprintf("0x%08x\n" x 11, @s);
+    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = "xpto"
+        $P2 = $P1."stat"($S1)
+
+        $S1 = repeat "0x%08x\n", 11
+        $S2 = sprintf $S1, $P2
+        print $S2
+done:
+        end
+.end
+CODE
+}
+else {
+  SKIP: {
+    skip 'broken test TT #457', 1 if $solaris;
+
+    $stat = sprintf("0x%08x\n" x 13, @s);
+    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = "xpto"
+        $P2 = $P1."stat"($S1)
+
+        $S1 = repeat "0x%08x\n", 13
+        $S2 = sprintf $S1, $P2
+        print $S2
+done:
+        end
+.end
+CODE
+}
+}
+
+# test readdir
+SKIP: {
+    skip 'not implemented on windows yet', 1 if ( $MSWin32 && $MSVC );
+
+    opendir my $IN, 'docs';
+    my @entries = readdir $IN;
+    closedir $IN;
+    my $entries = join( ' ', @entries ) . "\n";
+    pir_output_is( <<'CODE', $entries, 'Test OS.readdir' );
+.sub main :main
+    $P0 = loadlib 'os'
+    $P1 = new ['OS']
+    $P2 = $P1.'readdir'('docs')
+
+    $S0 = join ' ', $P2
+    print $S0
+    print "\n"
+.end
+CODE
+}
+
+# test rename
+SKIP: {
+    open my $FILE, ">", "____some_test_file";
+    close $FILE;
+    pir_output_is( <<'CODE', <<"OUT", 'Test OS.rename' );
+.sub main :main
+    $P0 = loadlib 'os'
+    $P1 = new ['OS']
+    $P1.'rename'('____some_test_file', '___some_other_file')
+    $I0 = stat '___some_other_file', 0
+    print $I0
+    print "\n"
+    $P1.'rm'('___some_other_file')
+.end
+CODE
+1
+OUT
+}
+
+# test lstat
+
+my $lstat;
+
+SKIP: {
+    skip 'lstat not on Win32', 1 if $MSWin32;
+    skip 'broken test TT #457', 1 if $solaris;
+
+    my @s = lstat('xpto');
+    if ($cygwin) {
+        # Mask inode number (fudge it)
+        $s[1] &= 0xffffffff;
+    }
+    $lstat = sprintf( "0x%08x\n" x 13, @s );
+    pir_output_is( <<'CODE', $lstat, "Test OS.lstat" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+        $S1 = "xpto"
+        $P2 = $P1."lstat"($S1)
+
+        $S1 = repeat "0x%08x\n", 13
+        $S2 = sprintf $S1, $P2
+        print $S2
+
+        end
+.end
+CODE
+}
+
+# Test remove on a file
+pir_output_is( <<'CODE', <<"OUT", "Test rm call in a file" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $P1."rm"($S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+ok( !-f $xpto, "Test that rm removed file" );
+rmdir $xpto if -f $xpto;    # this way next test doesn't fail if this one does
+
+# Test symlink
+SKIP: {
+    skip "Symlinks not available under Windows", 2 if $MSWin32;
+
+    pir_output_is( <<'CODE', <<"OUT", "Test symlink" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $S2 = "MANIFEST"
+        $P1."symlink"($S2, $S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+    ok( -l "xpto", "symlink was really created" );
+    unlink "xpto" if -f "xpto";
+}
+
+# Test link to file. May require root permissions
+SKIP: {
+    skip "Hardlinks to files not possible on Windows", 2 if $MSWin32 or $cygwin;
+
+    pir_output_is( <<'CODE', <<"OUT", "Test link" );
+.sub main :main
+        $P0 = loadlib 'os'
+        $P1 = new ['OS']
+
+        $S1 = "xpto"
+        $S2 = "myconfig"
+        $P1."link"($S2, $S1)
+
+        print "ok\n"
+
+        end
+.end
+CODE
+ok
+OUT
+
+    my $nl = [ stat("myconfig") ]->[3];
+    ok( $nl > 1, "hard link to file was really created" );
+    unlink "xpto" if -f "xpto";
+}
+
+SKIP: {
+    skip "Hardlinks to files not possible on Windows", 1 if $MSWin32 or $cygwin;
+
+    my $prevnl = [ stat("tools") ]->[3];
+    pir_output_like( <<"CODE", <<"OUT", "Test dirlink" );
+.sub main :main
+    .local pmc os
+    .local string xpto, tools
+    \$P0 = loadlib 'os'
+    os    = new ['OS']
+    xpto  = "xpto"
+    tools = "tools"
+
+    push_eh no_root_perms
+    os."link"(tools, xpto)
+    pop_eh
+
+    .local pmc statvals
+    statvals = os.'stat'(tools)
+
+    # nlink
+    .local int nlink
+    nlink = statvals[3]
+
+    gt nlink, $prevnl, is_okay
+    end
+
+  no_root_perms:
+    .local pmc e
+    .local string message
+    .get_results( e )
+    pop_eh
+    message = e['message']
+    say message
+    end
+
+  is_okay:
+    say "ok"
+    end
+.end
+CODE
+/link.* failed for OS PMC:/
+OUT
+}
+
+# Local Variables:
+#   mode: cperl
+#   cperl-indent-level: 4
+#   fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:

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

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

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

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

Modified: branches/codestring/t/oo/methods.t
==============================================================================
--- branches/codestring/t/oo/methods.t	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/t/oo/methods.t	Wed May  5 00:05:19 2010	(r46294)
@@ -54,6 +54,7 @@
 
 .sub delete_library
     .local pmc os
+    $P0 = loadlib 'os'
     os = new 'OS'
     $S0 = "method_library.pir"
     os.'rm'($S0)

Deleted: branches/codestring/t/op/pushaction.t
==============================================================================
--- branches/codestring/t/op/pushaction.t	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,176 +0,0 @@
-#! perl
-# Copyright (C) 2001-2008, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-
-use lib qw( . lib ../lib ../../lib );
-
-use Test::More;
-use Parrot::Test tests => 7;
-
-=head1 NAME
-
-t/op/pushaction.t - Test the C<pushaction> Instruction
-
-=head1 SYNOPSIS
-
-        % prove t/pmc/pushaction.t
-
-=head1 DESCRIPTION
-
-Tests the C<pushaction> instruction.
-
-=cut
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark nested" );
-    pushmark 10
-    pushmark 11
-    print "ok 1\n"
-    popmark 11
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_error_output_like( <<'CODE', <<'OUTPUT', "pushmark - pop wrong one" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 500
-    print "never\n"
-    end
-CODE
-/Mark 500 not found/
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushaction" );
-    pushmark 10
-    print "ok 1\n"
-    .const 'Sub' P10 = "action"
-    pushaction P10
-    print "ok 2\n"
-    popmark 10
-    print "ok 3\n"
-    end
-.pcc_sub action:
-    get_params "0", I5
-    print "in action I5 = "
-    print I5
-    print "\n"
-    returncc
-CODE
-ok 1
-ok 2
-in action I5 = 0
-ok 3
-OUTPUT
-
-pir_output_is( <<'CODE', <<'OUTPUT', "pushaction - end in main" );
-.sub main :main
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    # IMCC inserts end here, because it is :main
-.end
-
-.sub exit_handler
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-.end
-CODE
-main
-OUTPUT
-
-$ENV{TEST_PROG_ARGS} ||= '';
-my @todo = $ENV{TEST_PROG_ARGS} =~ /--run-pbc/
-    ? ( todo => 'lexicals not thawed properly from PBC, TT #1171' )
-    : ();
-pir_output_is( <<'CODE', <<'OUTPUT', "pushaction as closure", @todo );
-.sub main :main
-    .local pmc a
-    .lex 'a', a
-    pushmark 10
-    a = new 'Integer'
-    a = 42
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-
-    popmark 10
-    .return()
-.end
-
-.sub exit_handler :outer(main)
-    .param int flag
-    print "at popmark, flag = "
-    say flag
-    .local pmc a
-    a = find_lex 'a'
-    print 'a = '
-    say a
-.end
-CODE
-main
-at popmark, flag = 0
-a = 42
-OUTPUT
-
-# This test is entirely irrelevant under the new implementation of
-# continuations free from the stack. Leave it for now, to see whether there
-# is some other aspect of the stack, runloops, and exceptions that can be
-# tested.
-# exception handlers are still run in an inferior runloop, which messes up
-# nonlocal exit from within handlers.
-pir_output_like(
-    <<'CODE', <<'OUTPUT', "pushaction: error while handling error", todo => 'runloop shenanigans' );
-.sub main :main
-    push_eh h
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    $P1 = new 'Exception'
-    throw $P1
-    print "never 1\n"
-h:
-    ## this is never actually reached, because exit_handler throws an unhandled
-    ## exception before the handler is entered.
-    print "in outer handler\n"
-.end
-
-.sub exit_handler :outer(main)
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-    $P2 = new 'Exception'
-    throw $P2
-    print "never 2\n"
-.end
-CODE
-/^main
-at_exit, flag = 1
-No exception handler/
-OUTPUT
-
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/codestring/t/pmc/eval.t
==============================================================================
--- branches/codestring/t/pmc/eval.t	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/t/pmc/eval.t	Wed May  5 00:05:19 2010	(r46294)
@@ -329,6 +329,7 @@
   print io, \$S0
   close io
   load_bytecode "$temp_pbc"
+  \$P0 = loadlib 'os'
   os = new ['OS']
   os.'rm'("$temp_pbc")
   f2 = compi("foo_2", "hello from foo_2")

Modified: branches/codestring/t/pmc/exception-old.t
==============================================================================
--- branches/codestring/t/pmc/exception-old.t	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/t/pmc/exception-old.t	Wed May  5 00:05:19 2010	(r46294)
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 27;
+use Parrot::Test tests => 22;
 
 =head1 NAME
 
@@ -325,40 +325,6 @@
 OUTPUT
 1;
 
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<'CODE', <<'OUTPUT', "pushmark nested" );
-    pushmark 10
-    pushmark 11
-    print "ok 1\n"
-    popmark 11
-    popmark 10
-    print "ok 2\n"
-    end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_error_output_like( <<'CODE', <<'OUTPUT', "pushmark - pop wrong one" );
-    pushmark 10
-    print "ok 1\n"
-    popmark 500
-    print "never\n"
-    end
-CODE
-/Mark 500 not found/
-OUTPUT
-
 # stringification is handled by a vtable, which runs in a second
 # runloop. when an error in the method tries to go to a Error_Handler defined
 # outside it, it winds up going to the inner runloop, giving strange results.
@@ -392,58 +358,6 @@
 caught
 OUTPUT
 
-pir_error_output_like( <<'CODE', <<'OUTPUT', "pushaction - throw in main" );
-.sub main :main
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    $P0 = new ['Exception']
-    throw $P0
-    .return()
-.end
-
-.sub exit_handler
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-.end
-CODE
-/^main
-No exception handler/
-OUTPUT
-
-# exception handlers are still run in an inferior runloop, which messes up
-# nonlocal exit from within handlers.
-pir_output_like(
-    <<'CODE', <<'OUTPUT', "pushaction: error while handling error", todo => 'runloop shenanigans' );
-.sub main :main
-    push_eh h
-    print "main\n"
-    .const 'Sub' at_exit = "exit_handler"
-    pushaction at_exit
-    $P1 = new ['Exception']
-    throw $P1
-    print "never 1\n"
-h:
-    ## this is never actually reached, because exit_handler throws an unhandled
-    ## exception before the handler is entered.
-    print "in outer handler\n"
-.end
-
-.sub exit_handler :outer(main)
-    .param int flag
-    print "at_exit, flag = "
-    say flag
-    $P2 = new ['Exception']
-    throw $P2
-    print "never 2\n"
-.end
-CODE
-/^main
-at_exit, flag = 1
-No exception handler/
-OUTPUT
-
 $ENV{TEST_PROG_ARGS} ||= '';
 my @todo = $ENV{TEST_PROG_ARGS} =~ /--run-pbc/
     ? ( todo => '.tailcall and lexical maps not thawed from PBC, TT #1172' )

Deleted: branches/codestring/t/pmc/file.t
==============================================================================
--- branches/codestring/t/pmc/file.t	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,327 +0,0 @@
-#! perl
-# Copyright (C) 2001-2006, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-
-use Test::More;
-use Parrot::Test tests => 9;
-
-use Parrot::Config;
-
-use Cwd;
-use File::Temp;
-use File::Spec::Functions;
-
-my $tempdir = File::Temp::tempdir( CLEANUP => 1 );
-
-our ( $MSWin32, $cygwin );
-$MSWin32 = 1 if $^O =~ m!MSWin32!;
-$cygwin  = 1 if $^O =~ m!cygwin!;
-
-=head1 NAME
-
-t/pmc/file.t - Files functions
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/file.t
-
-=head1 DESCRIPTION
-
-Tests the C<File> PMC.
-
-=cut
-
-my $xpto = catdir( $tempdir, 'xpto' );
-mkdir $xpto unless -d $xpto;
-
-my $otpx = catfile( $xpto, 'otpx' );
-
-open my $fh, '>', $otpx or die $!;
-print $fh 'xpto';
-close $fh;
-
-# test is_dir
-pir_output_is( <<"CODE", <<"OUT", "Test is_dir" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$xpto'
-        \$I1 = \$P1."is_dir"(\$S1)
-
-        if \$I1 goto ok1
-        print "not "
-
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$otpx'
-        \$I1 = \$P1."is_dir"(\$S1)
-        \$I1 = !\$I1
-
-        if \$I1 goto ok2
-        print "not "
-
-ok2:
-        print "ok 2\\n"
-
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-
-# test is_dir
-pir_error_output_like( <<"CODE", <<"OUT", "Test is_dir error" );
-.sub main :main
-        \$P1 = new ['File']
-
-        #make a filename that's long enough to cause lstat to fail
-        \$I0 = 1000
-loop:
-        \$S0 = concat \$S0, "1234567890"
-        \$I0 = \$I0 - 1
-        if \$I0 goto loop
-
-        \$I1 = \$P1."is_dir"(\$S0)
-
-        end
-.end
-CODE
-/^[\\w \t\r\n]+current instr\.:/
-OUT
-
-# test is_file
-pir_output_is( <<"CODE", <<"OUT", "Test is_file" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$xpto'
-        \$I1 = \$P1."is_file"(\$S1)
-        \$I1 = !\$I1
-
-        if \$I1 goto ok1
-        print "not "
-
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$otpx'
-        \$I1 = \$P1."is_file"(\$S1)
-
-        if \$I1 goto ok2
-        print "not "
-
-ok2:
-        print "ok 2\\n"
-
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-
-# test is_file
-pir_error_output_like( <<"CODE", <<"OUT", "Test is_file error" );
-.sub main :main
-        \$P1 = new ['File']
-
-        #make a filename that's long enough to cause lstat to fail
-        \$I0 = 1000
-loop:
-        \$S0 = concat \$S0, "1234567890"
-        \$I0 = \$I0 - 1
-        if \$I0 goto loop
-
-        \$I1 = \$P1."is_file"(\$S0)
-
-        end
-.end
-CODE
-/^[\\w \t\r\n]+current instr\.:/
-OUT
-
-SKIP: {
-    skip "Links not available under Windows", 1 if $MSWin32;
-
-    my $lotpx = catfile( $xpto, 'lotpx' );
-    symlink $otpx, $lotpx;
-
-    # test is_link
-    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to files" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$lotpx'
-        \$I1 = \$P1."is_link"(\$S1)
-
-        if \$I1 goto ok1
-        print "not "
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$otpx'
-        \$I1 = \$P1."is_link"(\$S1)
-        \$I1 = !\$I1
-        if \$I1 goto ok2
-        print "not "
-ok2:
-        print "ok 2\\n"
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-
-}
-
-SKIP: {
-    skip "Links not available under Windows", 1 if $MSWin32;
-
-    my $xptol = catdir( $xpto, 'xptol' );
-    symlink $xpto, $xptol;
-
-    # test is_link
-    pir_output_is( <<"CODE", <<"OUT", "Test is_link with links to directories" );
-.sub main :main
-        \$P1 = new ['File']
-
-        \$S1 = '$xptol'
-        \$I1 = \$P1."is_link"(\$S1)
-
-        if \$I1 goto ok1
-        print "not "
-ok1:
-        print "ok 1\\n"
-
-        \$S1 = '$xpto'
-        \$I1 = \$P1."is_link"(\$S1)
-        \$I1 = !\$I1
-        if \$I1 goto ok2
-        print "not "
-ok2:
-        print "ok 2\\n"
-        end
-.end
-CODE
-ok 1
-ok 2
-OUT
-}
-
-my $otpxcopy = catdir( $xpto, 'otpxcopy' );
-
-# test copy
-pir_output_is( <<"CODE", <<"OUT", "Test copy for files" );
-.sub main :main
-       \$S1 = '$otpx'
-       \$S2 = '$otpxcopy'
-
-       \$P1 = new ['File']
-       \$P2 = new ['OS']
-
-       \$P1."copy"(\$S1,\$S2)
-       print "ok\\n"
-
-       \$P3 = \$P2."stat"(\$S1)
-       \$P4 = \$P2."stat"(\$S2)
-
-       \$I1 = \$P3[7]
-       \$I2 = \$P4[7]
-
-       if \$I1 == \$I2 goto ok
-       print "not "
-ok:
-       print "ok\\n"
-
-       end
-.end
-CODE
-ok
-ok
-OUT
-
-# test rename
-SKIP: {
-    skip 'file exists', 1 if $MSWin32;
-
-    pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
-.sub main :main
-       \$S1 = '$otpx'
-       \$S2 = '$otpxcopy'
-
-       \$P1 = new ['File']
-       \$P2 = new ['OS']
-
-       \$P3 = \$P2."stat"(\$S1)
-       \$I1 = \$P3[7]
-
-       \$P1."rename"(\$S1,\$S2)
-       print "ok\\n"
-
-       \$P4 = \$P2."stat"(\$S2)
-       \$I2 = \$P4[7]
-
-       if \$I1 == \$I2 goto ok
-       print "not "
-ok:
-       print "ok\\n"
-
-       end
-.end
-CODE
-ok
-ok
-OUT
-}
-
-my $bad_file = catfile( $xpto, 'not a file' );
-
-# test exists
-pir_output_is( <<"CODE", <<"OUT", "Test rename for files" );
-.sub main :main
-       \$P1 = new ['File']
-       \$I1 = \$P1.'exists'( '$otpxcopy' )
-
-       if \$I1 goto file_exists
-       print "not "
-
-  file_exists:
-       print "ok 1 - file exists\\n"
-
-       \$I1 = \$P1.'exists'( '$xpto' )
-
-       if \$I1 goto dir_exists
-       print "not "
-
-  dir_exists:
-       print "ok 2 - directory exists\\n"
-
-       \$I1 = \$P1.'exists'( '$bad_file' )
-
-       if \$I1 == 0 goto file_does_not_exist
-       print "not "
-
-  file_does_not_exist:
-       print "ok 3 - file does not exist\\n"
-
-       end
-.end
-CODE
-ok 1 - file exists
-ok 2 - directory exists
-ok 3 - file does not exist
-OUT
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Deleted: branches/codestring/t/pmc/os.t
==============================================================================
--- branches/codestring/t/pmc/os.t	Wed May  5 00:05:19 2010	(r46293)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,447 +0,0 @@
-#! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
-# $Id$
-
-use strict;
-use warnings;
-use lib qw( . lib ../lib ../../lib );
-use Test::More;
-use Parrot::Test tests => 16;
-use Parrot::Config;
-use Cwd;
-use File::Spec;
-
-my $MSWin32 = $^O =~ m!MSWin32!;
-my $cygwin  = $^O =~ m!cygwin!;
-my $solaris = $^O =~ m!solaris!;
-my $MSVC = $PConfig{cc} =~ m/\bcl(?:\.exe)?/i;
-
-=head1 NAME
-
-t/pmc/os.t - Files and Dirs
-
-=head1 SYNOPSIS
-
-    % prove t/pmc/os.t
-
-=head1 DESCRIPTION
-
-Tests the C<OS> PMC.
-
-=cut
-
-END {
-    # Clean up environment on exit
-    rmdir "xpto"  if -d "xpto";
-    unlink "xpto" if -f "xpto";
-}
-
-# test 'cwd'
-my $cwd = File::Spec->canonpath(getcwd);
-if (File::Spec->case_tolerant(substr($cwd,0,2))) {
-    $cwd = lc($cwd);
-    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        print $S2
-        print "\n"
-        end
-.end
-CODE
-$cwd
-OUT
-}
-else {
-    pir_output_is( <<'CODE', <<"OUT", 'Test cwd' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = $P1."cwd"()
-        print $S1
-        print "\n"
-        end
-.end
-CODE
-$cwd
-OUT
-}
-
-#  TEST chdir
-chdir "src";
-my $upcwd = File::Spec->canonpath(getcwd);
-chdir '..';
-
-if (File::Spec->case_tolerant(substr($cwd,0,2))) {
-    $cwd = lc($cwd);
-    $upcwd = lc($upcwd);
-
-    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "src"
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        end
-.end
-CODE
-$upcwd
-$cwd
-OUT
-}
-else {
-    pir_output_is( <<'CODE', <<"OUT", 'Test chdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "src"
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        end
-.end
-CODE
-$upcwd
-$cwd
-OUT
-}
-
-# Test mkdir
-
-my $xpto = $upcwd;
-$xpto =~ s/src([\/\\]?)$/xpto$1/;
-
-if (File::Spec->case_tolerant(substr($cwd,0,2))) {
-
-    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $I1 = 0o555
-        $P1."mkdir"($S1,$I1)
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        $S2 = downcase $S1
-        say $S2
-
-        end
-.end
-CODE
-$xpto
-$cwd
-OUT
-}
-else {
-    pir_output_is( <<'CODE', <<"OUT", 'Test mkdir' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $I1 = 0o555
-        $P1."mkdir"($S1,$I1)
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        $S1 = ".."
-        $P1."chdir"($S1)
-
-        $S1 = $P1."cwd"()
-        say $S1
-
-        end
-.end
-CODE
-$xpto
-$cwd
-OUT
-}
-
-# Test remove on a directory
-mkdir "xpto" unless -d "xpto";
-
-pir_output_is( <<'CODE', <<'OUT', 'Test rm call in a directory' );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $P1."rm"($S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-ok( !-d $xpto, "Test that rm removed the directory" );
-rmdir $xpto if -d $xpto;    # this way next test doesn't fail if this one does
-
-# test stat
-
-open my $X, '>', "xpto";
-print $X "xpto";
-close $X;
-
-my $stat;
-
-my $count = $MSWin32 ? 11 : 13;
-my @s = stat('xpto');
-if ( $cygwin ) {
-    # Mask inode number (fudge it)
-    $s[1] &= 0xffffffff;
-}
-
-if ( $MSWin32 ) {
-    $stat = sprintf("0x%08x\n" x 11, @s);
-    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = "xpto"
-        $P2 = $P1."stat"($S1)
-
-        $S1 = repeat "0x%08x\n", 11
-        $S2 = sprintf $S1, $P2
-        print $S2
-done:
-        end
-.end
-CODE
-}
-else {
-  SKIP: {
-    skip 'broken test TT #457', 1 if $solaris;
-
-    $stat = sprintf("0x%08x\n" x 13, @s);
-    pir_output_is( <<'CODE', $stat, 'Test OS.stat' );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = "xpto"
-        $P2 = $P1."stat"($S1)
-
-        $S1 = repeat "0x%08x\n", 13
-        $S2 = sprintf $S1, $P2
-        print $S2
-done:
-        end
-.end
-CODE
-}
-}
-
-# test readdir
-SKIP: {
-    skip 'not implemented on windows yet', 1 if ( $MSWin32 && $MSVC );
-
-    opendir my $IN, 'docs';
-    my @entries = readdir $IN;
-    closedir $IN;
-    my $entries = join( ' ', @entries ) . "\n";
-    pir_output_is( <<'CODE', $entries, 'Test OS.readdir' );
-.sub main :main
-    $P1 = new ['OS']
-    $P2 = $P1.'readdir'('docs')
-
-    $S0 = join ' ', $P2
-    print $S0
-    print "\n"
-.end
-CODE
-}
-
-# test rename
-SKIP: {
-    open my $FILE, ">", "____some_test_file";
-    close $FILE;
-    pir_output_is( <<'CODE', <<"OUT", 'Test OS.rename' );
-.sub main :main
-    $P1 = new ['OS']
-    $P1.'rename'('____some_test_file', '___some_other_file')
-    $I0 = stat '___some_other_file', 0
-    print $I0
-    print "\n"
-    $P1.'rm'('___some_other_file')
-.end
-CODE
-1
-OUT
-}
-
-# test lstat
-
-my $lstat;
-
-SKIP: {
-    skip 'lstat not on Win32', 1 if $MSWin32;
-    skip 'broken test TT #457', 1 if $solaris;
-
-    my @s = lstat('xpto');
-    if ($cygwin) {
-        # Mask inode number (fudge it)
-        $s[1] &= 0xffffffff;
-    }
-    $lstat = sprintf( "0x%08x\n" x 13, @s );
-    pir_output_is( <<'CODE', $lstat, "Test OS.lstat" );
-.sub main :main
-        $P1 = new ['OS']
-        $S1 = "xpto"
-        $P2 = $P1."lstat"($S1)
-
-        $S1 = repeat "0x%08x\n", 13
-        $S2 = sprintf $S1, $P2
-        print $S2
-
-        end
-.end
-CODE
-}
-
-# Test remove on a file
-pir_output_is( <<'CODE', <<"OUT", "Test rm call in a file" );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $P1."rm"($S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-ok( !-f $xpto, "Test that rm removed file" );
-rmdir $xpto if -f $xpto;    # this way next test doesn't fail if this one does
-
-# Test symlink
-SKIP: {
-    skip "Symlinks not available under Windows", 2 if $MSWin32;
-
-    pir_output_is( <<'CODE', <<"OUT", "Test symlink" );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $S2 = "MANIFEST"
-        $P1."symlink"($S2, $S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-    ok( -l "xpto", "symlink was really created" );
-    unlink "xpto" if -f "xpto";
-}
-
-# Test link to file. May require root permissions
-SKIP: {
-    skip "Hardlinks to files not possible on Windows", 2 if $MSWin32 or $cygwin;
-
-    pir_output_is( <<'CODE', <<"OUT", "Test link" );
-.sub main :main
-        $P1 = new ['OS']
-
-        $S1 = "xpto"
-        $S2 = "myconfig"
-        $P1."link"($S2, $S1)
-
-        print "ok\n"
-
-        end
-.end
-CODE
-ok
-OUT
-
-    my $nl = [ stat("myconfig") ]->[3];
-    ok( $nl > 1, "hard link to file was really created" );
-    unlink "xpto" if -f "xpto";
-}
-
-SKIP: {
-    skip "Hardlinks to files not possible on Windows", 1 if $MSWin32 or $cygwin;
-
-    my $prevnl = [ stat("tools") ]->[3];
-    pir_output_like( <<"CODE", <<"OUT", "Test dirlink" );
-.sub main :main
-    .local pmc os
-    .local string xpto, tools
-    os    = new ['OS']
-    xpto  = "xpto"
-    tools = "tools"
-
-    push_eh no_root_perms
-    os."link"(tools, xpto)
-    pop_eh
-
-    .local pmc statvals
-    statvals = os.'stat'(tools)
-
-    # nlink
-    .local int nlink
-    nlink = statvals[3]
-
-    gt nlink, $prevnl, is_okay
-    end
-
-  no_root_perms:
-    .local pmc e
-    .local string message
-    .get_results( e )
-    pop_eh
-    message = e['message']
-    say message
-    end
-
-  is_okay:
-    say "ok"
-    end
-.end
-CODE
-/link.* failed for OS PMC:/
-OUT
-}
-
-# Local Variables:
-#   mode: cperl
-#   cperl-indent-level: 4
-#   fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:

Modified: branches/codestring/t/pmc/string.t
==============================================================================
--- branches/codestring/t/pmc/string.t	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/t/pmc/string.t	Wed May  5 00:05:19 2010	(r46294)
@@ -20,7 +20,7 @@
 .sub main :main
     .include 'test_more.pir'
 
-    plan(167)
+    plan(166)
 
     set_or_get_strings()
     setting_integers()
@@ -56,7 +56,6 @@
     test_string_replace()
     set_i0__p0__string_to_int()
     test_string_trans()
-    reverse_p0__reverse_string()
     is_integer__check_integer()
     instantiate_str()
     get_string_returns_cow_string()
@@ -840,13 +839,6 @@
     .return(tr_array)
 .end
 
-.sub reverse_p0__reverse_string
-    $S0 = 'torrap'
-    $P0 = new ['String']
-    $P0.'reverse'($S0)
-    is( $S0, "parrot", 'reverse string' )
-.end
-
 .sub is_integer__check_integer
   $P0 = new ['String']
 

Modified: branches/codestring/t/src/embed.t
==============================================================================
--- branches/codestring/t/src/embed.t	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/t/src/embed.t	Wed May  5 00:05:19 2010	(r46294)
@@ -1,5 +1,5 @@
 #! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
 # $Id$
 
 use strict;
@@ -32,9 +32,11 @@
     return "#line " . $linenum . ' "' . __FILE__ . '"' . "\n";
 }
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when an opcode is given improper arguments');
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Minimal embed, using just the embed.h header" );
+
 #include <stdio.h>
 #include <stdlib.h>
+
 #include "parrot/embed.h"
 
 void fail(const char *msg);
@@ -45,36 +47,27 @@
     exit(EXIT_FAILURE);
 }
 
-
 int main(int argc, const char **argv)
 {
     Parrot_Interp interp;
-    Parrot_String err, lang;
-    Parrot_PMC func_pmc;
-    char *str;
-
     interp = Parrot_new(NULL);
     if (! interp)
         fail("Cannot create parrot interpreter");
-    lang = Parrot_str_new_constant(interp, "PIR", 3);
 
-    func_pmc  = Parrot_compile_string(interp, lang, ".sub foo\n copy\n.end", &err);
-    str = Parrot_str_to_cstring(interp, err);
-    puts(str);
-    Parrot_str_free_cstring(interp, str);
+    puts("Done");
     Parrot_destroy(interp);
     return 0;
 }
 CODE
-The opcode 'copy' (copy<0>) was not found. Check the type and number of the arguments
+Done
 OUTPUT
 
-c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Minimal embed, using just the embed.h header" );
+c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', 'Parrot_compile_string populates the error string when an opcode is given improper arguments');
 
 #include <stdio.h>
 #include <stdlib.h>
-
 #include "parrot/embed.h"
+#include "parrot/extend.h"
 
 void fail(const char *msg);
 
@@ -84,19 +77,26 @@
     exit(EXIT_FAILURE);
 }
 
+
 int main(int argc, const char **argv)
 {
     Parrot_Interp interp;
+    Parrot_String err, lang;
+    Parrot_PMC func_pmc;
+    char *str;
+
     interp = Parrot_new(NULL);
     if (! interp)
         fail("Cannot create parrot interpreter");
+    lang = Parrot_new_string(interp, "PIR", 3, (const char*)NULL, 0);
 
-    puts("Done");
+    func_pmc = Parrot_compile_string(interp, lang, ".sub foo\n copy\n.end", &err);
+    Parrot_printf(interp, "%Ss\n", err);
     Parrot_destroy(interp);
     return 0;
 }
 CODE
-Done
+The opcode 'copy' (copy<0>) was not found. Check the type and number of the arguments
 OUTPUT
 
 c_output_is(linedirective(__LINE__) . <<'CODE', <<'OUTPUT', "Hello world from main" );

Modified: branches/codestring/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/codestring/tools/dev/pbc_to_exe.pir	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/tools/dev/pbc_to_exe.pir	Wed May  5 00:05:19 2010	(r46294)
@@ -248,6 +248,10 @@
     push codestring, "\n"
     goto code_loop
   code_done:
+    # Join current strings to avoid storing too much
+    $S0 = join '', codestring
+    codestring = 0
+    push codestring, $S0
     goto read_loop
 
   read_done:
@@ -343,6 +347,10 @@
     push codestring, '"'
     goto code_loop
   code_done:
+    # Join current strings to avoid storing too much
+    $S0 = join '', codestring
+    codestring = 0
+    push codestring, $S0
     goto read_loop
 
   read_done:
@@ -438,6 +446,7 @@
 
 
     .local int pbc_size
+    $P0 = loadlib 'os'
     $P1 = new ['OS']
     $P2 = $P1.'stat'(pbc_path)
     pbc_size = $P2[7]
@@ -660,6 +669,7 @@
   check_manifest:
     # Check if there is a MSVC app manifest
     .local pmc file
+    $P0 = loadlib 'file'
     file = new 'File'
     .local string manifest_file_name
     manifest_file_name  = clone exefile

Modified: branches/codestring/tools/docs/filename_and_chapter.pl
==============================================================================
--- branches/codestring/tools/docs/filename_and_chapter.pl	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/tools/docs/filename_and_chapter.pl	Wed May  5 00:05:19 2010	(r46294)
@@ -10,10 +10,6 @@
 use strict;
 use warnings;
 
-# prototype
-sub write_mod($);
-
-
 use Getopt::Long ();
 use Pod::PseudoPod::LaTeX;
 
@@ -22,7 +18,7 @@
                       ['submissions.pod', 'Submitting bug reports and patches'],
                     ];
 
-my $lang = @$item_list_ref;
+my $lang = @$item_list_ref - 1;
 my $MOD_BUILD_PATH='build/modified_pod/';
 
 my ( $result, $give_out );
@@ -32,18 +28,18 @@
 );
 
 if ($give_out)  {
-    for ( my $i=0; $i<$lang; $i++ )
-        { print $$item_list_ref[$i][0], "\n" }
+    for my $i ( 0.. $lang )
+        { print $item_list_ref->[$i][0], "\n" }
     exit;
 };
 
 
-for ( my $i=0; $i<$lang; $i++ ) {
+for my $i ( 0..$lang ) {
     write_mod( $i );
 }
 
 
-open my $TEX_FH, '>', 'build/parrot-book.tex');
+open my $TEX_FH, '>', 'build/parrot-book.tex';
 
 print $TEX_FH <<'HEADER';
 \documentclass[11pt,a4paper,oneside]{report}
@@ -54,10 +50,10 @@
 \tableofcontents
 HEADER
 
-for ( my $i=0; $i<$lang; $i++ ) {
+for my $i ( 0..$lang ) {
     my $parser = Pod::PseudoPod::LaTeX->new();
     $parser->output_fh( $TEX_FH );
-    $parser->parse_file( "${MOD_BUILD_PATH}$$item_list_ref[$i][0]" );
+    $parser->parse_file( "${MOD_BUILD_PATH}$item_list_ref->[$i][0]" );
 }
 
 print $TEX_FH <<'FOOTER';
@@ -67,28 +63,25 @@
 close( $TEX_FH );
 
 
-sub write_mod( $ ) {
+sub write_mod {
     my $icnt;
 
-    open( my $IN_FH, '<', "$$item_list_ref[$_[0]][0]" ) ||
-        die( "$0: can't open $$item_list_ref[$_[0]][0] for reading ($!)\n" );
-    open( my $OUT_FH, '>', "${MOD_BUILD_PATH}$$item_list_ref[$_[0]][0]" );
+    open( my $IN_FH, '<', $item_list_ref->[$_[0]][0] ) or
+        die "$0: can't open $item_list_ref->[$_[0]][0] for reading ($!)\n";
+    open( my $OUT_FH, '>', "${MOD_BUILD_PATH}$item_list_ref->[$_[0]][0]" ) or
+        die "$0: can't open ${MOD_BUILD_PATH}$item_list_ref->[$_[0]][0]: $!\n";
 
-    # do the same as: sed -e '4,6c\=head0 $$item_list_ref[$i][1]'
+    # do the same as: sed -e '4,6c\=head0 $item_list_ref->[$i][1]'
     while( <$IN_FH> ) {
         if ( $icnt = (4..6) ) {
             if ( $icnt =~ /E0$/ ) {
-                print( $OUT_FH "=head0 $$item_list_ref[$_[0]][1]\n");
+                print $OUT_FH "=head0 $item_list_ref->[$_[0]][1]\n";
             }
         }
-        else { print( $OUT_FH ); }
+        else { print $OUT_FH $_ }
     }
-
-    close( $IN_FH );
-    close( $OUT_FH );
 }
 
-
 # Local Variables:
 #   mode: cperl
 #   cperl-indent-level: 4

Modified: branches/codestring/tools/util/pgegrep
==============================================================================
--- branches/codestring/tools/util/pgegrep	Tue May  4 23:06:53 2010	(r46293)
+++ branches/codestring/tools/util/pgegrep	Wed May  5 00:05:19 2010	(r46294)
@@ -130,7 +130,9 @@
 	filecount = files
 	# define with-filename if there's more than one file
 	.If(filecount >= 2, { opts['with-filename'] = 1 })
+        $P0 = loadlib 'file'
 	File = new 'File'
+        $P0 = loadlib 'os'
 	OS = new 'OS'
 	# This must be here, or else it'll get filled with junk data we use stdin...
 	i = 0


More information about the parrot-commits mailing list