[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