[svn:parrot] r44975 - in branches/pcc_hackathon_6Mar10: . compilers/imcc compilers/pirc/src config/auto config/auto/warnings config/gen config/gen/makefiles config/init config/init/hints config/inter docs docs/pdds docs/project include/parrot lib/Parrot lib/Parrot/Configure lib/Parrot/Configure/Step lib/Parrot/Docs lib/Parrot/Docs/Section lib/Parrot/Ops2c lib/Parrot/Pmc2c runtime/parrot/library/Config runtime/parrot/library/HTTP src src/call src/dynoplibs src/dynpmc src/gc src/interp src/io src/nci src/ops src/pmc src/runcore src/string t/codingstd t/configure t/dynoplibs t/native_pbc t/oo t/op t/pmc t/steps/auto t/steps/gen t/steps/init/hints tools/build tools/dev tools/util
chromatic at svn.parrot.org
chromatic at svn.parrot.org
Tue Mar 16 22:37:14 UTC 2010
Author: chromatic
Date: Tue Mar 16 22:37:03 2010
New Revision: 44975
URL: https://trac.parrot.org/parrot/changeset/44975
Log:
Resynchronized branch with trunk.
Added:
branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.in
- copied, changed from r44974, branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak
branches/pcc_hackathon_6Mar10/src/dynoplibs/Defines.in
branches/pcc_hackathon_6Mar10/src/dynoplibs/Rules.in
branches/pcc_hackathon_6Mar10/tools/dev/faces.pl
Deleted:
branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak
branches/pcc_hackathon_6Mar10/config/gen/makefiles/CFLAGS.in
branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynoplibs.in
branches/pcc_hackathon_6Mar10/include/parrot/events.h
branches/pcc_hackathon_6Mar10/include/parrot/tsq.h
branches/pcc_hackathon_6Mar10/src/events.c
branches/pcc_hackathon_6Mar10/src/tsq.c
branches/pcc_hackathon_6Mar10/t/dynoplibs/random-range.t
branches/pcc_hackathon_6Mar10/tools/build/cc_flags.pl
Modified:
branches/pcc_hackathon_6Mar10/CREDITS
branches/pcc_hackathon_6Mar10/ChangeLog
branches/pcc_hackathon_6Mar10/DEPRECATED.pod
branches/pcc_hackathon_6Mar10/MANIFEST
branches/pcc_hackathon_6Mar10/MANIFEST.SKIP
branches/pcc_hackathon_6Mar10/MANIFEST.generated
branches/pcc_hackathon_6Mar10/META.yml
branches/pcc_hackathon_6Mar10/NEWS
branches/pcc_hackathon_6Mar10/PBC_COMPAT
branches/pcc_hackathon_6Mar10/PLATFORMS
branches/pcc_hackathon_6Mar10/README
branches/pcc_hackathon_6Mar10/VERSION
branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l
branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y
branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c
branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c
branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c
branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h
branches/pcc_hackathon_6Mar10/compilers/imcc/main.c
branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c
branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h
branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c
branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c
branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c
branches/pcc_hackathon_6Mar10/config/auto/cgoto.pm
branches/pcc_hackathon_6Mar10/config/auto/gcc.pm
branches/pcc_hackathon_6Mar10/config/auto/icu.pm
branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm
branches/pcc_hackathon_6Mar10/config/auto/pmc.pm
branches/pcc_hackathon_6Mar10/config/auto/warnings.pm
branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in
branches/pcc_hackathon_6Mar10/config/gen/makefiles.pm
branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in
branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in
branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in
branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm
branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm
branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm
branches/pcc_hackathon_6Mar10/config/init/optimize.pm
branches/pcc_hackathon_6Mar10/config/inter/charset.pm
branches/pcc_hackathon_6Mar10/config/inter/encoding.pm
branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm
branches/pcc_hackathon_6Mar10/docs/parrothist.pod
branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod
branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod
branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod
branches/pcc_hackathon_6Mar10/docs/tests.pod
branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h
branches/pcc_hackathon_6Mar10/include/parrot/hash.h
branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h
branches/pcc_hackathon_6Mar10/include/parrot/oplib.h
branches/pcc_hackathon_6Mar10/include/parrot/parrot.h
branches/pcc_hackathon_6Mar10/include/parrot/pmc.h
branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h
branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h
branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h
branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm
branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm
branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir
branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir
branches/pcc_hackathon_6Mar10/src/call/args.c
branches/pcc_hackathon_6Mar10/src/call/context.c
branches/pcc_hackathon_6Mar10/src/debug.c
branches/pcc_hackathon_6Mar10/src/dynoplibs/README
branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc
branches/pcc_hackathon_6Mar10/src/embed.c
branches/pcc_hackathon_6Mar10/src/extend.c
branches/pcc_hackathon_6Mar10/src/frame_builder.c
branches/pcc_hackathon_6Mar10/src/gc/api.c
branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c
branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c
branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c
branches/pcc_hackathon_6Mar10/src/global.c
branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c
branches/pcc_hackathon_6Mar10/src/interp/inter_create.c
branches/pcc_hackathon_6Mar10/src/io/buffer.c
branches/pcc_hackathon_6Mar10/src/io/unix.c
branches/pcc_hackathon_6Mar10/src/main.c
branches/pcc_hackathon_6Mar10/src/multidispatch.c
branches/pcc_hackathon_6Mar10/src/nci/api.c
branches/pcc_hackathon_6Mar10/src/ops/core.ops
branches/pcc_hackathon_6Mar10/src/ops/experimental.ops
branches/pcc_hackathon_6Mar10/src/ops/ops.num
branches/pcc_hackathon_6Mar10/src/ops/var.ops
branches/pcc_hackathon_6Mar10/src/packfile.c
branches/pcc_hackathon_6Mar10/src/parrot_debugger.c
branches/pcc_hackathon_6Mar10/src/pbc_merge.c
branches/pcc_hackathon_6Mar10/src/pmc.c
branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc
branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc
branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc
branches/pcc_hackathon_6Mar10/src/pmc/file.pmc
branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc
branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc
branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc
branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc
branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc
branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc
branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc
branches/pcc_hackathon_6Mar10/src/pmc/null.pmc
branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc
branches/pcc_hackathon_6Mar10/src/pmc/os.pmc
branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc
branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc
branches/pcc_hackathon_6Mar10/src/runcore/main.c
branches/pcc_hackathon_6Mar10/src/string/api.c
branches/pcc_hackathon_6Mar10/src/thread.c
branches/pcc_hackathon_6Mar10/src/vtable.tbl
branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t
branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t
branches/pcc_hackathon_6Mar10/t/configure/034-step.t
branches/pcc_hackathon_6Mar10/t/native_pbc/annotations.pbc
branches/pcc_hackathon_6Mar10/t/native_pbc/integer_1.pbc
branches/pcc_hackathon_6Mar10/t/native_pbc/number_1.pbc
branches/pcc_hackathon_6Mar10/t/native_pbc/string_1.pbc
branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t
branches/pcc_hackathon_6Mar10/t/op/arithmetics.t
branches/pcc_hackathon_6Mar10/t/op/sprintf.t
branches/pcc_hackathon_6Mar10/t/op/trans.t
branches/pcc_hackathon_6Mar10/t/op/trans_old.t
branches/pcc_hackathon_6Mar10/t/pmc/complex.t
branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t
branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t
branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t
branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t
branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t
branches/pcc_hackathon_6Mar10/t/pmc/float.t
branches/pcc_hackathon_6Mar10/t/pmc/nci.t
branches/pcc_hackathon_6Mar10/t/pmc/signal.t
branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t
branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t
branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t
branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t
branches/pcc_hackathon_6Mar10/tools/dev/branch_status.pl
branches/pcc_hackathon_6Mar10/tools/util/release.json
Modified: branches/pcc_hackathon_6Mar10/CREDITS
==============================================================================
--- branches/pcc_hackathon_6Mar10/CREDITS Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/CREDITS Tue Mar 16 22:37:03 2010 (r44975)
@@ -922,6 +922,11 @@
N: Stefan Lidman
D: sqrt ops
+N: Stefan O'Rear
+E: stefanor at cox.net
+D: Perl 5 interoperability, Blizkost
+U: sorear
+
N: Stéphane Payrard
D: Various code fixes and improvements
Modified: branches/pcc_hackathon_6Mar10/ChangeLog
==============================================================================
--- branches/pcc_hackathon_6Mar10/ChangeLog Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/ChangeLog Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,9 @@
#1 $Id$
+2010.03.16 cotto
+ * Released 2.2.0
+ See NEWS for more.
+
2010.02.16 darbelo
* Released 2.1.0
See NEWS for more.
Modified: branches/pcc_hackathon_6Mar10/DEPRECATED.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/DEPRECATED.pod Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/DEPRECATED.pod Tue Mar 16 22:37:03 2010 (r44975)
@@ -214,6 +214,18 @@
All STRING modification functions will return a STRING pointer; capture and use
this rather than relying on in-place modification of an existing pointer.
+=item STRING_is_null function [eligible in 2.4]
+
+renamed to Parrot_str_is_null
+
+=item Parrot_string_* [eligible in 2.4]
+
+rename Parrot_string_cstring to Parrot_str_cstring
+
+=item STRING functions which don't have Parrot_str_ prefix
+
+The string subsytem is gradually getting an overhaul.
+
=back
=head1 Compiler tools
Modified: branches/pcc_hackathon_6Mar10/MANIFEST
==============================================================================
--- branches/pcc_hackathon_6Mar10/MANIFEST Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/MANIFEST Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,7 +1,7 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Fri Feb 26 18:33:15 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Mon Mar 15 13:04:03 2010 UT
#
# See below for documentation on the format of this file.
#
@@ -34,7 +34,7 @@
compilers/data_json/data_json/grammar.pg [data_json]
compilers/data_json/data_json/pge2pir.tg [data_json]
compilers/imcc/Defines.mak [imcc]
-compilers/imcc/Rules.mak [imcc]
+compilers/imcc/Rules.in [imcc]
compilers/imcc/cfg.c [imcc]
compilers/imcc/cfg.h [imcc]
compilers/imcc/debug.c [imcc]
@@ -317,9 +317,7 @@
config/gen/crypto/digest_pmc.in []
config/gen/crypto/digest_t.in []
config/gen/makefiles.pm []
-config/gen/makefiles/CFLAGS.in []
config/gen/makefiles/docs.in []
-config/gen/makefiles/dynoplibs.in []
config/gen/makefiles/dynpmc.in []
config/gen/makefiles/editor.in []
config/gen/makefiles/ext.in []
@@ -1019,7 +1017,6 @@
include/parrot/embed.h [main]include
include/parrot/encoding.h [main]include
include/parrot/enums.h [main]include
-include/parrot/events.h [main]include
include/parrot/exceptions.h [main]include
include/parrot/exit.h [main]include
include/parrot/extend.h [main]include
@@ -1064,7 +1061,6 @@
include/parrot/thr_pthread.h [main]include
include/parrot/thr_windows.h [main]include
include/parrot/thread.h [main]include
-include/parrot/tsq.h [main]include
include/parrot/vtables.h [main]include
include/parrot/warnings.h [main]include
include/pmc/dummy [main]include
@@ -1310,7 +1306,9 @@
src/datatypes.c []
src/debug.c []
src/dynext.c []
+src/dynoplibs/Defines.in []
src/dynoplibs/README []doc
+src/dynoplibs/Rules.in []
src/dynoplibs/math.ops []
src/dynoplibs/obscure.ops []
src/dynpmc/README.pod []doc
@@ -1325,7 +1323,6 @@
src/dynpmc/rotest.pmc [devel]src
src/dynpmc/subproxy.pmc [devel]src
src/embed.c []
-src/events.c []
src/exceptions.c []
src/exit.c []
src/extend.c []
@@ -1517,7 +1514,6 @@
src/string/unicode.h []
src/sub.c []
src/thread.c []
-src/tsq.c []
src/utils.c []
src/vtable.tbl [devel]src
src/vtables.c []
@@ -1696,7 +1692,6 @@
t/distro/meta_yml.t [test]
t/dynoplibs/math.t [test]
t/dynoplibs/obscure.t [test]
-t/dynoplibs/random-range.t [test]
t/dynpmc/dynlexpad.t [test]
t/dynpmc/foo.t [test]
t/dynpmc/foo2.t [test]
@@ -2137,7 +2132,6 @@
t/tools/testdata [test]
tools/build/addopstags.pl []
tools/build/c2str.pl []
-tools/build/cc_flags.pl []
tools/build/fixup_gen_file.pl []
tools/build/h2inc.pl []
tools/build/headerizer.pl []
@@ -2155,6 +2149,7 @@
tools/dev/checkdepend.pl []
tools/dev/create_language.pl [devel]
tools/dev/debian_docs.sh []
+tools/dev/faces.pl []
tools/dev/fetch_languages.pl []
tools/dev/gen_charset_tables.pl []
tools/dev/gen_class.pl []
Modified: branches/pcc_hackathon_6Mar10/MANIFEST.SKIP
==============================================================================
--- branches/pcc_hackathon_6Mar10/MANIFEST.SKIP Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/MANIFEST.SKIP Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,6 +1,6 @@
# ex: set ro:
# $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Mar 4 09:57:17 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Mon Mar 8 22:07:22 2010 UT
#
# This file should contain a transcript of the svn:ignore properties
# of the directories in the Parrot subversion repository. (Needed for
@@ -172,8 +172,8 @@
^compilers/imcc/.*\.obj/
^compilers/imcc/.*\.tmp$
^compilers/imcc/.*\.tmp/
-^compilers/imcc/CFLAGS$
-^compilers/imcc/CFLAGS/
+^compilers/imcc/Rules\.mak$
+^compilers/imcc/Rules\.mak/
^compilers/imcc/imcc$
^compilers/imcc/imcc/
^compilers/imcc/imclexer\.c$
@@ -709,8 +709,10 @@
^src/dynoplibs/.*\.pdb/
^src/dynoplibs/.*\.so$
^src/dynoplibs/.*\.so/
-^src/dynoplibs/Makefile$
-^src/dynoplibs/Makefile/
+^src/dynoplibs/Defines\.mak$
+^src/dynoplibs/Defines\.mak/
+^src/dynoplibs/Rules\.mak$
+^src/dynoplibs/Rules\.mak/
# generated from svn:ignore of 'src/dynpmc/'
^src/dynpmc/.*\.bundle$
^src/dynpmc/.*\.bundle/
Modified: branches/pcc_hackathon_6Mar10/MANIFEST.generated
==============================================================================
--- branches/pcc_hackathon_6Mar10/MANIFEST.generated Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/MANIFEST.generated Tue Mar 16 22:37:03 2010 (r44975)
@@ -2,10 +2,10 @@
# See tools/dev/install_files.pl for documentation on the
# format of this file.
# Please re-sort this file after *EVERY* modification
-blib/lib/libparrot.2.1.0.dylib [main]lib
+blib/lib/libparrot.2.2.0.dylib [main]lib
blib/lib/libparrot.a [main]lib
blib/lib/libparrot.dylib [main]lib
-blib/lib/libparrot.so.2.1.0 [main]lib
+blib/lib/libparrot.so.2.2.0 [main]lib
blib/lib/libparrot.so [main]lib
compilers/data_json/data_json.pbc [data_json]
compilers/json/JSON.pbc [json]
Modified: branches/pcc_hackathon_6Mar10/META.yml
==============================================================================
--- branches/pcc_hackathon_6Mar10/META.yml Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/META.yml Tue Mar 16 22:37:03 2010 (r44975)
@@ -4,7 +4,7 @@
# See http://module-build.sourceforge.net/META-spec-current.html for details.
---
name: parrot
-version: 2.1.0
+version: 2.2.0
author: parrot-dev at lists.parrot.org
abstract: a virtual machine designed for dynamic languages
license: artistic2
Modified: branches/pcc_hackathon_6Mar10/NEWS
==============================================================================
--- branches/pcc_hackathon_6Mar10/NEWS Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/NEWS Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,19 @@
# $Id$
+New in 2.2.0
+- Core changes
+ + Most internal allocations now use the GC
+ + RNG non-randomnes fixes
+ + Elimination of much dead code
+- API changes
+ + PMCs can now be initialized from an int
+ + Many legacy ops are removed
+- Platforms
+ + Sun cc and Intel icc support have been restored
+ + Compiler invocation no longer goes through a Perl script
+- Tools
+ + NCI thunks are now generated by self-hosted PIR code
+
New in 2.1.0
- Core changes
+ GC performance and encapsulation were greatly improved.
Modified: branches/pcc_hackathon_6Mar10/PBC_COMPAT
==============================================================================
--- branches/pcc_hackathon_6Mar10/PBC_COMPAT Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/PBC_COMPAT Tue Mar 16 22:37:03 2010 (r44975)
@@ -27,6 +27,7 @@
# please insert tab separated entries at the top of the list
+6.5 2010.03.09 cotto remove cpu_ret op
6.4 2010.03.02 cotto remove prederef__ and reserved
6.3 2010.02.16 whiteknight Add OpLib and Opcode PMCs
6.2 2010.01.31 cotto serialization-related changes to ParrotInterpreter
Modified: branches/pcc_hackathon_6Mar10/PLATFORMS
==============================================================================
--- branches/pcc_hackathon_6Mar10/PLATFORMS Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/PLATFORMS Tue Mar 16 22:37:03 2010 (r44975)
@@ -46,6 +46,8 @@
linux-ppc-gcc_4.4.2 Y Y Y Y Y Y Y 20100118
linux-ppc64-gcc_4.4.2 Y Y Y Y Y Y Y 20100118
linux-arm-gcc_4.4.2 Y Y Y Y Y Y Y 20100118
+linux-x86-icc_11.1 4 Y ? Y Y Y Y Y 20100209
+linux-amd64-icc_11.1 8 Y ? Y Y Y Y Y 20100209
netbsd3.1-ppc-gcc-3.3.3 B Y ? Y Y Y Y ? 20090419
netbsd4.0-alpha-gcc-4.1.2 8 Y ? Y Y Y Y ? 20090518
netbsd4.0-arm-gcc-4.1.2 Y ? Y Y Y Y ? 20090518
Modified: branches/pcc_hackathon_6Mar10/README
==============================================================================
--- branches/pcc_hackathon_6Mar10/README Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/README Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,4 +1,4 @@
-This is Parrot, version 2.1.0
+This is Parrot, version 2.2.0
------------------------------
Parrot is Copyright (C) 2001-2010, Parrot Foundation.
Modified: branches/pcc_hackathon_6Mar10/VERSION
==============================================================================
--- branches/pcc_hackathon_6Mar10/VERSION Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/VERSION Tue Mar 16 22:37:03 2010 (r44975)
@@ -1 +1 @@
-2.1.0
+2.2.0
Copied and modified: branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.in (from r44974, branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak)
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak Tue Mar 16 21:59:54 2010 (r44974, copy source)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -90,7 +90,9 @@
$(INC_DIR)/oplib/ops.h \
$(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE - Warnings (This is generated code)
compilers/imcc/imclexer$(O) : \
+ compilers/imcc/imclexer.c \
compilers/imcc/cfg.h \
compilers/imcc/debug.h \
compilers/imcc/imc.h \
@@ -102,8 +104,11 @@
compilers/imcc/unit.h \
$(INC_DIR)/oplib/ops.h \
$(PARROT_H_HEADERS)
+ $(CC) $(CFLAGS) @optimize::compilers/imcc/imclexer.c@ @ccwarn::compilers/imcc/imclexer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imclexer.c
+## SUFFIX OVERRIDE - Warnings (This is generated code)
compilers/imcc/imcparser$(O) : \
+ compilers/imcc/imcparser.c \
compilers/imcc/cfg.h \
compilers/imcc/debug.h \
compilers/imcc/imc.h \
@@ -118,6 +123,7 @@
$(INC_DIR)/dynext.h \
$(INC_DIR)/oplib/ops.h \
$(PARROT_H_HEADERS)
+ $(CC) $(CFLAGS) @optimize::compilers/imcc/imcparser.c@ @ccwarn::compilers/imcc/imcparser.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/imcparser.c
compilers/imcc/main$(O) : \
compilers/imcc/cfg.h \
@@ -136,7 +142,9 @@
$(INC_DIR)/runcore_api.h \
$(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE - Warnings (This is generated code)
compilers/imcc/optimizer$(O) : \
+ compilers/imcc/optimizer.c \
compilers/imcc/cfg.h \
compilers/imcc/debug.h \
compilers/imcc/imc.h \
@@ -148,6 +156,7 @@
compilers/imcc/unit.h \
$(INC_DIR)/oplib/ops.h \
$(PARROT_H_HEADERS)
+ $(CC) $(CFLAGS) @optimize::compilers/imcc/optimizer.c@ @ccwarn::compilers/imcc/optimizer.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c compilers/imcc/optimizer.c
compilers/imcc/reg_alloc$(O) : \
compilers/imcc/cfg.h \
Deleted: branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/Rules.mak Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,201 +0,0 @@
-compilers/imcc/pcc$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/imcparser.h \
- compilers/imcc/instructions.h \
- compilers/imcc/parser.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/instructions$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/pbc.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/pbc$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/pbc.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS) \
- include/pmc/pmc_sub.h
-
-compilers/imcc/parser_util$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/imcparser.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/parser.h \
- compilers/imcc/pbc.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/dynext.h \
- $(INC_DIR)/embed.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS) \
- include/pmc/pmc_sub.h
-
-compilers/imcc/imc$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/cfg$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/debug$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/imclexer$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/imcparser.h \
- compilers/imcc/instructions.h \
- compilers/imcc/parser.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/imcparser$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/imcparser.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/parser.h \
- compilers/imcc/pbc.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/dynext.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/main$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/imcparser.h \
- compilers/imcc/instructions.h \
- compilers/imcc/parser.h \
- compilers/imcc/pbc.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/embed.h \
- $(INC_DIR)/imcc.h \
- $(INC_DIR)/oplib/ops.h \
- $(INC_DIR)/runcore_api.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/optimizer$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/pbc.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/reg_alloc$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/optimizer.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/sets$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-compilers/imcc/symreg$(O) : \
- compilers/imcc/cfg.h \
- compilers/imcc/debug.h \
- compilers/imcc/imc.h \
- compilers/imcc/instructions.h \
- compilers/imcc/sets.h \
- compilers/imcc/symreg.h \
- compilers/imcc/unit.h \
- $(INC_DIR)/oplib/ops.h \
- $(PARROT_H_HEADERS)
-
-# imcc file dependencies
-#
-# The .flag files are needed because we keep some derived files in SVN,
-# which does not keep accurate timestamps on the files, relative to each other.
-# Note that YACC or LEX may be null commands, so we must `touch` all the
-# target files, instead of just the .flag files.
-
-compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h : compilers/imcc/imcc.y
- $(YACC) compilers/imcc/imcc.y -d -o compilers/imcc/imcparser.c
- $(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.c compilers/imcc/imcc.y
- $(PERL) $(BUILD_TOOLS_DIR)/fixup_gen_file.pl -noheaderizer compilers/imcc/imcparser.h compilers/imcc/imcc.y
- $(TOUCH) compilers/imcc/imcc.y.flag compilers/imcc/imcparser.c compilers/imcc/imcparser.h
-
-compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c : compilers/imcc/imcc.l
- $(LEX) -ocompilers/imcc/imclexer.c compilers/imcc/imcc.l
- $(TOUCH) compilers/imcc/imcc.l.flag compilers/imcc/imclexer.c
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.l Tue Mar 16 22:37:03 2010 (r44975)
@@ -1019,7 +1019,6 @@
}
while (c != ENDM) {
- char *old_s = valp->s;
int elem_len;
if (c <= 0) {
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imcc.y Tue Mar 16 22:37:03 2010 (r44975)
@@ -5,7 +5,7 @@
* Intermediate Code Compiler for Parrot.
*
* Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
*
* Grammar of the PIR language parser.
*
@@ -28,7 +28,7 @@
/* prevent declarations of malloc() and free() in the generated parser. */
#define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
#ifndef YYENABLE_NLS
# define YYENABLE_NLS 0
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imclexer.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -5441,7 +5441,6 @@
}
while (c != ENDM) {
- char *old_s = valp->s;
int elem_len;
if (c <= 0) {
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/imcparser.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -87,7 +87,7 @@
* Intermediate Code Compiler for Parrot.
*
* Copyright (C) 2002 Melvin Smith <melvin.smith at mindspring.com>
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
*
* Grammar of the PIR language parser.
*
@@ -110,7 +110,7 @@
/* prevent declarations of malloc() and free() in the generated parser. */
#define YYMALLOC
-#define YYFREE
+#define YYFREE(Ptr) do { /* empty */; } while (YYID (0))
#ifndef YYENABLE_NLS
# define YYENABLE_NLS 0
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -50,7 +50,7 @@
__attribute__nonnull__(1)
__attribute__nonnull__(4);
-static int e_file_open(PARROT_INTERP, ARGIN(void *param))
+static int e_file_open(PARROT_INTERP, ARGIN(const char *param))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
@@ -782,7 +782,7 @@
/*
-=item C<static int e_file_open(PARROT_INTERP, void *param)>
+=item C<static int e_file_open(PARROT_INTERP, const char *param)>
Prints a message to STDOUT.
@@ -791,19 +791,19 @@
*/
static int
-e_file_open(PARROT_INTERP, ARGIN(void *param))
+e_file_open(PARROT_INTERP, ARGIN(const char *param))
{
ASSERT_ARGS(e_file_open)
- char * const file = (char *) param;
+ DECL_CONST_CAST;
- if (!STREQ(file, "-")) {
- FILE *newfile = freopen(file, "w", stdout);
+ if (!STREQ(param, "-")) {
+ FILE *newfile = freopen(param, "w", stdout);
if (!newfile)
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
"Cannot reopen stdout: %s'\n", strerror(errno));
}
- output = file;
+ output = PARROT_const_cast(char *, param);
Parrot_io_printf(interp, "# IMCC does produce b0rken PASM files\n");
Parrot_io_printf(interp, "# see http://guest@rt.perl.org/rt3/Ticket/Display.html?id=32392\n");
return 1;
@@ -859,7 +859,7 @@
/*
-=item C<int emit_open(PARROT_INTERP, int type, void *param)>
+=item C<int emit_open(PARROT_INTERP, int type, const char *param)>
Opens the emitter function C<open> of the given C<type>. Passes
the C<param> to the open function.
@@ -870,7 +870,7 @@
PARROT_EXPORT
int
-emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
{
ASSERT_ARGS(emit_open)
IMCC_INFO(interp)->emitter = type;
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/instructions.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,6 +1,6 @@
/*
* $Id$
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
*/
#ifndef PARROT_IMCC_INSTRUCTIONS_H_GUARD
@@ -79,7 +79,7 @@
/* Globals */
typedef struct _emittert {
- int (*open)(PARROT_INTERP, void *param);
+ int (*open)(PARROT_INTERP, const char *param);
int (*emit)(PARROT_INTERP, void *param, const IMC_Unit *, const Instruction *ins);
int (*new_sub)(PARROT_INTERP, void *param, IMC_Unit *);
int (*end_sub)(PARROT_INTERP, void *param, IMC_Unit *);
@@ -103,7 +103,7 @@
__attribute__nonnull__(3);
PARROT_EXPORT
-int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(void *param))
+int emit_open(PARROT_INTERP, int type, ARGIN_NULLOK(const char *param))
__attribute__nonnull__(1);
PARROT_WARN_UNUSED_RESULT
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/main.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/main.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/main.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -646,7 +646,7 @@
IMCC_push_parser_state(interp);
IMCC_INFO(interp)->state->file = mem_sys_strdup(sourcefile);
- emit_open(interp, per_pbc, per_pbc ? NULL : (void*)output_file);
+ emit_open(interp, per_pbc, per_pbc ? NULL : output_file);
IMCC_info(interp, 1, "Starting parse...\n");
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -420,7 +420,7 @@
/*
-=item C<int e_pbc_open(PARROT_INTERP, void *param)>
+=item C<int e_pbc_open(PARROT_INTERP, const char *param)>
Opens a compilation unit to emit PBC.
@@ -429,7 +429,7 @@
*/
int
-e_pbc_open(PARROT_INTERP, SHIM(void *param))
+e_pbc_open(PARROT_INTERP, SHIM(const char *param))
{
ASSERT_ARGS(e_pbc_open)
code_segment_t * const cs = mem_gc_allocate_zeroed_typed(interp, code_segment_t);
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/pbc.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -28,7 +28,7 @@
__attribute__nonnull__(1)
__attribute__nonnull__(3);
-int e_pbc_open(PARROT_INTERP, SHIM(void *param))
+int e_pbc_open(PARROT_INTERP, SHIM(const char *param))
__attribute__nonnull__(1);
PARROT_WARN_UNUSED_RESULT
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/reg_alloc.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -613,8 +613,8 @@
reg_sort_f(ARGIN(const void *a), ARGIN(const void *b))
{
ASSERT_ARGS(reg_sort_f)
- const SymReg * const ra = *(SymReg**)a;
- const SymReg * const rb = *(SymReg**)b;
+ const SymReg * const ra = *(const SymReg * const *)a;
+ const SymReg * const rb = *(const SymReg * const *)b;
if (ra->first_ins->index < rb->first_ins->index)
return -1;
Modified: branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/imcc/symreg.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2002-2009, Parrot Foundation.
+ * Copyright (C) 2002-2010, Parrot Foundation.
* $Id$
*/
@@ -1004,7 +1004,7 @@
const char * const sub_name = (uniq == U_add_uniq_sub)
/* remember to free this name; add_ns malloc()s it */
? (aux_name = add_ns(interp, name))
- : (char *)name;
+ : name;
r = _get_sym(hsh, sub_name);
Modified: branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/compilers/pirc/src/pircapi.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -180,6 +180,7 @@
parse_string(PARROT_INTERP, ARGIN(char *pirstring), int flags, int pasminput,
unsigned macro_size)
{
+ ASSERT_ARGS(parse_string)
yyscan_t yyscanner;
lexer_state *lexer = NULL;
char name[64];
Modified: branches/pcc_hackathon_6Mar10/config/auto/cgoto.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/cgoto.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/cgoto.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -22,10 +22,10 @@
sub _init {
my $self = shift;
- my %data;
- $data{description} = q{Does your compiler support computed goto};
- $data{result} = q{};
- return \%data;
+ return {
+ 'description' => 'Does your compiler support computed goto',
+ 'result' => '',
+ };
}
sub runstep {
@@ -58,29 +58,6 @@
my $verbose = $conf->options->get('verbose');
if ($test) {
$conf->data->set(
- TEMP_cg_h => '$(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h',
- TEMP_cg_c => <<'EOF',
-# generated by config/auto/cgoto.pm
-
-src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
- include/pmc/pmc_parrotlibrary.h
-src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
- include/pmc/pmc_parrotlibrary.h
-src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
-
-$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
-
-src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
- $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
-
-$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
-
-src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
- $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
-EOF
- TEMP_cg_o => 'src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O)',
- TEMP_cg_r => '$(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
- $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c',
cg_flag => '-DHAVE_COMPUTED_GOTO'
);
print " (yes) " if $verbose;
@@ -88,10 +65,6 @@
}
else {
$conf->data->set(
- TEMP_cg_h => '',
- TEMP_cg_c => '',
- TEMP_cg_o => '',
- TEMP_cg_r => '',
cg_flag => ''
);
print " (no) " if $verbose;
Modified: branches/pcc_hackathon_6Mar10/config/auto/gcc.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/gcc.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/gcc.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -85,14 +85,15 @@
$gccversion .= ".$minor" if defined $minor;
$self->set_result("yes, $gccversion");
- my $ccwarn = $conf->data->get('ccwarn');
-
$conf->data->set( sym_export => '__attribute__ ((visibility("default")))' )
if $gccversion >= 4.0 && !$conf->data->get('sym_export');
+ # sneaky check for g++
+ my $gpp = (index($conf->data->get('cc'), '++') > 0) ? 1 : 0;
+
$conf->data->set(
- ccwarn => "$ccwarn",
- gccversion => $gccversion,
+ gccversion => $gccversion,
+ 'g++' => $gpp,
);
return 1;
}
Modified: branches/pcc_hackathon_6Mar10/config/auto/icu.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/icu.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/icu.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -339,8 +339,7 @@
if (! -d $icuheaders) {
$without = 1;
}
- my $slash = $conf->data->get('slash');
- $icuheaders .= "${slash}include";
+ $icuheaders .= "/include";
if (! -d $icuheaders) {
$without = 1;
}
Modified: branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/perldoc.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -36,7 +36,8 @@
sub runstep {
my ( $self, $conf ) = @_;
- my $cmd = $conf->data->get('scriptdirexp_provisional') . q{/perldoc};
+ my $slash = $conf->data->get('slash');
+ my $cmd = $conf->data->get('scriptdirexp_provisional') . $slash . q{perldoc};
my ( $fh, $filename ) = tempfile( UNLINK => 1 );
my $content = capture_output("$cmd -ud $filename perldoc") || undef;
@@ -59,7 +60,6 @@
my $TEMP_pod = join q{ } =>
map { my $t = $_; $t =~ s/\.ops$/.pod/; "ops/$t" } @ops;
- my $slash = $conf->data->get('slash');
my $new_perldoc = $conf->data->get('new_perldoc');
foreach my $ops (@ops) {
@@ -67,17 +67,17 @@
$pod =~ s/\.ops$/.pod/;
if ( $new_perldoc ) {
$TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC_BIN) -ud ops${slash}$pod ..${slash}src${slash}ops${slash}$ops
-\t\$(CHMOD) 0644 ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -ud ops/$pod ../src/ops/$ops
+\t\$(CHMOD) 0644 ops/$pod
END
}
else {
$TEMP_pod_build .= <<"END"
-ops$slash$pod: ..${slash}src${slash}ops${slash}$ops
-\t\$(PERLDOC_BIN) -u ..${slash}ops${slash}$ops > ops${slash}$pod
-\t\$(CHMOD) 0644 ..${slash}ops${slash}$pod
+ops/$pod: ../src/ops/$ops
+\t\$(PERLDOC_BIN) -u ../ops/$ops > ops/$pod
+\t\$(CHMOD) 0644 ../ops/$pod
END
}
Modified: branches/pcc_hackathon_6Mar10/config/auto/pmc.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/pmc.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/pmc.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -90,6 +90,10 @@
}
}
my $include_headers = get_includes($pmc_fname);
+ my $cc_shared = $conf->data->get('cc_shared');
+ my $cc_o_out = $conf->data->get('cc_o_out');
+ my $warnings = $conf->data->get('ccwarn');
+ my $optimize = $conf->data->get('optimize');
$TEMP_pmc_build .= <<END
src/pmc/$pmc.c : src/pmc/$pmc.dump
@@ -100,20 +104,21 @@
include/pmc/pmc_$pmc.h: src/pmc/$pmc.c
-src/pmc/$pmc\$(O): include/pmc/pmc_${pmc}.h src/pmc/$pmc.str \$(NONGEN_HEADERS) \\
+## SUFFIX OVERRIDE -Warnings
+src/pmc/$pmc\$(O): include/pmc/pmc_$pmc.h src/pmc/$pmc.str \$(NONGEN_HEADERS) \\
$parent_headers $include_headers include/pmc/pmc_continuation.h \\
- include/pmc/pmc_callcontext.h include/pmc/pmc_fixedintegerarray.h
+ include/pmc/pmc_callcontext.h include/pmc/pmc_fixedintegerarray.h \\
+ src/pmc/$pmc.c
+\t\$(CC) \$(CFLAGS) $optimize $cc_shared $warnings -I\$(\@D) $cc_o_out\$@ -c src/pmc/$pmc.c
END
}
- # src/pmc/$pmc\$(O): \$(NONGEN_HEADERS) $parent_headers include/pmc/pmc_$pmc.h
# build list of libraries for link line in Makefile
- my $slash = $conf->data->get('slash');
- ( my $TEMP_pmc_classes_o = $TEMP_pmc_o ) =~ s/^| / src${slash}pmc${slash}/g;
- ( my $TEMP_pmc_classes_str = $TEMP_pmc_str ) =~ s/^| / src${slash}pmc${slash}/g;
- ( my $TEMP_pmc_classes_pmc = $pmc_list ) =~ s/^| / src${slash}pmc${slash}/g;
+ ( my $TEMP_pmc_classes_o = $TEMP_pmc_o ) =~ s{^| }{ src/pmc/}g;
+ ( my $TEMP_pmc_classes_str = $TEMP_pmc_str ) =~ s{^| }{ src/pmc/}g;
+ ( my $TEMP_pmc_classes_pmc = $pmc_list ) =~ s{^| }{ src/pmc/}g;
# Gather the actual names (with MixedCase) of all of the non-abstract
# built-in PMCs in rough hierarchical order.
Modified: branches/pcc_hackathon_6Mar10/config/auto/warnings.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/warnings.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/warnings.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,17 +1,14 @@
-# Copyright (C) 2007-2008, Parrot Foundation.
+# Copyright (C) 2007-2010, Parrot Foundation.
# $Id$
=head1 NAME
-config/auto/warnings.pm - Warning flags detection
+config/auto/warnings.pm - Warning flags probing.
=head1 DESCRIPTION
-Automagically detect what warning flags, like -Wall, -Wextra,
--Wchar-subscripts, etc., that the compiler can support. Directly hacked
-from F<config/auto/attributes.pm>.
-
-=head1 SUBROUTINES
+Given a list of potential warnings available for a certain type of
+compiler, probe to see which of those are valid for this particular version.
=over 4
@@ -22,21 +19,87 @@
use strict;
use warnings;
-
use base qw(Parrot::Configure::Step);
use Parrot::Configure::Utils ();
use Parrot::BuildUtil;
+=item C<_init>
+
+Declare potential warnings for various compilers. Note that the compiler
+key used here doesn't really exist in a unified way in Configure - would
+be nice if it did so we could simplify our checks in runstep().
+
+We create a data structure here that breaks out the warnings by compiler,
+using this structure:
+
+warnings:
+ gcc:
+ basic:
+ - -Warning1
+ - -Warning2
+ cage:
+ - -Warning3
+ - -Warning4
+ only:
+ - -Warning5:
+ - foo.c
+ - bar.c
+ never:
+ - -Warning6:
+ - baz.c
+ - frob.c
+ todo:
+ - -Warning7:
+ - cow.c
+ - pig.c
+ g++:
+ ...
+
+'basic' warnings are always used.
+
+'cage' warnings are added only if --cage is specified during
+Configure. This can be used to hold warnings that aren't ready to be
+added to the default run yet.
+
+'only' should be used as we add new warnings to the build, it will let
+us insure that files we know are clean for a new warning stay clean.
+
+'never' should be used when a particular file contains generated code
+(e.g. imcc) and we cannot update it to conform to the standards.
+
+'todo' functions just like never does, but it indicates that these
+files are expected to eventually be free of this warning.
+
+Note that there is no actual requirement that the 'file' be a full path
+to a .c file; the file could be "PMCS" or "OPS" or some other identifier;
+whatever the value, it will generate a Config entry prefixed with
+C<ccwarn::>, which will probably be used via @@ expansion in a makefile.
+
+It is tempting to put this into a config file, but having it in
+perl gives us the ability to dynamically setup certain warnings based
+on any criteria already discovered via Config.
+
+Order is important - some warnings are invalid unless they are specified
+after other warnings.
+
+=cut
+
sub _init {
my $self = shift;
- my %data;
- $data{description} = q{Detect supported compiler warnings};
- $data{result} = q{};
-
- # Please keep these sorted by flag name, such that "-Wno-foo" is
- # sorted as "-Wfoo", so we can turn off/on as needed.
- my @potential_warnings = qw(
+
+ my $data = {
+ description => 'Detect supported compiler warnings',
+ result => '',
+ validated => [],
+ };
+
+ # begin gcc/g++
+ my $gcc = {};
+ my $gpp = {};
+ my $icc = {};
+
+ my @gcc_or_gpp = qw(
-falign-functions=16
-fvisibility=hidden
-funit-at-a-time
@@ -49,6 +112,7 @@
-Wchar-subscripts
-Wcomment
-Wdisabled-optimization
+ -Wdiv-by-zero
-Wendif-labels
-Wextra
-Wformat
@@ -66,9 +130,11 @@
-Wmissing-field-initializers
-Wno-missing-format-attribute
-Wmissing-include-dirs
+ -Wmultichar
-Wpacked
-Wparentheses
-Wpointer-arith
+ -Wpointer-sign
-Wreturn-type
-Wsequence-point
-Wno-shadow
@@ -79,13 +145,17 @@
-Wswitch-default
-Wtrigraphs
-Wundef
- -Wunknown-pragmas
-Wno-unused
+ -Wunknown-pragmas
-Wvariadic-macros
-Wwrite-strings
- -Wnot-a-real-warning
);
- my @potential_warnings_no_cpp = qw(
+
+ $gcc->{'basic'} = [ @gcc_or_gpp ];
+ $gpp->{'basic'} = [ @gcc_or_gpp ];
+
+ # Add some gcc only warnings that would break g++
+ push @{$gcc->{'basic'}}, qw(
-Wbad-function-cast
-Wc++-compat
-Wdeclaration-after-statement
@@ -101,49 +171,89 @@
-Wstrict-prototypes
);
- my @cage_warnings = qw(
+ my $gcc_or_gpp_cage = [ qw(
-std=c89
- -Werror-implicit-function-declaration
+ -Werror=implicit-function-declaration
-Wformat=2
-Wlarger-than-4096
-Wlong-long
-Wmissing-format-attribute
-Wdeprecated-declarations
- -Wdiv-by-zero
-Wno-format-extra-args
-Wno-import
- -Wno-multichar
- -Wno-pointer-sign
- -Wold-style-definition
-Wunreachable-code
+ -Wunused
-Wunused-function
-Wunused-label
-Wunused-value
-Wunused-variable
- );
+ ) ];
- my @may_not_even_be_interesting = qw(
- -Wpadded
- -Wredundant-decls
- -Wswitch-enum
- -Wsystem-headers
- );
+ $gcc->{'cage'} = $gcc_or_gpp_cage;
+ $gpp->{'cage'} = $gcc_or_gpp_cage;
- my @nice_to_have_but_too_noisy_for_now = qw(
- -pedantic
- -Wconversion
- -Wint-to-pointer-cast
- -Wmissing-noreturn
- -Wshadow
- -Wunused-macros
- -Wunused-parameter
- );
+ $gcc->{'todo'} = $gpp->{'todo'} = {
+ '-Wformat-nonliteral' => [ qw(
+ src/spf_render.c
+ compilers/imcc/optimizer.c
+ ) ],
+ '-Wstrict-prototypes' => [ qw(
+ src/nci/extra_thunks.c
+ src/extra_nci_thunks.c
+ ) ],
+ };
+
+ $gcc->{'never'} = $gpp->{'never'} = {
+ '-Wformat-nonliteral' => [ qw(
+ compilers/imcc/imclexer.c
+ ) ],
+ '-Wswitch-default' => [ qw(
+ compilers/imcc/imclexer.c
+ ) ],
+ '-Wcast-qual' => [ qw(
+ compilers/imcc/imcparser.c
+ ) ],
+ '-Wlogical-op' => [ qw(
+ compilers/imcc/imcparser.c
+ ) ],
+ };
+
+ $icc->{'basic'} = [ qw(
+ -wd269
+ -wd1572
+ -wd1599
+ -wd181
+ -wd869
+ -wd981
+ -wd1419
+ -wd117
+ -wd810
+ -wd177
+ -wd1296
+ -Wall
+ -Wcheck
+ -w2
+ -Wabi
+ -Wcomment
+ -Wdeprecated
+ -Wmain
+ -Wmissing-prototypes
+ -Wpointer-arith
+ -Wreturn-type
+ -Wstrict-prototypes
+ -Wuninitialized
+ -Wunknown-pragmas
+ -Wunused-function
+ -Wunused-variable
+ )];
- $data{potential_warnings} = \@potential_warnings;
- $data{potential_warnings_no_cpp} = \@potential_warnings_no_cpp;
- $data{cage_warnings} = \@cage_warnings;
+ $data->{'warnings'}{'gcc'} = $gcc;
+ $data->{'warnings'}{'g++'} = $gpp;
+ $data->{'warnings'}{'icc'} = $icc;
- return \%data;
+ ## end gcc/g++
+
+ return $data;
}
sub runstep {
@@ -151,53 +261,67 @@
my $verbose = $conf->options->get('verbose');
print "\n" if $verbose;
+
+ my $compiler = '';
if ( defined $conf->data->get('gccversion') ) {
+ $compiler = $conf->data->get('g++') ? 'g++' : 'gcc';
+ }
+ elsif ( $conf->option_or_data('cc') =~ /icc/ ) {
+ $compiler = 'icc';
+ }
- # Dirty way of checking if compiling with c++
- my $nocpp = index($conf->data->get('cc'), '++') < 0;
+ if ($compiler eq '') {
+ print "We do not (yet) probe for warnings for your compiler\n"
+ if $verbose;
+ $self->set_result('skipped');
+ return 1;
+ }
- # add on some extra warnings if requested
- $self->_add_cage_warnings($conf);
- $self->_add_maintainer_warnings($conf);
-
- # now try out our warnings
- for my $maybe_warning (@{ $self->{potential_warnings} }) {
- $self->try_warning( $conf, $maybe_warning, $verbose );
- }
- if ($nocpp) {
- for my $maybe_warning (@{ $self->{potential_warnings_no_cpp} }) {
- $self->try_warning( $conf, $maybe_warning, $verbose );
+ # standard warnings.
+ my @warnings = grep {$self->valid_warning($conf, $_)}
+ @{$self->{'warnings'}{$compiler}{'basic'}};
+
+ # --cage?
+ if ($conf->options->get('cage')) {
+ push @warnings, grep {$self->valid_warning($conf, $_)}
+ @{$self->{'warnings'}{$compiler}{'cage'}}
+ }
+
+ # -- only?
+ my %per_file;
+ if (exists $self->{'warnings'}{$compiler}{'only'}) {
+ my %only = %{$self->{'warnings'}{$compiler}{'only'}};
+ foreach my $warning (keys %only) {
+ next unless $self->valid_warning($conf, $warning);
+ foreach my $file (@{$only{$warning}}) {
+ $per_file{$file} = [ @warnings ] unless exists $per_file{$file};
+ push @{$per_file{$file}}, $warning;
}
}
+ }
- if ($nocpp) {
- $self->set_result("set for gcc");
- }
- else {
- $self->set_result("set for g++");
+ foreach my $key (qw/todo never/) {
+ if (exists $self->{'warnings'}{$compiler}{$key}) {
+ my %dont = %{$self->{'warnings'}{$compiler}{$key}};
+ foreach my $warning (keys %dont) {
+ foreach my $file (@{$dont{$warning}}) {
+ $per_file{$file} = [ @warnings ] unless exists $per_file{$file};
+ @{$per_file{$file}} = grep {$warning ne $_} @{$per_file{$file}};
+ }
+ }
}
}
- else {
- print "Currently we only set warnings if using gcc as C compiler\n"
- if $verbose;
- $self->set_result("skipped");
- }
- return 1;
-}
-sub _add_cage_warnings {
- my ($self, $conf) = @_;
- push @{ $self->{potential_warnings} }, @{ $self->{cage_warnings} }
- if $conf->options->get('cage');
-}
+ $conf->data->set('ccwarn', join(' ', @warnings));
+ foreach my $file (keys %per_file) {
+ $conf->data->set("ccwarn::$file", join(' ', @{$per_file{$file}}));
+ }
-sub _add_maintainer_warnings {
- my ($self, $conf) = @_;
- push @{ $self->{potential_warnings} }, '-Wlarger-than-4096'
- if $conf->options->get('maintainer');
+ $self->set_result('done');
+ return 1;
}
-=item C<try_warning>
+=item C<valid_warning>
Try a given warning to see if it is supported by the compiler. The compiler
is determined by the C<cc> value of the C<Parrot::Configure> object passed
@@ -207,11 +331,17 @@
Returns true if the warning flag is recognized by the compiler and undef
otherwise.
+Use the running set of known valid options, since some options may depend
+on previous options.
+
=cut
-sub try_warning {
- my ( $self, $conf, $warning, $verbose ) = @_;
+sub valid_warning {
+ my ( $self, $conf, $warning ) = @_;
+ my $verbose = $conf->options->get('verbose');
+
+ # This should be using a temp file name.
my $output_file = 'test.cco';
$verbose and print "trying attribute '$warning'\n";
@@ -220,17 +350,18 @@
$conf->cc_gen('config/auto/warnings/test_c.in');
my $ccflags = $conf->data->get('ccflags');
- my $tryflags = "$ccflags $warning";
+ my $warnings = join(' ', @{$self->{'validated'}});
+ my $tryflags = "$ccflags $warnings $warning";
my $command_line = Parrot::Configure::Utils::_build_compile_command( $cc, $tryflags );
- $verbose and print " ", $command_line, "\n";
+ $verbose and print ' ', $command_line, "\n";
# Don't use cc_build, because failure is expected.
my $exit_code = Parrot::Configure::Utils::_run_command(
$command_line, $output_file, $output_file
);
- _set_warning($conf, $warning, $exit_code, $verbose);
+ # Cleanup any remnants of the test compilation
$conf->cc_clean();
if ($exit_code) {
@@ -240,35 +371,22 @@
my $output = Parrot::BuildUtil::slurp_file($output_file);
unlink $output_file or die "Unable to unlink $output_file: $!";
- return _set_ccflags($conf, $output, $tryflags, $verbose);
-}
-sub _set_warning {
- my ($conf, $warning, $exit_code, $verbose) = @_;
- $verbose and print " exit code: $exit_code\n";
- $conf->data->set( $warning => !$exit_code || 0 );
-}
-
-sub _set_ccflags {
- my ($conf, $output, $tryflags, $verbose) = @_;
$verbose and print " output: $output\n";
if ( $output !~ /error|warning|not supported/i ) {
- $conf->data->set( ccflags => $tryflags );
- $verbose and print " ccflags: ", $conf->data->get("ccflags"), "\n";
+ push @{$self->{'validated'}}, $warning;
+ $verbose and print " valid warning: '$warning'\n";
return 1;
}
else {
+ $verbose and print " invalid warning: '$warning'\n";
return 0;
}
}
=back
-=head1 AUTHOR
-
-Paul Cochrane <paultcochrane at gmail dot com>
-
=cut
1;
Modified: branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/auto/warnings/test_c.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -6,11 +6,10 @@
#include <stdio.h>
#include <stdlib.h>
-#include "parrot/compiler.h"
/* as long as the file compiles, everything is okay */
int
-main()
+main(void)
{
return EXIT_SUCCESS;
}
Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -27,12 +27,24 @@
$data{description} = q{Generate makefiles and other build files};
$data{result} = q{};
$data{makefiles} = {
- 'Makefile' => { SOURCE => 'config/gen/makefiles/root.in' },
- 'ext/Makefile' => { SOURCE => 'config/gen/makefiles/ext.in', },
+ 'Makefile' => {
+ SOURCE => 'config/gen/makefiles/root.in',
+ },
+ 'ext/Makefile' => {
+ SOURCE => 'config/gen/makefiles/ext.in',
+ },
+ 'compilers/imcc/Rules.mak' => {
+ SOURCE => 'compilers/imcc/Rules.in',
+ },
+ 'src/dynoplibs/Rules.mak' => {
+ SOURCE => 'src/dynoplibs/Rules.in',
+ },
+ 'src/dynoplibs/Defines.mak' => {
+ SOURCE => 'src/dynoplibs/Defines.in',
+ },
'ext/Parrot-Embed/Makefile.PL' => {
SOURCE => 'config/gen/makefiles/parrot_embed_pl.in',
- replace_slashes => 0,
conditioned_lines => 1,
},
@@ -40,15 +52,12 @@
{ SOURCE => 'compilers/ncigen/config/makefiles/ncigen.in' },
'src/dynpmc/Makefile' =>
{ SOURCE => 'config/gen/makefiles/dynpmc.in' },
- 'src/dynoplibs/Makefile' =>
- { SOURCE => 'config/gen/makefiles/dynoplibs.in' },
'editor/Makefile' =>
{ SOURCE => 'config/gen/makefiles/editor.in' },
'parrot.pc' => { SOURCE => 'config/gen/makefiles/parrot_pc.in' },
'docs/Makefile' => { SOURCE => 'config/gen/makefiles/docs.in' },
};
- $data{CFLAGS_source} = 'config/gen/makefiles/CFLAGS.in';
return \%data;
}
@@ -56,36 +65,10 @@
my ( $self, $conf ) = @_;
$self->makefiles($conf);
- $self->cflags($conf);
return 1;
}
-sub cflags {
- my ( $self, $conf ) = @_;
-
- $conf->genfile( $self->{CFLAGS_source} => 'CFLAGS',
- comment_type => '#'
- );
-
- open( my $CFLAGS, ">>", "CFLAGS" ) or die "open >> CFLAGS: $!";
-
- # Why is this here? I'd think this information belongs
- # in the CFLAGS.in file. -- A.D. March 12, 2004
- if ( $conf->data->get('cpuarch') =~ /sun4|sparc64/ ) {
-
- # CFLAGS entries must be left-aligned.
- print {$CFLAGS} <<"EOF";
-src/jit_cpu.c -{-Wcast-align} # lots of noise!
-src/nci.c -{-Wstrict-prototypes} # lots of noise!
-EOF
- }
-
- close $CFLAGS;
-
- return;
-}
-
sub makefiles {
my ( $self, $conf ) = @_;
@@ -96,7 +79,6 @@
: keys %{ $self->{makefiles} };
foreach my $target (@targets) {
- $target =~ s/\\/\//g if $^O eq 'MSWin32';
my $args = $self->{makefiles}->{$target};
my $source = delete $args->{SOURCE};
Deleted: branches/pcc_hackathon_6Mar10/config/gen/makefiles/CFLAGS.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/CFLAGS.in Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,37 +0,0 @@
-# [ filename | {regex} ] -{removed options} +{added options} s/// ...
-#
-# Avoid using non-configure controlled +{} directly in this file, as
-# it'll most likely break on other platforms.
-#
-# Note, empty regex/options are just ignored.
-#
-src/platform.c -{-Wcast-qual} # noisy
-src/spf_render.c -{-Wformat-nonliteral} # noisy
-src/tsq.c -{@optimize@} # never optimize tsq.c!
-
-# The src/ops/core_ops*.c files are challenging to optimize.
-# gcc can usually handle it, but don't assume any other compilers can,
-# until there is specific evidence otherwise.
-#UNLESS(gccversion):src/ops/core_ops_cg.c -{@optimize@}
-#UNLESS(gccversion):src/ops/core_ops_cgp.c -{@optimize@}
-#UNLESS(gccversion):src/ops/core_ops_switch.c -{@optimize@}
-
-#IF(cpuarch==amd64):src/gc/system.c -{@optimize@} # TT #405 amd64 --optimize problem
-
-# io should be -Wunused clean
-{^src/io/} s/-Wno-unused/-Wunused/
-
-# files which make their way into dynamically loaded files should be compiled
-# with shared library options
-src/extend.c +{@cc_shared@}
-src/nci_test.c +{@cc_shared@}
-
-# imcc file settings
-{^compilers/imcc/} -{-Wwrite-strings -Wcast-qual}
-{^compilers/imcc/(?!imclexer)} s/-Wno-unused/-Wunused/
-compilers/imcc/instructions.c -{-Wformat-nonliteral} # noisy
-compilers/imcc/debug.c -{-Wformat-nonliteral} # noisy
-compilers/imcc/optimizer.c -{-Wformat-nonliteral} # noisy
-compilers/imcc/parser_util.c -{-Wformat-nonliteral} # noisy
-compilers/imcc/imclexer.c -{-Wunused} # noisy
-compilers/imcc/imclexer.c -{-Wswitch-default} # occurs in generated code
Deleted: branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynoplibs.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynoplibs.in Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,153 +0,0 @@
-# Copyright (C) 2003-2009, Parrot Foundation.
-# $Id$
-
-PERL = @perl@
-RM_F = @rm_f@
-CP = @cp@
-CHMOD = @chmod@
-LOAD_EXT = @load_ext@
-BUILD_DIR = @build_dir@
-RECONFIGURE = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR = $(BUILD_DIR)/runtime/parrot/dynext
-O = @o@
-CC = @cc@
-LD = @ld@
-LDFLAGS = @ldflags@ @ld_debug@ @rpath_blib@ @linkflags@
-LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
-LIBPARROT = @libparrot_ldflags@
-
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-OPS2C = $(PERL) -I$(BUILD_DIR)@slash at lib $(BUILD_TOOLS_DIR)@slash at ops2c.pl
-INCLUDES = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at src@slash at pmc
-LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
-
-OPS_TARGETS = \
-#IF(cg_flag): obscure_ops_cg$(LOAD_EXT) \
-#IF(cg_flag): obscure_ops_cgp$(LOAD_EXT) \
- obscure_ops$(LOAD_EXT) \
- obscure_ops_switch$(LOAD_EXT) \
-#IF(cg_flag): math_ops_cg$(LOAD_EXT) \
-#IF(cg_flag): math_ops_cgp$(LOAD_EXT) \
- math_ops$(LOAD_EXT) \
- math_ops_switch$(LOAD_EXT)
-
-CLEANUPS = \
- "*.c" \
- "*.h" \
-#IF(o): "*@o@" \
-#IF(win32): "*.lib" \
-#IF(win32): "*.pdb" \
-#IF(win32): "*.ilk" \
-#IF(win32): "*.exp" \
-#IF(win32): "*.def" \
-#IF(win32): "*.manifest" \
-#IF(load_ext): "*@load_ext@"
-
-
-all : $(OPS_TARGETS)
-#IF(cygwin or hpux): $(CHMOD) 0775 *$(LOAD_EXT)
- $(CP) *$(LOAD_EXT) $(INSTALL_DIR)
-#IF(cygwin or hpux): $(CHMOD) 0775 $(INSTALL_DIR)/*$(LOAD_EXT)
-
-Makefile: ../../config/gen/makefiles/dynoplibs.in
- cd $(BUILD_DIR) && $(RECONFIGURE) --step=gen::makefiles --target=src/dynoplibs/Makefile
-
-obscure_ops$(LOAD_EXT): obscure_ops$(O)
- $(LD) @ld_out at obscure_ops$(LOAD_EXT) obscure_ops$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops$(O): obscure_ops.c
- $(CC) -c @cc_o_out at obscure_ops$(O) $(INCLUDES) $(CFLAGS) obscure_ops.c
-
-obscure_ops.c: obscure.ops
- $(OPS2C) C --dynamic obscure.ops
-
-obscure_ops_switch$(LOAD_EXT): obscure_ops_switch$(O)
- $(LD) @ld_out at obscure_ops_switch$(LOAD_EXT) obscure_ops_switch$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops_switch$(O): obscure_ops_switch.c
- $(CC) -c @cc_o_out at obscure_ops_switch$(O) $(INCLUDES) $(CFLAGS) obscure_ops_switch.c
-
-obscure_ops_switch.c: obscure.ops
- $(OPS2C) CSwitch --dynamic obscure.ops
-
-obscure_ops_cg$(LOAD_EXT): obscure_ops_cg$(O)
- $(LD) @ld_out at obscure_ops_cg$(LOAD_EXT) obscure_ops_cg$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops_cg$(O): obscure_ops_cg.c
- $(CC) -c @cc_o_out at obscure_ops_cg$(O) $(INCLUDES) $(CFLAGS) obscure_ops_cg.c
-
-obscure_ops_cg.c: obscure.ops
- $(OPS2C) CGoto --dynamic obscure.ops
-
-obscure_ops_cgp$(LOAD_EXT): obscure_ops_cgp$(O)
- $(LD) @ld_out at obscure_ops_cgp$(LOAD_EXT) obscure_ops_cgp$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-obscure_ops_cgp$(O): obscure_ops_cgp.c
- $(CC) -c @cc_o_out at obscure_ops_cgp$(O) $(INCLUDES) $(CFLAGS) obscure_ops_cgp.c
-
-obscure_ops_cgp.c: obscure.ops
- $(OPS2C) CGP --dynamic obscure.ops
-
-math_ops$(LOAD_EXT): math_ops$(O)
- $(LD) @ld_out at math_ops$(LOAD_EXT) math_ops$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops$(O): math_ops.c
- $(CC) -c @cc_o_out at math_ops$(O) $(INCLUDES) $(CFLAGS) math_ops.c
-
-math_ops.c: math.ops
- $(OPS2C) C --dynamic math.ops
-
-math_ops_switch$(LOAD_EXT): math_ops_switch$(O)
- $(LD) @ld_out at math_ops_switch$(LOAD_EXT) math_ops_switch$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops_switch$(O): math_ops_switch.c
- $(CC) -c @cc_o_out at math_ops_switch$(O) $(INCLUDES) $(CFLAGS) math_ops_switch.c
-
-math_ops_switch.c: math.ops
- $(OPS2C) CSwitch --dynamic math.ops
-
-math_ops_cg$(LOAD_EXT): math_ops_cg$(O)
- $(LD) @ld_out at math_ops_cg$(LOAD_EXT) math_ops_cg$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops_cg$(O): math_ops_cg.c
- $(CC) -c @cc_o_out at math_ops_cg$(O) $(INCLUDES) $(CFLAGS) math_ops_cg.c
-
-math_ops_cg.c: math.ops
- $(OPS2C) CGoto --dynamic math.ops
-
-math_ops_cgp$(LOAD_EXT): math_ops_cgp$(O)
- $(LD) @ld_out at math_ops_cgp$(LOAD_EXT) math_ops_cgp$(O) $(LINKARGS)
-#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
-
-math_ops_cgp$(O): math_ops_cgp.c
- $(CC) -c @cc_o_out at math_ops_cgp$(O) $(INCLUDES) $(CFLAGS) math_ops_cgp.c
-
-math_ops_cgp.c: math.ops
- $(OPS2C) CGP --dynamic math.ops
-
-test : all
- cd ../.. && $(PERL) -Ilib t/harness t/dynoplibs/*.t
-
-testclean :
- $(RM_F) "../../t/dynoplibs/*.pir" "../../t/dynoplibs/*.pasm"
-
-clean :
- $(RM_F) $(CLEANUPS)
-
-realclean:
- $(RM_F) $(CLEANUPS) Makefile
-
-distclean: realclean
-
-# Local variables:
-# mode: makefile
-# End:
-# vim: ft=make:
Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles/dynpmc.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -8,19 +8,19 @@
LOAD_EXT = @load_ext@
BUILD_DIR = @build_dir@
RECONFIGURE = $(PERL) $(BUILD_DIR)/tools/dev/reconfigure.pl
-INSTALL_DIR = $(BUILD_DIR)@slash at runtime@slash at parrot@slash at dynext
+INSTALL_DIR = $(BUILD_DIR)/runtime/parrot/dynext
O = @o@
CC = @cc@
LD = @ld@
LDFLAGS = @ldflags@ @ld_debug@ @rpath_blib@
LD_LOAD_FLAGS = @ld_load_flags@
-CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@
+CFLAGS = @ccflags@ @cc_shared@ @cc_debug@ @ccwarn@ @cc_hasjit@ @cg_flag@ @gc_flag@ @optimize@
LIBPARROT = @libparrot_ldflags@
-BUILD_TOOLS_DIR = $(BUILD_DIR)@slash at tools@slash at build
-BUILD_LIB_DIR = $(BUILD_DIR)@slash at blib@slash at lib
-PMC2C = $(PERL) $(BUILD_TOOLS_DIR)@slash at pmc2c.pl
-INCLUDES = -I$(BUILD_DIR)@slash at include -I at build_dir@@slash at include@slash at pmc
+BUILD_TOOLS_DIR = $(BUILD_DIR)/tools/build
+BUILD_LIB_DIR = $(BUILD_DIR)/blib/lib
+PMC2C = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl
+INCLUDES = -I$(BUILD_DIR)/include -I at build_dir@/include/pmc
LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) $(LIBPARROT) @icu_shared@ @libs@
PMC2CD = $(PERL) $(BUILD_TOOLS_DIR)/pmc2c.pl --dump
Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles/parrot_pc.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -7,4 +7,4 @@
Description: virtual machine to execute bytecode for interpreted languages
Version: @VERSION@
Libs: -L${libdir} -lparrot @icu_shared@ @libs@
-Cflags: -I${includedir}
+Cflags: -I${includedir}@versiondir@
Modified: branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/gen/makefiles/root.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -82,7 +82,9 @@
CC_INC = @cc_inc@
C_LIBS = @libs@
CC_SHARED = @cc_shared@
-CFLAGS = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @ccwarn@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
+CC_O_OUT = @cc_o_out@
+CC_WARN = @ccwarn@
+CFLAGS = $(CC_INC) @ccflags@ @cc_build_call_frames@ @cc_debug@ @cg_flag@ @gc_flag@ @clock_best@ $(CC_SHARED)
LINK_DYNAMIC = @link_dynamic@
LINK = @link@
LINKFLAGS = @linkflags@ @link_debug@ @ld_debug@
@@ -107,10 +109,12 @@
A = @a@
LD_SHARE_FLAGS = @ld_share_flags@
LD_LOAD_FLAGS = @ld_load_flags@
+LINKARGS = $(LDFLAGS) $(LD_LOAD_FLAGS) @libparrot_ldflags@ @icu_shared@ @libs@
# generated by config/init/headers.pm
NONGEN_HEADERS = @TEMP_nongen_headers@
+include src/dynoplibs/Defines.mak
include compilers/imcc/Defines.mak
include compilers/pirc/Defines.mak
include compilers/tge/Defines.mak
@@ -139,8 +143,10 @@
compilers/ncigen/Makefile \
editor/Makefile \
ext/Makefile \
- src/dynoplibs/Makefile \
- src/dynpmc/Makefile
+ src/dynoplibs/Rules.mak \
+ src/dynoplibs/Defines.mak \
+ src/dynpmc/Makefile \
+ compilers/imcc/Rules.mak
GEN_CONFIGS = \
$(INC_DIR)/config.h \
@@ -177,8 +183,6 @@
#IF(has_crypto): t/dynpmc/sha1.t \
#IF(has_crypto): t/dynpmc/sha256.t \
#IF(has_crypto): t/dynpmc/sha512.t \
- CFLAGS \
- compilers/imcc/CFLAGS \
config_lib.pasm \
parrot.pc \
compilers/imcc/imcc.y.flag \
@@ -191,7 +195,6 @@
runtime/parrot/include/datatypes.pasm \
runtime/parrot/include/iterator.pasm \
runtime/parrot/include/call_bits.pasm \
- runtime/parrot/include/io_thr_msg.pasm \
runtime/parrot/include/timer.pasm \
runtime/parrot/include/except_types.pasm \
runtime/parrot/include/except_severity.pasm \
@@ -375,7 +378,6 @@
$(INC_DIR)/io.h \
$(INC_DIR)/op.h \
$(INC_DIR)/pmc.h \
- $(INC_DIR)/events.h \
$(INC_DIR)/gc_api.h \
$(INC_DIR)/string_funcs.h \
$(INC_DIR)/misc.h \
@@ -386,7 +388,6 @@
$(INC_DIR)/nci.h \
$(INC_DIR)/thread.h \
$(INC_DIR)/scheduler.h \
- $(INC_DIR)/tsq.h \
$(INC_DIR)/longopt.h \
$(INC_DIR)/oo.h \
$(INC_DIR)/vtables.h \
@@ -410,7 +411,9 @@
include/pmc/pmc_parrotinterpreter.h
# generated list of header files
-GENERAL_H_FILES = $(NONGEN_HEADERS) $(GEN_HEADERS) @TEMP_cg_h@
+GENERAL_H_FILES = $(NONGEN_HEADERS) $(GEN_HEADERS) \
+#IF(cg_flag): $(INC_DIR)/oplib/core_ops_cg.h $(INC_DIR)/oplib/core_ops_cgp.h
+
CHARSET_O_FILES = @TEMP_charset_o@
CLASS_PMC_FILES = @TEMP_pmc_classes_pmc@
@@ -446,7 +449,6 @@
src/dynext$(O) \
src/embed$(O) \
src/string/encoding$(O) \
- src/events$(O) \
src/exceptions$(O) \
src/exit$(O) \
src/extend$(O) \
@@ -494,17 +496,15 @@
src/sub$(O) \
src/thread$(O) \
src/runcore/trace$(O) \
- src/tsq$(O) \
src/utils$(O) \
src/vtables$(O) \
src/warnings$(O) \
- \
src/packfile/pf_items$(O) \
- \
- @TEMP_cg_o@ \
@TEMP_atomic_o@ \
@TEMP_gc_o@ \
#IF(platform_asm): src/platform_asm$(O) \
+#IF(cg_flag): src/ops/core_ops_cg$(O) src/ops/core_ops_cgp$(O) \
+
OPS_FILES = @ops@ $(GEN_OPSFILES)
@@ -515,28 +515,28 @@
###############################################################################
# Executables
-PARROT = ./@test_prog@$(EXE)
-MINIPARROT = ./miniparrot$(EXE)
-DIS = ./pbc_disassemble$(EXE)
-PDUMP = ./pbc_dump$(EXE)
-PBC_MERGE = ./pbc_merge$(EXE)
-PDB = ./parrot_debugger$(EXE)
-PBC_TO_EXE = ./pbc_to_exe$(EXE)
-PARROT_CONFIG = ./parrot_config$(EXE)
-PIRC = ./pirc$(EXE)
-NQP_RX = ./parrot-nqp$(EXE)
-NCI_THUNK_GEN = ./parrot_nci_thunk_gen$(EXE)
+PARROT = . at slash@@test_prog@$(EXE)
+MINIPARROT = . at slash@miniparrot$(EXE)
+DIS = . at slash@pbc_disassemble$(EXE)
+PDUMP = . at slash@pbc_dump$(EXE)
+PBC_MERGE = . at slash@pbc_merge$(EXE)
+PDB = . at slash@parrot_debugger$(EXE)
+PBC_TO_EXE = . at slash@pbc_to_exe$(EXE)
+PARROT_CONFIG = . at slash@parrot_config$(EXE)
+PIRC = . at slash@pirc$(EXE)
+NQP_RX = . at slash@parrot-nqp$(EXE)
+NCI_THUNK_GEN = . at slash@parrot_nci_thunk_gen$(EXE)
# Installable executables
-INSTALLABLEPARROT = ./installable_parrot$(EXE)
-INSTALLABLEDIS = ./installable_pbc_disassemble$(EXE)
-INSTALLABLEPDUMP = ./installable_pbc_dump$(EXE)
-INSTALLABLEPBC_MERGE = ./installable_pbc_merge$(EXE)
-INSTALLABLEPBCTOEXE = ./installable_pbc_to_exe$(EXE)
-INSTALLABLEPDB = ./installable_parrot_debugger$(EXE)
-INSTALLABLECONFIG = ./installable_parrot_config$(EXE)
-INSTALLABLENQP = ./installable_parrot-nqp$(EXE)
-INSTALLABLENCITHUNKGEN = ./installable_parrot_nci_thunk_gen$(EXE)
+INSTALLABLEPARROT = . at slash@installable_parrot$(EXE)
+INSTALLABLEDIS = . at slash@installable_pbc_disassemble$(EXE)
+INSTALLABLEPDUMP = . at slash@installable_pbc_dump$(EXE)
+INSTALLABLEPBC_MERGE = . at slash@installable_pbc_merge$(EXE)
+INSTALLABLEPBCTOEXE = . at slash@installable_pbc_to_exe$(EXE)
+INSTALLABLEPDB = . at slash@installable_parrot_debugger$(EXE)
+INSTALLABLECONFIG = . at slash@installable_parrot_config$(EXE)
+INSTALLABLENQP = . at slash@installable_parrot-nqp$(EXE)
+INSTALLABLENCITHUNKGEN = . at slash@installable_parrot_nci_thunk_gen$(EXE)
# Libraries
LIBPARROT_STATIC = @blib_dir@/@libparrot_static@
@@ -574,24 +574,27 @@
.SUFFIXES : .c .S .s .pmc .dump $(O) .str .pir .pbc
-# Passing an empty argument in @ARGV to cc_flags.pl to indicate where extra -Is
-# (etc) should go. Otherwise it will insert them after the first space, which
-# makes life go horribly wrong if $(CC) contains spaces but can't have -I
-# arguments (etc) injected in the middle.
-# There is probably a better way to do this, but I can't work it out right now.
.c$(O) : # suffix rule (limited support)
- @$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
-
-# XXX probably should detect assembler, but right now this is only used on Sparc
+ $(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
.s$(O) : # suffix rule (limited support)
- @$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+ $(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
#UNLESS(win32).S$(O) : # suffix rule (limited support)
-#UNLESS(win32) @$(PERL) tools/build/cc_flags.pl ./CFLAGS $(CC) "" $(CFLAGS) -I$(@D) @cc_o_out@$@ -c $<
+#UNLESS(win32) $(CC) $(CFLAGS) @optimize@ $(CC_WARN) -I$(@D) @cc_o_out@$@ -c $<
.pir.pbc : # suffix rule (limited support)
$(PARROT) -o $@ $<
+# Note: Several rules in this makefile are tagged with a "SUFFIX OVERRIDE"
+# comment; this indicates that we have an explicit compilation rule for
+# that particular C file; this is done so that we override various
+# options for that file - to change optimization levels, or twiddle
+# warnings. Each of those overrides should use the most specific settings
+# possible for that file. When file-specific overrides are added during
+# Configure, the override must be allowed for in this file.
+# These will eventually be automatically generated.
+
+
###############################################################################
#
# USER TARGETS:
@@ -618,18 +621,18 @@
$(JSON_LIB_PBCS) \
$(DATA_JSON_LIB_PBCS) \
$(NQP_LIB_PBCS) \
- $(GEN_LIBRARY)
+ $(GEN_LIBRARY) \
+ $(LIBNCI_TEST_SO)
corevm : \
- flags_dummy \
$(GEN_PM_INCLUDES) \
PARROT_LIBS \
$(PARROT) \
runtime/parrot/include/parrotlib.pbc \
runtime/parrot/include/config.fpmc \
- $(LIBNCI_TEST_SO) \
+ $(LIBRARY_DIR)/Test/More.pbc \
dynpmc \
- dynoplibs
+ $(DYNOPLIBS_TARGETS)
$(GEN_LIBRARY) : $(PARROT) $(GEN_PASM_INCLUDES)
@@ -640,7 +643,6 @@
STR_FILES = \
src/debug.str \
src/dynext.str \
- src/events.str \
src/exceptions.str \
src/global.str \
src/global_setup.str \
@@ -772,11 +774,6 @@
@echo " dynpmc-test: Proxy for target 'test' of src/dynpmc/Makefile"
@echo " dynpmc-clean: Proxy for target 'clean' of src/dynpmc/Makefile"
@echo ""
- @echo "Dynamic oplibs:"
- @echo " dynoplibs: Proxy for default target of src/dynoplibs/Makefile"
- @echo " dynoplibs-test: Proxy for target 'test' of src/dynoplibs/Makefile"
- @echo " dynoplibs-clean: Proxy for target 'clean' of src/dynoplibs/Makefile"
- @echo ""
@echo "Fetch from source repository:"
@echo " update: svn update."
@echo " status: svn status."
@@ -811,17 +808,13 @@
installable: all $(INSTALLABLEPARROT) $(INSTALLABLEPDUMP) $(INSTALLABLEDIS) $(INSTALLABLEPDB) $(INSTALLABLEPBC_MERGE) $(INSTALLABLEPBCTOEXE) $(INSTALLABLECONFIG) $(INSTALLABLENQP) $(INSTALLABLENCITHUNKGEN)
-flags_dummy :
- @echo "Compiling with:"
- @$(PERL) tools/build/cc_flags.pl ./CFLAGS echo $(CC) $(CFLAGS) -I$(@D) @cc_o_out@ xx$(O) -c xx.c
-
runtime/parrot/include/parrotlib.pbc: runtime/parrot/library/parrotlib.pir $(PARROT) $(GEN_PASM_INCLUDES)
$(PARROT) -o $@ runtime/parrot/library/parrotlib.pir
runtime/parrot/include/config.fpmc : myconfig config_lib.pasm $(MINIPARROT)
$(MINIPARROT) config_lib.pasm > $@
-$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) CFLAGS \
+$(PARROT) : src/main$(O) $(GEN_HEADERS) $(LIBPARROT) \
lib/Parrot/OpLib/core.pm src/parrot_config$(O) \
$(MINIPARROT)
$(LINK) @ld_out@$@ \
@@ -1082,9 +1075,6 @@
runtime/parrot/include/socket.pasm : $(INC_DIR)/io.h $(H2INC)
$(PERL) $(H2INC) $(INC_DIR)/io.h $@
-runtime/parrot/include/io_thr_msg.pasm : $(INC_DIR)/events.h $(H2INC)
- $(PERL) $(H2INC) $(INC_DIR)/events.h $@
-
runtime/parrot/include/hash_key_type.pasm : $(INC_DIR)/hash.h $(H2INC)
$(PERL) $(H2INC) $(INC_DIR)/hash.h $@
@@ -1137,6 +1127,8 @@
# ops.h is built by ops2pm.pl after it builds core.pm
$(INC_DIR)/oplib/ops.h: lib/Parrot/OpLib/core.pm
+$(BUILD_TOOLS_DIR)/ops2c.pl: lib/Parrot/OpLib/core.pm
+
lib/Parrot/OpLib/core.pm : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2pm.pl \
lib/Parrot/OpsFile.pm lib/Parrot/Op.pm src/ops/ops.num src/ops/ops.skip
$(PERL) $(BUILD_TOOLS_DIR)/ops2pm.pl @no_lines_flag@ $(OPS_FILES)
@@ -1157,7 +1149,7 @@
# hello
hello: test_prep examples/pasm/hello$(EXE)
- ./examples/pasm/hello$(EXE) "from your friendly makefile"
+ . at slash@examples at slash@pasm at slash@hello$(EXE) "from your friendly makefile"
examples/pasm/hello.pbc: examples/pasm/hello.pasm
$(PARROT) -o examples/pasm/hello.pbc examples/pasm/hello.pasm
@@ -1258,14 +1250,14 @@
src/exceptions.str \
include/pmc/pmc_continuation.h
-src/events$(O) : $(PARROT_H_HEADERS) src/events.str
-
src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h \
include/pmc/pmc_sub.h \
include/pmc/pmc_parrotinterpreter.h
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
src/extend$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/extend.h \
- include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h
+ include/pmc/pmc_sub.h $(INC_DIR)/extend_vtable.h src/extend.c
+ $(CC) $(CFLAGS) @optimize::src/extend.c@ @ccwarn::src/extend.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extend.c
src/runcore/main$(O) : \
src/runcore/main.str \
@@ -1380,8 +1372,6 @@
$(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
$(PARROT_H_HEADERS)
-src/tsq$(O) : $(PARROT_H_HEADERS)
-
src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
$(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
compilers/imcc/imc.h \
@@ -1407,10 +1397,13 @@
include/pmc/pmc_unmanagedstruct.h \
include/pmc/pmc_nci.h
+## SUFFIX OVERRIDE
src/nci/extra_thunks$(O) : src/nci/extra_thunks.str \
- $(PARROT_H_HEADERS) \
- include/pmc/pmc_unmanagedstruct.h \
- include/pmc/pmc_nci.h
+ $(PARROT_H_HEADERS) \
+ include/pmc/pmc_unmanagedstruct.h \
+ include/pmc/pmc_nci.h \
+ src/nci/extra_thunks.c
+ $(CC) $(CFLAGS) @optimize::src/nci/extra_thunks.c@ @ccwarn::src/nci/extra_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci/extra_thunks.c
src/frame_builder$(O) : $(PARROT_H_HEADERS) src/frame_builder.h \
include/pmc/pmc_fixedintegerarray.h \
@@ -1420,7 +1413,10 @@
src/vtables$(O) : $(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE
src/gc/system$(O) : $(PARROT_H_HEADERS) src/gc/gc_private.h
+ $(CC) $(CFLAGS) @optimize::src/gc/system.c@ @ccwarn::src/gc/system.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/gc/system.c
+
src/gc/gc_private.h : $(INC_DIR)/settings.h
src/warnings$(O) : $(PARROT_H_HEADERS)
@@ -1429,7 +1425,9 @@
src/utils$(O) : $(PARROT_H_HEADERS) include/pmc/pmc_nci.h
+## SUFFIX OVERRIDE
src/spf_render$(O) : $(PARROT_H_HEADERS) src/spf_render.str
+ $(CC) $(CFLAGS) @optimize::src/spf_render.c@ @ccwarn::src/spf_render.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/spf_render.c
src/spf_vtable$(O) : $(PARROT_H_HEADERS) src/spf_vtable.str
@@ -1462,15 +1460,14 @@
src/atomic/gcc_x86$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic/gcc_x86.h
-src/ops/core_ops$(O) : src/ops/core_ops.c \
- include/pmc/pmc_callcontext.h \
- include/pmc/pmc_continuation.h \
- include/pmc/pmc_parrotlibrary.h \
- src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
- $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
-
# core_ops depends upon config.h so that it gets updated along with
# updates to config.h's version numbers
+src/ops/core_ops$(O) : src/ops/core_ops.c \
+ include/pmc/pmc_callcontext.h \
+ include/pmc/pmc_continuation.h \
+ include/pmc/pmc_parrotlibrary.h \
+ src/io/io_private.h $(INC_DIR)/dynext.h $(INC_DIR)/embed.h \
+ $(INC_DIR)/oplib/core_ops.h $(INC_DIR)/runcore_api.h
# .h files are built along with .c
$(INC_DIR)/oplib/core_ops.h: src/ops/core_ops.c
@@ -1481,8 +1478,10 @@
include/pmc/pmc_continuation.h
$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --core @no_lines_flag@
+## SUFFIX OVERRIDE
src/ops/core_ops_switch$(O) : $(GENERAL_H_FILES) src/ops/core_ops_switch.c \
include/pmc/pmc_parrotlibrary.h
+ $(CC) $(CFLAGS) @optimize::src/ops/core_ops_switch.c@ @ccwarn::src/ops/core_ops_switch.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_switch.c
$(INC_DIR)/oplib/core_ops_switch.h : src/ops/core_ops_switch.c
@@ -1492,7 +1491,27 @@
lib/Parrot/OpTrans/CPrederef.pm
$(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --core @no_lines_flag@
- at TEMP_cg_c@
+## SUFFIX OVERRIDE
+src/ops/core_ops_cg$(O): $(GENERAL_H_FILES) src/ops/core_ops_cg.c \
+ include/pmc/pmc_parrotlibrary.h
+ $(CC) $(CFLAGS) @optimize::src/ops/core_ops_cg.c@ @ccwarn::src/ops/core_ops_cg.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cg.c
+
+## SUFFIX OVERRIDE
+src/ops/core_ops_cgp$(O): $(GENERAL_H_FILES) src/ops/core_ops_cgp.c \
+ include/pmc/pmc_parrotlibrary.h
+ $(CC) $(CFLAGS) @optimize::src/ops/core_ops_cgp.c@ @ccwarn::src/ops/core_ops_cgp.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/ops/core_ops_cgp.c
+
+src/runcore/cores.c: $(INC_DIR)/oplib/core_ops_cgp.h
+
+$(INC_DIR)/oplib/core_ops_cg.h: src/ops/core_ops_cg.c
+
+src/ops/core_ops_cg.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGoto.pm lib/Parrot/OpLib/core.pm
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --core
+
+$(INC_DIR)/oplib/core_ops_cgp.h: src/ops/core_ops_cgp.c
+
+src/ops/core_ops_cgp.c : $(OPS_FILES) $(BUILD_TOOLS_DIR)/ops2c.pl lib/Parrot/OpsFile.pm lib/Parrot/Op.pm lib/Parrot/OpTrans/CGP.pm lib/Parrot/OpLib/core.pm lib/Parrot/OpTrans/CPrederef.pm
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --core
@TEMP_gc_c@
@@ -1570,24 +1589,6 @@
###############################################################################
#
-# dynamic oplibs targets:
-#
-###############################################################################
-
-dynoplibs : dynoplibs.dummy
-
-# XXX this dependancy is too broad, and should be narrowed down
-dynoplibs.dummy : $(PARROT) $(INC_DIR)/dynext.h
- $(MAKE) src/dynoplibs
-
-dynoplibs-test : $(PARROT) $(INC_DIR)/dynext.h
- $(MAKE) src/dynoplibs test
-
-dynoplibs-clean :
- $(MAKE) src/dynoplibs clean
-
-###############################################################################
-#
# compiler implementation targets:
#
###############################################################################
@@ -1818,19 +1819,19 @@
#IF(has_perldoc): docs-clean \
#IF(has_perldoc): html-clean \
dynpmc-clean \
- dynoplibs-clean \
examples-clean \
ext-clean \
#UNLESS(win32): cover-clean \
editor-clean
- @TEMP_cg_r@
+ $(RM_F) $(INC_DIR)/oplib/core_ops_cg.h src/ops/core_ops_cg.c \
+ $(INC_DIR)/oplib/core_ops_cgp.h src/ops/core_ops_cgp.c
$(RM_F) chartypes "*.s" "*~"
$(RM_F) $(FLUID_FILES_1)
$(RM_F) $(FLUID_FILES_2)
$(RM_RF) lib/Parrot/OpLib
$(RM_F) $(NQP_CLEANUPS) $(PGE_CLEANUPS) $(TGE_CLEANUPS) $(JSON_CLEANUPS)
$(RM_F) $(PIRC_CLEANUPS) $(PCT_CLEANUPS) $(DATA_JSON_CLEANUPS)
- $(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES)
+ $(RM_F) $(GEN_PASM_INCLUDES) $(GEN_PM_INCLUDES) $(DYNOPLIBS_CLEANUPS)
prog-clean :
$(RM_F) \
@@ -1874,7 +1875,7 @@
src/string/private_cstring.h "src/pmc/*.c" "include/pmc/pmc_*.h" \
"src/pmc/*.dump" vtable.dump "*.def" "*.lib" "*.exp"
-archclean: dynoplibs-clean dynpmc-clean dynext-clean
+archclean: dynpmc-clean dynext-clean
$(RM_F) \
$(O_FILES) \
$(GEN_CONFIGS) \
@@ -2218,7 +2219,7 @@
# +redef, +redecl: Ops currently have tons of redefinitions
# added to splint target to simplify experimentation,
-# ex: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
+# example: make SPLINTFLAGS_TEST='-posixstrictlib +posixlib' splint
SPLINT_SOURCE = `echo $(O_FILES) | $(PERL) -pe @PQ at s/\.o/\.c/g at PQ@`
@@ -2424,7 +2425,9 @@
###### OS depend targets ##########
# for use by t/pmc/nci.t
-src/nci_test$(O): $(PARROT_H_HEADERS)
+## SUFFIX OVERRIDE - dynloaded files need cc_shared
+src/nci_test$(O): $(PARROT_H_HEADERS) src/nci_test.c
+ $(CC) $(CFLAGS) @optimize::src/nci_test.c@ @ccwarn::src/nci_test.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/nci_test.c
$(LIBNCI_TEST_SO): src/nci_test$(O) $(LIBPARROT)
$(LD) $(LD_LOAD_FLAGS) @ncilib_link_extra@ $(LDFLAGS) \
@@ -2451,7 +2454,9 @@
$(NCI_THUNK_GEN) --dynext --no-warn-dups \
--output=src/extra_nci_thunks.c <src/nci/extra_thunks.nci
-src/extra_nci_thunks$(O) : $(GENERAL_H_FILES)
+## SUFFIX OVERRIDE
+src/extra_nci_thunks$(O) : $(GENERAL_H_FILES) src/extra_nci_thunks.c
+ $(CC) $(CFLAGS) @optimize::src/extra_nci_thunks.c@ @ccwarn::src/extra_nci_thunks.c@ @cc_shared@ -I$(@D) @cc_o_out@$@ -c src/extra_nci_thunks.c
$(EXTRANCITHUNKS_SO) : $(LIBPARROT) src/extra_nci_thunks$(O)
$(LD) $(LD_LOAD_FLAGS) $(LDFLAGS) \
@@ -2522,6 +2527,7 @@
malloclist: src/core_pmcs.c
$(PERL) $(BUILD_TOOLS_DIR)/headerizer.pl --macro=PARROT_MALLOC $(HEADERIZER_O_FILES)
+include src/dynoplibs/Rules.mak
include runtime/parrot/library/Rules.mak
include compilers/imcc/Rules.mak
include compilers/pirc/Rules.mak
Modified: branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/hints/darwin.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -90,8 +90,7 @@
rpath => "-L",
libparrot_soname => "-install_name "
. $lib_dir
- . $conf->data->get('slash')
- . "libparrot"
+ . '/libparrot'
. $conf->data->get('share_ext')
);
}
Modified: branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/hints/linux.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -98,70 +98,14 @@
sub _handle_icc_ccflags {
my ($ccflags, $verbose) = @_;
- # suppress sprintf warnings that don't apply
- $ccflags .= ' -wd269';
-
- # suppress remarks about floating point comparisons
- $ccflags .= ' -wd1572';
-
- # suppress remarks about hiding of parameter declarations
- $ccflags .= ' -wd1599';
-
- # suppress remarks about "argument is incompatible with corresponding
- # format string conversion"
- $ccflags .= ' -wd181';
-
- # gcc is currently not looking for unused variables, so should icc
- # for the time being (this will reduce the noise somewhat)
- $ccflags .= ' -wd869';
-
- # ignore "operands are evaluated in unspecified order" warning
- $ccflags .= ' -wd981';
-
- # ignore "external declaration in primary source file"
- # (only done temporarily to reduce noise)
- $ccflags .= ' -wd1419';
-
- # ignore "function 'xxx' was declared but never referenced"
- # (only done temporarily to reduce noise)
- $ccflags .= ' -wd117';
-
- # ignore "conversion from "" to "" may lose significant bits"
- # warnings (only done temporarily to reduce noise)
- $ccflags .= ' -wd810';
-
- # ignore "function "" was declared but never referenced"
- # warnings (only done temporarily to reduce noise)
- $ccflags .= ' -wd177';
-
- # ignore warnings springing from problems with computed goto
- # statements. If someone can find out how to make icc play nicely
- # in these situations, that would be good.
- $ccflags .= ' -wd1296';
-
- $ccflags .= ' -Wall -Wcheck -w2';
-
- $ccflags .= ' -Wabi';
- $ccflags .= ' -Wcomment';
- $ccflags .= ' -Wdeprecated';
- $ccflags .= ' -Wmain';
- $ccflags .= ' -Wmissing-prototypes';
-
- #$ccflags .= ' -Wp64';
- $ccflags .= ' -Wpointer-arith';
- $ccflags .= ' -Wreturn-type';
- $ccflags .= ' -Wstrict-prototypes';
-
- #$ccflags .= ' -Wtrigraphs';
- $ccflags .= ' -Wuninitialized';
- $ccflags .= ' -Wunknown-pragmas';
- $ccflags .= ' -Wunused-function';
- $ccflags .= ' -Wunused-variable';
-
# enable correct floating point behavior
# which is *not* the default behavior. ahem.
$ccflags .= ' -we147';
+ # TT #1488. ICC optimizes floating-point too aggressively and loses support
+ # for negative zero without this.
+ $ccflags .= ' -fp-model source';
+
$verbose and print " ccflags: $ccflags\n";
return $ccflags;
}
Modified: branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/hints/mswin32.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -101,7 +101,6 @@
ar_flags => '',
ar_out => '-out:',
slash => '\\',
- blib_dir => 'blib\\lib',
ccflags => $ccflags,
ccwarn => $ccwarn,
has_dynamic_linking => 1,
@@ -153,7 +152,6 @@
ar_flags => '',
ar_out => '-out:',
slash => '\\',
- blib_dir => 'blib\\lib',
ccflags => $ccflags,
ccwarn => '',
has_dynamic_linking => 1
@@ -200,7 +198,6 @@
ar_out => '',
ar_extra => '',
slash => '\\',
- blib_dir => 'blib\\lib',
make_and => "\n\t",
);
}
@@ -261,7 +258,6 @@
sym_export => '__declspec(dllexport)',
sym_import => '__declspec(dllimport)',
slash => '\\',
- blib_dir => 'blib\\lib',
);
}
}
Modified: branches/pcc_hackathon_6Mar10/config/init/optimize.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/init/optimize.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/init/optimize.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
# $Id$
=head1 NAME
@@ -21,10 +21,10 @@
sub _init {
my $self = shift;
- my %data;
- $data{description} = q{Enable optimization};
- $data{result} = q{};
- return \%data;
+ return {
+ 'description', 'Enable optimization',
+ 'result', '',
+ };
}
our $verbose;
@@ -41,41 +41,53 @@
# A plain --optimize means use perl5's $Config{optimize}. If an argument
# is given, however, use that instead.
my $optimize = $conf->options->get('optimize');
- if ( defined $optimize ) {
- $self->set_result('yes');
- # disable debug flags
- $conf->data->set( cc_debug => '' );
- $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
- if ( $optimize eq "1" ) {
-
- # use perl5's value
- # gcc 4.1 doesn't like -mcpu=xx, i.e. it's deprecated
- my $opts = $conf->data->get('optimize_provisional');
- my $gccversion = $conf->data->get( 'gccversion' );
- my $arch_opt = 'cpu';
- if ( defined $gccversion and $gccversion > 3.3 ) {
- $arch_opt = 'arch';
- }
- $opts =~ s/-mcpu=/-m$arch_opt=/;
- $conf->data->add( ' ', ccflags => $opts );
- print "opts: ", $opts, "\n" if $verbose;
-
- # record what optimization was enabled
- $conf->data->set( optimize => $opts );
- }
- else {
+ if (! defined $optimize) {
+ $self->set_result('no');
+ print "(none requested) " if $conf->options->get('verbose');
+ return 1;
+ }
- # use what was passed to --optimize on the CLI
- $conf->data->add( ' ', ccflags => $optimize );
+ $self->set_result('yes');
+ my $gccversion = $conf->data->get( 'gccversion' );
- # record what optimization was enabled
- $conf->data->set( optimize => $optimize );
+ my $options;
+ if ( $optimize eq "1" ) {
+ # start with perl5's flags ...
+ $options = $conf->data->get('optimize_provisional');
+
+ # ... but gcc 4.1 doesn't like -mcpu=xx, i.e. it's deprecated
+ if ( defined $gccversion and $gccversion > 3.3 ) {
+ $options =~ s/-mcpu=/-march=/;
}
}
else {
- $self->set_result('no');
- print "(none requested) " if $conf->options->get('verbose');
+ # use the command line verbatim
+ $options = $optimize;
+ }
+
+ # save the options, however we got them.
+ $conf->data->set( optimize => $options );
+ print "optimize options: ", $options, "\n" if $verbose;
+
+ # disable debug flags.
+ $conf->data->set( cc_debug => '' );
+ $conf->data->add( ' ', ccflags => "-DDISABLE_GC_DEBUG=1 -DNDEBUG" );
+
+ # per file overrides - not every compiler can optimize every file.
+
+ # The src/ops/core_ops*.c files are challenging to optimize.
+ # gcc can usually handle it, but don't assume any other compilers can,
+ # until there is specific evidence otherwise.
+ if ( ! defined($gccversion)) {
+ $conf->data->set('optimize::src/ops/core_ops_cg.c','');
+ $conf->data->set('optimize::src/ops/core_ops_cgp.c','');
+ $conf->data->set('optimize::src/ops/core_ops_switch.c','');
+ }
+
+ # TT #405
+ if ($conf->data->get('cpuarch') eq 'amd64') {
+ $conf->data->set('optimize::src/gc/system.c','');
}
return 1;
Modified: branches/pcc_hackathon_6Mar10/config/inter/charset.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/inter/charset.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/inter/charset.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -75,8 +75,7 @@
}
# build list of libraries for link line in Makefile
- my $slash = $conf->data->get('slash');
- $TEMP_charset_o =~ s/^| / src${slash}string${slash}charset${slash}/g;
+ $TEMP_charset_o =~ s{^| }{ src/string/charset/}g;
$conf->data->set(
charset => $charset_list,
Modified: branches/pcc_hackathon_6Mar10/config/inter/encoding.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/inter/encoding.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/inter/encoding.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -75,8 +75,7 @@
}
# build list of libraries for link line in Makefile
- my $slash = $conf->data->get('slash');
- $TEMP_encoding_o =~ s/^| / src${slash}string${slash}encoding${slash}/g;
+ $TEMP_encoding_o =~ s{^| }{ src/string/encoding/}g;
$conf->data->set(
encoding => $encoding_list,
Modified: branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/config/inter/libparrot.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -105,7 +105,7 @@
&& $conf->data->get('rpath') )
? $conf->data->get('rpath')
. $conf->data->get('build_dir')
- . $conf->data->get('slash')
+ . '/'
. $conf->data->get('blib_dir')
: ''
);
@@ -144,7 +144,7 @@
$conf->data->set(libparrot_linkflags =>
'-L'
. $conf->data->get('build_dir')
- . $conf->data->get('slash')
+ . '/'
. $conf->data->get('blib_dir')
. ' -lparrot'
);
Modified: branches/pcc_hackathon_6Mar10/docs/parrothist.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/parrothist.pod Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/docs/parrothist.pod Tue Mar 16 22:37:03 2010 (r44975)
@@ -104,4 +104,5 @@
chromatic 2.0.0 * 2010-Jan-19 "Inevitable"
darbelo 2.1.0 2010-Feb-16 "As Scheduled"
+ cotto 2.2.0 2010-Mar-16 "Like Clockwork"
=cut
Modified: branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/docs/pdds/pdd28_strings.pod Tue Mar 16 22:37:03 2010 (r44975)
@@ -626,9 +626,9 @@
Unsafe, and behavior handled by Parrot_str_to_cstring.
-=head4 Parrot_string_split
+=head4 Parrot_str_split
-Is the same as Parrot_str_split.
+Splits the string C<str> at the delimiter C<delim>.
=head4 Parrot_str_free (was string_free)
Modified: branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/docs/pdds/pdd30_install.pod Tue Mar 16 22:37:03 2010 (r44975)
@@ -115,7 +115,7 @@
separate package), F<libgdm> and F<libreadline>.
Building a language depends on a series of Parrot build tools, installed in
-F</usr/lib/parrot/E<lt>version/tools>. These tools will generally not be
+F</usr/lib/parrot/E<lt>versionE<gt>/tools>. These tools will generally not be
included in the default C<parrot> package on most systems, languages will
require a C<parrot-dev> package to be installed before they can be built.
Modified: branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/docs/project/release_manager_guide.pod Tue Mar 16 22:37:03 2010 (r44975)
@@ -393,7 +393,6 @@
visible at
L<http://www.google.com/calendar/render?cid=ldhctdamsgfg5a1cord52po9h8@group.calendar.google.com>.
- - Mar 16, 2010 - 2.2 - cotto
- Apr 20, 2010 - 2.3* - gerd
- May 18, 2010 - 2.4 - whiteknight
- Jun 15, 2010 - 2.5 - gerd
Modified: branches/pcc_hackathon_6Mar10/docs/tests.pod
==============================================================================
--- branches/pcc_hackathon_6Mar10/docs/tests.pod Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/docs/tests.pod Tue Mar 16 22:37:03 2010 (r44975)
@@ -7,16 +7,16 @@
=head1 A basic guide to writing and running tests for Parrot
-This is quick and dirty pointer to how the Parrot test suite is executed and
-to how new tests for Parrot should be written.
-The testing system is liable to change in the future, but tests written
-following the guidelines below should be easy to port into a new test suite.
+This is quick and dirty primer on to how the Parrot test suite is executed and
+to how new tests for Parrot should be written. The testing system is liable to
+change in the future, but tests written following the guidelines below should be
+easy to port into a new test suite.
=head1 How to test parrot
-The easy way to test parrot is running C<make test>. If you have
-updated your code recently and tests began failing, go for a C<make
-realclean> and recompile parrot before complaining.
+The easy way to test parrot is running C<make test>. If you have updated your
+code recently and tests began failing, go for a C<make realclean> and recompile
+parrot before complaining.
C<make languages-test> runs the test suite for most language implementations
in the languages directory.
@@ -26,41 +26,47 @@
Parrot has a status page with smoke test results at
L<http://smolder.plusthree.com/app/public_projects/details/8>.
-You can supply new tests results by just running C<make smoke>.
-It will run the same tests as C<make test> would, but will upload
-the test results to the website.
+You can supply new tests results by just running C<make smoke>. It will run the
+same tests as C<make test> would, but will upload the test results to the
+website.
=head1 Location of the test files
The parrot test files, the F<*.t> files, can be found in the F<t> directory.
-A quick overview over the subdirs in F<t> can be found in F<t/README>.
+A quick overview over the subdirs in F<t> can be found in F<t/README>.
The language implementations usually have their test files in F<languages/*/t>.
-New tests should be added to an existing F<*.t> file.
-If a previously untested feature is tested,
-it might also make sense to create a new F<*.t> file.
+New tests should be added to an existing F<*.t> file. If a previously untested
+feature is tested, it might also make sense to create a new F<*.t> file. You
+may also see tests named like foo-old.t, which are Perl tests that are in the
+process of being translated to PIR.
=head1 How to write a test
Test scripts must emit text that conforms to the C<Test Anything Protocol>.
-Test scripts are currently usually written in Perl 5 or PIR.
-The Perl 5 module C<Parrot::Test>
-and the PIR module C<Test;More> help with writing tests.
+Test scripts are currently usually written in PIR or Perl 5. The Perl 5 module
+C<Parrot::Test> and the PIR module C<Test;More> help with writing tests.
+Writing tests in PIR is preferred, but there are some cases where the
+proper framework is not available. If you can, write your tests in PIR.
The testing framework needs to know how many tests it should expect. So the
number of planned tests needs to be incremented when adding a new test. This
is done near the top of a test file, in a line that looks like:
+ plan(42)
+
+in PIR tests and
+
use Parrot::Test tests => 8;
-for Perl 5 based test scripts.
+for Perl 5 test scripts.
=head2 Testing Parrot Assembler
PASM tests are mostly used for testing ops. Appropriate test files for basic
-ops are F<t/op/*.t>. Polymorphic Containers are tested in F<t/pmc/*.t>. Add the
-new test like this:
+ops are F<t/op/*.t>. Polymorphic Containers are tested in F<t/pmc/*.t>. Add
+the new test like this:
pasm_output_is(<<'CODE', <<'OUTPUT', "name for test");
*** a big chunk of assembler, eg:
Deleted: branches/pcc_hackathon_6Mar10/include/parrot/events.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/events.h Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,226 +0,0 @@
-/* events.h
- * Copyright (C) 2001-2008, Parrot Foundation.
- * SVN Info
- * $Id$
- * Overview:
- * This api will handle parrot events
- * Data Structure and Algorithms:
- * History:
- * Notes:
- * References:
- */
-
-#ifndef PARROT_EVENTS_H_GUARD
-#define PARROT_EVENTS_H_GUARD
-
-#include "parrot/compiler.h"
-
-typedef void* (*event_func_t)(Parrot_Interp, void*);
-
-typedef enum {
- EVENT_TYPE_NONE,
- EVENT_TYPE_EVENT,
- EVENT_TYPE_IO,
- EVENT_TYPE_MSG,
- EVENT_TYPE_TIMER,
- EVENT_TYPE_CALL_BACK,
- EVENT_TYPE_SLEEP,
- EVENT_TYPE_TERMINATE,
- EVENT_TYPE_EVENT_TERMINATE,
- EVENT_TYPE_CLASS_CHANGED,
- EVENT_TYPE_SIGNAL,
- EVENT_TYPE_SUSPEND_FOR_GC
-} parrot_event_type_enum;
-
-/*
- * any timer event has 2 time fields in front
- */
-typedef struct parrot_timer_event {
- FLOATVAL abs_time;
- FLOATVAL interval;
- int repeat; /* 0 = once, -1 = forever */
- PMC* sub; /* handler sub */
- PMC* timer; /* a .Timer PMC */
-} parrot_timer_event;
-
-/* TODO export to pasm */
-typedef enum {
- EV_IO_NONE, /* invalidated */
- EV_IO_SELECT_RD, /* rd is ready for read */
- EV_IO_SELECT_WR /* rd is ready for write */
-} parrot_io_event_enum;
-
-typedef struct parrot_io_event {
- parrot_io_event_enum action; /* read, write, ... */
- PMC* pio;
- PMC* handler;
- PMC* user_data;
-} parrot_io_event;
-
-typedef struct _call_back_info {
- PMC* cbi; /* callback info */
- char* external_data;
-} _call_back_info;
-
-typedef struct parrot_event {
- parrot_event_type_enum type;
- Parrot_Interp interp;
- /* event_func_t event_func; unused */
- union {
- STRING* msg; /* for testing only */
- int signal; /* for EVENT_TYPE_SIGNAL */
- parrot_timer_event timer_event; /* for EVENT_TYPE_TIMER */
- _call_back_info call_back; /* CALL_BACKs */
- parrot_io_event io_event; /* EVENT_TYPE_IO */
- } u;
-} parrot_event;
-
-struct QUEUE_ENTRY;
-
-#define CHECK_EVENTS(i, n) (opcode_t *)Parrot_do_check_events((i), (n))
-#define HANDLE_EVENTS(i, n) (opcode_t *)Parrot_do_handle_events((i), 1, (n))
-
-/* HEADERIZER BEGIN: src/events.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-
-PARROT_EXPORT
-void Parrot_del_timer_event(PARROT_INTERP, ARGIN(const PMC *timer))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_do_check_events(PARROT_INTERP,
- ARGIN_NULLOK(opcode_t *next))
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_do_handle_events(PARROT_INTERP,
- int restore,
- ARGIN_NULLOK(opcode_t *next))
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_event_add_io_event(PARROT_INTERP,
- ARGIN_NULLOK(PMC *pio),
- ARGIN_NULLOK(PMC *sub),
- ARGIN_NULLOK(PMC *data),
- INTVAL which)
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_init_events(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_init_signals(void);
-
-PARROT_EXPORT
-void Parrot_kill_event_loop(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_cb_event(PARROT_INTERP, ARGIN(PMC *cbi), ARGIN(char *ext))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__nonnull__(3);
-
-PARROT_EXPORT
-void Parrot_new_suspend_for_gc_event(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_terminate_event(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_timer_event(PARROT_INTERP,
- ARGIN_NULLOK(PMC *timer),
- FLOATVAL diff,
- FLOATVAL interval,
- int repeat,
- ARGIN_NULLOK(PMC *sub),
- parrot_event_type_enum typ)
- __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_schedule_event(PARROT_INTERP, ARGMOD(parrot_event* ev))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(* ev);
-
-PARROT_EXPORT
-void Parrot_schedule_interp_qentry(PARROT_INTERP,
- ARGIN(struct QUEUE_ENTRY *entry))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_sleep_on_event(PARROT_INTERP,
- FLOATVAL t,
- ARGIN_NULLOK(opcode_t *next))
- __attribute__nonnull__(1);
-
-void Parrot_schedule_broadcast_qentry(ARGIN(struct QUEUE_ENTRY *entry))
- __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_del_timer_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(timer))
-#define ASSERT_ARGS_Parrot_do_check_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_do_handle_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_event_add_io_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_init_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_init_signals __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_kill_event_loop __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_cb_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(cbi) \
- , PARROT_ASSERT_ARG(ext))
-#define ASSERT_ARGS_Parrot_new_suspend_for_gc_event \
- __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_terminate_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_timer_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_schedule_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(ev))
-#define ASSERT_ARGS_Parrot_schedule_interp_qentry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_Parrot_sleep_on_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_schedule_broadcast_qentry \
- __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(entry))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-/* HEADERIZER END: src/events.c */
-
-/* &gen_from_enum(io_thr_msg.pasm) */
-typedef enum {
- IO_THR_MSG_NONE,
- IO_THR_MSG_TERMINATE,
- IO_THR_MSG_ADD_SELECT_RD
-} io_thread_msg_type;
-/* &end_gen */
-
-#endif /* PARROT_EVENTS_H_GUARD */
-
-/*
- * Local variables:
- * c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
Modified: branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/exceptions.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/* exceptions.h
- * Copyright (C) 2001-2008, Parrot Foundation.
+ * Copyright (C) 2001-2010, Parrot Foundation.
* SVN Info
* $Id$
* Overview:
@@ -272,10 +272,14 @@
#ifdef NDEBUG
# define PARROT_ASSERT(x) /*@-noeffect@*/((void)0)/*@=noeffect@*/
# define PARROT_ASSERT_ARG(x) (0)
+# define PARROT_FAILURE(x) /*@-noeffect@*/((void)0)/*@=noeffect@*/
+# define PARROT_ASSERT_MSG(x, s) /*@-noeffect@*/((void)0)/*@=noeffect@*/
# define ASSERT_ARGS(a)
#else
# define PARROT_ASSERT(x) (x) ? ((void)0) : Parrot_confess(#x, __FILE__, __LINE__)
# define PARROT_ASSERT_ARG(x) ((x) ? (0) : (Parrot_confess(#x, __FILE__, __LINE__), 0))
+# define PARROT_FAILURE(x) Parrot_confess((x), __FILE__, __LINE__)
+# define PARROT_ASSERT_MSG(x, s) ((x) ? (0) : (Parrot_confess(s, __FILE__, __LINE__), 0))
# ifdef __GNUC__
# define ASSERT_ARGS(a) ASSERT_ARGS_ ## a ;
Modified: branches/pcc_hackathon_6Mar10/include/parrot/hash.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/hash.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/hash.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -87,7 +87,7 @@
ORDERED_HASH_ITEM_VALUE = 1,
ORDERED_HASH_ITEM_PREV = 2,
ORDERED_HASH_ITEM_NEXT = 3,
- ORDERED_HASH_ITEM_MAX = 4,
+ ORDERED_HASH_ITEM_MAX = 4
};
/* HEADERIZER BEGIN: src/hash.c */
Modified: branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/interpreter.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -609,7 +609,7 @@
# define PMC_IS_NULL(pmc) Parrot_pmc_is_null(NULL, (pmc))
#endif
#ifndef STRING_IS_NULL
-# define STRING_IS_NULL(s) ((s) == NULL || STRING_is_null(NULL, (s))
+# define STRING_IS_NULL(s) ((s) == NULL || Parrot_str_is_null(NULL, (s))
#endif
#endif /* PARROT_INTERPRETER_H_GUARD */
Modified: branches/pcc_hackathon_6Mar10/include/parrot/oplib.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/oplib.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/oplib.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -47,7 +47,6 @@
typedef enum {
CORE_OPS_end, /* halt the runloop */
CORE_OPS_noop, /* do nothing */
- CORE_OPS_cpu_ret, /* __asm("ret") */
CORE_OPS_check_events, /* explicit event check */
CORE_OPS_check_events__, /* inserted into op dispatch when an event
got scheduled */
Modified: branches/pcc_hackathon_6Mar10/include/parrot/parrot.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/parrot.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/parrot.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -269,7 +269,6 @@
#include "parrot/io.h"
#include "parrot/op.h"
#include "parrot/pmc.h"
-#include "parrot/events.h"
#include "parrot/gc_api.h"
#include "parrot/string_funcs.h"
#include "parrot/misc.h"
@@ -280,7 +279,6 @@
#include "parrot/nci.h"
#include "parrot/thread.h"
#include "parrot/scheduler.h"
-#include "parrot/tsq.h"
#include "parrot/longopt.h"
#include "parrot/oo.h"
#include "parrot/vtables.h"
Modified: branches/pcc_hackathon_6Mar10/include/parrot/pmc.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/pmc.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/pmc.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -89,6 +89,11 @@
PARROT_EXPORT
PARROT_CANNOT_RETURN_NULL
+PMC * Parrot_pmc_new_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+ __attribute__nonnull__(1);
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
PMC * Parrot_pmc_new_noinit(PARROT_INTERP, INTVAL base_type)
__attribute__nonnull__(1);
@@ -172,6 +177,8 @@
#define ASSERT_ARGS_Parrot_pmc_new_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(init))
+#define ASSERT_ARGS_Parrot_pmc_new_init_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
+ PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_Parrot_pmc_new_noinit __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_Parrot_pmc_register_new_type __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
Modified: branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/pmc_freeze.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -17,7 +17,7 @@
VISIT_HOW_PMC_TO_VISITOR = 0x00, /* push to visitor */
VISIT_HOW_VISITOR_TO_PMC = 0x01, /* shift from visitor */
VISIT_HOW_PMC_TO_PMC = 0x02, /* push to visitor; then shift from visitor */
- VISIT_HOW_VISITOR_TO_VISITOR = 0x03, /* shift from visitor; then push to visitor */
+ VISIT_HOW_VISITOR_TO_VISITOR = 0x03 /* shift from visitor; then push to visitor */
} visit_how_enum_t;
#define VISIT_HOW_MASK 0x03
@@ -26,7 +26,7 @@
VISIT_WHAT_PMC = 0x04,
VISIT_WHAT_STRING = 0x08,
VISIT_WHAT_FLOATVAL = 0x10,
- VISIT_WHAT_INTVAL = 0x20,
+ VISIT_WHAT_INTVAL = 0x20
} visit_what_enum_t;
#define VISIT_WHAT_MASK 0x3c
@@ -39,7 +39,7 @@
typedef enum {
EXTRA_IS_NULL,
- EXTRA_IS_PROP_HASH,
+ EXTRA_IS_PROP_HASH
} extra_flags_enum;
#define VISIT_PMC(interp, visit, pmc) do {\
Modified: branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/runcore_profiling.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -64,7 +64,7 @@
PPROF_DATA_CLI = 0,
- PPROF_DATA_MAX = 3,
+ PPROF_DATA_MAX = 3
} Parrot_profiling_datatype;
struct profiling_runcore_t {
Modified: branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/include/parrot/string_funcs.h Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,3 +1,4 @@
+#define ASSERT_ARGS_STRING_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
/* string_funcs.h
* Copyright (C) 2001-2008, Parrot Foundation.
* SVN Info
@@ -249,6 +250,9 @@
__attribute__nonnull__(3);
PARROT_EXPORT
+INTVAL Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s));
+
+PARROT_EXPORT
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
STRING* Parrot_str_join(PARROT_INTERP,
@@ -626,6 +630,7 @@
#define ASSERT_ARGS_Parrot_str_is_cclass __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_Parrot_str_is_null __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
#define ASSERT_ARGS_Parrot_str_join __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(ar))
Deleted: branches/pcc_hackathon_6Mar10/include/parrot/tsq.h
==============================================================================
--- branches/pcc_hackathon_6Mar10/include/parrot/tsq.h Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,167 +0,0 @@
-/* tsq.h
- * Copyright (C) 2001-2007, Parrot Foundation.
- * SVN Info
- * $Id$
- * Overview:
- * Defines the thread-safe queue system
- * Data Structure and Algorithms:
- * History:
- * Notes:
- * References:
- */
-
-#ifndef PARROT_TSQ_H_GUARD
-#define PARROT_TSQ_H_GUARD
-
-#include "parrot/config.h"
-#include "parrot/thread.h"
-
-
-typedef struct QUEUE_ENTRY QUEUE_ENTRY;
-typedef struct QUEUE QUEUE;
-
-typedef enum {
- QUEUE_ENTRY_TYPE_NONE,
- QUEUE_ENTRY_TYPE_EVENT,
- QUEUE_ENTRY_TYPE_TIMED_EVENT
-} queue_entry_type_enum;
-
-struct QUEUE_ENTRY {
- void *data;
- queue_entry_type_enum type;
- QUEUE_ENTRY *next;
-};
-
-struct QUEUE {
- QUEUE_ENTRY *head;
- QUEUE_ENTRY *tail;
- UINTVAL max_prio;
- Parrot_mutex queue_mutex;
- Parrot_cond queue_condition;
-};
-
-/* HEADERIZER BEGIN: src/tsq.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-
-void insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*queue);
-
-void nosync_insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*queue);
-
-PARROT_CANNOT_RETURN_NULL
-QUEUE_ENTRY * nosync_pop_entry(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-QUEUE_ENTRY * peek_entry(ARGIN(const QUEUE *queue))
- __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY * pop_entry(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-void push_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*queue);
-
-void queue_broadcast(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-void queue_destroy(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-PARROT_MALLOC
-QUEUE* queue_init(UINTVAL prio);
-
-void queue_lock(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-void queue_signal(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-void queue_timedwait(
- ARGMOD(QUEUE *queue),
- ARGIN(const struct timespec *abs_time))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*queue);
-
-void queue_unlock(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-void queue_wait(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-void unshift_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY * wait_for_entry(ARGMOD(QUEUE *queue))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*queue);
-
-#define ASSERT_ARGS_insert_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue) \
- , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_nosync_insert_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue) \
- , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_nosync_pop_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_peek_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_pop_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_push_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue) \
- , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_queue_broadcast __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_queue_lock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_signal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_timedwait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue) \
- , PARROT_ASSERT_ARG(abs_time))
-#define ASSERT_ARGS_queue_unlock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_wait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_unshift_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue) \
- , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_wait_for_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(queue))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-/* HEADERIZER END: src/tsq.c */
-
-#endif /* PARROT_TSQ_H_GUARD */
-
-/*
- * Local variables:
- * c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Compiler.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -197,10 +197,15 @@
$conf->genfile($source, $target, %options);
-Takes the specified source file, replacing entries like C<@FOO@> with
-C<FOO>'s value from the configuration system's data, and writes the results
+Takes the specified source file, replacing entries like C<@key@> with
+C<key>'s value from the configuration system's data, and writes the results
to specified target file.
+If a C<::> is present in the C<@key@>, the replaced value will first try to
+use the full key, but if that is not present, the key up to the C<::> is used.
+For example, if C<@cc_warn::src/embed.c@> is used, and that key doesn't
+exist, the fallback key would be C<@cc_warn@>.
+
Respects the following options when manipulating files (Note: most of the
replacement syntax assumes the source text is on a single line.)
@@ -210,8 +215,8 @@
If set to a C<makefile>, C<c> or C<perl> value, C<comment_type> will be set
to corresponding value.
-Moreover, when set to a C<makefile> value, it will set C<replace_slashes> to
-enabled, and C<conditioned_lines> to enabled.
+Moreover, when set to a C<makefile> value, it will enable
+C<conditioned_lines>.
Its value will be detected automatically by target file name unless you set
it to a special value C<none>.
@@ -270,11 +275,6 @@
will be used on "win32" and if "glut" is defined, but not on "cygwin".
-B<Legacy Syntax:>
-
-The old syntax #CONDITIONED_LINE(var): and
-#INVERSE_CONDITIONED_LINE(var): is still supported, but is deprecated.
-
=item comment_type
This option takes has two possible values, C<#> or C</*>. If present and
@@ -294,12 +294,6 @@
this evaluation occurs, any substitution of @@ values is performed on the
original text.
-=item replace_slashes
-
-If set to a true value, this causes any C</>s in the file to automatically
-be replaced with an architecture appropriate slash. C</> or C<\>. This is
-a very helpful option when writing Makefiles.
-
=item expand_gmake_syntax
If set to a true value, then certain types of I<gmake> syntax will be expanded
@@ -350,7 +344,7 @@
open my $out, '>', "$target.tmp" or die "Can't open $target.tmp: $!";
if ( !exists $options{file_type}) {
- if ( $target =~ m/makefile$/i ) {
+ if ( $target =~ m/makefile$/i || $target =~ m/\.mak/) {
$options{file_type} = 'makefile';
}
elsif ($target =~ m/\.p[lm]$/i ) {
@@ -378,7 +372,6 @@
$file_types_info{$options{file_type}}{comment_type};
}
if ( $options{file_type} eq 'makefile' ) {
- $options{replace_slashes} = 1;
$options{conditioned_lines} = 1;
}
}
@@ -461,16 +454,6 @@
next LINE if $former_truth;
$line = $1;
}
- # Legacy, DEPRECATED.
- elsif (($expr,$rest)=($line =~ m/^#CONDITIONED_LINE\(([^)]+)\):(.*)/s)) {
- next LINE unless cond_eval($conf, $expr);
- $line = $rest;
- }
- elsif (($expr,$rest)=($line =~ m/^#INVERSE_CONDITIONED_LINE\(([^)]+)\):(.*)/s )) {
- next LINE if cond_eval($conf, $expr);
- $line = $rest;
- }
-
else { # reset
$former_truth = -1; # ELSE must immediately follow a conditional.
}
@@ -539,29 +522,29 @@
# interpolate @foo@ values
$line =~ s{ \@ (\w+) \@ }{
if(defined(my $val=$conf->data->get($1))) {
- #use Data::Dumper;warn Dumper("val for $1 is ",$val);
$val;
}
else {
- warn "value for '$1' in $source is undef";
+ warn "value for '\@$1\@' in $source is undef";
'';
}
}egx;
- if ( $options{replace_slashes} ) {
- if ( $line =~ m{/$} ) {
- croak "$source:$.: line ends in a slash\n";
+ # interpolate @foo::bar@ values
+ $line =~ s{ \@ (\w+) :: ([^\@]+) \@ }{
+ my $full = $1 . '::' . $2;
+ my $base = $1;
+ if(defined(my $val=$conf->data->get($full))) {
+ $val;
}
-
- $line =~ s{(/+)}{
- my $len = length $1;
- my $slash = $conf->data->get('slash');
- '/' x ($len/2) . ($len%2 ? $slash : '');
- }eg;
-
- # replace \* with \\*, so make will not eat the \
- $line =~ s{(\\\*)}{\\$1}g;
- }
+ elsif(defined($val=$conf->data->get($base))) {
+ $val;
+ }
+ else {
+ warn "value for '\@$full\@' in $source is undef, no fallback";
+ '';
+ }
+ }egx;
print $out $line;
}
@@ -620,8 +603,6 @@
}
}
-sub truth { $_[0] ? "true" : "false"; }
-
# Recursively evaluate boolean expressions with multiple keys and | & ! ops.
# Order of precedence: Just "!" and "NOT" binds tighter than AND and OR.
# There's no precedence for AND over OR defined, just left to right.
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Configure/Step/List.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
# $Id$
package Parrot::Configure::Step::List;
use strict;
@@ -23,6 +23,8 @@
auto::msvc
auto::attributes
auto::warnings
+ auto::arch
+ auto::cpu
init::optimize
inter::shlibs
inter::libparrot
@@ -37,10 +39,8 @@
auto::va_ptr
auto::format
auto::isreg
- auto::arch
auto::jit
auto::frames
- auto::cpu
auto::cgoto
auto::inline
auto::gc
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/File.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -109,7 +109,6 @@
my %type_for_name = (
'Artistic' => 'Licence file',
'BUGS' => 'Project info',
- 'CFLAGS' => 'CFLAGS file',
'ChangeLog' => 'Project info',
'Changes' => 'Project info',
'CREDITS' => 'Project info',
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/C.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -218,11 +218,10 @@
'Threads', '',
$self->c_pair_item( '', 'thread' ),
$self->c_header_item( '', 'thr_pthread' ),
- $self->c_pair_item( '', 'tsq' ),
),
$self->new_group(
'Exceptions', '',
- $self->c_pair_item( '', 'exceptions' ), $self->c_pair_item( '', 'events' ),
+ $self->c_pair_item( '', 'exceptions' )
),
$self->new_group(
'Memory', '',
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Docs/Section/Tools.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -45,7 +45,6 @@
'Configuration',
'',
$self->new_item( '', 'tools/dev/as2c.pl' ),
- $self->new_item( '', 'tools/build/cc_flags.pl' ),
$self->new_item( '', 'tools/build/vtable_h.pl' ),
$self->new_item( '', 'tools/build/vtable_extend.pl' ),
),
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Op.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -315,15 +315,12 @@
s/{{=0,=([^{]*?)}}/ $trans->restart_address($1) . "; {{=0}}"; /me;
s/{{=0,\+=([^{]*?)}}/ $trans->restart_offset($1) . "; {{=0}}"; /me;
- s/{{=0,-=([^{]*?)}}/ $trans->restart_offset(-$1) . "; {{=0}}"; /me;
s/{{\+=([^{]*?)}}/ $trans->goto_offset($1); /me;
- s/{{-=([^{]*?)}}/ $trans->goto_offset(-$1); /me;
s/{{=([^*][^{]*?)}}/ $trans->goto_address($1); /me;
- s/{{\^(-?\d+)}}/ $1 /me;
+ s/{{\^(\d+)}}/ $1 /me;
s/{{\^\+([^{]*?)}}/ $trans->expr_offset($1); /me;
- s/{{\^-([^{]*?)}}/ $trans->expr_offset(-$1); /me;
s/{{\^([^{]*?)}}/ $trans->expr_address($1); /me;
return $_;
@@ -343,15 +340,6 @@
sub rewrite_body {
my ( $self, $body, $trans, $preamble_only ) = @_;
- # use vtable macros
- $body =~ s!
- (?:
- {{\@\d+\}}
- |
- \b\w+(?:->\w+)*
- )->vtable->\s*(\w+)\(
- !VTABLE_$1(!sgx;
-
while (1) {
my $new_body = $self->_substitute( $body, $trans, !!$preamble_only );
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Ops2c/Utils.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -123,11 +123,15 @@
my $source = "src/ops/$base_ops_stub.c.temp";
if ( $flagref->{dynamic} ) {
+ $flagref->{dynamic} = 1;
+
$source =~ s!src/ops/!!;
$header = $base_ops_h;
$base =~ s!^.*[/\\]!!;
- $include = $base_ops_h;
- $flagref->{dynamic} = 1;
+
+ # the compiler invocation has -Ipath/to/dir, so only include by name.
+ use File::Basename qw(fileparse);
+ $include = (fileparse($base_ops_h))[0];
}
my $sym_export =
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/OpsRenumber.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -68,6 +68,33 @@
=cut
+
+my $OPSENUM_PREAMBLE =<<END;
+/* ex: set ro ft=c:
+ * !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
+ *
+ * This file is generated automatically from 'lib/Parrot/OpsRenumber.pm'.
+ *
+ * Any changes made here will be lost!
+ *
+ */
+#ifndef OPSENUM_H_GUARD
+#define OPSENUM_H_GUARD
+enum OPS_ENUM {
+END
+
+my $OPSENUM_POSTAMBLE =<<END;
+};
+#endif /* OPSENUM_H_GUARD */
+/* GENERATED BY lib/Parrot/OpsRenumber.pm */
+/*
+ * Local variables:
+ * c-file-style: "parrot"
+ * End:
+ * vim: expandtab shiftwidth=4:
+ */
+END
+
sub renum_op_map_file {
my $self = shift;
@@ -107,6 +134,9 @@
# above the DYNAMIC line. For the purpose of renumbering, we create
# an index $n.
+ my $opsenumfn = "include/parrot/opsenum.h";
+ open my $OPSENUM, '>', $opsenumfn or die "Can't open $opsenumfn, error $!";
+ print $OPSENUM $OPSENUM_PREAMBLE;
open $OP, '>', $file
or die "Can't open $file, error $!";
print $OP @lines;
@@ -140,9 +170,12 @@
elsif ( $seen{ $_->full_name } ) {
printf $OP "%-31s%4d\n", $_->full_name, ++$n;
+ printf $OPSENUM " enum_ops_%-31s= %4d,\n", $_->full_name, $n;
}
}
close $OP;
+ print $OPSENUM $OPSENUM_POSTAMBLE;
+ close $OPSENUM;
return 1;
}
Modified: branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm
==============================================================================
--- branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/lib/Parrot/Pmc2c/PCCMETHOD.pm Tue Mar 16 22:37:03 2010 (r44975)
@@ -436,7 +436,6 @@
} /* END PMETHOD BODY */
} /* END PARAMS SCOPE */
- no_return:
return;
END
$self->return_type('void');
Modified: branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir
==============================================================================
--- branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/runtime/parrot/library/Config/JSON.pir Tue Mar 16 22:37:03 2010 (r44975)
@@ -37,11 +37,9 @@
# Convert the text to an object and return it.
.local pmc json, code, config
- load_language 'data_json'
- json = compreg 'data_json'
- code = json.'compile'(text)
-
- .tailcall code()
+ load_bytecode 'compilers/json/JSON.pbc'
+ json = compreg 'JSON'
+ .tailcall json(text)
.end
=head2 WriteConfig(config, filename, ?:compact)
Modified: branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir
==============================================================================
--- branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/runtime/parrot/library/HTTP/Daemon.pir Tue Mar 16 22:37:03 2010 (r44975)
@@ -433,7 +433,7 @@
.end
# close all sockets
-# this needs enabling of SIGHUP in src/events.c but still doesn't
+# this needs enabling of SIGHUP but still doesn't
# help against FIN_WAIT2 / TIME_WAIT state of connections
.sub 'shutdown' :method
.local pmc active, sock
Modified: branches/pcc_hackathon_6Mar10/src/call/args.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/call/args.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/call/args.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1889,7 +1889,8 @@
intval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
{
ASSERT_ARGS(intval_constant_from_varargs)
- PARROT_ASSERT(!"Wrong call");
+ UNUSED(index);
+ PARROT_FAILURE("Wrong call");
return 0;
}
@@ -1897,7 +1898,8 @@
numval_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
{
ASSERT_ARGS(numval_constant_from_varargs)
- PARROT_ASSERT(!"Wrong call");
+ UNUSED(index);
+ PARROT_FAILURE("Wrong call");
return 0.0;
}
@@ -1906,7 +1908,8 @@
string_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
{
ASSERT_ARGS(string_constant_from_varargs)
- PARROT_ASSERT(!"Wrong call");
+ UNUSED(index);
+ PARROT_FAILURE("Wrong call");
return NULL;
}
@@ -1915,7 +1918,8 @@
pmc_constant_from_varargs(PARROT_INTERP, ARGIN(void *data), INTVAL index)
{
ASSERT_ARGS(pmc_constant_from_varargs)
- PARROT_ASSERT(!"Wrong call");
+ UNUSED(index);
+ PARROT_FAILURE("Wrong call");
return PMCNULL;
}
Modified: branches/pcc_hackathon_6Mar10/src/call/context.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/call/context.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/call/context.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -306,7 +306,7 @@
? NULL
: get_context_struct_fast(interp, pmcold);
- PARROT_ASSERT(!PMC_IS_NULL(pmcctx) || !"Can't initialise Null CallContext");
+ PARROT_ASSERT_MSG(!PMC_IS_NULL(pmcctx), "Can't initialise Null CallContext");
/*
* FIXME Invoking corotine shouldn't initialise context. So just
Modified: branches/pcc_hackathon_6Mar10/src/debug.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/debug.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/debug.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -111,46 +111,11 @@
static void list_breakpoints(ARGIN(PDB_t *pdb))
__attribute__nonnull__(1);
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * nextarg(ARGIN_NULLOK(const char *command));
-
static void no_such_register(PARROT_INTERP,
char register_type,
UINTVAL register_num)
__attribute__nonnull__(1);
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * parse_int(ARGIN(const char *str), ARGOUT(int *intP))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*intP);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char* parse_key(PARROT_INTERP,
- ARGIN(const char *str),
- ARGOUT(PMC **keyP))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*keyP);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char * parse_string(PARROT_INTERP,
- ARGIN(const char *str),
- ARGOUT(STRING **strP))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*strP);
-
-PARROT_CANNOT_RETURN_NULL
-static const char * skip_command(ARGIN(const char *str))
- __attribute__nonnull__(1);
-
PARROT_WARN_UNUSED_RESULT
PARROT_CANNOT_RETURN_NULL
static const char * skip_whitespace(ARGIN(const char *cmd))
@@ -178,22 +143,8 @@
PARROT_ASSERT_ARG(cmd))
#define ASSERT_ARGS_list_breakpoints __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(pdb))
-#define ASSERT_ARGS_nextarg __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
#define ASSERT_ARGS_no_such_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_parse_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(str) \
- , PARROT_ASSERT_ARG(intP))
-#define ASSERT_ARGS_parse_key __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(str) \
- , PARROT_ASSERT_ARG(keyP))
-#define ASSERT_ARGS_parse_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(str) \
- , PARROT_ASSERT_ARG(strP))
-#define ASSERT_ARGS_skip_command __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(str))
#define ASSERT_ARGS_skip_whitespace __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(cmd))
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
@@ -750,193 +701,6 @@
/*
-=item C<static const char * nextarg(const char *command)>
-
-Returns the position just past the current argument in the PASM instruction
-C<command>. This is not the same as C<skip_command()>, which is intended for
-debugger commands. This function is used for C<eval>.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-nextarg(ARGIN_NULLOK(const char *command))
-{
- ASSERT_ARGS(nextarg)
- /* as long as the character pointed to by command is not NULL,
- * and it is either alphanumeric, a comma or a closing bracket,
- * continue looking for the next argument.
- */
- if (command) {
- while (isalnum((unsigned char) *command) || *command == ',' || *command == ']')
- command++;
-
- /* eat as much space as possible */
- command = skip_whitespace(command);
- }
-
- return command;
-}
-
-/*
-
-=item C<static const char * skip_command(const char *str)>
-
-Returns the pointer past the current debugger command. (This is an
-alternative to the C<skip_command()> macro above.)
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static const char *
-skip_command(ARGIN(const char *str))
-{
- ASSERT_ARGS(skip_command)
- /* while str is not null and it contains a command (no spaces),
- * skip the character
- */
- while (*str && !isspace((unsigned char) *str))
- str++;
-
- /* eat all space after that */
- return skip_whitespace(str);
-}
-
-/*
-
-=item C<static const char * parse_int(const char *str, int *intP)>
-
-Parse an C<int> out of a string and return a pointer to just after the C<int>.
-The output parameter C<intP> contains the parsed value.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-parse_int(ARGIN(const char *str), ARGOUT(int *intP))
-{
- ASSERT_ARGS(parse_int)
- char *end;
-
- *intP = strtol(str, &end, 0);
-
- return end;
-}
-
-/*
-
-=item C<static const char * parse_string(PARROT_INTERP, const char *str, STRING
-**strP)>
-
-Parse a double-quoted string out of a C string and return a pointer to
-just after the string. The parsed string is converted to a Parrot
-C<STRING> and placed in the output parameter C<strP>.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char *
-parse_string(PARROT_INTERP, ARGIN(const char *str), ARGOUT(STRING **strP))
-{
- ASSERT_ARGS(parse_string)
- const char *string_start;
-
- /* if this is not a quoted string, there's nothing to parse */
- if (*str != '"')
- return NULL;
-
- /* skip the quote */
- str++;
-
- string_start = str;
-
- /* parse while there's no closing quote */
- while (*str && *str != '"') {
- /* skip any potentially escaped quotes */
- if (*str == '\\' && str[1])
- str += 2;
- else
- str++;
- }
-
- /* create the output STRING */
- *strP = string_make(interp, string_start, (UINTVAL)(str - string_start),
- NULL, 0);
-
- /* skip the closing quote */
- if (*str)
- str++;
-
- return str;
-}
-
-/*
-
-=item C<static const char* parse_key(PARROT_INTERP, const char *str, PMC
-**keyP)>
-
-Parse an aggregate key out of a string and return a pointer to just
-after the key. Currently only string and integer keys are allowed.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static const char*
-parse_key(PARROT_INTERP, ARGIN(const char *str), ARGOUT(PMC **keyP))
-{
- ASSERT_ARGS(parse_key)
- /* clear output parameter */
- *keyP = NULL;
-
- /* make sure it's a key */
- if (*str != '[')
- return NULL;
-
- /* Skip [ */
- str++;
-
- /* if this is a string key, create a Parrot STRING */
- if (*str == '"') {
- STRING *parrot_string;
- str = parse_string(interp, str, &parrot_string);
- *keyP = key_new_string(interp, parrot_string);
- }
- /* if this is a numeric key */
- else if (isdigit((unsigned char) *str)) {
- int value;
- str = parse_int(str, &value);
- *keyP = key_new_integer(interp, (INTVAL) value);
- }
- /* unsupported case; neither a string nor a numeric key */
- else {
- return NULL;
- }
-
- /* hm, but if this doesn't match, it's probably an error */
- /* XXX str can be NULL from parse_string() */
- if (*str != ']')
- return NULL;
-
- /* skip the closing brace on the key */
- return ++str;
-}
-
-/*
-
=item C<static void debugger_cmdline(PARROT_INTERP)>
Debugger command line.
@@ -1800,10 +1564,7 @@
/* Allocate the new break point */
newbreak = mem_gc_allocate_zeroed_typed(interp, PDB_breakpoint_t);
- if (command) {
- /*command = skip_command(command);*/
- }
- else {
+ if (! command) {
Parrot_ex_throw_from_c_args(interp, NULL, 1,
"NULL command passed to PDB_set_break");
}
@@ -3328,7 +3089,6 @@
{
ASSERT_ARGS(PDB_eval)
- PDB_t *pdb = interp->pdb;
Interp *warninterp = (interp->pdb && interp->pdb->debugger) ?
interp->pdb->debugger : interp;
TRACEDEB_MSG("PDB_eval");
Added: branches/pcc_hackathon_6Mar10/src/dynoplibs/Defines.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pcc_hackathon_6Mar10/src/dynoplibs/Defines.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -0,0 +1,19 @@
+DYNOPLIBS_TARGETS = \
+#IF(cg_flag): $(DYNEXT_DIR)/obscure_ops_cg$(LOAD_EXT) \
+#IF(cg_flag): $(DYNEXT_DIR)/obscure_ops_cgp$(LOAD_EXT) \
+ $(DYNEXT_DIR)/obscure_ops$(LOAD_EXT) \
+ $(DYNEXT_DIR)/obscure_ops_switch$(LOAD_EXT) \
+#IF(cg_flag): $(DYNEXT_DIR)/math_ops_cg$(LOAD_EXT) \
+#IF(cg_flag): $(DYNEXT_DIR)/math_ops_cgp$(LOAD_EXT) \
+ $(DYNEXT_DIR)/math_ops$(LOAD_EXT) \
+ $(DYNEXT_DIR)/math_ops_switch$(LOAD_EXT)
+
+DYNOPLIBS_CLEANUPS = \
+ src/dynoplibs/*.c \
+ src/dynoplibs/*.h \
+ src/dynoplibs/*.lib \
+ src/dynoplibs/*.pdb \
+ src/dynoplibs/*.ilk \
+ src/dynoplibs/*.def \
+ src/dynoplibs/*.manifest \
+ src/dynoplibs/*$(O) \
Modified: branches/pcc_hackathon_6Mar10/src/dynoplibs/README
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/dynoplibs/README Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/dynoplibs/README Tue Mar 16 22:37:03 2010 (r44975)
@@ -4,11 +4,6 @@
1) edit/create your foo.ops source (s. myops.ops)
-2) edit Makefile and append your ops target(s)
+2) edit the .mak files and append your ops targets and rules.
-$ export LD_LIBRARY_PATH=.:blib/lib
-$ make -s
-$ make shared
-$ make dynoplibs
-
-For tests and thus examples see t/dynoplibs/*.t.
+For tests and examples see t/dynoplibs/*.t.
Added: branches/pcc_hackathon_6Mar10/src/dynoplibs/Rules.in
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pcc_hackathon_6Mar10/src/dynoplibs/Rules.in Tue Mar 16 22:37:03 2010 (r44975)
@@ -0,0 +1,99 @@
+#
+# Each opslib must be compiled with several variants.
+#
+
+$(DYNEXT_DIR)/obscure_ops$(LOAD_EXT): src/dynoplibs/obscure_ops$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/obscure_ops$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops.h: src/dynoplibs/obscure_ops.c
+
+src/dynoplibs/obscure_ops.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/obscure_ops_switch$(LOAD_EXT): src/dynoplibs/obscure_ops_switch$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/obscure_ops_switch$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops_switch$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_switch.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops_switch.h: src/dynoplibs/obscure_ops_switch.c
+
+src/dynoplibs/obscure_ops_switch.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/obscure_ops_cg$(LOAD_EXT): src/dynoplibs/obscure_ops_cg$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/obscure_ops_cg$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops_cg$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_cg.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops_cg.h: src/dynoplibs/obscure_ops_cg.c
+
+src/dynoplibs/obscure_ops_cg.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/obscure_ops_cgp$(LOAD_EXT): src/dynoplibs/obscure_ops_cgp$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/obscure_ops_cgp$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/obscure_ops_cgp$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/obscure_ops_cgp.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/obscure_ops_cgp.h: src/dynoplibs/obscure_ops_cgp.c
+
+src/dynoplibs/obscure_ops_cgp.c: src/dynoplibs/obscure.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --dynamic src/dynoplibs/obscure.ops
+
+$(DYNEXT_DIR)/math_ops$(LOAD_EXT): src/dynoplibs/math_ops$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/math_ops$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl C --dynamic src/dynoplibs/math.ops
+
+src/dynoplibs/math_ops$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops.h: src/dynoplibs/math_ops.c
+
+$(DYNEXT_DIR)/math_ops_switch$(LOAD_EXT): src/dynoplibs/math_ops_switch$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/math_ops_switch$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops_switch$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_switch.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops_switch.h: src/dynoplibs/math_ops_switch.c
+
+src/dynoplibs/math_ops_switch.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CSwitch --dynamic src/dynoplibs/math.ops
+
+$(DYNEXT_DIR)/math_ops_cg$(LOAD_EXT): src/dynoplibs/math_ops_cg$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/math_ops_cg$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops_cg$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_cg.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops_cg.h: src/dynoplibs/math_ops_cg.c
+
+src/dynoplibs/math_ops_cg.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGoto --dynamic src/dynoplibs/math.ops
+
+$(DYNEXT_DIR)/math_ops_cgp$(LOAD_EXT): src/dynoplibs/math_ops_cgp$(O) $(LIBPARROT)
+ $(LD) @ld_out@$@ src/dynoplibs/math_ops_cgp$(O) $(LINKARGS)
+#IF(win32): if exist $@.manifest mt.exe -nologo -manifest $@.manifest -outputresource:$@;2
+#IF(cygwin or hpux): $(CHMOD) 0775 $@
+
+src/dynoplibs/math_ops_cgp$(O): include/pmc/pmc_parrotlibrary.h include/pmc/pmc_callcontext.h src/dynoplibs/math_ops_cgp.c $(PARROT_H_HEADERS)
+
+src/dynoplibs/math_ops_cgp.h: src/dynoplibs/math_ops_cgp.c
+
+src/dynoplibs/math_ops_cgp.c: src/dynoplibs/math.ops $(BUILD_TOOLS_DIR)/ops2c.pl
+ $(PERL) $(BUILD_TOOLS_DIR)/ops2c.pl CGP --dynamic src/dynoplibs/math.ops
Modified: branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/dynpmc/rational.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -193,34 +193,6 @@
/*
-=item * static void rat_power_int(PARROT_INTERP, PMC *self, int value)
-
-Calculates the power of a Rational-PMC to an exponent value in-place.
-
-=cut
-
-*/
-static void rat_power_int(PARROT_INTERP, PMC *self, int value) {
- #ifdef PARROT_HAS_GMP
- mpz_t num, den;
-
- mpq_get_num(num, RT(self));
- mpq_get_den(den, RT(self));
-
- mpz_pow_ui(num, num, (unsigned int) value);
- mpq_set_num(RT(self), num);
- mpz_clear(num);
-
- mpz_pow_ui(den, den, (unsigned int) value);
- mpq_set_den(RT(self), den);
- mpz_clear(den);
- #else
- RAISE_EXCEPTION
- #endif
-}
-
-/*
-
=back
=cut
Modified: branches/pcc_hackathon_6Mar10/src/embed.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/embed.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/embed.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -32,11 +32,6 @@
/* HEADERIZER BEGIN: static */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-static const char * op_name(PARROT_INTERP, int k)
- __attribute__nonnull__(1);
-
static void print_constant_table(PARROT_INTERP, ARGIN(PMC *output))
__attribute__nonnull__(1)
__attribute__nonnull__(2);
@@ -53,8 +48,6 @@
__attribute__nonnull__(1)
__attribute__nonnull__(3);
-#define ASSERT_ARGS_op_name __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_print_constant_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(output))
@@ -638,7 +631,7 @@
setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
{
ASSERT_ARGS(setup_argv)
- PMC *userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
+ PMC * const userargv = Parrot_pmc_new(interp, enum_class_ResizableStringArray);
INTVAL i;
if (Interp_debug_TEST(interp, PARROT_START_DEBUG_FLAG)) {
@@ -669,26 +662,6 @@
/*
-=item C<static const char * op_name(PARROT_INTERP, int k)>
-
-Returns the name of the opcode.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_OBSERVER
-static const char *
-op_name(PARROT_INTERP, int k)
-{
- ASSERT_ARGS(op_name)
- return interp->op_info_table[k].full_name;
-}
-
-
-/*
-
=item C<static void print_debug(PARROT_INTERP, int status, void *p)>
Prints GC info.
@@ -745,7 +718,7 @@
for (i = 0; i < ft->fixup_count; i++) {
if (ft->fixups[i]->type == enum_fixup_sub) {
const opcode_t ci = ft->fixups[i]->offset;
- PMC *sub_pmc = ct->constants[ci]->u.key;
+ PMC * const sub_pmc = ct->constants[ci]->u.key;
Parrot_Sub_attributes *sub;
PMC_get_sub(interp, sub_pmc, sub);
@@ -843,7 +816,6 @@
opcode_t *
Parrot_debug(PARROT_INTERP, NOTNULL(Parrot_Interp debugger), opcode_t * pc)
{
- const char *command;
PDB_t * const pdb = debugger->pdb;
pdb->cur_opcode = pc;
@@ -860,6 +832,8 @@
PDB_disassemble(interp, NULL);
while (!(pdb->state & PDB_EXIT)) {
+ const char *command;
+
PDB_get_command(debugger);
command = pdb->cur_command;
PDB_run_command(debugger, command);
@@ -919,12 +893,12 @@
/* FixedIntegerArrays used for signatures, handy to print */
case enum_class_FixedIntegerArray:
{
- INTVAL n = VTABLE_elements(interp, c->u.key);
+ const INTVAL n = VTABLE_elements(interp, c->u.key);
INTVAL i;
Parrot_io_fprintf(interp, output, "[");
for (i = 0; i < n; ++i) {
- INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
+ const INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
Parrot_io_fprintf(interp, output, "%d", val);
if (i < n - 1)
Parrot_io_fprintf(interp, output, ",");
@@ -1130,8 +1104,8 @@
* before compiling a string */
if (!interp->initial_pf) {
- PackFile * const pf = PackFile_new_dummy(interp,
- Parrot_str_new_constant(interp, "compile_string"));
+ /* SIDE EFFECT: PackFile_new_dummy sets interp->initial_pf */
+ PackFile_new_dummy(interp, Parrot_str_new_constant(interp, "compile_string"));
/* Assumption: there is no valid reason to fail to create it.
* If the assumption changes, replace the assertion with a
* runtime check */
@@ -1157,10 +1131,6 @@
F<include/parrot/embed.h> and F<docs/embed.pod>.
-=head1 HISTORY
-
-Initial version by Brent Dax on 2002.1.28.
-
=cut
*/
Deleted: branches/pcc_hackathon_6Mar10/src/events.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/events.c Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,1562 +0,0 @@
-/*
-Copyright (C) 2001-2008, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/events.c - Event handling stuff
-
-=head1 DESCRIPTION
-
-An event_thread handles async events for all interpreters. When events
-are due, they are placed in per interpreter task_queues, where they are
-handled then by the C<check_event*> opcodes.
-
-IO events and signals are caught in the io_thread, which again
-dispatches these to one or all interpreters.
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-#include "parrot/events.h"
-#include "events.str"
-
-typedef struct pending_io_events {
- parrot_event **events;
- size_t n;
- size_t alloced;
-} pending_io_events;
-
-/* HEADERIZER HFILE: include/parrot/events.h */
-/* HEADERIZER BEGIN: static */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t * do_event(PARROT_INTERP,
- ARGIN(parrot_event* event),
- ARGIN_NULLOK(opcode_t *next))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY* dup_entry(ARGIN(const QUEUE_ENTRY *entry))
- __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY* dup_entry_interval(
- ARGIN(QUEUE_ENTRY *entry),
- FLOATVAL now)
- __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static void* event_thread(ARGMOD(void *data))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*data);
-
-static void event_to_exception(PARROT_INTERP,
- ARGIN(const parrot_event* event))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-static void init_events_all(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-static void init_events_first(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
-static void* io_thread(SHIM(void *data));
-
-static void io_thread_ready_rd(ARGMOD(pending_io_events *ios), int ready_rd)
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*ios);
-
-static void Parrot_sigaction(int sig, ARGIN(void (*handler)(int)))
- __attribute__nonnull__(2);
-
-static void Parrot_unblock_signal(int sig);
-static int process_events(ARGMOD(QUEUE *event_q))
- __attribute__nonnull__(1)
- FUNC_MODIFIES(*event_q);
-
-static void schedule_signal_event(int signum);
-static void sig_handler(int signum);
-static void stop_io_thread(void);
-static void store_io_event(
- ARGMOD(pending_io_events *ios),
- ARGIN(parrot_event *ev))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*ios);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t * wait_for_wakeup(PARROT_INTERP,
- ARGIN_NULLOK(opcode_t *next))
- __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_do_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(event))
-#define ASSERT_ARGS_dup_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_dup_entry_interval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_event_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(data))
-#define ASSERT_ARGS_event_to_exception __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(event))
-#define ASSERT_ARGS_init_events_all __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_init_events_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_io_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_io_thread_ready_rd __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(ios))
-#define ASSERT_ARGS_Parrot_sigaction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(handler))
-#define ASSERT_ARGS_Parrot_unblock_signal __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_process_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(event_q))
-#define ASSERT_ARGS_schedule_signal_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_sig_handler __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_stop_io_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_store_io_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(ios) \
- , PARROT_ASSERT_ARG(ev))
-#define ASSERT_ARGS_wait_for_wakeup __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-/* HEADERIZER END: static */
-
-/*
- * event debugging stuff - turn it off before running tests
- */
-#define EVENT_DEBUG 0
-/*
- * not yet - need to sort out platform code and fix exceptions first
- * TODO get some config for POSIX compliant
- * TODO create API for extenders like ponie - events disabled for now
- */
-#if defined(linux) || defined(darwin)
-# define INSTALL_EVENT_HANDLER 0
-#else
-# define INSTALL_EVENT_HANDLER 0
-#endif
-
-#if EVENT_DEBUG
-# define edebug(x) fprintf (x)
-static const char *ev_names[] = {
- "EVENT_TYPE_NONE",
- "EVENT_TYPE_EVENT",
- "EVENT_TYPE_IO",
- "EVENT_TYPE_MSG",
- "EVENT_TYPE_TIMER",
- "EVENT_TYPE_CALL_BACK",
- "EVENT_TYPE_SLEEP",
- "EVENT_TYPE_TERMINATE",
- "EVENT_TYPE_EVENT_TERMINATE",
- "EVENT_TYPE_CLASS_CHANGED",
- "EVENT_TYPE_SIGNAL",
- "EVENT_TYPE_SUSPEND_FOR_GC"
-};
-static const char*
-et(const parrot_event* const e)
-{
- return ev_names[e->type];
-}
-
-#else
-# define edebug(x)
-#endif
-
-
-/* forward defs */
-
-/*
- * we have exactly one global event_queue
- * TODO task prio handling
- */
-static QUEUE *event_queue;
-#define TASK_PRIO 10
-
-/*
- * user accessible signals like SIGINT
- */
-#ifndef SIGINT
-# define SIGINT -4711
-#endif
-#ifndef SIGHUP
-# define SIGHUP -4712
-#endif
-
-/*
- * XXX need a configure test
- * should be sig_atomic_t
- */
-static int sig_int, sig_hup;
-
-/*
- * a pipe is used to send messages to the IO thread
- */
-static int pipe_fds[2];
-#define PIPE_READ_FD pipe_fds[0]
-#define PIPE_WRITE_FD pipe_fds[1]
-
-/*
- * a structure to communicate with the io_thread
- */
-typedef struct io_thread_msg {
- INTVAL command;
- parrot_event *ev;
-} io_thread_msg;
-
-
-/*
-
-=back
-
-=head2 Signal Handling
-
-=over 4
-
-=item C<static void sig_handler(int signum)>
-
-Handle signal C<signum>.
-
-TODO - Only C<SIGHUP> is handled at the moment for testing
-
-=cut
-
-*/
-
-static void
-sig_handler(int signum)
-{
- ASSERT_ARGS(sig_handler)
- switch (signum) {
- case SIGINT:
- sig_int = 1;
- break;
- case SIGHUP:
- sig_hup = 1;
- break;
- default:
- break;
- }
-}
-
-/*
-
-=item C<static void Parrot_sigaction(int sig, void (*handler(int)))>
-
-Signal handlers are common to all threads, signal block masks are
-specific, so we install one handler then block that signal and unblock
-it in the thread, that will receive that signal.
-
-=cut
-
-*/
-
-static void
-Parrot_sigaction(int sig, ARGIN(void (*handler)(int)))
-{
- ASSERT_ARGS(Parrot_sigaction)
-#ifdef PARROT_HAS_SIGACTION
- struct sigaction action;
- sigset_t block_mask;
-
- /* install handler */
- action.sa_handler = handler;
- sigemptyset(&action.sa_mask);
- action.sa_flags = 0;
- sigaction(sig, &action, NULL);
-
- /* block that signal */
- sigemptyset(&block_mask);
- sigaddset(&block_mask, sig);
- sigprocmask(SIG_BLOCK, &block_mask, NULL);
-#else
- UNUSED(sig);
- UNUSED(handler);
-#endif
-}
-
-
-/*
-
-=item C<static void Parrot_unblock_signal(int sig)>
-
-unblock a signal
-
-=cut
-
-*/
-
-static void
-Parrot_unblock_signal(int sig)
-{
- ASSERT_ARGS(Parrot_unblock_signal)
-#ifdef PARROT_HAS_SIGACTION
- sigset_t block_mask;
-
- sigemptyset(&block_mask);
- sigaddset(&block_mask, sig);
- sigprocmask(SIG_UNBLOCK, &block_mask, NULL);
-#else
- UNUSED(sig);
-#endif
-}
-
-
-/*
-
-=item C<void Parrot_init_signals(void)>
-
-Set up actions to handle signals.
-Only SIGHUP handled at the moment.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_init_signals(void)
-{
- ASSERT_ARGS(Parrot_init_signals)
- /*
- * SIGFPE is architecture specific - some signal an error,
- * some don't, so we have to use direct checks if we are dividing
- * by zero.
- */
- Parrot_sigaction(SIGHUP, sig_handler);
-}
-
-/*
-
-=back
-
-=head2 Initialization
-
-=over 4
-
-=item C<static void init_events_first(PARROT_INTERP)>
-
-Init event system for first interpreter.
-
-=cut
-
-*/
-
-static void
-init_events_first(PARROT_INTERP)
-{
- ASSERT_ARGS(init_events_first)
- Parrot_thread ev_handle;
-#ifndef WIN32
- Parrot_thread io_handle;
-#endif
-
- /*
- * be sure all init is done only once
- * we could use pthread_once for that too
- */
- if (event_queue)
- PANIC(interp, "event queue already exists - missing parent_interp?");
- /*
- * create event queue
- */
- event_queue = queue_init(TASK_PRIO);
- /*
- * we use a message pipe to send IO related stuff to the
- * IO thread
- */
-#ifndef WIN32
- /*
- * pipes on WIN32 don't support select
- * s. p6i: "event.c - of signals and pipes"
- */
- if (pipe(pipe_fds))
- Parrot_ex_throw_from_c_args(interp, NULL, 1, "Couldn't create message pipe");
-#endif
- /*
- * now set some sig handlers before any thread is started, so
- * that all threads inherit the signal block mask
- */
-#if INSTALL_EVENT_HANDLER
- Parrot_init_signals();
-#endif
- /*
- * we start an event_handler thread
- */
- THREAD_CREATE_DETACHED(ev_handle, event_thread, event_queue);
- /*
- * and a signal and IO handler thread
- */
-#ifndef WIN32
- THREAD_CREATE_DETACHED(io_handle, io_thread, event_queue);
-#endif
-}
-
-/*
-
-=item C<static void init_events_all(PARROT_INTERP)>
-
-Init events for all interpreters.
-
-=cut
-
-*/
-
-static void
-init_events_all(PARROT_INTERP)
-{
- ASSERT_ARGS(init_events_all)
- /*
- * create per interpreter task queue
- */
- interp->task_queue = queue_init(0);
-}
-
-/*
-
-=item C<void Parrot_init_events(PARROT_INTERP)>
-
-Initialize the event system.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_init_events(PARROT_INTERP)
-{
- ASSERT_ARGS(Parrot_init_events)
- if (!interp->parent_interpreter) {
- /* add the very first interpreter to the list of interps. */
- pt_add_to_interpreters(interp, NULL);
- init_events_first(interp);
- }
- init_events_all(interp);
-}
-
-/*
-
-=back
-
-=head2 Event Handler Functions
-
-=over 4
-
-=item C<void Parrot_schedule_event(PARROT_INTERP, parrot_event* ev)>
-
-Create queue entry and insert event into task queue.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_schedule_event(PARROT_INTERP, ARGMOD(parrot_event* ev))
-{
- ASSERT_ARGS(Parrot_schedule_event)
- QUEUE_ENTRY * const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
- entry->next = NULL;
- ev->interp = interp;
- entry->data = ev;
- switch (ev->type) {
- case EVENT_TYPE_TIMER:
- case EVENT_TYPE_SLEEP:
- entry->type = QUEUE_ENTRY_TYPE_TIMED_EVENT;
- insert_entry(event_queue, entry);
- break;
- case EVENT_TYPE_CALL_BACK:
- case EVENT_TYPE_SIGNAL:
- case EVENT_TYPE_IO:
- entry->type = QUEUE_ENTRY_TYPE_EVENT;
- unshift_entry(event_queue, entry);
- break;
- default:
- entry->type = QUEUE_ENTRY_TYPE_EVENT;
- push_entry(event_queue, entry);
- break;
- }
-}
-
-/*
-
-=item C<static void schedule_signal_event(int signum)>
-
-create and schedule a signal event
-
-=cut
-
-*/
-
-static void
-schedule_signal_event(int signum)
-{
- ASSERT_ARGS(schedule_signal_event)
- parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
- QUEUE_ENTRY * const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
- entry->next = NULL;
- entry->type = QUEUE_ENTRY_TYPE_EVENT;
- ev->type = EVENT_TYPE_SIGNAL;
- ev->u.signal = signum;
- entry->data = ev;
- /*
- * deliver to all interpreters
- */
- Parrot_schedule_broadcast_qentry(entry);
-}
-
-/*
-
-=item C<void Parrot_new_timer_event(PARROT_INTERP, PMC *timer, FLOATVAL diff,
-FLOATVAL interval, int repeat, PMC *sub, parrot_event_type_enum typ)>
-
-Create a new timer event due at C<diff> from now, repeated at C<interval>
-and running the passed C<sub>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_timer_event(PARROT_INTERP, ARGIN_NULLOK(PMC *timer), FLOATVAL diff,
- FLOATVAL interval, int repeat, ARGIN_NULLOK(PMC *sub), parrot_event_type_enum typ)
-{
- ASSERT_ARGS(Parrot_new_timer_event)
- parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-
- const FLOATVAL now = Parrot_floatval_time();
-
- ev->type = typ;
- ev->u.timer_event.timer = timer;
- ev->u.timer_event.abs_time = now + diff;
- ev->u.timer_event.interval = interval;
- ev->u.timer_event.repeat = repeat;
- ev->u.timer_event.sub = sub;
-
- if (repeat && FLOAT_IS_ZERO(interval))
- ev->u.timer_event.interval = diff;
-
- Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_new_cb_event(PARROT_INTERP, PMC *cbi, char *ext)>
-
-Prepare and schedule a callback event.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_cb_event(PARROT_INTERP, ARGIN(PMC *cbi), ARGIN(char *ext))
-{
- ASSERT_ARGS(Parrot_new_cb_event)
- parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
- QUEUE_ENTRY* const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
- entry->next = NULL;
- entry->data = ev;
- ev->interp = interp;
- ev->type = EVENT_TYPE_CALL_BACK;
- ev->u.call_back.cbi = cbi;
- ev->u.call_back.external_data = ext;
- Parrot_schedule_interp_qentry(interp, entry);
-}
-
-/*
-
-=item C<void Parrot_del_timer_event(PARROT_INTERP, const PMC *timer)>
-
-Deactivate the timer identified by C<timer>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_del_timer_event(PARROT_INTERP, ARGIN(const PMC *timer))
-{
- ASSERT_ARGS(Parrot_del_timer_event)
- QUEUE_ENTRY *entry;
-
- LOCK(event_queue->queue_mutex);
-
- for (entry = event_queue->head; entry; entry = entry->next) {
- if (entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-
- parrot_event * const event = (parrot_event *)entry->data;
-
- if (event->interp == interp
- && event->u.timer_event.timer == timer) {
- event->u.timer_event.interval = 0.0;
- event->type = EVENT_TYPE_NONE;
- break;
- }
- }
- }
- UNLOCK(event_queue->queue_mutex);
-}
-
-/*
-
-=item C<void Parrot_new_terminate_event(PARROT_INTERP)>
-
-Create a terminate event, interpreter will leave the run-loop when this
-event arrives.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_terminate_event(PARROT_INTERP)
-{
- ASSERT_ARGS(Parrot_new_terminate_event)
- parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
- ev->type = EVENT_TYPE_TERMINATE;
- Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_new_suspend_for_gc_event(PARROT_INTERP)>
-
-Create a suspend-for-GC event, interpreter will wait on a condition
-variable for GC to finish when the event arrives.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_suspend_for_gc_event(PARROT_INTERP)
-{
- ASSERT_ARGS(Parrot_new_suspend_for_gc_event)
- QUEUE_ENTRY *qe;
- parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
- ev->type = EVENT_TYPE_SUSPEND_FOR_GC;
- qe = mem_internal_allocate_typed(QUEUE_ENTRY);
- qe->next = NULL;
- qe->data = ev;
- qe->type = QUEUE_ENTRY_TYPE_EVENT;
- /* we don't use schedule_event because we must modify its
- * task queue immediately
- */
- Parrot_schedule_interp_qentry(interp, qe);
-}
-
-/*
-
-=item C<void Parrot_kill_event_loop(PARROT_INTERP)>
-
-Schedule event-loop terminate event. This shuts down the event thread.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_kill_event_loop(PARROT_INTERP)
-{
- ASSERT_ARGS(Parrot_kill_event_loop)
- parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
- ev->type = EVENT_TYPE_EVENT_TERMINATE;
- Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_schedule_interp_qentry(PARROT_INTERP, struct QUEUE_ENTRY
-*entry)>
-
-Put a queue entry into the interpreters task queue and enable event
-checking for the interpreter.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_schedule_interp_qentry(PARROT_INTERP, ARGIN(struct QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(Parrot_schedule_interp_qentry)
- parrot_event * const event = (parrot_event *)entry->data;
- /*
- * sleep checks events when it awakes
- */
- edebug((stderr, "got entry - schedule_inter_qentry %s\n", et(event)));
- if (event->type != EVENT_TYPE_SLEEP)
- enable_event_checking(interp);
- /*
- * do push_entry last - this signales the queue condition so the
- * interpreter might starting process that event immediately
- *
- * we should better use a priority for placing the event
- * in front or at the end of the queue
- */
- switch (event->type) {
- case EVENT_TYPE_CALL_BACK:
- case EVENT_TYPE_SIGNAL:
- unshift_entry(interp->task_queue, entry);
- break;
- default:
- push_entry(interp->task_queue, entry);
- break;
- }
-}
-
-/*
-
-=item C<void Parrot_schedule_broadcast_qentry(struct QUEUE_ENTRY *entry)>
-
-Broadcast an event.
-
-=cut
-
-*/
-
-void
-Parrot_schedule_broadcast_qentry(ARGIN(struct QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(Parrot_schedule_broadcast_qentry)
- parrot_event * const event = (parrot_event *)entry->data;
-
- switch (event->type) {
- case EVENT_TYPE_SIGNAL:
- edebug((stderr, "broadcast signal\n"));
- /*
- * we don't have special signal handlers in usercode yet
- * e.g.:
- * install handler like exception handler *and*
- * set a interpreter flag, that a handler exists
- * we then could examine that flag (after LOCKing it)
- * and dispatch the exception to all interpreters that
- * handle it
- * Finally, we send the first (main) interpreter that signal
- *
- * For now just send to all.
- *
- */
- switch (event->u.signal) {
- case SIGHUP:
- case SIGINT:
- {
- if (n_interpreters) {
- size_t i;
- LOCK(interpreter_array_mutex);
- for (i = 1; i < n_interpreters; ++i) {
- Interp *interp;
- edebug((stderr, "deliver SIGINT to %d\n", i));
- interp = interpreter_array[i];
- if (interp)
- Parrot_schedule_interp_qentry(interp,
- dup_entry(entry));
- }
- UNLOCK(interpreter_array_mutex);
- }
- Parrot_schedule_interp_qentry(interpreter_array[0], entry);
- edebug((stderr, "deliver SIGINT to 0\n"));
- }
- break;
- default:
- mem_internal_free(entry);
- mem_internal_free(event);
- }
- break;
- default:
- mem_internal_free(entry);
- mem_internal_free(event);
- exit_fatal(1, "Unknown event to broadcast");
- break;
- }
-}
-
-/*
-
-=back
-
-=head2 IO Thread Handling
-
-=over 4
-
-=cut
-
-*/
-
-#ifndef WIN32
-
-/*
-
-=item C<static void store_io_event(pending_io_events *ios, parrot_event *ev)>
-
-Stores an event in the event stack. Allocates memory if necessary.
-
-=cut
-
-*/
-
-static void
-store_io_event(ARGMOD(pending_io_events *ios), ARGIN(parrot_event *ev))
-{
- ASSERT_ARGS(store_io_event)
- if (!ios->alloced) {
- ios->alloced = 16;
- ios->events = mem_internal_allocate_n_zeroed_typed(ios->alloced, parrot_event *);
- }
- else if (ios->n >= ios->alloced) {
- ios->events = mem_internal_realloc_n_zeroed_typed(ios->events,
- ios->alloced * 2, ios->alloced, parrot_event *);
- ios->alloced *= 2;
- }
- ios->events[ios->n++] = ev;
-}
-
-/*
-
-=item C<static void io_thread_ready_rd(pending_io_events *ios, int ready_rd)>
-
-Takes a list of pending i/o events and a file descriptor.
-If the fd is ready to read, the event is removed from the
-"pending" list and moved to the "scheduled" task queue.
-
-=cut
-
-*/
-
-static void
-io_thread_ready_rd(ARGMOD(pending_io_events *ios), int ready_rd)
-{
- ASSERT_ARGS(io_thread_ready_rd)
- size_t i;
-
- for (i = 0; i < ios->n; ++i) {
- parrot_event * const ev = ios->events[i];
- PMC * const pio = ev->u.io_event.pio;
- const int fd = Parrot_io_getfd(ev->interp, pio);
-
- if (fd == ready_rd) {
- /* remove from event list */
- --ios->n;
-
- for (; i < ios->n; ++i)
- ios->events[i] = ios->events[i+1];
-
- Parrot_schedule_event(ev->interp, ev);
- break;
- }
- }
-}
-
-/*
-
-=item C<static void* io_thread(void *data)>
-
-The IO thread uses select/poll to handle IO events and signals.
-
-It waits on input from the message pipe to insert file descriptors in
-the wait sets.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static void*
-io_thread(SHIM(void *data))
-{
- ASSERT_ARGS(io_thread)
- fd_set act_rfds, act_wfds;
- int n_highest, i;
- int running = 1;
- pending_io_events ios;
-
- ios.n = 0;
- ios.alloced = 0;
- ios.events = 0;
- /* remember pending io events */
-
- FD_ZERO(&act_rfds);
- FD_ZERO(&act_wfds);
- /*
- * Watch the reader end of the pipe for messages
- */
- FD_SET(PIPE_READ_FD, &act_rfds);
- n_highest = PIPE_READ_FD + 1;
- /*
- * all signals that we shall handle here have to be unblocked
- * in this and only in this thread
- */
- Parrot_unblock_signal(SIGHUP);
- while (running) {
- fd_set rfds = act_rfds;
- fd_set wfds = act_wfds;
- const int retval = select(n_highest, &rfds, &wfds, NULL, NULL);
-
- switch (retval) {
- case -1:
- if (errno == EINTR) {
- edebug((stderr, "select EINTR\n"));
- if (sig_int) {
- edebug((stderr, "int arrived\n"));
- sig_int = 0;
- /*
- * signal the event thread
- */
- schedule_signal_event(SIGINT);
- }
- if (sig_hup) {
- edebug((stderr, "int arrived\n"));
- sig_hup = 0;
- /*
- * signal the event thread
- */
- schedule_signal_event(SIGHUP);
- }
-
- }
- break;
- case 0: /* timeout - can't happen */
- break;
- default:
- edebug((stderr, "IO ready\n"));
- for (i = 0; i < n_highest; ++i) {
- if (FD_ISSET(i, &rfds)) {
- if (i == PIPE_READ_FD) {
- io_thread_msg buf;
- /*
- * a command arrived
- */
- edebug((stderr, "msg arrived\n"));
- if (read(PIPE_READ_FD, &buf, sizeof (buf)) != sizeof (buf))
- exit_fatal(1,
- "read error from msg pipe");
- switch (buf.command) {
- case IO_THR_MSG_TERMINATE:
- running = 0;
- break;
- case IO_THR_MSG_ADD_SELECT_RD:
- {
- PMC * const pio = buf.ev->u.io_event.pio;
- const int fd = Parrot_io_getfd(buf.ev->interp, pio);
- if (FD_ISSET(fd, &act_rfds)) {
- mem_internal_free(buf.ev);
- break;
- }
- FD_SET(fd, &act_rfds);
- if (fd >= n_highest)
- n_highest = fd + 1;
- store_io_event(&ios, buf.ev);
- }
- break;
- default:
- /* TODO */
- exit_fatal(1, "unhandled msg in pipe");
- break;
- }
-
- }
- else {
- /*
- * one of the io_event fds is ready
- * remove from active set, as we don't
- * want to fire again during io_handler
- * invocation
- */
- FD_CLR(i, &act_rfds);
- io_thread_ready_rd(&ios, i);
- }
- }
- }
- /* TODO check fds */
- break;
- }
- }
- edebug((stderr, "IO thread terminated\n"));
- close(PIPE_READ_FD);
- close(PIPE_WRITE_FD);
- return NULL;
-}
-#endif
-
-/*
-
-=item C<static void stop_io_thread(void)>
-
-Tell the IO thread to stop.
-
-=cut
-
-*/
-
-static void
-stop_io_thread(void)
-{
- ASSERT_ARGS(stop_io_thread)
-#ifndef WIN32
- io_thread_msg buf;
- /*
- * tell IO thread to stop
- */
- memset(&buf, 0, sizeof (buf));
- buf.command = IO_THR_MSG_TERMINATE;
- if (write(PIPE_WRITE_FD, &buf, sizeof (buf)) != sizeof (buf))
- exit_fatal(1, "msg pipe write failed");
-#endif
-}
-
-/*
-
-=item C<void Parrot_event_add_io_event(PARROT_INTERP, PMC *pio, PMC *sub, PMC
-*data, INTVAL which)>
-
-Create new i/o event.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_event_add_io_event(PARROT_INTERP,
- ARGIN_NULLOK(PMC *pio), ARGIN_NULLOK(PMC *sub), ARGIN_NULLOK(PMC *data), INTVAL which)
-{
- ASSERT_ARGS(Parrot_event_add_io_event)
- io_thread_msg buf;
- parrot_event * const event = mem_internal_allocate_typed(parrot_event);
-
- event->type = EVENT_TYPE_IO;
- event->interp = interp;
- /*
- * TODO gc_register these PMCs as long as the event system
- * owns these 3
- * unregister, when event is passed to interp again
- */
- event->u.io_event.pio = pio;
- event->u.io_event.handler = sub;
- event->u.io_event.user_data = data;
-
- buf.command = which;
- buf.ev = event;
- /* XXX Why isn't this entire function inside an ifndef WIN32? */
-#ifndef WIN32
- if (write(PIPE_WRITE_FD, &buf, sizeof (buf)) != sizeof (buf))
- Parrot_ex_throw_from_c_args(interp, NULL, 1, "msg pipe write failed");
-#endif
-}
-
-
-/*
-
-=back
-
-=head2 Event Handler Thread Functions
-
-=over 4
-
-=item C<static QUEUE_ENTRY* dup_entry(const QUEUE_ENTRY *entry)>
-
-Duplicate queue entry.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY*
-dup_entry(ARGIN(const QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(dup_entry)
- QUEUE_ENTRY * const new_entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
- new_entry->next = NULL;
- new_entry->type = entry->type;
- new_entry->data = mem_internal_allocate_typed(parrot_event);
-
- mem_sys_memcopy(new_entry->data, entry->data, sizeof (parrot_event));
- return new_entry;
-}
-
-/*
-
-=item C<static QUEUE_ENTRY* dup_entry_interval(QUEUE_ENTRY *entry, FLOATVAL
-now)>
-
-Duplicate timed entry and add interval to C<abs_time>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY*
-dup_entry_interval(ARGIN(QUEUE_ENTRY *entry), FLOATVAL now)
-{
- ASSERT_ARGS(dup_entry_interval)
- QUEUE_ENTRY * const new_entry = dup_entry(entry);
- parrot_event * const event = (parrot_event *)new_entry->data;
-
- event->u.timer_event.abs_time = now + event->u.timer_event.interval;
-
- return new_entry;
-}
-
-/*
-
-=item C<static int process_events(QUEUE *event_q)>
-
-Do something, when an event arrived caller has locked the mutex returns
-0 if event thread terminates.
-
-=cut
-
-*/
-
-static int
-process_events(ARGMOD(QUEUE *event_q))
-{
- ASSERT_ARGS(process_events)
- FLOATVAL now;
- QUEUE_ENTRY *entry;
-
- while ((entry = peek_entry(event_q)) != NULL) {
- /*
- * one or more entries arrived - we hold the mutex again
- * so we have to use the nonsyc_pop_entry to pop off event entries
- */
- parrot_event *event = NULL;
-
- switch (entry->type) {
- case QUEUE_ENTRY_TYPE_EVENT:
- entry = nosync_pop_entry(event_q);
- event = (parrot_event *)entry->data;
- break;
-
- case QUEUE_ENTRY_TYPE_TIMED_EVENT:
- event = (parrot_event *)entry->data;
- now = Parrot_floatval_time();
-
- /*
- * if the timer_event isn't due yet, ignore the event
- * (we were signalled on insert of the event)
- * wait until we get at it again when time has elapsed
- */
- if (now < event->u.timer_event.abs_time)
- return 1;
- entry = nosync_pop_entry(event_q);
-
- /* if event is repeated dup and reinsert it */
-
- if (event->u.timer_event.interval) {
- if (event->u.timer_event.repeat) {
- if (event->u.timer_event.repeat != -1)
- event->u.timer_event.repeat--;
- nosync_insert_entry(event_q,
- dup_entry_interval(entry, now));
- }
- }
- break;
- default:
- exit_fatal(1, "Unknown queue entry");
- }
- PARROT_ASSERT(event);
- if (event->type == EVENT_TYPE_NONE) {
- mem_internal_free(entry);
- mem_internal_free(event);
- continue;
- }
- else if (event->type == EVENT_TYPE_EVENT_TERMINATE) {
- mem_internal_free(entry);
- mem_internal_free(event);
-
- return 0;
- }
- /*
- * now insert entry in interpreter task queue
- */
- if (event->interp) {
- Parrot_schedule_interp_qentry(event->interp, entry);
- }
- else {
- Parrot_schedule_broadcast_qentry(entry);
- }
- } /* while events */
- return 1;
-}
-
-/*
-
-=item C<static void* event_thread(void *data)>
-
-The event thread is started by the first interpreter. It handles all
-events for all interpreters.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static void*
-event_thread(ARGMOD(void *data))
-{
- ASSERT_ARGS(event_thread)
- QUEUE * const event_q = (QUEUE *) data;
- int running = 1;
-
- LOCK(event_q->queue_mutex);
- /*
- * we might already have an event in the queue
- */
- if (peek_entry(event_q))
- running = process_events(event_q);
- while (running) {
- QUEUE_ENTRY * const entry = peek_entry(event_q);
-
- if (!entry) {
- /* wait infinite until entry arrives */
- queue_wait(event_q);
- }
- else if (entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
- /* do a_timedwait for entry */
- struct timespec abs_time;
- parrot_event * const event = (parrot_event*)entry->data;
- const FLOATVAL when = event->u.timer_event.abs_time;
-
- abs_time.tv_sec = (time_t) when;
- abs_time.tv_nsec = (long)((when - abs_time.tv_sec)*1000.0f)
- *1000L*1000L;
- queue_timedwait(event_q, &abs_time);
- }
- else {
- /* we shouldn't get here probably
- */
- exit_fatal(1, "Spurious event");
-
- }
- /*
- * one or more entries arrived - we hold the mutex again
- * so we have to use the nonsync_pop_entry to pop off event entries
- */
- running = process_events(event_q);
- } /* event loop */
- /*
- * the main interpreter is dying
- * TODO empty the queue
- */
- UNLOCK(event_q->queue_mutex);
- queue_destroy(event_q);
- stop_io_thread();
- edebug((stderr, "event thread stopped\n"));
- return NULL;
-}
-
-/*
-
-=back
-
-=head2 Sleep Handling
-
-=over 4
-
-=item C<static opcode_t * wait_for_wakeup(PARROT_INTERP, opcode_t *next)>
-
-Sleep on the event queue condition. If an event arrives, the event
-is processed. Terminate the loop if sleeping is finished.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-wait_for_wakeup(PARROT_INTERP, ARGIN_NULLOK(opcode_t *next))
-{
- ASSERT_ARGS(wait_for_wakeup)
- QUEUE * const tq = interp->task_queue;
-
- interp->sleeping = 1;
-
- /*
- * event handler like callbacks or timers are run as normal code
- * so inside such an event handler function, another event might get
- * handled, which is good (higher priority events can interrupt
- * other event handler). OTOH we must ensure that all state changes
- * are done in do_event and we should probably suspend nested
- * event handlers sometimes
- *
- * FIXME: the same is true for the *next param:
- * get rid of that, instead mangle the resume flags
- * and offset to stop the runloop
- *
- */
-
- while (interp->sleeping) {
- QUEUE_ENTRY * const entry = wait_for_entry(tq);
- parrot_event * const event = (parrot_event*)entry->data;
-
- mem_internal_free(entry);
- edebug((stderr, "got ev %s head : %p\n", et(event), tq->head));
- next = do_event(interp, event, next);
- }
-
- edebug((stderr, "woke up\n"));
- return next;
-}
-
-/*
-
-=item C<opcode_t * Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, opcode_t
-*next)>
-
-Go to sleep. This is called from the C<sleep> opcode.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, ARGIN_NULLOK(opcode_t *next))
-{
- ASSERT_ARGS(Parrot_sleep_on_event)
-#ifdef PARROT_HAS_THREADS
-
- if (interp->sleeping)
- fprintf(stderr, "nested sleep might not work\n");
- /*
- * place the opcode_t* next arg in the event data, so that
- * we can identify this event in wakeup
- */
- Parrot_new_timer_event(interp, (PMC *) next, t, 0.0, 0,
- NULL, EVENT_TYPE_SLEEP);
- next = wait_for_wakeup(interp, next);
-#else
- /*
- * TODO check for nanosleep or such
- */
- Parrot_sleep((UINTVAL) ceil(t));
-#endif
- return next;
-}
-
-/*
-
-=back
-
-=head2 Event Handling for Run-Loops
-
-=over 4
-
-=item C<opcode_t * Parrot_do_check_events(PARROT_INTERP, opcode_t *next)>
-
-Explicitly C<sync> called by the check_event opcode from run loops.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_do_check_events(PARROT_INTERP, ARGIN_NULLOK(opcode_t *next))
-{
- ASSERT_ARGS(Parrot_do_check_events)
- if (peek_entry(interp->task_queue))
- return Parrot_do_handle_events(interp, 0, next);
-
- return next;
-}
-
-/*
-
-=item C<static void event_to_exception(PARROT_INTERP, const parrot_event*
-event)>
-
-Convert event to exception and throw it.
-
-=cut
-
-*/
-
-static void
-event_to_exception(PARROT_INTERP, ARGIN(const parrot_event* event))
-{
- ASSERT_ARGS(event_to_exception)
- const int exit_code = -event->u.signal;
-
- switch (event->u.signal) {
- case SIGINT:
- case SIGHUP:
- /*
- * SIGINT is silent, if no exception handler is
- * installed: set severity to EXCEPT_exit
- */
- {
- STRING * const message = CONST_STRING(interp, "Caught signal.");
- PMC *exception = Parrot_ex_build_exception(interp,
- EXCEPT_exit, exit_code, message);
-
- Parrot_ex_throw_from_c(interp, exception);
- }
- break;
- default:
- Parrot_ex_throw_from_c_args(interp, NULL, exit_code,
- "Caught signal.");
- break;
- }
-}
-
-/*
-
-=item C<static opcode_t * do_event(PARROT_INTERP, parrot_event* event, opcode_t
-*next)>
-
-Run user code or such. The C<event> argument is freed after execution.
-
-TODO: Instrument with splint args so splint knows event gets released.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-do_event(PARROT_INTERP, ARGIN(parrot_event* event), ARGIN_NULLOK(opcode_t *next))
-{
- ASSERT_ARGS(do_event)
- edebug((stderr, "do_event %s\n", et(event)));
- switch (event->type) {
- case EVENT_TYPE_TERMINATE:
- next = NULL; /* this will terminate the run loop */
- break;
- case EVENT_TYPE_SIGNAL:
- interp->sleeping = 0;
- /* generate exception */
- event_to_exception(interp, event);
- /* not reached - will longjmp */
- break;
- case EVENT_TYPE_TIMER:
- /* run ops, save registers */
- Parrot_pcc_invoke_sub_from_c_args(interp,
- event->u.timer_event.sub, "->");
- break;
- case EVENT_TYPE_CALL_BACK:
- edebug((stderr, "starting user cb\n"));
- Parrot_run_callback(interp, event->u.call_back.cbi,
- event->u.call_back.external_data);
- break;
- case EVENT_TYPE_IO:
- edebug((stderr, "starting io handler\n"));
- Parrot_pcc_invoke_sub_from_c_args(interp,
- event->u.io_event.handler,
- "PP->",
- event->u.io_event.pio,
- event->u.io_event.user_data);
- break;
- case EVENT_TYPE_SLEEP:
- interp->sleeping = 0;
- break;
- case EVENT_TYPE_SUSPEND_FOR_GC:
- edebug((stderr, "suspend for gc\n"));
- pt_suspend_self_for_gc(interp);
- break;
- default:
- fprintf(stderr, "Unhandled event type %d\n", (int)event->type);
- break;
- }
- mem_internal_free(event);
- return next;
-}
-
-/*
-
-=item C<opcode_t * Parrot_do_handle_events(PARROT_INTERP, int restore, opcode_t
-*next)>
-
-Called by the C<check_event__> opcode from run loops or from above. When
-called from the C<check_events__> opcode, we have to restore the
-C<op_func_table>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_do_handle_events(PARROT_INTERP, int restore, ARGIN_NULLOK(opcode_t *next))
-{
- ASSERT_ARGS(Parrot_do_handle_events)
- QUEUE * const tq = interp->task_queue;
-
- if (restore)
- disable_event_checking(interp);
-
- if (!peek_entry(tq))
- return next;
-
- while (peek_entry(tq)) {
- QUEUE_ENTRY * const entry = pop_entry(tq);
- parrot_event * const event = (parrot_event*)entry->data;
-
- mem_internal_free(entry);
- next = do_event(interp, event, next);
- }
-
- return next;
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/events.h> and F<docs/dev/events.pod>.
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- * c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
Modified: branches/pcc_hackathon_6Mar10/src/extend.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/extend.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/extend.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1366,7 +1366,6 @@
(char *) NULL, 0);
Parrot_PMC sub = Parrot_pmc_new(interp, enum_class_NCI);
VTABLE_set_pointer_keyed_str(interp, sub, sig, F2DPTR(func));
- PObj_get_FLAGS(sub) |= PObj_private1_FLAG;
return sub;
}
Modified: branches/pcc_hackathon_6Mar10/src/frame_builder.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/frame_builder.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/frame_builder.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -39,7 +39,7 @@
*/
void
-Parrot_jit_free_buffer(PARROT_INTERP, void *ptr, void *priv)
+Parrot_jit_free_buffer(SHIM_INTERP, void *ptr, void *priv)
{
const struct jit_buffer_private_data * const jit = (struct jit_buffer_private_data*)priv;
mem_free_executable(ptr, jit->size);
@@ -312,6 +312,8 @@
int temp_calls_offset = args_offset - 16;
int total_stack_needed = -temp_calls_offset;
+ UNUSED(pmc_nci);
+
/*
* ESP
* 0-15, 16 bytes for utility calls
Modified: branches/pcc_hackathon_6Mar10/src/gc/api.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/api.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/api.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -11,7 +11,7 @@
This file implements the external-facing API for Parrot's garbage collector.
The collector itself is composed of various interchangable cores that each
may operate very differently internally. The functions in this file can be used
-throughtout Parrot without having to be concerned about the internal operations
+throughout Parrot without having to be concerned about the internal operations
of the GC. This is documented in PDD 9 with supplementary notes in
F<docs/memory_internals.pod>.
@@ -99,29 +99,6 @@
/* HEADERIZER BEGIN: static */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-static void fix_pmc_syncs(
- ARGMOD(Interp *dest_interp),
- ARGIN(Fixed_Size_Pool *pool))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*dest_interp);
-
-static void Parrot_gc_merge_buffer_pools(PARROT_INTERP,
- ARGMOD(Fixed_Size_Pool *dest),
- ARGMOD(Fixed_Size_Pool *source))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*dest)
- FUNC_MODIFIES(*source);
-
-#define ASSERT_ARGS_fix_pmc_syncs __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(dest_interp) \
- , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_Parrot_gc_merge_buffer_pools __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(dest) \
- , PARROT_ASSERT_ARG(source))
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: static */
Modified: branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/gc_inf.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -37,22 +37,6 @@
/* HEADERIZER BEGIN: static */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-static void gc_inf_add_free_object(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool),
- ARGIN(void *to_add))
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- __attribute__nonnull__(4)
- FUNC_MODIFIES(*pool);
-
-static void gc_inf_alloc_objects(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool))
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*pool);
-
static void gc_inf_allocate_buffer_storage(PARROT_INTERP,
ARGMOD(Buffer *buffer),
size_t size)
@@ -61,7 +45,8 @@
FUNC_MODIFIES(*buffer);
PARROT_CAN_RETURN_NULL
-static Buffer* gc_inf_allocate_bufferlike_header(PARROT_INTERP, size_t size)
+static Buffer* gc_inf_allocate_bufferlike_header(PARROT_INTERP,
+ SHIM(size_t size))
__attribute__nonnull__(1);
PARROT_CAN_RETURN_NULL
@@ -75,11 +60,12 @@
FUNC_MODIFIES(*pmc);
PARROT_CAN_RETURN_NULL
-static PMC* gc_inf_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
+static PMC* gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
__attribute__nonnull__(1);
PARROT_CAN_RETURN_NULL
-static STRING* gc_inf_allocate_string_header(PARROT_INTERP, UINTVAL flags)
+static STRING* gc_inf_allocate_string_header(PARROT_INTERP,
+ SHIM(UINTVAL flags))
__attribute__nonnull__(1);
static void gc_inf_allocate_string_storage(PARROT_INTERP,
@@ -94,11 +80,11 @@
static void gc_inf_free_bufferlike_header(PARROT_INTERP,
ARGIN_NULLOK(Buffer *b),
- size_t size)
+ SHIM(size_t size))
__attribute__nonnull__(1);
static void gc_inf_free_fixed_size_storage(PARROT_INTERP,
- size_t size,
+ SHIM(size_t size),
ARGMOD(void *data))
__attribute__nonnull__(1)
__attribute__nonnull__(3)
@@ -116,29 +102,10 @@
ARGIN_NULLOK(STRING *s))
__attribute__nonnull__(1);
-PARROT_CANNOT_RETURN_NULL
-static void * gc_inf_get_free_object(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool))
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*pool);
-
-static size_t gc_inf_get_gc_info(PARROT_INTERP, Interpinfo_enum what)
+static size_t gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
__attribute__nonnull__(1);
static void gc_inf_mark_and_sweep(SHIM_INTERP, UINTVAL flags);
-static void gc_inf_more_traceable_objects(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool))
- __attribute__nonnull__(2)
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*pool);
-
-static void gc_inf_pool_init(SHIM_INTERP, ARGMOD(Fixed_Size_Pool *pool))
- __attribute__nonnull__(2)
- FUNC_MODIFIES(*pool);
-
static void gc_inf_reallocate_buffer_storage(PARROT_INTERP,
ARGMOD(Buffer *buffer),
size_t size)
@@ -153,13 +120,6 @@
__attribute__nonnull__(2)
FUNC_MODIFIES(*str);
-#define ASSERT_ARGS_gc_inf_add_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(mem_pools) \
- , PARROT_ASSERT_ARG(pool) \
- , PARROT_ASSERT_ARG(to_add))
-#define ASSERT_ARGS_gc_inf_alloc_objects __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(mem_pools) \
- , PARROT_ASSERT_ARG(pool))
#define ASSERT_ARGS_gc_inf_allocate_buffer_storage \
__attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
@@ -197,17 +157,9 @@
PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_gc_inf_free_string_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_gc_inf_get_free_object __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(mem_pools) \
- , PARROT_ASSERT_ARG(pool))
#define ASSERT_ARGS_gc_inf_get_gc_info __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_gc_inf_mark_and_sweep __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_gc_inf_more_traceable_objects __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(mem_pools) \
- , PARROT_ASSERT_ARG(pool))
-#define ASSERT_ARGS_gc_inf_pool_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(pool))
#define ASSERT_ARGS_gc_inf_reallocate_buffer_storage \
__attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
@@ -251,144 +203,6 @@
/*
-=item C<static void gc_inf_add_free_object(PARROT_INTERP, Memory_Pools
-*mem_pools, Fixed_Size_Pool *pool, void *to_add)>
-
-Manually frees a chunk of memory. Normally this would return the memory
-to the free list of the pool, but in this case we just return it to the
-OS.
-
-This function is called from places like C<Parrot_gc_free_pmc_header> and
-related manual freeing functions. Some cores will also use it internally to
-add items to the freelist from a freshly allocated arena.
-
-=cut
-
-*/
-
-static void
-gc_inf_add_free_object(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool),
- ARGIN(void *to_add))
-{
- ASSERT_ARGS(gc_inf_add_free_object)
- if (to_add)
- free(to_add);
-}
-
-/*
-
-=item C<static void * gc_inf_get_free_object(PARROT_INTERP, Memory_Pools
-*mem_pools, Fixed_Size_Pool *pool)>
-
-Gets a new object from the pool. Each pool specifies an object size in
-C<pool->object_size> so we can use that number to make the allocation. For
-GCs that manage their own memory through the use of arenas or similar
-structures, we can use this basic algorithm here:
-
- 1) Check if we have any items on the free list and allocate one from there
- if so.
- 2) Do a GC run to try and free up new items, and allocate a newly freed
- item if one becomes available
- 3) Allocate a new arena from the OS and allocate a new item from there.
-
-This function is called from GC API functions like
-C<Parrot_Gc_get_new_pmc_header>
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-static void *
-gc_inf_get_free_object(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool))
-{
- ASSERT_ARGS(gc_inf_get_free_object)
- return calloc(pool->object_size, 1);
-}
-
-/*
-
-=item C<static void gc_inf_alloc_objects(PARROT_INTERP, Memory_Pools *mem_pools,
-Fixed_Size_Pool *pool)>
-
-Allocates a new arena of objects from the system. This function is only
-really used internally by the core, the API functions don't need to call
-it directly. However, this function is necessary because we may have
-different behaviors for certain pools, so we can't allocate for all of them
-in the same way. We will need to have a new "alloc_objects" function
-for each special case pool.
-
-=cut
-
-*/
-
-static void
-gc_inf_alloc_objects(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool))
-{
- ASSERT_ARGS(gc_inf_alloc_objects)
- UNUSED(pool);
-}
-
-/*
-
-=item C<static void gc_inf_more_traceable_objects(PARROT_INTERP, Memory_Pools
-*mem_pools, Fixed_Size_Pool *pool)>
-
-Would normally try to find new traceable objects by first running a GC sweep
-and then allocating a new arena from the system. Neither of these are
-necessary in the infinite memory collector.
-
-This function is only used internally to the core, and is not called directly
-from the GC API. Different pools may have special requirements so multiple
-"more_traceable_objects" functions may need to be written and used.
-
-=cut
-
-*/
-
-static void
-gc_inf_more_traceable_objects(SHIM_INTERP,
- ARGIN(Memory_Pools *mem_pools),
- ARGMOD(Fixed_Size_Pool *pool))
-{
- ASSERT_ARGS(gc_inf_more_traceable_objects)
- UNUSED(pool);
-}
-
-/*
-
-=item C<static void gc_inf_pool_init(PARROT_INTERP, Fixed_Size_Pool *pool)>
-
-Initializes the function pointers in a new pool. When a new pool is created
-we assign several function pointers to it for managing memory in the pool.
-In this way we can treat different pools differently if they have special
-management needs. In general all PObj-like pools are treated the same.
-
-This function is mostly called from the function C<initialize_fixed_size_pools>
-in F<src/gc/mark_sweep.c> at Parrot startup.
-
-=cut
-
-*/
-
-static void
-gc_inf_pool_init(SHIM_INTERP, ARGMOD(Fixed_Size_Pool *pool))
-{
- ASSERT_ARGS(gc_inf_pool_init)
- pool->add_free_object = gc_inf_add_free_object;
- pool->get_free_object = gc_inf_get_free_object;
- pool->alloc_objects = gc_inf_alloc_objects;
- pool->more_objects = gc_inf_more_traceable_objects;
-}
-
-/*
-
=item C<static void gc_inf_compact_memory_pool(PARROT_INTERP)>
Stub for compacting memory pools.
@@ -447,7 +261,7 @@
PARROT_CAN_RETURN_NULL
static PMC*
-gc_inf_allocate_pmc_header(PARROT_INTERP, UINTVAL flags)
+gc_inf_allocate_pmc_header(PARROT_INTERP, SHIM(UINTVAL flags))
{
ASSERT_ARGS(gc_inf_allocate_pmc_header)
return (PMC*)calloc(sizeof (PMC), 1);
@@ -463,7 +277,7 @@
PARROT_CAN_RETURN_NULL
static STRING*
-gc_inf_allocate_string_header(PARROT_INTERP, UINTVAL flags)
+gc_inf_allocate_string_header(PARROT_INTERP, SHIM(UINTVAL flags))
{
ASSERT_ARGS(gc_inf_allocate_string_header)
return (STRING*)calloc(sizeof (STRING), 1);
@@ -479,14 +293,14 @@
PARROT_CAN_RETURN_NULL
static Buffer*
-gc_inf_allocate_bufferlike_header(PARROT_INTERP, size_t size)
+gc_inf_allocate_bufferlike_header(PARROT_INTERP, SHIM(size_t size))
{
ASSERT_ARGS(gc_inf_allocate_bufferlike_header)
return (Buffer*)calloc(sizeof (Buffer), 1);
}
static void
-gc_inf_free_bufferlike_header(PARROT_INTERP, ARGIN_NULLOK(Buffer *b), size_t size)
+gc_inf_free_bufferlike_header(PARROT_INTERP, ARGIN_NULLOK(Buffer *b), SHIM(size_t size))
{
ASSERT_ARGS(gc_inf_free_bufferlike_header)
if (b)
@@ -582,7 +396,7 @@
}
static void
-gc_inf_free_fixed_size_storage(PARROT_INTERP, size_t size, ARGMOD(void *data))
+gc_inf_free_fixed_size_storage(PARROT_INTERP, SHIM(size_t size), ARGMOD(void *data))
{
ASSERT_ARGS(gc_inf_free_fixed_size_storage)
if (data)
@@ -599,7 +413,7 @@
*/
static size_t
-gc_inf_get_gc_info(PARROT_INTERP, Interpinfo_enum what)
+gc_inf_get_gc_info(PARROT_INTERP, SHIM(Interpinfo_enum what))
{
ASSERT_ARGS(gc_inf_get_gc_info)
return 0;
Modified: branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/gc_ms.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -195,7 +195,7 @@
static int gc_ms_sweep_cb(PARROT_INTERP,
ARGIN(Memory_Pools *mem_pools),
ARGMOD(Fixed_Size_Pool *pool),
- int flag,
+ SHIM(int flag),
ARGMOD(void *arg))
__attribute__nonnull__(1)
__attribute__nonnull__(2)
@@ -1093,7 +1093,6 @@
{
ASSERT_ARGS(gc_ms_free_fixed_size_storage)
- const size_t item_size = size < sizeof (void *) ? sizeof (void *) : size;
const size_t idx = size - sizeof (void *);
PMC_Attribute_Pool ** const pools = interp->mem_pools->attrib_pools;
gc_ms_free_attributes_from_pool(interp, pools[idx], data);
@@ -1231,7 +1230,7 @@
gc_ms_sweep_cb(PARROT_INTERP,
ARGIN(Memory_Pools *mem_pools),
ARGMOD(Fixed_Size_Pool *pool),
- int flag, ARGMOD(void *arg))
+ SHIM(int flag), ARGMOD(void *arg))
{
ASSERT_ARGS(gc_ms_sweep_cb)
int * const total_free = (int *) arg;
Modified: branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/gc/mark_sweep.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -41,12 +41,6 @@
FUNC_MODIFIES(*pool)
FUNC_MODIFIES(*b);
-static void free_buffer_malloc(SHIM_INTERP,
- SHIM(Fixed_Size_Pool *pool),
- ARGMOD(Buffer *b))
- __attribute__nonnull__(3)
- FUNC_MODIFIES(*b);
-
static void free_pmc_in_pool(PARROT_INTERP,
ARGIN(Memory_Pools *mem_pools),
SHIM(Fixed_Size_Pool *pool),
@@ -98,8 +92,6 @@
PARROT_ASSERT_ARG(mem_pools) \
, PARROT_ASSERT_ARG(pool) \
, PARROT_ASSERT_ARG(b))
-#define ASSERT_ARGS_free_buffer_malloc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(b))
#define ASSERT_ARGS_free_pmc_in_pool __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(mem_pools) \
@@ -287,8 +279,6 @@
gc_object_fn_type gc_object = pool->gc_object;
UINTVAL total_used = 0;
const UINTVAL object_size = pool->object_size;
- UINTVAL i;
-
/* Run through all the PObj header pools and mark */
for (cur_arena = pool->last_Arena; cur_arena; cur_arena = cur_arena->prev) {
@@ -472,7 +462,6 @@
ARGMOD(Fixed_Size_Arena *arena))
{
ASSERT_ARGS(Parrot_add_to_free_list)
- UINTVAL i;
void *object;
const UINTVAL num_objects = pool->objects_per_alloc;
@@ -708,42 +697,6 @@
/*
-=item C<static void free_buffer_malloc(PARROT_INTERP, Fixed_Size_Pool *pool,
-Buffer *b)>
-
-Frees the given buffer, returning the storage space to the operating system
-and removing it from Parrot's memory management system. If the buffer is COW,
-The buffer is not freed if the reference count is greater then 1.
-
-=cut
-
-*/
-
-static void
-free_buffer_malloc(SHIM_INTERP, SHIM(Fixed_Size_Pool *pool),
- ARGMOD(Buffer *b))
-{
- ASSERT_ARGS(free_buffer_malloc)
- /* free allocated space at (int *)bufstart - 1, but not if it used COW or is
- * external */
- Buffer_buflen(b) = 0;
-
- if (!Buffer_bufstart(b) || PObj_is_external_or_free_TESTALL(b))
- return;
-
- if (PObj_COW_TEST(b)) {
- INTVAL * const refcount = Buffer_bufrefcountptr(b);
-
- if (--(*refcount) == 0) {
- mem_sys_free(refcount); /* the actual bufstart */
- }
- }
- else
- mem_sys_free(Buffer_bufrefcountptr(b));
-}
-
-/*
-
=item C<static void free_buffer(PARROT_INTERP, Memory_Pools *mem_pools,
Fixed_Size_Pool *pool, Buffer *b)>
@@ -1035,9 +988,8 @@
Parrot_gc_allocate_new_attributes_arena(PARROT_INTERP, ARGMOD(PMC_Attribute_Pool *pool))
{
ASSERT_ARGS(Parrot_gc_allocate_new_attributes_arena)
- PMC_Attribute_Free_List *list, *next, *first;
+ PMC_Attribute_Free_List *next;
- size_t i;
const size_t num_items = pool->objects_per_alloc;
const size_t item_size = pool->attr_size;
const size_t item_space = item_size * num_items;
Modified: branches/pcc_hackathon_6Mar10/src/global.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/global.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/global.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -813,7 +813,8 @@
store_sub_in_multi(interp, sub_pmc, ns);
/* store other subs (as long as they're not :anon) */
- else if (!(PObj_get_FLAGS(sub_pmc) & SUB_FLAG_PF_ANON)) {
+ else if (!(PObj_get_FLAGS(sub_pmc) & SUB_FLAG_PF_ANON)
+ || sub->vtable_index != -1) {
STRING * const ns_entry_name = sub->ns_entry_name;
PMC * const nsname = sub->namespace_name;
Modified: branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/interp/inter_cb.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -159,7 +159,6 @@
{
ASSERT_ARGS(verify_CD)
PARROT_INTERP = NULL;
- size_t i;
PMC *interp_pmc;
STRING *sc;
Modified: branches/pcc_hackathon_6Mar10/src/interp/inter_create.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/interp/inter_create.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/interp/inter_create.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -118,7 +118,6 @@
allocate_interpreter(ARGIN_NULLOK(Interp *parent), INTVAL flags)
{
ASSERT_ARGS(allocate_interpreter)
- int stacktop;
Interp *interp;
/* Get an empty interpreter from system memory */
Modified: branches/pcc_hackathon_6Mar10/src/io/buffer.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/io/buffer.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/io/buffer.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -357,9 +357,12 @@
}
got = Parrot_io_fill_readbuf(interp, filehandle);
- len = (len < got)
- ? len
- : (got > 0) ? got : 0;
+
+ /* got is never < 0, but C's type system can't tell */
+ if (got < 0)
+ got = 0;
+
+ len = (len < got) ? len : got;
}
/* read from the read_buffer */
Modified: branches/pcc_hackathon_6Mar10/src/io/unix.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/io/unix.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/io/unix.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -181,17 +181,19 @@
*/
if ((oflags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) {
close(fd);
- Parrot_str_free_cstring(spath); /* returning before C string freed */
+
+ /* returning before C string freed */
+ Parrot_str_free_cstring(spath);
return PMCNULL;
}
- /*
- * Check for truncate?
- */
+
+ /* Check for truncate? */
if (oflags & O_TRUNC) {
int tfd;
while ((tfd = creat(spath, PIO_DEFAULTMODE)) < 0 && errno == EINTR)
errno = 0;
- close(tfd);
+ if (tfd > 0)
+ close(tfd);
}
}
else if (oflags & O_CREAT) {
@@ -199,10 +201,10 @@
while ((fd = creat(spath, PIO_DEFAULTMODE)) < 0 && errno == EINTR)
errno = 0;
if (!(oflags & O_WRONLY)) {
- close(fd);
- /*
- * File created, reopen with read+write
- */
+ if (fd > 0)
+ close(fd);
+
+ /* File created, reopen with read+write */
while ((fd = open(spath, oflags & (O_WRONLY | O_RDWR),
DEFAULT_OPEN_MODE)) < 0 && errno == EINTR)
errno = 0;
Modified: branches/pcc_hackathon_6Mar10/src/main.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/main.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/main.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -132,11 +132,11 @@
PMC *env = Parrot_pmc_new(interp, enum_class_Env);
STRING *path = VTABLE_get_string_keyed_str(interp, env,
Parrot_str_new_constant(interp, "PARROT_LIBRARY"));
- if (!STRING_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
+ if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_LIBRARY);
path = VTABLE_get_string_keyed_str(interp, env,
Parrot_str_new_constant(interp, "PARROT_INCLUDE"));
- if (!STRING_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
+ if (!Parrot_str_is_null(interp, path) && Parrot_str_length(interp, path) > 0)
Parrot_lib_add_path(interp, path, PARROT_LIB_PATH_INCLUDE);
}
@@ -405,6 +405,13 @@
}
break;
}
+ else if (STREQ(arg, "--hash-seed")) {
+ ++pos;
+ arg = argv[pos];
+ if (is_all_hex_digits(arg)) {
+ interp->hash_seed = strtoul(arg, NULL, 16);
+ }
+ }
++pos;
}
}
@@ -496,11 +503,6 @@
else
SET_DEBUG(PARROT_MEM_STAT_DEBUG_FLAG);
break;
- case 'H':
- if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
- interp->hash_seed = strtoul(opt.opt_arg, NULL, 16);
- }
- break;
case '.': /* Give Windows Parrot hackers an opportunity to
* attach a debuggger. */
@@ -510,6 +512,9 @@
help();
exit(EXIT_FAILURE);
break;
+ case 'H':
+ /* handled in parseflags_minimal */
+ break;
case OPT_HELP_DEBUG:
help_debug();
exit(EXIT_FAILURE);
Modified: branches/pcc_hackathon_6Mar10/src/multidispatch.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/multidispatch.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/multidispatch.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2003-2009, Parrot Foundation.
+Copyright (C) 2003-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -51,7 +51,6 @@
/* HEADERIZER BEGIN: static */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-static INTVAL distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b);
static void mmd_add_multi_global(PARROT_INTERP,
ARGIN(STRING *sub_name),
ARGIN(PMC *sub_obj))
@@ -129,13 +128,6 @@
__attribute__nonnull__(2)
__attribute__nonnull__(3);
-static int mmd_search_local(PARROT_INTERP,
- ARGIN(STRING *name),
- ARGIN(PMC *candidates))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2)
- __attribute__nonnull__(3);
-
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
static PMC * Parrot_mmd_get_cached_multi_sig(PARROT_INTERP,
@@ -151,12 +143,6 @@
__attribute__nonnull__(3);
PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static PMC* Parrot_mmd_search_scopes(PARROT_INTERP, ARGIN(STRING *meth))
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_CANNOT_RETURN_NULL
static PMC * Parrot_mmd_sort_candidates(PARROT_INTERP,
ARGIN(PMC *arg_tuple),
ARGIN(PMC *cl))
@@ -164,7 +150,6 @@
__attribute__nonnull__(2)
__attribute__nonnull__(3);
-#define ASSERT_ARGS_distance_cmp __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
#define ASSERT_ARGS_mmd_add_multi_global __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(sub_name) \
@@ -206,10 +191,6 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(name) \
, PARROT_ASSERT_ARG(cl))
-#define ASSERT_ARGS_mmd_search_local __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(name) \
- , PARROT_ASSERT_ARG(candidates))
#define ASSERT_ARGS_Parrot_mmd_get_cached_multi_sig \
__attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
@@ -218,9 +199,6 @@
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(pmc) \
, PARROT_ASSERT_ARG(cl))
-#define ASSERT_ARGS_Parrot_mmd_search_scopes __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp) \
- , PARROT_ASSERT_ARG(meth))
#define ASSERT_ARGS_Parrot_mmd_sort_candidates __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp) \
, PARROT_ASSERT_ARG(arg_tuple) \
@@ -394,41 +372,6 @@
VTABLE_get_pmc(interp, invoke_sig), candidates);
}
-
-
-/*
-
-=item C<static INTVAL distance_cmp(PARROT_INTERP, INTVAL a, INTVAL b)>
-
-Compare distance values C<a> and C<b>. Return 1 if C<a> is larger, -1 if
-C<b> is.
-
-=cut
-
-*/
-
-static INTVAL
-distance_cmp(SHIM_INTERP, INTVAL a, INTVAL b)
-{
- ASSERT_ARGS(distance_cmp)
- short da = (short)(a & 0xffff);
- short db = (short)(b & 0xffff);
-
- /* sort first by distance */
- if (da > db)
- return 1;
-
- if (da < db)
- return -1;
-
- /* end then by index in candidate list */
- da = (short)(a >> 16);
- db = (short)(b >> 16);
-
- return da > db ? 1 : da < db ? -1 : 0;
-}
-
-
/*
=item C<static PMC* mmd_build_type_tuple_from_type_list(PARROT_INTERP, PMC
@@ -518,83 +461,7 @@
Parrot_mmd_build_type_tuple_from_sig_obj(PARROT_INTERP, ARGIN(PMC *sig_obj))
{
ASSERT_ARGS(Parrot_mmd_build_type_tuple_from_sig_obj)
- PMC * const type_tuple = Parrot_pmc_new(interp, enum_class_ResizableIntegerArray);
- STRING *string_sig = VTABLE_get_string(interp, sig_obj);
- INTVAL tuple_size = 0;
- INTVAL args_ended = 0;
- INTVAL i, seen_invocant = 0;
- INTVAL sig_len;
-
- if (STRING_IS_NULL(string_sig)) {
- Parrot_ex_throw_from_c_args(interp, NULL, 1,
- "Call has no signature, unable to dispatch.\n");
- }
-
- sig_len = Parrot_str_byte_length(interp, string_sig);
-
- for (i = 0; i < sig_len; ++i) {
- INTVAL type = Parrot_str_indexed(interp, string_sig, i + seen_invocant);
- if (args_ended)
- break;
-
- /* Regular arguments just set the value */
- switch (type) {
- case 'I':
- VTABLE_set_integer_keyed_int(interp, type_tuple,
- i, enum_type_INTVAL);
- break;
- case 'N':
- VTABLE_set_integer_keyed_int(interp, type_tuple,
- i, enum_type_FLOATVAL);
- break;
- case 'S':
- {
- INTVAL type_lookahead = Parrot_str_indexed(interp, string_sig, (i + 1));
- if (type_lookahead == 'n') {
- args_ended = 1;
- break;
- }
- VTABLE_set_integer_keyed_int(interp, type_tuple,
- i, enum_type_STRING);
- break;
- }
- case 'P':
- {
- INTVAL type_lookahead = Parrot_str_indexed(interp, string_sig, (i + 1));
- if (type_lookahead == 'i') {
- if (i != 0)
- Parrot_ex_throw_from_c_args(interp, NULL,
- EXCEPTION_INVALID_OPERATION,
- "Multiple Dispatch: only the first argument can be an invocant");
- seen_invocant = 1;
- }
- else if (type_lookahead == 'f') {
- args_ended = 1;
- break;
- }
- else {
- PMC *pmc_arg = VTABLE_get_pmc_keyed_int(interp, sig_obj, i);
- if (PMC_IS_NULL(pmc_arg))
- VTABLE_set_integer_keyed_int(interp, type_tuple,
- i, enum_type_PMC);
- else
- VTABLE_set_integer_keyed_int(interp, type_tuple, i,
- VTABLE_type(interp, pmc_arg));
- }
-
- break;
- }
- case '-':
- args_ended = 1;
- break;
- default:
- Parrot_ex_throw_from_c_args(interp, NULL,
- EXCEPTION_INVALID_OPERATION,
- "Multiple Dispatch: invalid argument type %c!", type);
- }
- }
-
- return type_tuple;
+ return VTABLE_get_pmc(interp, sig_obj);
}
@@ -889,33 +756,6 @@
/*
-=item C<static PMC* Parrot_mmd_search_scopes(PARROT_INTERP, STRING *meth)>
-
-Search all scopes for MMD candidates matching the arguments given in
-C<arg_tuple>.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-static PMC*
-Parrot_mmd_search_scopes(PARROT_INTERP, ARGIN(STRING *meth))
-{
- ASSERT_ARGS(Parrot_mmd_search_scopes)
- PMC * const candidates = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
- const int stop = mmd_search_local(interp, meth, candidates);
-
- if (!stop)
- mmd_search_global(interp, meth, candidates);
-
- return candidates;
-}
-
-
-/*
-
=item C<static int Parrot_mmd_maybe_candidate(PARROT_INTERP, PMC *pmc, PMC *cl)>
If the candidate C<pmc> is a Sub PMC, push it on the candidate list and
@@ -961,28 +801,6 @@
/*
-=item C<static int mmd_search_local(PARROT_INTERP, STRING *name, PMC
-*candidates)>
-
-Search the current package namespace for matching candidates. Return
-TRUE if the MMD search should stop.
-
-=cut
-
-*/
-
-static int
-mmd_search_local(PARROT_INTERP, ARGIN(STRING *name), ARGIN(PMC *candidates))
-{
- ASSERT_ARGS(mmd_search_local)
- PMC * const multi_sub = Parrot_find_global_cur(interp, name);
-
- return multi_sub && Parrot_mmd_maybe_candidate(interp, multi_sub, candidates);
-}
-
-
-/*
-
=item C<static void mmd_search_by_sig_obj(PARROT_INTERP, STRING *name, PMC
*sig_obj, PMC *candidates)>
Modified: branches/pcc_hackathon_6Mar10/src/nci/api.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/nci/api.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/nci/api.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -18,14 +18,6 @@
/* HEADERIZER HFILE: include/parrot/nci.h */
/* HEADERIZER STOP */
-static void
-init_nci_funcs(PARROT_INTERP) {
- VTABLE_set_pmc_keyed_int(interp, interp->iglobals, IGLOBALS_NCI_FUNCS,
- Parrot_pmc_new(interp, enum_class_Hash));
- Parrot_nci_load_core_thunks(interp);
- Parrot_nci_load_extra_thunks(interp);
-}
-
/* This function serves a single purpose. It takes the function
signature for a C function we want to call and returns a pointer
to a function that can call it. */
Modified: branches/pcc_hackathon_6Mar10/src/ops/core.ops
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/core.ops Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/core.ops Tue Mar 16 22:37:03 2010 (r44975)
@@ -63,12 +63,6 @@
Does nothing other than waste an iota of time and 32 bits of bytecode space.
(Must be op #1, CORE_OPS_noop)
-=item B<cpu_ret>()
-
-Emit a cpu return instruction. This is used to return from CGP core
-to JIT code. Note: Do B<not> use this opcode. It is for internal use only.
-(Must be op #2, CORE_OPS_cpu_ret)
-
=item B<check_events>()
Check the event queue and run event handlers if there are unhandled events.
@@ -98,26 +92,6 @@
inline op noop() :base_core {
}
-inline op cpu_ret() {
- /* We only want to call __asm__("ret") if we're in the JIT core. Otherwise
- we want to throw an error. Seriously people: Do not use this opcode
- directly in PIR. Ever. It absolutely makes no sense and it doesn't do
- anything productive. You've been warned. */
- if (PARROT_RUNCORE_JIT_OPS_TEST(interp->run_core)) {
-#ifdef __GNUC__
-# ifdef I386
- __asm__("ret");
-# endif
-#endif
- }
- else {
- opcode_t * const handler= Parrot_ex_throw_from_op_args(interp,
- NULL, EXCEPTION_INVALID_OPERATION,
- "cpu_ret: May not use this opcode from PIR source");
- goto ADDRESS(handler);
- }
-}
-
inline op check_events() :base_core :flow {
opcode_t *next = expr NEXT();
Parrot_cx_check_tasks(interp, interp->scheduler);
@@ -758,7 +732,7 @@
inline op pop_eh() {
Parrot_cx_delete_handler_local(interp,
- Parrot_str_new(interp, "exception", 9));
+ Parrot_str_new_constant(interp, "exception"));
}
inline op throw(invar PMC) :flow {
@@ -804,7 +778,7 @@
inline op count_eh(out INT) {
$1 = Parrot_cx_count_handlers_local(interp,
- Parrot_str_new(interp, "exception", 9));
+ Parrot_str_new_constant(interp, "exception"));
}
inline op die(in STR) :flow {
@@ -1313,7 +1287,6 @@
else {
$1 = Parrot_pmc_new(interp, enum_class_NCI);
VTABLE_set_pointer_keyed_str(interp, $1, $4, F2DPTR(p));
- PObj_get_FLAGS($1) |= PObj_private1_FLAG;
}
Parrot_str_free_cstring(name);
}
Modified: branches/pcc_hackathon_6Mar10/src/ops/experimental.ops
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/experimental.ops Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/experimental.ops Tue Mar 16 22:37:03 2010 (r44975)
@@ -235,9 +235,114 @@
}
}
+=over 4
+
+=item B<new>(out PMC, in STR, in INT)
+
+=item B<new>(out PMC, in PMC, in INT)
+
+=back
+
+=cut
+
+
+op new(out PMC, in STR, in INT) {
+ STRING * const name = $2;
+ PMC * const _class = Parrot_pcc_get_HLL(interp, CURRENT_CONTEXT(interp))
+ ? Parrot_oo_get_class_str(interp, name)
+ : PMCNULL;
+
+ if (!PMC_IS_NULL(_class)) {
+ PMC *initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+ VTABLE_set_integer_native(interp, initial, $3);
+ $1 = VTABLE_instantiate(interp, _class, initial);
+ }
+ else {
+ const INTVAL type = Parrot_pmc_get_type_str(interp, name);
+ if (type <= 0) {
+ opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+ EXCEPTION_NO_CLASS,
+ "Class '%Ss' not found", name);
+ goto ADDRESS(dest);
+ }
+ $1 = Parrot_pmc_new_init_int(interp, type, $3);
+ }
+}
+
+
+op new(out PMC, in PMC, in INT) {
+ PMC * const name_key = $2;
+
+ /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+ const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+ /* if it's clearly a PIR-level PMC */
+ if (type > enum_class_core_max) {
+ PMC * const _class = Parrot_oo_get_class(interp, name_key);
+ if (!PMC_IS_NULL(_class)) {
+ PMC *initial = Parrot_pmc_new(interp,
+ Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+ VTABLE_set_integer_native(interp, initial, $3);
+ $1 = VTABLE_instantiate(interp, _class, initial);
+ }
+ }
+
+ /* if it's a core PMC */
+ else if (type > enum_class_default)
+ $1 = Parrot_pmc_new_init_int(interp, type, $3);
+
+ /* it's a typo */
+ else {
+ opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+ EXCEPTION_NO_CLASS,
+ "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
+ goto ADDRESS(dest);
+ }
+}
+
+=over 4
+
+=item B<root_new>(out PMC, in PMC, in INT)
+
+=back
+
+=cut
+
+op root_new(out PMC, in PMC, in INT) {
+ PMC * const name_key = $2;
+
+ /* get_class() returns a PMCProxy for core types, so check for core PMCs */
+ const INTVAL type = Parrot_pmc_get_type(interp, name_key);
+
+ /* if it's clearly a PIR-level PMC */
+ if (type > enum_class_core_max) {
+ PMC * const root_ns = interp->root_namespace;
+ PMC * const ns = Parrot_get_namespace_keyed(interp, root_ns, name_key);
+ PMC * const _class = Parrot_oo_get_class(interp, ns);
+ if (!PMC_IS_NULL(_class)) {
+ PMC *initial = Parrot_pmc_new(interp,
+ Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+ VTABLE_set_integer_native(interp, initial, $3);
+ $1 = VTABLE_instantiate(interp, _class, initial);
+ }
+ }
+
+ /* if it's a core PMC */
+ else if (type > enum_class_default)
+ $1 = Parrot_pmc_new_init_int(interp, type, $3);
+
+ /* it's a typo */
+ else {
+ opcode_t *dest = Parrot_ex_throw_from_op_args(interp, expr NEXT(),
+ EXCEPTION_NO_CLASS,
+ "Class '%Ss' not found", VTABLE_get_repr(interp, name_key));
+ goto ADDRESS(dest);
+ }
+}
+
=head1 COPYRIGHT
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
=head1 LICENSE
Modified: branches/pcc_hackathon_6Mar10/src/ops/ops.num
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/ops.num Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/ops.num Tue Mar 16 22:37:03 2010 (r44975)
@@ -22,1253 +22,1252 @@
end 0
# the following ops are enums in oplib.h
noop 1
-cpu_ret 2
-check_events 3
-check_events__ 4
-wrapper__ 5
+check_events 2
+check_events__ 3
+wrapper__ 4
###DYNAMIC### other ops
-load_bytecode_s 6
-load_bytecode_sc 7
-load_language_s 8
-load_language_sc 9
-branch_i 10
-branch_ic 11
-local_branch_p_i 12
-local_branch_p_ic 13
-local_return_p 14
-jump_i 15
-jump_ic 16
-enternative 17
-if_i_ic 18
-if_n_ic 19
-if_s_ic 20
-if_p_ic 21
-unless_i_ic 22
-unless_n_ic 23
-unless_s_ic 24
-unless_p_ic 25
-invokecc_p 26
-invoke_p_p 27
-yield 28
-tailcall_p 29
-returncc 30
-capture_lex_p 31
-newclosure_p_p 32
-set_args_pc 33
-get_results_pc 34
-get_params_pc 35
-set_returns_pc 36
-result_info_p 37
-set_addr_i_ic 38
-set_addr_p_ic 39
-set_addr_p_i 40
-get_addr_i_p 41
-schedule_p 42
-addhandler_p 43
-push_eh_ic 44
-push_eh_p 45
-pop_eh 46
-throw_p 47
-throw_p_p 48
-rethrow_p 49
-count_eh_i 50
-die_s 51
-die_sc 52
-die_p 53
-die_pc 54
-die_i_i 55
-die_ic_i 56
-die_i_ic 57
-die_ic_ic 58
-exit_i 59
-exit_ic 60
-pushmark_i 61
-pushmark_ic 62
-popmark_i 63
-popmark_ic 64
-pushaction_p 65
-debug_i 66
-debug_ic 67
-bounds_i 68
-bounds_ic 69
-profile_i 70
-profile_ic 71
-trace_i 72
-trace_ic 73
-gc_debug_i 74
-gc_debug_ic 75
-interpinfo_i_i 76
-interpinfo_i_ic 77
-interpinfo_p_i 78
-interpinfo_p_ic 79
-interpinfo_s_i 80
-interpinfo_s_ic 81
-warningson_i 82
-warningson_ic 83
-warningsoff_i 84
-warningsoff_ic 85
-errorson_i 86
-errorson_ic 87
-errorsoff_i 88
-errorsoff_ic 89
-runinterp_p_i 90
-runinterp_p_ic 91
-getinterp_p 92
-sweep_ic 93
-collect 94
-sweepoff 95
-sweepon 96
-collectoff 97
-collecton 98
-needs_destroy_p 99
-loadlib_p_s 100
-loadlib_p_sc 101
-dlfunc_p_p_s_s 102
-dlfunc_p_p_sc_s 103
-dlfunc_p_p_s_sc 104
-dlfunc_p_p_sc_sc 105
-dlvar_p_p_s 106
-dlvar_p_p_sc 107
-compreg_s_p 108
-compreg_sc_p 109
-compreg_p_s 110
-compreg_p_sc 111
-new_callback_p_p_p_s 112
-new_callback_p_p_p_sc 113
-annotations_p 114
-annotations_p_s 115
-annotations_p_sc 116
-band_i_i 117
-band_i_ic 118
-band_p_i 119
-band_p_ic 120
-band_p_p 121
-band_i_i_i 122
-band_i_ic_i 123
-band_i_i_ic 124
-band_p_p_i 125
-band_p_p_ic 126
-band_p_p_p 127
-bands_s_s 128
-bands_s_sc 129
-bands_p_s 130
-bands_p_sc 131
-bands_p_p 132
-bands_s_s_s 133
-bands_s_sc_s 134
-bands_s_s_sc 135
-bands_p_p_s 136
-bands_p_p_sc 137
-bands_p_p_p 138
-bnot_i 139
-bnot_i_i 140
-bnot_p 141
-bnot_p_p 142
-bnots_s 143
-bnots_s_s 144
-bnots_s_sc 145
-bnots_p 146
-bnots_p_p 147
-bor_i_i 148
-bor_i_ic 149
-bor_p_i 150
-bor_p_ic 151
-bor_p_p 152
-bor_i_i_i 153
-bor_i_ic_i 154
-bor_i_i_ic 155
-bor_p_p_i 156
-bor_p_p_ic 157
-bor_p_p_p 158
-bors_s_s 159
-bors_s_sc 160
-bors_p_s 161
-bors_p_sc 162
-bors_p_p 163
-bors_s_s_s 164
-bors_s_sc_s 165
-bors_s_s_sc 166
-bors_p_p_s 167
-bors_p_p_sc 168
-bors_p_p_p 169
-shl_i_i 170
-shl_i_ic 171
-shl_p_i 172
-shl_p_ic 173
-shl_p_p 174
-shl_i_i_i 175
-shl_i_ic_i 176
-shl_i_i_ic 177
-shl_p_p_i 178
-shl_p_p_ic 179
-shl_p_p_p 180
-shr_i_i 181
-shr_i_ic 182
-shr_p_i 183
-shr_p_ic 184
-shr_p_p 185
-shr_i_i_i 186
-shr_i_ic_i 187
-shr_i_i_ic 188
-shr_p_p_i 189
-shr_p_p_ic 190
-shr_p_p_p 191
-lsr_i_i 192
-lsr_i_ic 193
-lsr_p_i 194
-lsr_p_ic 195
-lsr_p_p 196
-lsr_i_i_i 197
-lsr_i_ic_i 198
-lsr_i_i_ic 199
-lsr_p_p_i 200
-lsr_p_p_ic 201
-lsr_p_p_p 202
-rot_i_i_i_ic 203
-rot_i_ic_i_ic 204
-rot_i_i_ic_ic 205
-bxor_i_i 206
-bxor_i_ic 207
-bxor_p_i 208
-bxor_p_ic 209
-bxor_p_p 210
-bxor_i_i_i 211
-bxor_i_ic_i 212
-bxor_i_i_ic 213
-bxor_p_p_i 214
-bxor_p_p_ic 215
-bxor_p_p_p 216
-bxors_s_s 217
-bxors_s_sc 218
-bxors_p_s 219
-bxors_p_sc 220
-bxors_p_p 221
-bxors_s_s_s 222
-bxors_s_sc_s 223
-bxors_s_s_sc 224
-bxors_p_p_s 225
-bxors_p_p_sc 226
-bxors_p_p_p 227
-eq_i_i_ic 228
-eq_ic_i_ic 229
-eq_i_ic_ic 230
-eq_n_n_ic 231
-eq_nc_n_ic 232
-eq_n_nc_ic 233
-eq_s_s_ic 234
-eq_sc_s_ic 235
-eq_s_sc_ic 236
-eq_p_p_ic 237
-eq_p_i_ic 238
-eq_p_ic_ic 239
-eq_p_n_ic 240
-eq_p_nc_ic 241
-eq_p_s_ic 242
-eq_p_sc_ic 243
-eq_str_p_p_ic 244
-eq_num_p_p_ic 245
-eq_addr_s_s_ic 246
-eq_addr_sc_s_ic 247
-eq_addr_s_sc_ic 248
-eq_addr_sc_sc_ic 249
-eq_addr_p_p_ic 250
-ne_i_i_ic 251
-ne_ic_i_ic 252
-ne_i_ic_ic 253
-ne_n_n_ic 254
-ne_nc_n_ic 255
-ne_n_nc_ic 256
-ne_s_s_ic 257
-ne_sc_s_ic 258
-ne_s_sc_ic 259
-ne_p_p_ic 260
-ne_p_i_ic 261
-ne_p_ic_ic 262
-ne_p_n_ic 263
-ne_p_nc_ic 264
-ne_p_s_ic 265
-ne_p_sc_ic 266
-ne_str_p_p_ic 267
-ne_num_p_p_ic 268
-ne_addr_s_s_ic 269
-ne_addr_sc_s_ic 270
-ne_addr_s_sc_ic 271
-ne_addr_sc_sc_ic 272
-ne_addr_p_p_ic 273
-lt_i_i_ic 274
-lt_ic_i_ic 275
-lt_i_ic_ic 276
-lt_n_n_ic 277
-lt_nc_n_ic 278
-lt_n_nc_ic 279
-lt_s_s_ic 280
-lt_sc_s_ic 281
-lt_s_sc_ic 282
-lt_p_p_ic 283
-lt_p_i_ic 284
-lt_p_ic_ic 285
-lt_p_n_ic 286
-lt_p_nc_ic 287
-lt_p_s_ic 288
-lt_p_sc_ic 289
-lt_str_p_p_ic 290
-lt_num_p_p_ic 291
-le_i_i_ic 292
-le_ic_i_ic 293
-le_i_ic_ic 294
-le_n_n_ic 295
-le_nc_n_ic 296
-le_n_nc_ic 297
-le_s_s_ic 298
-le_sc_s_ic 299
-le_s_sc_ic 300
-le_p_p_ic 301
-le_p_i_ic 302
-le_p_ic_ic 303
-le_p_n_ic 304
-le_p_nc_ic 305
-le_p_s_ic 306
-le_p_sc_ic 307
-le_str_p_p_ic 308
-le_num_p_p_ic 309
-gt_p_p_ic 310
-gt_p_i_ic 311
-gt_p_ic_ic 312
-gt_p_n_ic 313
-gt_p_nc_ic 314
-gt_p_s_ic 315
-gt_p_sc_ic 316
-gt_str_p_p_ic 317
-gt_num_p_p_ic 318
-ge_p_p_ic 319
-ge_p_i_ic 320
-ge_p_ic_ic 321
-ge_p_n_ic 322
-ge_p_nc_ic 323
-ge_p_s_ic 324
-ge_p_sc_ic 325
-ge_str_p_p_ic 326
-ge_num_p_p_ic 327
-if_null_p_ic 328
-if_null_s_ic 329
-unless_null_p_ic 330
-unless_null_s_ic 331
-cmp_i_i_i 332
-cmp_i_ic_i 333
-cmp_i_i_ic 334
-cmp_i_n_n 335
-cmp_i_nc_n 336
-cmp_i_n_nc 337
-cmp_i_s_s 338
-cmp_i_sc_s 339
-cmp_i_s_sc 340
-cmp_i_p_p 341
-cmp_i_p_i 342
-cmp_i_p_ic 343
-cmp_i_p_n 344
-cmp_i_p_nc 345
-cmp_i_p_s 346
-cmp_i_p_sc 347
-cmp_str_i_p_p 348
-cmp_num_i_p_p 349
-cmp_pmc_p_p_p 350
-issame_i_p_p 351
-issame_i_s_s 352
-issame_i_sc_s 353
-issame_i_s_sc 354
-issame_i_sc_sc 355
-isntsame_i_p_p 356
-isntsame_i_s_s 357
-isntsame_i_sc_s 358
-isntsame_i_s_sc 359
-isntsame_i_sc_sc 360
-istrue_i_p 361
-isfalse_i_p 362
-isnull_i_p 363
-isnull_i_pc 364
-isnull_i_s 365
-isnull_i_sc 366
-isgt_i_p_p 367
-isge_i_p_p 368
-isle_i_i_i 369
-isle_i_ic_i 370
-isle_i_i_ic 371
-isle_i_n_n 372
-isle_i_nc_n 373
-isle_i_n_nc 374
-isle_i_s_s 375
-isle_i_sc_s 376
-isle_i_s_sc 377
-isle_i_p_p 378
-islt_i_i_i 379
-islt_i_ic_i 380
-islt_i_i_ic 381
-islt_i_n_n 382
-islt_i_nc_n 383
-islt_i_n_nc 384
-islt_i_s_s 385
-islt_i_sc_s 386
-islt_i_s_sc 387
-islt_i_p_p 388
-iseq_i_i_i 389
-iseq_i_ic_i 390
-iseq_i_i_ic 391
-iseq_i_n_n 392
-iseq_i_nc_n 393
-iseq_i_n_nc 394
-iseq_i_s_s 395
-iseq_i_sc_s 396
-iseq_i_s_sc 397
-iseq_i_p_p 398
-isne_i_i_i 399
-isne_i_ic_i 400
-isne_i_i_ic 401
-isne_i_n_n 402
-isne_i_nc_n 403
-isne_i_n_nc 404
-isne_i_s_s 405
-isne_i_sc_s 406
-isne_i_s_sc 407
-isne_i_p_p 408
-and_i_i_i 409
-and_i_ic_i 410
-and_i_i_ic 411
-and_p_p_p 412
-not_i 413
-not_i_i 414
-not_p 415
-not_p_p 416
-or_i_i_i 417
-or_i_ic_i 418
-or_i_i_ic 419
-or_p_p_p 420
-xor_i_i_i 421
-xor_i_ic_i 422
-xor_i_i_ic 423
-xor_p_p_p 424
-debug_init 425
-debug_load_sc 426
-debug_break 427
-debug_print 428
-backtrace 429
-getline_i 430
-getfile_s 431
-set_label_p_ic 432
-get_label_i_p 433
-close_p 434
-fdopen_p_i_s 435
-fdopen_p_ic_s 436
-fdopen_p_i_sc 437
-fdopen_p_ic_sc 438
-getstdin_p 439
-getstdout_p 440
-getstderr_p 441
-setstdin_p 442
-setstdout_p 443
-setstderr_p 444
-open_p_s_s 445
-open_p_sc_s 446
-open_p_s_sc 447
-open_p_sc_sc 448
-open_p_s 449
-open_p_sc 450
-print_i 451
-print_ic 452
-print_n 453
-print_nc 454
-print_s 455
-print_sc 456
-print_p 457
-say_i 458
-say_ic 459
-say_n 460
-say_nc 461
-say_s 462
-say_sc 463
-say_p 464
-printerr_i 465
-printerr_ic 466
-printerr_n 467
-printerr_nc 468
-printerr_s 469
-printerr_sc 470
-printerr_p 471
-print_p_i 472
-print_p_ic 473
-print_p_n 474
-print_p_nc 475
-print_p_s 476
-print_p_sc 477
-print_p_p 478
-read_s_i 479
-read_s_ic 480
-read_s_p_i 481
-read_s_p_ic 482
-readline_s_p 483
-peek_s 484
-peek_s_p 485
-stat_i_s_i 486
-stat_i_sc_i 487
-stat_i_s_ic 488
-stat_i_sc_ic 489
-stat_i_i_i 490
-stat_i_ic_i 491
-stat_i_i_ic 492
-stat_i_ic_ic 493
-seek_p_i_i 494
-seek_p_ic_i 495
-seek_p_i_ic 496
-seek_p_ic_ic 497
-seek_p_i_i_i 498
-seek_p_ic_i_i 499
-seek_p_i_ic_i 500
-seek_p_ic_ic_i 501
-seek_p_i_i_ic 502
-seek_p_ic_i_ic 503
-seek_p_i_ic_ic 504
-seek_p_ic_ic_ic 505
-tell_i_p 506
-tell_i_i_p 507
-abs_i 508
-abs_n 509
-abs_i_i 510
-abs_n_n 511
-abs_p 512
-abs_p_p 513
-add_i_i 514
-add_i_ic 515
-add_n_n 516
-add_n_nc 517
-add_p_p 518
-add_p_i 519
-add_p_ic 520
-add_p_n 521
-add_p_nc 522
-add_i_i_i 523
-add_i_ic_i 524
-add_i_i_ic 525
-add_n_n_n 526
-add_n_nc_n 527
-add_n_n_nc 528
-add_p_p_p 529
-add_p_p_i 530
-add_p_p_ic 531
-add_p_p_n 532
-add_p_p_nc 533
-cmod_i_i_i 534
-cmod_i_ic_i 535
-cmod_i_i_ic 536
-cmod_p_p_i 537
-cmod_p_p_ic 538
-cmod_p_p_p 539
-cmod_n_n_n 540
-cmod_n_nc_n 541
-cmod_n_n_nc 542
-cmod_p_p_n 543
-cmod_p_p_nc 544
-dec_i 545
-dec_n 546
-dec_p 547
-div_i_i 548
-div_i_ic 549
-div_n_n 550
-div_n_nc 551
-div_p_p 552
-div_p_i 553
-div_p_ic 554
-div_p_n 555
-div_p_nc 556
-div_i_i_i 557
-div_i_ic_i 558
-div_i_i_ic 559
-div_i_ic_ic 560
-div_n_n_n 561
-div_n_nc_n 562
-div_n_n_nc 563
-div_n_nc_nc 564
-div_p_p_p 565
-div_p_p_i 566
-div_p_p_ic 567
-div_p_p_n 568
-div_p_p_nc 569
-fdiv_i_i 570
-fdiv_i_ic 571
-fdiv_n_n 572
-fdiv_n_nc 573
-fdiv_p_p 574
-fdiv_p_i 575
-fdiv_p_ic 576
-fdiv_p_n 577
-fdiv_p_nc 578
-fdiv_i_i_i 579
-fdiv_i_ic_i 580
-fdiv_i_i_ic 581
-fdiv_n_n_n 582
-fdiv_n_nc_n 583
-fdiv_n_n_nc 584
-fdiv_p_p_p 585
-fdiv_p_p_i 586
-fdiv_p_p_ic 587
-fdiv_p_p_n 588
-fdiv_p_p_nc 589
-ceil_n 590
-ceil_i_n 591
-ceil_n_n 592
-floor_n 593
-floor_i_n 594
-floor_n_n 595
-inc_i 596
-inc_n 597
-inc_p 598
-mod_i_i 599
-mod_i_ic 600
-mod_n_n 601
-mod_n_nc 602
-mod_p_p 603
-mod_p_i 604
-mod_p_ic 605
-mod_p_n 606
-mod_p_nc 607
-mod_i_i_i 608
-mod_i_ic_i 609
-mod_i_i_ic 610
-mod_n_n_n 611
-mod_n_nc_n 612
-mod_n_n_nc 613
-mod_p_p_p 614
-mod_p_p_i 615
-mod_p_p_ic 616
-mod_p_p_n 617
-mod_p_p_nc 618
-mul_i_i 619
-mul_i_ic 620
-mul_n_n 621
-mul_n_nc 622
-mul_p_p 623
-mul_p_i 624
-mul_p_ic 625
-mul_p_n 626
-mul_p_nc 627
-mul_i_i_i 628
-mul_i_ic_i 629
-mul_i_i_ic 630
-mul_n_n_n 631
-mul_n_nc_n 632
-mul_n_n_nc 633
-mul_p_p_p 634
-mul_p_p_i 635
-mul_p_p_ic 636
-mul_p_p_n 637
-mul_p_p_nc 638
-neg_i 639
-neg_n 640
-neg_p 641
-neg_i_i 642
-neg_n_n 643
-neg_p_p 644
-pow_n_n_n 645
-pow_n_nc_n 646
-pow_n_n_nc 647
-pow_p_p_p 648
-pow_p_p_i 649
-pow_p_p_ic 650
-pow_p_p_n 651
-pow_p_p_nc 652
-pow_n_n_i 653
-pow_n_nc_i 654
-pow_n_n_ic 655
-pow_n_nc_ic 656
-sub_i_i 657
-sub_i_ic 658
-sub_n_n 659
-sub_n_nc 660
-sub_p_p 661
-sub_p_i 662
-sub_p_ic 663
-sub_p_n 664
-sub_p_nc 665
-sub_i_i_i 666
-sub_i_ic_i 667
-sub_i_i_ic 668
-sub_n_n_n 669
-sub_n_nc_n 670
-sub_n_n_nc 671
-sub_p_p_p 672
-sub_p_p_i 673
-sub_p_p_ic 674
-sub_p_p_n 675
-sub_p_p_nc 676
-sqrt_n_n 677
-acos_n_n 678
-asec_n_n 679
-asin_n_n 680
-atan_n_n 681
-atan_n_n_n 682
-atan_n_nc_n 683
-atan_n_n_nc 684
-cos_n_n 685
-cosh_n_n 686
-exp_n_n 687
-ln_n_n 688
-log10_n_n 689
-log2_n_n 690
-sec_n_n 691
-sech_n_n 692
-sin_n_n 693
-sinh_n_n 694
-tan_n_n 695
-tanh_n_n 696
-gcd_i_i_i 697
-gcd_i_ic_i 698
-gcd_i_i_ic 699
-lcm_i_i_i 700
-lcm_i_ic_i 701
-lcm_i_i_ic 702
-fact_i_i 703
-fact_n_i 704
-callmethodcc_p_s 705
-callmethodcc_p_sc 706
-callmethodcc_p_p 707
-callmethod_p_s_p 708
-callmethod_p_sc_p 709
-callmethod_p_p_p 710
-tailcallmethod_p_s 711
-tailcallmethod_p_sc 712
-tailcallmethod_p_p 713
-addmethod_p_s_p 714
-addmethod_p_sc_p 715
-can_i_p_s 716
-can_i_p_sc 717
-does_i_p_s 718
-does_i_p_sc 719
-does_i_p_p 720
-does_i_p_pc 721
-isa_i_p_s 722
-isa_i_p_sc 723
-isa_i_p_p 724
-isa_i_p_pc 725
-newclass_p_s 726
-newclass_p_sc 727
-newclass_p_p 728
-newclass_p_pc 729
-subclass_p_p 730
-subclass_p_pc 731
-subclass_p_p_s 732
-subclass_p_pc_s 733
-subclass_p_p_sc 734
-subclass_p_pc_sc 735
-subclass_p_p_p 736
-subclass_p_pc_p 737
-subclass_p_p_pc 738
-subclass_p_pc_pc 739
-subclass_p_s 740
-subclass_p_sc 741
-subclass_p_s_s 742
-subclass_p_sc_s 743
-subclass_p_s_sc 744
-subclass_p_sc_sc 745
-subclass_p_s_p 746
-subclass_p_sc_p 747
-subclass_p_s_pc 748
-subclass_p_sc_pc 749
-get_class_p_s 750
-get_class_p_sc 751
-get_class_p_p 752
-get_class_p_pc 753
-class_p_p 754
-addparent_p_p 755
-removeparent_p_p 756
-addrole_p_p 757
-addattribute_p_s 758
-addattribute_p_sc 759
-removeattribute_p_s 760
-removeattribute_p_sc 761
-getattribute_p_p_s 762
-getattribute_p_p_sc 763
-getattribute_p_p_p_s 764
-getattribute_p_p_pc_s 765
-getattribute_p_p_p_sc 766
-getattribute_p_p_pc_sc 767
-setattribute_p_s_p 768
-setattribute_p_sc_p 769
-setattribute_p_p_s_p 770
-setattribute_p_pc_s_p 771
-setattribute_p_p_sc_p 772
-setattribute_p_pc_sc_p 773
-inspect_p_p 774
-inspect_p_pc 775
-inspect_p_p_s 776
-inspect_p_pc_s 777
-inspect_p_p_sc 778
-inspect_p_pc_sc 779
-new_p_s 780
-new_p_sc 781
-new_p_s_p 782
-new_p_sc_p 783
-new_p_s_pc 784
-new_p_sc_pc 785
-new_p_p 786
-new_p_pc 787
-new_p_p_p 788
-new_p_pc_p 789
-new_p_p_pc 790
-new_p_pc_pc 791
-root_new_p_p 792
-root_new_p_pc 793
-root_new_p_p_p 794
-root_new_p_pc_p 795
-root_new_p_p_pc 796
-root_new_p_pc_pc 797
-typeof_s_p 798
-typeof_p_p 799
-get_repr_s_p 800
-find_method_p_p_s 801
-find_method_p_p_sc 802
-defined_i_p 803
-defined_i_p_ki 804
-defined_i_p_kic 805
-defined_i_p_k 806
-defined_i_p_kc 807
-exists_i_p_ki 808
-exists_i_p_kic 809
-exists_i_p_k 810
-exists_i_p_kc 811
-delete_p_k 812
-delete_p_kc 813
-delete_p_ki 814
-delete_p_kic 815
-elements_i_p 816
-push_p_i 817
-push_p_ic 818
-push_p_n 819
-push_p_nc 820
-push_p_s 821
-push_p_sc 822
-push_p_p 823
-pop_i_p 824
-pop_n_p 825
-pop_s_p 826
-pop_p_p 827
-unshift_p_i 828
-unshift_p_ic 829
-unshift_p_n 830
-unshift_p_nc 831
-unshift_p_s 832
-unshift_p_sc 833
-unshift_p_p 834
-shift_i_p 835
-shift_n_p 836
-shift_s_p 837
-shift_p_p 838
-splice_p_p_i_i 839
-splice_p_p_ic_i 840
-splice_p_p_i_ic 841
-splice_p_p_ic_ic 842
-setprop_p_s_p 843
-setprop_p_sc_p 844
-getprop_p_s_p 845
-getprop_p_sc_p 846
-delprop_p_s 847
-delprop_p_sc 848
-prophash_p_p 849
-freeze_s_p 850
-thaw_p_s 851
-thaw_p_sc 852
-add_multi_s_s_p 853
-add_multi_sc_s_p 854
-add_multi_s_sc_p 855
-add_multi_sc_sc_p 856
-find_multi_p_s_s 857
-find_multi_p_sc_s 858
-find_multi_p_s_sc 859
-find_multi_p_sc_sc 860
-register_p 861
-unregister_p 862
-box_p_i 863
-box_p_ic 864
-box_p_n 865
-box_p_nc 866
-box_p_s 867
-box_p_sc 868
-iter_p_p 869
-morph_p_p 870
-morph_p_pc 871
-clone_s_s 872
-clone_s_sc 873
-exchange_i_i 874
-exchange_p_p 875
-exchange_n_n 876
-exchange_s_s 877
-set_i_i 878
-set_i_ic 879
-set_i_n 880
-set_i_nc 881
-set_i_s 882
-set_i_sc 883
-set_n_n 884
-set_n_nc 885
-set_n_i 886
-set_n_ic 887
-set_n_s 888
-set_n_sc 889
-set_n_p 890
-set_s_p 891
-set_s_s 892
-set_s_sc 893
-set_s_i 894
-set_s_ic 895
-set_s_n 896
-set_s_nc 897
-set_p_pc 898
-set_p_p 899
-set_p_i 900
-set_p_ic 901
-set_p_n 902
-set_p_nc 903
-set_p_s 904
-set_p_sc 905
-set_i_p 906
-assign_p_p 907
-assign_p_i 908
-assign_p_ic 909
-assign_p_n 910
-assign_p_nc 911
-assign_p_s 912
-assign_p_sc 913
-assign_s_s 914
-assign_s_sc 915
-setref_p_p 916
-deref_p_p 917
-setp_ind_i_p 918
-setp_ind_ic_p 919
-setn_ind_i_n 920
-setn_ind_ic_n 921
-setn_ind_i_nc 922
-setn_ind_ic_nc 923
-sets_ind_i_s 924
-sets_ind_ic_s 925
-sets_ind_i_sc 926
-sets_ind_ic_sc 927
-seti_ind_i_i 928
-seti_ind_ic_i 929
-seti_ind_i_ic 930
-seti_ind_ic_ic 931
-set_p_ki_i 932
-set_p_kic_i 933
-set_p_ki_ic 934
-set_p_kic_ic 935
-set_p_ki_n 936
-set_p_kic_n 937
-set_p_ki_nc 938
-set_p_kic_nc 939
-set_p_ki_s 940
-set_p_kic_s 941
-set_p_ki_sc 942
-set_p_kic_sc 943
-set_p_ki_p 944
-set_p_kic_p 945
-set_i_p_ki 946
-set_i_p_kic 947
-set_n_p_ki 948
-set_n_p_kic 949
-set_s_p_ki 950
-set_s_p_kic 951
-set_p_p_ki 952
-set_p_p_kic 953
-set_p_k_i 954
-set_p_kc_i 955
-set_p_k_ic 956
-set_p_kc_ic 957
-set_p_k_n 958
-set_p_kc_n 959
-set_p_k_nc 960
-set_p_kc_nc 961
-set_p_k_s 962
-set_p_kc_s 963
-set_p_k_sc 964
-set_p_kc_sc 965
-set_p_k_p 966
-set_p_kc_p 967
-set_i_p_k 968
-set_i_p_kc 969
-set_n_p_k 970
-set_n_p_kc 971
-set_s_p_k 972
-set_s_p_kc 973
-set_p_p_k 974
-set_p_p_kc 975
-clone_p_p 976
-clone_p_p_p 977
-clone_p_p_pc 978
-copy_p_p 979
-null_s 980
-null_i 981
-null_p 982
-null_n 983
-cleari 984
-clearn 985
-clears 986
-clearp 987
-ord_i_s 988
-ord_i_sc 989
-ord_i_s_i 990
-ord_i_sc_i 991
-ord_i_s_ic 992
-ord_i_sc_ic 993
-chr_s_i 994
-chr_s_ic 995
-chopn_s_i 996
-chopn_s_ic 997
-chopn_s_s_i 998
-chopn_s_sc_i 999
-chopn_s_s_ic 1000
-chopn_s_sc_ic 1001
-concat_s_s 1002
-concat_s_sc 1003
-concat_p_p 1004
-concat_p_s 1005
-concat_p_sc 1006
-concat_s_s_s 1007
-concat_s_sc_s 1008
-concat_s_s_sc 1009
-concat_p_p_s 1010
-concat_p_p_sc 1011
-concat_p_p_p 1012
-repeat_s_s_i 1013
-repeat_s_sc_i 1014
-repeat_s_s_ic 1015
-repeat_s_sc_ic 1016
-repeat_p_p_i 1017
-repeat_p_p_ic 1018
-repeat_p_p_p 1019
-repeat_p_i 1020
-repeat_p_ic 1021
-repeat_p_p 1022
-length_i_s 1023
-length_i_sc 1024
-bytelength_i_s 1025
-bytelength_i_sc 1026
-pin_s 1027
-unpin_s 1028
-substr_s_s_i 1029
-substr_s_sc_i 1030
-substr_s_s_ic 1031
-substr_s_sc_ic 1032
-substr_s_s_i_i 1033
-substr_s_sc_i_i 1034
-substr_s_s_ic_i 1035
-substr_s_sc_ic_i 1036
-substr_s_s_i_ic 1037
-substr_s_sc_i_ic 1038
-substr_s_s_ic_ic 1039
-substr_s_sc_ic_ic 1040
-substr_s_s_i_i_s 1041
-substr_s_s_ic_i_s 1042
-substr_s_s_i_ic_s 1043
-substr_s_s_ic_ic_s 1044
-substr_s_s_i_i_sc 1045
-substr_s_s_ic_i_sc 1046
-substr_s_s_i_ic_sc 1047
-substr_s_s_ic_ic_sc 1048
-substr_s_i_i_s 1049
-substr_s_ic_i_s 1050
-substr_s_i_ic_s 1051
-substr_s_ic_ic_s 1052
-substr_s_i_i_sc 1053
-substr_s_ic_i_sc 1054
-substr_s_i_ic_sc 1055
-substr_s_ic_ic_sc 1056
-substr_s_p_i_i 1057
-substr_s_p_ic_i 1058
-substr_s_p_i_ic 1059
-substr_s_p_ic_ic 1060
-index_i_s_s 1061
-index_i_sc_s 1062
-index_i_s_sc 1063
-index_i_sc_sc 1064
-index_i_s_s_i 1065
-index_i_sc_s_i 1066
-index_i_s_sc_i 1067
-index_i_sc_sc_i 1068
-index_i_s_s_ic 1069
-index_i_sc_s_ic 1070
-index_i_s_sc_ic 1071
-index_i_sc_sc_ic 1072
-sprintf_s_s_p 1073
-sprintf_s_sc_p 1074
-sprintf_p_p_p 1075
-new_s 1076
-new_s_i 1077
-new_s_ic 1078
-stringinfo_i_s_i 1079
-stringinfo_i_sc_i 1080
-stringinfo_i_s_ic 1081
-stringinfo_i_sc_ic 1082
-upcase_s_s 1083
-upcase_s_sc 1084
-upcase_s 1085
-downcase_s_s 1086
-downcase_s_sc 1087
-downcase_s 1088
-titlecase_s_s 1089
-titlecase_s_sc 1090
-titlecase_s 1091
-join_s_s_p 1092
-join_s_sc_p 1093
-split_p_s_s 1094
-split_p_sc_s 1095
-split_p_s_sc 1096
-split_p_sc_sc 1097
-charset_i_s 1098
-charset_i_sc 1099
-charsetname_s_i 1100
-charsetname_s_ic 1101
-find_charset_i_s 1102
-find_charset_i_sc 1103
-trans_charset_s_i 1104
-trans_charset_s_ic 1105
-trans_charset_s_s_i 1106
-trans_charset_s_sc_i 1107
-trans_charset_s_s_ic 1108
-trans_charset_s_sc_ic 1109
-encoding_i_s 1110
-encoding_i_sc 1111
-encodingname_s_i 1112
-encodingname_s_ic 1113
-find_encoding_i_s 1114
-find_encoding_i_sc 1115
-trans_encoding_s_i 1116
-trans_encoding_s_ic 1117
-trans_encoding_s_s_i 1118
-trans_encoding_s_sc_i 1119
-trans_encoding_s_s_ic 1120
-trans_encoding_s_sc_ic 1121
-is_cclass_i_i_s_i 1122
-is_cclass_i_ic_s_i 1123
-is_cclass_i_i_sc_i 1124
-is_cclass_i_ic_sc_i 1125
-is_cclass_i_i_s_ic 1126
-is_cclass_i_ic_s_ic 1127
-is_cclass_i_i_sc_ic 1128
-is_cclass_i_ic_sc_ic 1129
-find_cclass_i_i_s_i_i 1130
-find_cclass_i_ic_s_i_i 1131
-find_cclass_i_i_sc_i_i 1132
-find_cclass_i_ic_sc_i_i 1133
-find_cclass_i_i_s_ic_i 1134
-find_cclass_i_ic_s_ic_i 1135
-find_cclass_i_i_sc_ic_i 1136
-find_cclass_i_ic_sc_ic_i 1137
-find_cclass_i_i_s_i_ic 1138
-find_cclass_i_ic_s_i_ic 1139
-find_cclass_i_i_sc_i_ic 1140
-find_cclass_i_ic_sc_i_ic 1141
-find_cclass_i_i_s_ic_ic 1142
-find_cclass_i_ic_s_ic_ic 1143
-find_cclass_i_i_sc_ic_ic 1144
-find_cclass_i_ic_sc_ic_ic 1145
-find_not_cclass_i_i_s_i_i 1146
-find_not_cclass_i_ic_s_i_i 1147
-find_not_cclass_i_i_sc_i_i 1148
-find_not_cclass_i_ic_sc_i_i 1149
-find_not_cclass_i_i_s_ic_i 1150
-find_not_cclass_i_ic_s_ic_i 1151
-find_not_cclass_i_i_sc_ic_i 1152
-find_not_cclass_i_ic_sc_ic_i 1153
-find_not_cclass_i_i_s_i_ic 1154
-find_not_cclass_i_ic_s_i_ic 1155
-find_not_cclass_i_i_sc_i_ic 1156
-find_not_cclass_i_ic_sc_i_ic 1157
-find_not_cclass_i_i_s_ic_ic 1158
-find_not_cclass_i_ic_s_ic_ic 1159
-find_not_cclass_i_i_sc_ic_ic 1160
-find_not_cclass_i_ic_sc_ic_ic 1161
-escape_s_s 1162
-compose_s_s 1163
-compose_s_sc 1164
-spawnw_i_s 1165
-spawnw_i_sc 1166
-spawnw_i_p 1167
-err_i 1168
-err_s 1169
-err_s_i 1170
-err_s_ic 1171
-time_i 1172
-time_n 1173
-gmtime_s_i 1174
-gmtime_s_ic 1175
-localtime_s_i 1176
-localtime_s_ic 1177
-decodetime_p_i 1178
-decodetime_p_ic 1179
-decodelocaltime_p_i 1180
-decodelocaltime_p_ic 1181
-sysinfo_s_i 1182
-sysinfo_s_ic 1183
-sysinfo_i_i 1184
-sysinfo_i_ic 1185
-sleep_i 1186
-sleep_ic 1187
-sleep_n 1188
-sleep_nc 1189
-sizeof_i_i 1190
-sizeof_i_ic 1191
-store_lex_s_p 1192
-store_lex_sc_p 1193
-store_dynamic_lex_s_p 1194
-store_dynamic_lex_sc_p 1195
-find_lex_p_s 1196
-find_lex_p_sc 1197
-find_dynamic_lex_p_s 1198
-find_dynamic_lex_p_sc 1199
-find_caller_lex_p_s 1200
-find_caller_lex_p_sc 1201
-get_namespace_p 1202
-get_namespace_p_p 1203
-get_namespace_p_pc 1204
-get_hll_namespace_p 1205
-get_hll_namespace_p_p 1206
-get_hll_namespace_p_pc 1207
-get_root_namespace_p 1208
-get_root_namespace_p_p 1209
-get_root_namespace_p_pc 1210
-get_global_p_s 1211
-get_global_p_sc 1212
-get_global_p_p_s 1213
-get_global_p_pc_s 1214
-get_global_p_p_sc 1215
-get_global_p_pc_sc 1216
-get_hll_global_p_s 1217
-get_hll_global_p_sc 1218
-get_hll_global_p_p_s 1219
-get_hll_global_p_pc_s 1220
-get_hll_global_p_p_sc 1221
-get_hll_global_p_pc_sc 1222
-get_root_global_p_s 1223
-get_root_global_p_sc 1224
-get_root_global_p_p_s 1225
-get_root_global_p_pc_s 1226
-get_root_global_p_p_sc 1227
-get_root_global_p_pc_sc 1228
-set_global_s_p 1229
-set_global_sc_p 1230
-set_global_p_s_p 1231
-set_global_pc_s_p 1232
-set_global_p_sc_p 1233
-set_global_pc_sc_p 1234
-set_hll_global_s_p 1235
-set_hll_global_sc_p 1236
-set_hll_global_p_s_p 1237
-set_hll_global_pc_s_p 1238
-set_hll_global_p_sc_p 1239
-set_hll_global_pc_sc_p 1240
-set_root_global_s_p 1241
-set_root_global_sc_p 1242
-set_root_global_p_s_p 1243
-set_root_global_pc_s_p 1244
-set_root_global_p_sc_p 1245
-set_root_global_pc_sc_p 1246
-find_name_p_s 1247
-find_name_p_sc 1248
-find_sub_not_null_p_s 1249
-find_sub_not_null_p_sc 1250
+load_bytecode_s 5
+load_bytecode_sc 6
+load_language_s 7
+load_language_sc 8
+branch_i 9
+branch_ic 10
+local_branch_p_i 11
+local_branch_p_ic 12
+local_return_p 13
+jump_i 14
+jump_ic 15
+enternative 16
+if_i_ic 17
+if_n_ic 18
+if_s_ic 19
+if_p_ic 20
+unless_i_ic 21
+unless_n_ic 22
+unless_s_ic 23
+unless_p_ic 24
+invokecc_p 25
+invoke_p_p 26
+yield 27
+tailcall_p 28
+returncc 29
+capture_lex_p 30
+newclosure_p_p 31
+set_args_pc 32
+get_results_pc 33
+get_params_pc 34
+set_returns_pc 35
+result_info_p 36
+set_addr_i_ic 37
+set_addr_p_ic 38
+set_addr_p_i 39
+get_addr_i_p 40
+schedule_p 41
+addhandler_p 42
+push_eh_ic 43
+push_eh_p 44
+pop_eh 45
+throw_p 46
+throw_p_p 47
+rethrow_p 48
+count_eh_i 49
+die_s 50
+die_sc 51
+die_p 52
+die_pc 53
+die_i_i 54
+die_ic_i 55
+die_i_ic 56
+die_ic_ic 57
+exit_i 58
+exit_ic 59
+pushmark_i 60
+pushmark_ic 61
+popmark_i 62
+popmark_ic 63
+pushaction_p 64
+debug_i 65
+debug_ic 66
+bounds_i 67
+bounds_ic 68
+profile_i 69
+profile_ic 70
+trace_i 71
+trace_ic 72
+gc_debug_i 73
+gc_debug_ic 74
+interpinfo_i_i 75
+interpinfo_i_ic 76
+interpinfo_p_i 77
+interpinfo_p_ic 78
+interpinfo_s_i 79
+interpinfo_s_ic 80
+warningson_i 81
+warningson_ic 82
+warningsoff_i 83
+warningsoff_ic 84
+errorson_i 85
+errorson_ic 86
+errorsoff_i 87
+errorsoff_ic 88
+runinterp_p_i 89
+runinterp_p_ic 90
+getinterp_p 91
+sweep_ic 92
+collect 93
+sweepoff 94
+sweepon 95
+collectoff 96
+collecton 97
+needs_destroy_p 98
+loadlib_p_s 99
+loadlib_p_sc 100
+dlfunc_p_p_s_s 101
+dlfunc_p_p_sc_s 102
+dlfunc_p_p_s_sc 103
+dlfunc_p_p_sc_sc 104
+dlvar_p_p_s 105
+dlvar_p_p_sc 106
+compreg_s_p 107
+compreg_sc_p 108
+compreg_p_s 109
+compreg_p_sc 110
+new_callback_p_p_p_s 111
+new_callback_p_p_p_sc 112
+annotations_p 113
+annotations_p_s 114
+annotations_p_sc 115
+band_i_i 116
+band_i_ic 117
+band_p_i 118
+band_p_ic 119
+band_p_p 120
+band_i_i_i 121
+band_i_ic_i 122
+band_i_i_ic 123
+band_p_p_i 124
+band_p_p_ic 125
+band_p_p_p 126
+bands_s_s 127
+bands_s_sc 128
+bands_p_s 129
+bands_p_sc 130
+bands_p_p 131
+bands_s_s_s 132
+bands_s_sc_s 133
+bands_s_s_sc 134
+bands_p_p_s 135
+bands_p_p_sc 136
+bands_p_p_p 137
+bnot_i 138
+bnot_i_i 139
+bnot_p 140
+bnot_p_p 141
+bnots_s 142
+bnots_s_s 143
+bnots_s_sc 144
+bnots_p 145
+bnots_p_p 146
+bor_i_i 147
+bor_i_ic 148
+bor_p_i 149
+bor_p_ic 150
+bor_p_p 151
+bor_i_i_i 152
+bor_i_ic_i 153
+bor_i_i_ic 154
+bor_p_p_i 155
+bor_p_p_ic 156
+bor_p_p_p 157
+bors_s_s 158
+bors_s_sc 159
+bors_p_s 160
+bors_p_sc 161
+bors_p_p 162
+bors_s_s_s 163
+bors_s_sc_s 164
+bors_s_s_sc 165
+bors_p_p_s 166
+bors_p_p_sc 167
+bors_p_p_p 168
+shl_i_i 169
+shl_i_ic 170
+shl_p_i 171
+shl_p_ic 172
+shl_p_p 173
+shl_i_i_i 174
+shl_i_ic_i 175
+shl_i_i_ic 176
+shl_p_p_i 177
+shl_p_p_ic 178
+shl_p_p_p 179
+shr_i_i 180
+shr_i_ic 181
+shr_p_i 182
+shr_p_ic 183
+shr_p_p 184
+shr_i_i_i 185
+shr_i_ic_i 186
+shr_i_i_ic 187
+shr_p_p_i 188
+shr_p_p_ic 189
+shr_p_p_p 190
+lsr_i_i 191
+lsr_i_ic 192
+lsr_p_i 193
+lsr_p_ic 194
+lsr_p_p 195
+lsr_i_i_i 196
+lsr_i_ic_i 197
+lsr_i_i_ic 198
+lsr_p_p_i 199
+lsr_p_p_ic 200
+lsr_p_p_p 201
+rot_i_i_i_ic 202
+rot_i_ic_i_ic 203
+rot_i_i_ic_ic 204
+bxor_i_i 205
+bxor_i_ic 206
+bxor_p_i 207
+bxor_p_ic 208
+bxor_p_p 209
+bxor_i_i_i 210
+bxor_i_ic_i 211
+bxor_i_i_ic 212
+bxor_p_p_i 213
+bxor_p_p_ic 214
+bxor_p_p_p 215
+bxors_s_s 216
+bxors_s_sc 217
+bxors_p_s 218
+bxors_p_sc 219
+bxors_p_p 220
+bxors_s_s_s 221
+bxors_s_sc_s 222
+bxors_s_s_sc 223
+bxors_p_p_s 224
+bxors_p_p_sc 225
+bxors_p_p_p 226
+eq_i_i_ic 227
+eq_ic_i_ic 228
+eq_i_ic_ic 229
+eq_n_n_ic 230
+eq_nc_n_ic 231
+eq_n_nc_ic 232
+eq_s_s_ic 233
+eq_sc_s_ic 234
+eq_s_sc_ic 235
+eq_p_p_ic 236
+eq_p_i_ic 237
+eq_p_ic_ic 238
+eq_p_n_ic 239
+eq_p_nc_ic 240
+eq_p_s_ic 241
+eq_p_sc_ic 242
+eq_str_p_p_ic 243
+eq_num_p_p_ic 244
+eq_addr_s_s_ic 245
+eq_addr_sc_s_ic 246
+eq_addr_s_sc_ic 247
+eq_addr_sc_sc_ic 248
+eq_addr_p_p_ic 249
+ne_i_i_ic 250
+ne_ic_i_ic 251
+ne_i_ic_ic 252
+ne_n_n_ic 253
+ne_nc_n_ic 254
+ne_n_nc_ic 255
+ne_s_s_ic 256
+ne_sc_s_ic 257
+ne_s_sc_ic 258
+ne_p_p_ic 259
+ne_p_i_ic 260
+ne_p_ic_ic 261
+ne_p_n_ic 262
+ne_p_nc_ic 263
+ne_p_s_ic 264
+ne_p_sc_ic 265
+ne_str_p_p_ic 266
+ne_num_p_p_ic 267
+ne_addr_s_s_ic 268
+ne_addr_sc_s_ic 269
+ne_addr_s_sc_ic 270
+ne_addr_sc_sc_ic 271
+ne_addr_p_p_ic 272
+lt_i_i_ic 273
+lt_ic_i_ic 274
+lt_i_ic_ic 275
+lt_n_n_ic 276
+lt_nc_n_ic 277
+lt_n_nc_ic 278
+lt_s_s_ic 279
+lt_sc_s_ic 280
+lt_s_sc_ic 281
+lt_p_p_ic 282
+lt_p_i_ic 283
+lt_p_ic_ic 284
+lt_p_n_ic 285
+lt_p_nc_ic 286
+lt_p_s_ic 287
+lt_p_sc_ic 288
+lt_str_p_p_ic 289
+lt_num_p_p_ic 290
+le_i_i_ic 291
+le_ic_i_ic 292
+le_i_ic_ic 293
+le_n_n_ic 294
+le_nc_n_ic 295
+le_n_nc_ic 296
+le_s_s_ic 297
+le_sc_s_ic 298
+le_s_sc_ic 299
+le_p_p_ic 300
+le_p_i_ic 301
+le_p_ic_ic 302
+le_p_n_ic 303
+le_p_nc_ic 304
+le_p_s_ic 305
+le_p_sc_ic 306
+le_str_p_p_ic 307
+le_num_p_p_ic 308
+gt_p_p_ic 309
+gt_p_i_ic 310
+gt_p_ic_ic 311
+gt_p_n_ic 312
+gt_p_nc_ic 313
+gt_p_s_ic 314
+gt_p_sc_ic 315
+gt_str_p_p_ic 316
+gt_num_p_p_ic 317
+ge_p_p_ic 318
+ge_p_i_ic 319
+ge_p_ic_ic 320
+ge_p_n_ic 321
+ge_p_nc_ic 322
+ge_p_s_ic 323
+ge_p_sc_ic 324
+ge_str_p_p_ic 325
+ge_num_p_p_ic 326
+if_null_p_ic 327
+if_null_s_ic 328
+unless_null_p_ic 329
+unless_null_s_ic 330
+cmp_i_i_i 331
+cmp_i_ic_i 332
+cmp_i_i_ic 333
+cmp_i_n_n 334
+cmp_i_nc_n 335
+cmp_i_n_nc 336
+cmp_i_s_s 337
+cmp_i_sc_s 338
+cmp_i_s_sc 339
+cmp_i_p_p 340
+cmp_i_p_i 341
+cmp_i_p_ic 342
+cmp_i_p_n 343
+cmp_i_p_nc 344
+cmp_i_p_s 345
+cmp_i_p_sc 346
+cmp_str_i_p_p 347
+cmp_num_i_p_p 348
+cmp_pmc_p_p_p 349
+issame_i_p_p 350
+issame_i_s_s 351
+issame_i_sc_s 352
+issame_i_s_sc 353
+issame_i_sc_sc 354
+isntsame_i_p_p 355
+isntsame_i_s_s 356
+isntsame_i_sc_s 357
+isntsame_i_s_sc 358
+isntsame_i_sc_sc 359
+istrue_i_p 360
+isfalse_i_p 361
+isnull_i_p 362
+isnull_i_pc 363
+isnull_i_s 364
+isnull_i_sc 365
+isgt_i_p_p 366
+isge_i_p_p 367
+isle_i_i_i 368
+isle_i_ic_i 369
+isle_i_i_ic 370
+isle_i_n_n 371
+isle_i_nc_n 372
+isle_i_n_nc 373
+isle_i_s_s 374
+isle_i_sc_s 375
+isle_i_s_sc 376
+isle_i_p_p 377
+islt_i_i_i 378
+islt_i_ic_i 379
+islt_i_i_ic 380
+islt_i_n_n 381
+islt_i_nc_n 382
+islt_i_n_nc 383
+islt_i_s_s 384
+islt_i_sc_s 385
+islt_i_s_sc 386
+islt_i_p_p 387
+iseq_i_i_i 388
+iseq_i_ic_i 389
+iseq_i_i_ic 390
+iseq_i_n_n 391
+iseq_i_nc_n 392
+iseq_i_n_nc 393
+iseq_i_s_s 394
+iseq_i_sc_s 395
+iseq_i_s_sc 396
+iseq_i_p_p 397
+isne_i_i_i 398
+isne_i_ic_i 399
+isne_i_i_ic 400
+isne_i_n_n 401
+isne_i_nc_n 402
+isne_i_n_nc 403
+isne_i_s_s 404
+isne_i_sc_s 405
+isne_i_s_sc 406
+isne_i_p_p 407
+and_i_i_i 408
+and_i_ic_i 409
+and_i_i_ic 410
+and_p_p_p 411
+not_i 412
+not_i_i 413
+not_p 414
+not_p_p 415
+or_i_i_i 416
+or_i_ic_i 417
+or_i_i_ic 418
+or_p_p_p 419
+xor_i_i_i 420
+xor_i_ic_i 421
+xor_i_i_ic 422
+xor_p_p_p 423
+debug_init 424
+debug_load_sc 425
+debug_break 426
+debug_print 427
+backtrace 428
+getline_i 429
+getfile_s 430
+set_label_p_ic 431
+get_label_i_p 432
+close_p 433
+fdopen_p_i_s 434
+fdopen_p_ic_s 435
+fdopen_p_i_sc 436
+fdopen_p_ic_sc 437
+getstdin_p 438
+getstdout_p 439
+getstderr_p 440
+setstdin_p 441
+setstdout_p 442
+setstderr_p 443
+open_p_s_s 444
+open_p_sc_s 445
+open_p_s_sc 446
+open_p_sc_sc 447
+open_p_s 448
+open_p_sc 449
+print_i 450
+print_ic 451
+print_n 452
+print_nc 453
+print_s 454
+print_sc 455
+print_p 456
+say_i 457
+say_ic 458
+say_n 459
+say_nc 460
+say_s 461
+say_sc 462
+say_p 463
+printerr_i 464
+printerr_ic 465
+printerr_n 466
+printerr_nc 467
+printerr_s 468
+printerr_sc 469
+printerr_p 470
+print_p_i 471
+print_p_ic 472
+print_p_n 473
+print_p_nc 474
+print_p_s 475
+print_p_sc 476
+print_p_p 477
+read_s_i 478
+read_s_ic 479
+read_s_p_i 480
+read_s_p_ic 481
+readline_s_p 482
+peek_s 483
+peek_s_p 484
+stat_i_s_i 485
+stat_i_sc_i 486
+stat_i_s_ic 487
+stat_i_sc_ic 488
+stat_i_i_i 489
+stat_i_ic_i 490
+stat_i_i_ic 491
+stat_i_ic_ic 492
+seek_p_i_i 493
+seek_p_ic_i 494
+seek_p_i_ic 495
+seek_p_ic_ic 496
+seek_p_i_i_i 497
+seek_p_ic_i_i 498
+seek_p_i_ic_i 499
+seek_p_ic_ic_i 500
+seek_p_i_i_ic 501
+seek_p_ic_i_ic 502
+seek_p_i_ic_ic 503
+seek_p_ic_ic_ic 504
+tell_i_p 505
+tell_i_i_p 506
+abs_i 507
+abs_n 508
+abs_i_i 509
+abs_n_n 510
+abs_p 511
+abs_p_p 512
+add_i_i 513
+add_i_ic 514
+add_n_n 515
+add_n_nc 516
+add_p_p 517
+add_p_i 518
+add_p_ic 519
+add_p_n 520
+add_p_nc 521
+add_i_i_i 522
+add_i_ic_i 523
+add_i_i_ic 524
+add_n_n_n 525
+add_n_nc_n 526
+add_n_n_nc 527
+add_p_p_p 528
+add_p_p_i 529
+add_p_p_ic 530
+add_p_p_n 531
+add_p_p_nc 532
+cmod_i_i_i 533
+cmod_i_ic_i 534
+cmod_i_i_ic 535
+cmod_p_p_i 536
+cmod_p_p_ic 537
+cmod_p_p_p 538
+cmod_n_n_n 539
+cmod_n_nc_n 540
+cmod_n_n_nc 541
+cmod_p_p_n 542
+cmod_p_p_nc 543
+dec_i 544
+dec_n 545
+dec_p 546
+div_i_i 547
+div_i_ic 548
+div_n_n 549
+div_n_nc 550
+div_p_p 551
+div_p_i 552
+div_p_ic 553
+div_p_n 554
+div_p_nc 555
+div_i_i_i 556
+div_i_ic_i 557
+div_i_i_ic 558
+div_i_ic_ic 559
+div_n_n_n 560
+div_n_nc_n 561
+div_n_n_nc 562
+div_n_nc_nc 563
+div_p_p_p 564
+div_p_p_i 565
+div_p_p_ic 566
+div_p_p_n 567
+div_p_p_nc 568
+fdiv_i_i 569
+fdiv_i_ic 570
+fdiv_n_n 571
+fdiv_n_nc 572
+fdiv_p_p 573
+fdiv_p_i 574
+fdiv_p_ic 575
+fdiv_p_n 576
+fdiv_p_nc 577
+fdiv_i_i_i 578
+fdiv_i_ic_i 579
+fdiv_i_i_ic 580
+fdiv_n_n_n 581
+fdiv_n_nc_n 582
+fdiv_n_n_nc 583
+fdiv_p_p_p 584
+fdiv_p_p_i 585
+fdiv_p_p_ic 586
+fdiv_p_p_n 587
+fdiv_p_p_nc 588
+ceil_n 589
+ceil_i_n 590
+ceil_n_n 591
+floor_n 592
+floor_i_n 593
+floor_n_n 594
+inc_i 595
+inc_n 596
+inc_p 597
+mod_i_i 598
+mod_i_ic 599
+mod_n_n 600
+mod_n_nc 601
+mod_p_p 602
+mod_p_i 603
+mod_p_ic 604
+mod_p_n 605
+mod_p_nc 606
+mod_i_i_i 607
+mod_i_ic_i 608
+mod_i_i_ic 609
+mod_n_n_n 610
+mod_n_nc_n 611
+mod_n_n_nc 612
+mod_p_p_p 613
+mod_p_p_i 614
+mod_p_p_ic 615
+mod_p_p_n 616
+mod_p_p_nc 617
+mul_i_i 618
+mul_i_ic 619
+mul_n_n 620
+mul_n_nc 621
+mul_p_p 622
+mul_p_i 623
+mul_p_ic 624
+mul_p_n 625
+mul_p_nc 626
+mul_i_i_i 627
+mul_i_ic_i 628
+mul_i_i_ic 629
+mul_n_n_n 630
+mul_n_nc_n 631
+mul_n_n_nc 632
+mul_p_p_p 633
+mul_p_p_i 634
+mul_p_p_ic 635
+mul_p_p_n 636
+mul_p_p_nc 637
+neg_i 638
+neg_n 639
+neg_p 640
+neg_i_i 641
+neg_n_n 642
+neg_p_p 643
+pow_n_n_n 644
+pow_n_nc_n 645
+pow_n_n_nc 646
+pow_p_p_p 647
+pow_p_p_i 648
+pow_p_p_ic 649
+pow_p_p_n 650
+pow_p_p_nc 651
+pow_n_n_i 652
+pow_n_nc_i 653
+pow_n_n_ic 654
+pow_n_nc_ic 655
+sub_i_i 656
+sub_i_ic 657
+sub_n_n 658
+sub_n_nc 659
+sub_p_p 660
+sub_p_i 661
+sub_p_ic 662
+sub_p_n 663
+sub_p_nc 664
+sub_i_i_i 665
+sub_i_ic_i 666
+sub_i_i_ic 667
+sub_n_n_n 668
+sub_n_nc_n 669
+sub_n_n_nc 670
+sub_p_p_p 671
+sub_p_p_i 672
+sub_p_p_ic 673
+sub_p_p_n 674
+sub_p_p_nc 675
+sqrt_n_n 676
+acos_n_n 677
+asec_n_n 678
+asin_n_n 679
+atan_n_n 680
+atan_n_n_n 681
+atan_n_nc_n 682
+atan_n_n_nc 683
+cos_n_n 684
+cosh_n_n 685
+exp_n_n 686
+ln_n_n 687
+log10_n_n 688
+log2_n_n 689
+sec_n_n 690
+sech_n_n 691
+sin_n_n 692
+sinh_n_n 693
+tan_n_n 694
+tanh_n_n 695
+gcd_i_i_i 696
+gcd_i_ic_i 697
+gcd_i_i_ic 698
+lcm_i_i_i 699
+lcm_i_ic_i 700
+lcm_i_i_ic 701
+fact_i_i 702
+fact_n_i 703
+callmethodcc_p_s 704
+callmethodcc_p_sc 705
+callmethodcc_p_p 706
+callmethod_p_s_p 707
+callmethod_p_sc_p 708
+callmethod_p_p_p 709
+tailcallmethod_p_s 710
+tailcallmethod_p_sc 711
+tailcallmethod_p_p 712
+addmethod_p_s_p 713
+addmethod_p_sc_p 714
+can_i_p_s 715
+can_i_p_sc 716
+does_i_p_s 717
+does_i_p_sc 718
+does_i_p_p 719
+does_i_p_pc 720
+isa_i_p_s 721
+isa_i_p_sc 722
+isa_i_p_p 723
+isa_i_p_pc 724
+newclass_p_s 725
+newclass_p_sc 726
+newclass_p_p 727
+newclass_p_pc 728
+subclass_p_p 729
+subclass_p_pc 730
+subclass_p_p_s 731
+subclass_p_pc_s 732
+subclass_p_p_sc 733
+subclass_p_pc_sc 734
+subclass_p_p_p 735
+subclass_p_pc_p 736
+subclass_p_p_pc 737
+subclass_p_pc_pc 738
+subclass_p_s 739
+subclass_p_sc 740
+subclass_p_s_s 741
+subclass_p_sc_s 742
+subclass_p_s_sc 743
+subclass_p_sc_sc 744
+subclass_p_s_p 745
+subclass_p_sc_p 746
+subclass_p_s_pc 747
+subclass_p_sc_pc 748
+get_class_p_s 749
+get_class_p_sc 750
+get_class_p_p 751
+get_class_p_pc 752
+class_p_p 753
+addparent_p_p 754
+removeparent_p_p 755
+addrole_p_p 756
+addattribute_p_s 757
+addattribute_p_sc 758
+removeattribute_p_s 759
+removeattribute_p_sc 760
+getattribute_p_p_s 761
+getattribute_p_p_sc 762
+getattribute_p_p_p_s 763
+getattribute_p_p_pc_s 764
+getattribute_p_p_p_sc 765
+getattribute_p_p_pc_sc 766
+setattribute_p_s_p 767
+setattribute_p_sc_p 768
+setattribute_p_p_s_p 769
+setattribute_p_pc_s_p 770
+setattribute_p_p_sc_p 771
+setattribute_p_pc_sc_p 772
+inspect_p_p 773
+inspect_p_pc 774
+inspect_p_p_s 775
+inspect_p_pc_s 776
+inspect_p_p_sc 777
+inspect_p_pc_sc 778
+new_p_s 779
+new_p_sc 780
+new_p_s_p 781
+new_p_sc_p 782
+new_p_s_pc 783
+new_p_sc_pc 784
+new_p_p 785
+new_p_pc 786
+new_p_p_p 787
+new_p_pc_p 788
+new_p_p_pc 789
+new_p_pc_pc 790
+root_new_p_p 791
+root_new_p_pc 792
+root_new_p_p_p 793
+root_new_p_pc_p 794
+root_new_p_p_pc 795
+root_new_p_pc_pc 796
+typeof_s_p 797
+typeof_p_p 798
+get_repr_s_p 799
+find_method_p_p_s 800
+find_method_p_p_sc 801
+defined_i_p 802
+defined_i_p_ki 803
+defined_i_p_kic 804
+defined_i_p_k 805
+defined_i_p_kc 806
+exists_i_p_ki 807
+exists_i_p_kic 808
+exists_i_p_k 809
+exists_i_p_kc 810
+delete_p_k 811
+delete_p_kc 812
+delete_p_ki 813
+delete_p_kic 814
+elements_i_p 815
+push_p_i 816
+push_p_ic 817
+push_p_n 818
+push_p_nc 819
+push_p_s 820
+push_p_sc 821
+push_p_p 822
+pop_i_p 823
+pop_n_p 824
+pop_s_p 825
+pop_p_p 826
+unshift_p_i 827
+unshift_p_ic 828
+unshift_p_n 829
+unshift_p_nc 830
+unshift_p_s 831
+unshift_p_sc 832
+unshift_p_p 833
+shift_i_p 834
+shift_n_p 835
+shift_s_p 836
+shift_p_p 837
+splice_p_p_i_i 838
+splice_p_p_ic_i 839
+splice_p_p_i_ic 840
+splice_p_p_ic_ic 841
+setprop_p_s_p 842
+setprop_p_sc_p 843
+getprop_p_s_p 844
+getprop_p_sc_p 845
+delprop_p_s 846
+delprop_p_sc 847
+prophash_p_p 848
+freeze_s_p 849
+thaw_p_s 850
+thaw_p_sc 851
+add_multi_s_s_p 852
+add_multi_sc_s_p 853
+add_multi_s_sc_p 854
+add_multi_sc_sc_p 855
+find_multi_p_s_s 856
+find_multi_p_sc_s 857
+find_multi_p_s_sc 858
+find_multi_p_sc_sc 859
+register_p 860
+unregister_p 861
+box_p_i 862
+box_p_ic 863
+box_p_n 864
+box_p_nc 865
+box_p_s 866
+box_p_sc 867
+iter_p_p 868
+morph_p_p 869
+morph_p_pc 870
+clone_s_s 871
+clone_s_sc 872
+exchange_i_i 873
+exchange_p_p 874
+exchange_n_n 875
+exchange_s_s 876
+set_i_i 877
+set_i_ic 878
+set_i_n 879
+set_i_nc 880
+set_i_s 881
+set_i_sc 882
+set_n_n 883
+set_n_nc 884
+set_n_i 885
+set_n_ic 886
+set_n_s 887
+set_n_sc 888
+set_n_p 889
+set_s_p 890
+set_s_s 891
+set_s_sc 892
+set_s_i 893
+set_s_ic 894
+set_s_n 895
+set_s_nc 896
+set_p_pc 897
+set_p_p 898
+set_p_i 899
+set_p_ic 900
+set_p_n 901
+set_p_nc 902
+set_p_s 903
+set_p_sc 904
+set_i_p 905
+assign_p_p 906
+assign_p_i 907
+assign_p_ic 908
+assign_p_n 909
+assign_p_nc 910
+assign_p_s 911
+assign_p_sc 912
+assign_s_s 913
+assign_s_sc 914
+setref_p_p 915
+deref_p_p 916
+setp_ind_i_p 917
+setp_ind_ic_p 918
+setn_ind_i_n 919
+setn_ind_ic_n 920
+setn_ind_i_nc 921
+setn_ind_ic_nc 922
+sets_ind_i_s 923
+sets_ind_ic_s 924
+sets_ind_i_sc 925
+sets_ind_ic_sc 926
+seti_ind_i_i 927
+seti_ind_ic_i 928
+seti_ind_i_ic 929
+seti_ind_ic_ic 930
+set_p_ki_i 931
+set_p_kic_i 932
+set_p_ki_ic 933
+set_p_kic_ic 934
+set_p_ki_n 935
+set_p_kic_n 936
+set_p_ki_nc 937
+set_p_kic_nc 938
+set_p_ki_s 939
+set_p_kic_s 940
+set_p_ki_sc 941
+set_p_kic_sc 942
+set_p_ki_p 943
+set_p_kic_p 944
+set_i_p_ki 945
+set_i_p_kic 946
+set_n_p_ki 947
+set_n_p_kic 948
+set_s_p_ki 949
+set_s_p_kic 950
+set_p_p_ki 951
+set_p_p_kic 952
+set_p_k_i 953
+set_p_kc_i 954
+set_p_k_ic 955
+set_p_kc_ic 956
+set_p_k_n 957
+set_p_kc_n 958
+set_p_k_nc 959
+set_p_kc_nc 960
+set_p_k_s 961
+set_p_kc_s 962
+set_p_k_sc 963
+set_p_kc_sc 964
+set_p_k_p 965
+set_p_kc_p 966
+set_i_p_k 967
+set_i_p_kc 968
+set_n_p_k 969
+set_n_p_kc 970
+set_s_p_k 971
+set_s_p_kc 972
+set_p_p_k 973
+set_p_p_kc 974
+clone_p_p 975
+clone_p_p_p 976
+clone_p_p_pc 977
+copy_p_p 978
+null_s 979
+null_i 980
+null_p 981
+null_n 982
+cleari 983
+clearn 984
+clears 985
+clearp 986
+ord_i_s 987
+ord_i_sc 988
+ord_i_s_i 989
+ord_i_sc_i 990
+ord_i_s_ic 991
+ord_i_sc_ic 992
+chr_s_i 993
+chr_s_ic 994
+chopn_s_i 995
+chopn_s_ic 996
+chopn_s_s_i 997
+chopn_s_sc_i 998
+chopn_s_s_ic 999
+chopn_s_sc_ic 1000
+concat_s_s 1001
+concat_s_sc 1002
+concat_p_p 1003
+concat_p_s 1004
+concat_p_sc 1005
+concat_s_s_s 1006
+concat_s_sc_s 1007
+concat_s_s_sc 1008
+concat_p_p_s 1009
+concat_p_p_sc 1010
+concat_p_p_p 1011
+repeat_s_s_i 1012
+repeat_s_sc_i 1013
+repeat_s_s_ic 1014
+repeat_s_sc_ic 1015
+repeat_p_p_i 1016
+repeat_p_p_ic 1017
+repeat_p_p_p 1018
+repeat_p_i 1019
+repeat_p_ic 1020
+repeat_p_p 1021
+length_i_s 1022
+length_i_sc 1023
+bytelength_i_s 1024
+bytelength_i_sc 1025
+pin_s 1026
+unpin_s 1027
+substr_s_s_i 1028
+substr_s_sc_i 1029
+substr_s_s_ic 1030
+substr_s_sc_ic 1031
+substr_s_s_i_i 1032
+substr_s_sc_i_i 1033
+substr_s_s_ic_i 1034
+substr_s_sc_ic_i 1035
+substr_s_s_i_ic 1036
+substr_s_sc_i_ic 1037
+substr_s_s_ic_ic 1038
+substr_s_sc_ic_ic 1039
+substr_s_s_i_i_s 1040
+substr_s_s_ic_i_s 1041
+substr_s_s_i_ic_s 1042
+substr_s_s_ic_ic_s 1043
+substr_s_s_i_i_sc 1044
+substr_s_s_ic_i_sc 1045
+substr_s_s_i_ic_sc 1046
+substr_s_s_ic_ic_sc 1047
+substr_s_i_i_s 1048
+substr_s_ic_i_s 1049
+substr_s_i_ic_s 1050
+substr_s_ic_ic_s 1051
+substr_s_i_i_sc 1052
+substr_s_ic_i_sc 1053
+substr_s_i_ic_sc 1054
+substr_s_ic_ic_sc 1055
+substr_s_p_i_i 1056
+substr_s_p_ic_i 1057
+substr_s_p_i_ic 1058
+substr_s_p_ic_ic 1059
+index_i_s_s 1060
+index_i_sc_s 1061
+index_i_s_sc 1062
+index_i_sc_sc 1063
+index_i_s_s_i 1064
+index_i_sc_s_i 1065
+index_i_s_sc_i 1066
+index_i_sc_sc_i 1067
+index_i_s_s_ic 1068
+index_i_sc_s_ic 1069
+index_i_s_sc_ic 1070
+index_i_sc_sc_ic 1071
+sprintf_s_s_p 1072
+sprintf_s_sc_p 1073
+sprintf_p_p_p 1074
+new_s 1075
+new_s_i 1076
+new_s_ic 1077
+stringinfo_i_s_i 1078
+stringinfo_i_sc_i 1079
+stringinfo_i_s_ic 1080
+stringinfo_i_sc_ic 1081
+upcase_s_s 1082
+upcase_s_sc 1083
+upcase_s 1084
+downcase_s_s 1085
+downcase_s_sc 1086
+downcase_s 1087
+titlecase_s_s 1088
+titlecase_s_sc 1089
+titlecase_s 1090
+join_s_s_p 1091
+join_s_sc_p 1092
+split_p_s_s 1093
+split_p_sc_s 1094
+split_p_s_sc 1095
+split_p_sc_sc 1096
+charset_i_s 1097
+charset_i_sc 1098
+charsetname_s_i 1099
+charsetname_s_ic 1100
+find_charset_i_s 1101
+find_charset_i_sc 1102
+trans_charset_s_i 1103
+trans_charset_s_ic 1104
+trans_charset_s_s_i 1105
+trans_charset_s_sc_i 1106
+trans_charset_s_s_ic 1107
+trans_charset_s_sc_ic 1108
+encoding_i_s 1109
+encoding_i_sc 1110
+encodingname_s_i 1111
+encodingname_s_ic 1112
+find_encoding_i_s 1113
+find_encoding_i_sc 1114
+trans_encoding_s_i 1115
+trans_encoding_s_ic 1116
+trans_encoding_s_s_i 1117
+trans_encoding_s_sc_i 1118
+trans_encoding_s_s_ic 1119
+trans_encoding_s_sc_ic 1120
+is_cclass_i_i_s_i 1121
+is_cclass_i_ic_s_i 1122
+is_cclass_i_i_sc_i 1123
+is_cclass_i_ic_sc_i 1124
+is_cclass_i_i_s_ic 1125
+is_cclass_i_ic_s_ic 1126
+is_cclass_i_i_sc_ic 1127
+is_cclass_i_ic_sc_ic 1128
+find_cclass_i_i_s_i_i 1129
+find_cclass_i_ic_s_i_i 1130
+find_cclass_i_i_sc_i_i 1131
+find_cclass_i_ic_sc_i_i 1132
+find_cclass_i_i_s_ic_i 1133
+find_cclass_i_ic_s_ic_i 1134
+find_cclass_i_i_sc_ic_i 1135
+find_cclass_i_ic_sc_ic_i 1136
+find_cclass_i_i_s_i_ic 1137
+find_cclass_i_ic_s_i_ic 1138
+find_cclass_i_i_sc_i_ic 1139
+find_cclass_i_ic_sc_i_ic 1140
+find_cclass_i_i_s_ic_ic 1141
+find_cclass_i_ic_s_ic_ic 1142
+find_cclass_i_i_sc_ic_ic 1143
+find_cclass_i_ic_sc_ic_ic 1144
+find_not_cclass_i_i_s_i_i 1145
+find_not_cclass_i_ic_s_i_i 1146
+find_not_cclass_i_i_sc_i_i 1147
+find_not_cclass_i_ic_sc_i_i 1148
+find_not_cclass_i_i_s_ic_i 1149
+find_not_cclass_i_ic_s_ic_i 1150
+find_not_cclass_i_i_sc_ic_i 1151
+find_not_cclass_i_ic_sc_ic_i 1152
+find_not_cclass_i_i_s_i_ic 1153
+find_not_cclass_i_ic_s_i_ic 1154
+find_not_cclass_i_i_sc_i_ic 1155
+find_not_cclass_i_ic_sc_i_ic 1156
+find_not_cclass_i_i_s_ic_ic 1157
+find_not_cclass_i_ic_s_ic_ic 1158
+find_not_cclass_i_i_sc_ic_ic 1159
+find_not_cclass_i_ic_sc_ic_ic 1160
+escape_s_s 1161
+compose_s_s 1162
+compose_s_sc 1163
+spawnw_i_s 1164
+spawnw_i_sc 1165
+spawnw_i_p 1166
+err_i 1167
+err_s 1168
+err_s_i 1169
+err_s_ic 1170
+time_i 1171
+time_n 1172
+gmtime_s_i 1173
+gmtime_s_ic 1174
+localtime_s_i 1175
+localtime_s_ic 1176
+decodetime_p_i 1177
+decodetime_p_ic 1178
+decodelocaltime_p_i 1179
+decodelocaltime_p_ic 1180
+sysinfo_s_i 1181
+sysinfo_s_ic 1182
+sysinfo_i_i 1183
+sysinfo_i_ic 1184
+sleep_i 1185
+sleep_ic 1186
+sleep_n 1187
+sleep_nc 1188
+sizeof_i_i 1189
+sizeof_i_ic 1190
+store_lex_s_p 1191
+store_lex_sc_p 1192
+store_dynamic_lex_s_p 1193
+store_dynamic_lex_sc_p 1194
+find_lex_p_s 1195
+find_lex_p_sc 1196
+find_dynamic_lex_p_s 1197
+find_dynamic_lex_p_sc 1198
+find_caller_lex_p_s 1199
+find_caller_lex_p_sc 1200
+get_namespace_p 1201
+get_namespace_p_p 1202
+get_namespace_p_pc 1203
+get_hll_namespace_p 1204
+get_hll_namespace_p_p 1205
+get_hll_namespace_p_pc 1206
+get_root_namespace_p 1207
+get_root_namespace_p_p 1208
+get_root_namespace_p_pc 1209
+get_global_p_s 1210
+get_global_p_sc 1211
+get_global_p_p_s 1212
+get_global_p_pc_s 1213
+get_global_p_p_sc 1214
+get_global_p_pc_sc 1215
+get_hll_global_p_s 1216
+get_hll_global_p_sc 1217
+get_hll_global_p_p_s 1218
+get_hll_global_p_pc_s 1219
+get_hll_global_p_p_sc 1220
+get_hll_global_p_pc_sc 1221
+get_root_global_p_s 1222
+get_root_global_p_sc 1223
+get_root_global_p_p_s 1224
+get_root_global_p_pc_s 1225
+get_root_global_p_p_sc 1226
+get_root_global_p_pc_sc 1227
+set_global_s_p 1228
+set_global_sc_p 1229
+set_global_p_s_p 1230
+set_global_pc_s_p 1231
+set_global_p_sc_p 1232
+set_global_pc_sc_p 1233
+set_hll_global_s_p 1234
+set_hll_global_sc_p 1235
+set_hll_global_p_s_p 1236
+set_hll_global_pc_s_p 1237
+set_hll_global_p_sc_p 1238
+set_hll_global_pc_sc_p 1239
+set_root_global_s_p 1240
+set_root_global_sc_p 1241
+set_root_global_p_s_p 1242
+set_root_global_pc_s_p 1243
+set_root_global_p_sc_p 1244
+set_root_global_pc_sc_p 1245
+find_name_p_s 1246
+find_name_p_sc 1247
+find_sub_not_null_p_s 1248
+find_sub_not_null_p_sc 1249
Modified: branches/pcc_hackathon_6Mar10/src/ops/var.ops
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/ops/var.ops Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/ops/var.ops Tue Mar 16 22:37:03 2010 (r44975)
@@ -472,6 +472,11 @@
=item B<find_sub_not_null>(out PMC, in STR)
+Do the same thing as C<find_name>, but throw an exception if the name isn't
+found.
+
+=cut
+
inline op find_sub_not_null(out PMC, in STR) :base_core {
opcode_t *dest = expr NEXT();
PMC *sub = Parrot_find_name_op(interp, $2, dest);
Modified: branches/pcc_hackathon_6Mar10/src/packfile.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/packfile.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/packfile.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -2826,7 +2826,6 @@
const PackFile_Debug * const debug = (const PackFile_Debug *)self;
opcode_t i;
- size_t j;
default_dump_header(interp, self);
Modified: branches/pcc_hackathon_6Mar10/src/parrot_debugger.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/parrot_debugger.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/parrot_debugger.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -249,9 +249,9 @@
STRING *compiler = Parrot_str_new_constant(interp, "PIR");
STRING *errstr = NULL;
const char source []= ".sub aux :main\nexit 0\n.end\n";
- PMC *code = Parrot_compile_string(interp, compiler, source, &errstr);
+ Parrot_compile_string(interp, compiler, source, &errstr);
- if (!STRING_is_null(interp, errstr))
+ if (!Parrot_str_is_null(interp, errstr))
Parrot_io_eprintf(interp, "%Ss\n", errstr);
}
Modified: branches/pcc_hackathon_6Mar10/src/pbc_merge.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pbc_merge.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pbc_merge.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -724,7 +724,6 @@
ASSERT_ARGS(pbc_merge_begin)
PackFile_ByteCode *bc;
PackFile_ConstTable *ct;
- opcode_t const_count = 0;
int i;
/* Create a new empty packfile. */
Modified: branches/pcc_hackathon_6Mar10/src/pmc.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -252,7 +252,7 @@
ASSERT_ARGS(Parrot_pmc_reuse_noinit)
VTABLE *new_vtable;
- INTVAL has_ext, new_flags = 0;
+ INTVAL new_flags = 0;
if (pmc->vtable->base_type == new_type)
return pmc;
@@ -303,7 +303,7 @@
ASSERT_ARGS(Parrot_pmc_reuse_by_class)
const INTVAL new_type = PARROT_CLASS(class_)->id;
VTABLE * const new_vtable = interp->vtables[new_type];
- INTVAL new_flags = flags;
+ const INTVAL new_flags = flags;
if (pmc->vtable->base_type == new_type)
return pmc;
@@ -564,6 +564,40 @@
/*
+=item C<PMC * Parrot_pmc_new_init_int(PARROT_INTERP, INTVAL base_type, INTVAL
+init)>
+
+As C<Parrot_pmc_new()>, but passes C<init> to the PMC's C<init_int()> vtable entry.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_CANNOT_RETURN_NULL
+PMC *
+Parrot_pmc_new_init_int(PARROT_INTERP, INTVAL base_type, INTVAL init)
+{
+ ASSERT_ARGS(Parrot_pmc_new_init_int)
+ PMC *const classobj = interp->vtables[base_type]->pmc_class;
+
+ if (!PMC_IS_NULL(classobj) && PObj_is_class_TEST(classobj)) {
+ PMC * const initial = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_Integer));
+ VTABLE_set_integer_native(interp, initial, init);
+ VTABLE_instantiate(interp, classobj, initial);
+ /* XXX Falls through to end of function without returning */
+ }
+ else {
+ PMC * const pmc = get_new_pmc_header(interp, base_type, 0);
+ VTABLE_init_int(interp, pmc, init);
+ return pmc;
+ }
+}
+
+
+
+/*
+
=item C<PMC * Parrot_pmc_new_constant_init(PARROT_INTERP, INTVAL base_type, PMC
*init)>
@@ -758,9 +792,7 @@
{
ASSERT_ARGS(Parrot_pmc_get_type)
PMC * const classname_hash = interp->class_hash;
- PMC * item;
-
- item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
+ PMC * const item = (PMC *)VTABLE_get_pointer_keyed(interp, classname_hash, name);
if (!PMC_IS_NULL(item))
return VTABLE_get_integer(interp, item);
@@ -827,9 +859,9 @@
Parrot_pmc_create_mro(PARROT_INTERP, INTVAL type)
{
ASSERT_ARGS(Parrot_pmc_create_mro)
- PMC *_class, *mro;
+ PMC *mro;
VTABLE *vtable = interp->vtables[type];
- PMC *mro_list = vtable->mro;
+ PMC * const mro_list = vtable->mro;
INTVAL i, count;
/* this should never be PMCNULL */
@@ -848,8 +880,9 @@
count = VTABLE_elements(interp, mro_list);
for (i = 0; i < count; ++i) {
- STRING *class_name = VTABLE_get_string_keyed_int(interp, mro_list, i);
- INTVAL parent_type = Parrot_pmc_get_type_str(interp, class_name);
+ STRING * const class_name = VTABLE_get_string_keyed_int(interp, mro_list, i);
+ const INTVAL parent_type = Parrot_pmc_get_type_str(interp, class_name);
+ PMC *_class;
/* abstract classes don't have a vtable */
if (!parent_type)
@@ -938,10 +971,6 @@
C<5.1.0.14.2.20011008152120.02158148 at pop.sidhe.org>
(http://www.nntp.perl.org/group/perl.perl6.internals/5516).
-=head1 HISTORY
-
-Initial version by Simon on 2001.10.20.
-
=cut
*/
Modified: branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/callcontext.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -49,18 +49,6 @@
#define STRINGCELL 2
#define PMCCELL 3
-#define SET_CELL_INT(c) \
- INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | INTCELL)
-
-#define SET_CELL_FLOAT(c) \
- INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | FLOATCELL)
-
-#define SET_CELL_STRING(c) \
- INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | STRINGCELL)
-
-#define SET_CELL_PMC(c) \
- INTVAL2PTR(Pcc_cell *, PTR2INTVAL(UNTAG_CELL(c)) | PMCCELL)
-
#define ALLOC_CELL(i) \
(Pcc_cell *)Parrot_gc_allocate_fixed_size_storage((i), sizeof (Pcc_cell))
@@ -693,7 +681,7 @@
res = Parrot_str_append(INTERP, res, CONST_STRING(INTERP, "P"));
break;
default:
- PARROT_ASSERT(!"Impossible flag");
+ PARROT_FAILURE("Impossible flag");
break;
}
c = NEXT_CELL(c);
@@ -737,14 +725,46 @@
GET_ATTR_type_tuple(INTERP, SELF, type_tuple);
if (PMC_IS_NULL(type_tuple)) {
- type_tuple = Parrot_mmd_build_type_tuple_from_sig_obj(INTERP, SELF);
+ Pcc_cell *c;
+ INTVAL num_positionals;
+ INTVAL i = 0;
+
+ GET_ATTR_positionals(INTERP, SELF, c);
+ GET_ATTR_num_positionals(INTERP, SELF, num_positionals);
+
+ type_tuple = Parrot_pmc_new_init_int(interp,
+ enum_class_FixedIntegerArray, num_positionals);
+
+ while (c) {
+ INTVAL type;
+
+ switch (CELL_TYPE_MASK(c)) {
+ case INTCELL: type = enum_type_INTVAL; break;
+ case FLOATCELL: type = enum_type_FLOATVAL; break;
+ case STRINGCELL: type = enum_type_STRING; break;
+ case PMCCELL:
+ type = PMC_IS_NULL(CELL_PMC(c))
+ ? enum_type_PMC
+ : VTABLE_type(interp, CELL_PMC(c));
+ break;
+ default:
+ Parrot_ex_throw_from_c_args(interp, NULL,
+ EXCEPTION_INVALID_OPERATION,
+ "Multiple Dispatch: invalid argument type!");
+ }
+
+ VTABLE_set_integer_keyed_int(interp, type_tuple, i, type);
+ i++;
+ c = NEXT_CELL(c);
+ }
+
SET_ATTR_type_tuple(INTERP, SELF, type_tuple);
}
return type_tuple;
-
}
+
/*
=item C<void set_attr_str(STRING *key, PMC *value)>
@@ -1171,8 +1191,6 @@
parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_INT(cell);
CELL_INT(cell) = value;
}
@@ -1186,8 +1204,6 @@
parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_FLOAT(cell);
CELL_FLOAT(cell) = value;
}
@@ -1201,8 +1217,6 @@
parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_STRING(cell);
CELL_STRING(cell) = value;
}
@@ -1216,8 +1230,6 @@
parrot_hash_put(INTERP, hash, (void *)key, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_PMC(cell);
CELL_PMC(cell) = value;
}
@@ -1232,8 +1244,6 @@
parrot_hash_put(INTERP, hash, k, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_INT(cell);
CELL_INT(cell) = value;
}
@@ -1248,8 +1258,6 @@
parrot_hash_put(INTERP, hash, k, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_FLOAT(cell);
CELL_FLOAT(cell) = value;
}
@@ -1264,8 +1272,6 @@
parrot_hash_put(INTERP, hash, k, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_STRING(cell);
CELL_STRING(cell) = value;
}
@@ -1280,8 +1286,6 @@
parrot_hash_put(INTERP, hash, k, (void *)cell);
NEXT_CELL(cell) = NULL;
}
- else
- SET_CELL_PMC(cell);
CELL_PMC(cell) = value;
}
Modified: branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/complex.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -224,37 +224,6 @@
/*
-=item C<opcode_t *invoke(void *next)>
-
-Pythonic object constructor. SELF is a Complex Class object. Return a new
-C<complex> object according to 2.1. Built-in Functions.
-
-=cut
-
-*/
- VTABLE opcode_t *invoke(void *next) {
- const int argcP = REG_INT(interp, 3);
- PMC * const res = Parrot_pmc_new(INTERP, enum_class_Complex);
-
- if (argcP == 1) {
- PMC * const arg = REG_PMC(interp, 5);
-
- if (arg->vtable->base_type == enum_class_String)
- VTABLE_set_string_native(INTERP, res, VTABLE_get_string(interp, arg));
- else
- SET_ATTR_re(INTERP, res, VTABLE_get_number(INTERP, arg));
- }
- else if (argcP == 2) {
- SET_ATTR_re(INTERP, res, VTABLE_get_number(INTERP, REG_PMC(interp, 5)));
- SET_ATTR_im(INTERP, res, VTABLE_get_number(INTERP, REG_PMC(interp, 6)));
- }
-
- REG_PMC(interp, 5) = res;
- return (opcode_t *)next;
- }
-
-/*
-
=back
=head2 Methods
@@ -329,6 +298,42 @@
/*
+=item C<void freeze(PMC *visit)>
+
+=item C<void thaw(PMC *visit)>
+
+Serialize/deserialize this object for bytecode.
+
+=cut
+
+*/
+
+ VTABLE void freeze(PMC *visit) {
+ FLOATVAL re, im;
+
+ SUPER(visit);
+
+ GET_ATTR_re(INTERP, SELF, re);
+ VTABLE_push_float(INTERP, visit, re);
+
+ GET_ATTR_im(INTERP, SELF, im);
+ VTABLE_push_float(INTERP, visit, im);
+ }
+
+ VTABLE void thaw(PMC *visit) {
+ FLOATVAL re, im;
+
+ SUPER(visit);
+
+ re = VTABLE_shift_float(INTERP, visit);
+ SET_ATTR_re(INTERP, SELF, re);
+
+ im = VTABLE_shift_float(INTERP, visit);
+ SET_ATTR_im(INTERP, SELF, im);
+ }
+
+/*
+
=item C<INTVAL get_integer()>
Returns the modulus of the complex number as an integer.
Modified: branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/eventhandler.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2007-2009, Parrot Foundation.
+Copyright (C) 2007-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -230,11 +230,12 @@
*/
VTABLE opcode_t *invoke(void *next) {
Parrot_EventHandler_attributes * const e = PARROT_EVENTHANDLER(SELF);
- void *unused;
/* can't invoke on INTERP and can't return its result; this may not be
* the right interpreter */
if (e) {
+ void *unused;
+
unused = VTABLE_invoke(PMC_data_typed(e->interp, Parrot_Interp),
e->code, next);
UNUSED(unused);
@@ -266,14 +267,15 @@
*/
METHOD can_handle(PMC *event) {
- Parrot_EventHandler_attributes * const handler_struct = PARROT_EVENTHANDLER(SELF);
+
if (event->vtable->base_type == enum_class_Task) {
- PMC *type = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "type"));
- STRING *type_str = VTABLE_get_string(interp, type);
+ PMC * const type = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "type"));
+ STRING * const type_str = VTABLE_get_string(interp, type);
if (Parrot_str_equal(interp, type_str, CONST_STRING(interp, "event"))) {
- PMC *subtype = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "subtype"));
- STRING *subtype_str = VTABLE_get_string(interp, subtype);
+ Parrot_EventHandler_attributes * const handler_struct = PARROT_EVENTHANDLER(SELF);
+ PMC * const subtype = VTABLE_get_attr_str(interp, event, CONST_STRING(interp, "subtype"));
+ STRING * const subtype_str = VTABLE_get_string(interp, subtype);
if (Parrot_str_equal(interp, subtype_str, handler_struct->type)) {
RETURN(INTVAL 1);
Modified: branches/pcc_hackathon_6Mar10/src/pmc/file.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/file.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/file.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2008, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -65,9 +65,9 @@
struct stat info;
char * const cpath = Parrot_str_to_cstring(interp, path);
#ifdef WIN32
- int error = stat(cpath, &info);
+ const int error = stat(cpath, &info);
#else
- int error = lstat(cpath, &info);
+ const int error = lstat(cpath, &info);
#endif
Parrot_str_free_cstring(cpath);
@@ -91,14 +91,14 @@
struct stat info;
char * const cpath = Parrot_str_to_cstring(interp, path);
#ifdef WIN32
- int error = stat(cpath, &info);
+ const int error = stat(cpath, &info);
#else
- int error = lstat(cpath, &info);
+ const int error = lstat(cpath, &info);
#endif
Parrot_str_free_cstring(cpath);
if (error) {
- char *errmsg = strerror(errno);
+ const char * const errmsg = strerror(errno);
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
errmsg);
}
@@ -130,7 +130,7 @@
Parrot_str_free_cstring(cpath);
if (error) {
- char *errmsg = strerror(errno);
+ const char * const errmsg = strerror(errno);
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
errmsg);
}
@@ -159,12 +159,12 @@
struct stat info;
char * const cpath = Parrot_str_to_cstring(interp, path);
- int error = lstat(cpath, &info);
+ const int error = lstat(cpath, &info);
Parrot_str_free_cstring(cpath);
if (error) {
- char *errmsg = strerror(errno);
+ const char * const errmsg = strerror(errno);
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
errmsg);
}
@@ -196,24 +196,23 @@
#define CHUNK_SIZE 1024
char * const cfrom = Parrot_str_to_cstring(interp, from);
- FILE * source = fopen(cfrom, "rb");
+ FILE * const source = fopen(cfrom, "rb");
Parrot_str_free_cstring(cfrom);
if (source) {
- char * const cto = Parrot_str_to_cstring(interp, to);
- FILE * target = fopen(cto, "w+b");
+ char * const cto = Parrot_str_to_cstring(interp, to);
+ FILE * const target = fopen(cto, "w+b");
Parrot_str_free_cstring(cto);
if (target) {
- char buf[CHUNK_SIZE];
- size_t bytes_read, bytes_written;
-
while (!feof(source)) {
- bytes_read = fread(buf, 1, CHUNK_SIZE, source);
+ char buf[CHUNK_SIZE];
+ const size_t bytes_read = fread(buf, 1, CHUNK_SIZE, source);
+
if (bytes_read) {
- bytes_written = fwrite(buf, 1, bytes_read, target);
+ const size_t bytes_written = fwrite(buf, 1, bytes_read, target);
if (bytes_read != bytes_written) {
Parrot_ex_throw_from_c_args(interp, NULL,
EXCEPTION_EXTERNAL_ERROR, "Error writing file");
@@ -224,14 +223,14 @@
fclose(target);
}
else {
- char *errmsg = strerror(errno);
+ const char * const errmsg = strerror(errno);
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
errmsg);
}
fclose(source);
}
else {
- char *errmsg = strerror(errno);
+ const char * const errmsg = strerror(errno);
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
errmsg);
}
@@ -251,13 +250,13 @@
METHOD rename(STRING *from, STRING *to) {
char * const cfrom = Parrot_str_to_cstring(interp, from);
char * const cto = Parrot_str_to_cstring(interp, to);
- int error = rename(cfrom, cto);
+ const int error = rename(cfrom, cto);
Parrot_str_free_cstring(cfrom);
Parrot_str_free_cstring(cto);
if (error) {
- char *errmsg = strerror(errno);
+ const char * const errmsg = strerror(errno);
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_EXTERNAL_ERROR,
errmsg);
}
Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedbooleanarray.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -62,6 +62,31 @@
/*
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+ VTABLE void init_int(INTVAL size) {
+ const size_t size_in_bytes = get_size_in_bytes(size);
+
+ if (size < 0)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+ _("FixedBooleanArray: Cannot set array size to a negative number (%d)"), size);
+
+ SET_ATTR_size(INTERP, SELF, size);
+ SET_ATTR_resize_threshold(INTERP, SELF, size_in_bytes * BITS_PER_CHAR);
+ SET_ATTR_bit_array(INTERP, SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size_in_bytes,
+ unsigned char));
+ PObj_custom_destroy_SET(SELF);
+ }
+
+
+/*
+
=item C<void destroy()>
Destroys the array.
Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedfloatarray.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -48,6 +48,25 @@
/*
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+ VTABLE void init_int(INTVAL size) {
+ if (size < 0)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+ _("FixedFloatArray: Cannot set array size to a negative number (%d)"), size);
+ SET_ATTR_size(INTERP, SELF, size);
+ SET_ATTR_float_array(INTERP, SELF, mem_gc_allocate_n_typed(INTERP, size, FLOATVAL));
+ PObj_custom_destroy_SET(SELF);
+ }
+
+/*
+
=item C<PMC *clone()>
Creates and returns a copy of the array.
Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedintegerarray.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -45,6 +45,25 @@
/*
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+ VTABLE void init_int(INTVAL size) {
+ if (size < 0)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+ _("FixedIntegerArray: Cannot set array size to a negative number (%d)"), size);
+ SET_ATTR_size(INTERP, SELF, size);
+ SET_ATTR_int_array(INTERP, SELF, mem_gc_allocate_n_typed(INTERP, size, INTVAL));
+ PObj_custom_destroy_SET(SELF);
+ }
+
+/*
+
=item C<void destroy()>
Destroys the array.
Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedpmcarray.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -78,6 +78,33 @@
/*
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+ VTABLE void init_int(INTVAL size) {
+ PMC **data;
+ int i;
+
+ if (size < 0)
+ Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_OUT_OF_BOUNDS,
+ _("FixedPMCArray: Cannot set array size to a negative number (%d)"), size);
+
+ SET_ATTR_size(INTERP, SELF, size);
+ data = mem_gc_allocate_n_typed(INTERP, size, PMC *);
+
+ for (i = 0; i < size; i++)
+ data[i] = PMCNULL;
+
+ PObj_custom_destroy_SET(SELF);
+ }
+
+/*
+
=item C<void destroy()>
Destroys the array.
Modified: branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/fixedstringarray.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -45,6 +45,26 @@
/*
+=item C<void init_int(INTVAL size)>
+
+Initializes the array.
+
+=cut
+
+*/
+
+ VTABLE void init_int(INTVAL size) {
+ if (size < 0)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_OUT_OF_BOUNDS,
+ _("FixedStringArray: Cannot set array size to a negative number (%d)"), size);
+ SET_ATTR_size(INTERP, SELF, size);
+ SET_ATTR_str_array(INTERP, SELF, mem_gc_allocate_n_zeroed_typed(INTERP, size, STRING *));
+ PObj_custom_mark_destroy_SETALL(SELF);
+ }
+
+
+/*
+
=item C<void destroy()>
Destroys the array.
Modified: branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/hashiteratorkey.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -84,7 +84,7 @@
Parrot_HashIteratorKey_attributes *attrs =
PARROT_HASHITERATORKEY(SELF);
- PARROT_ASSERT(value || !"Can't set NULL pointer into HashIteratorKey");
+ PARROT_ASSERT_MSG(value, "Can't set NULL pointer into HashIteratorKey");
if (key == 0) {
attrs->parrot_hash = (Hash*)value;
Modified: branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/iterator.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -204,7 +204,7 @@
*/
VTABLE void set_integer_native(INTVAL value) {
PMC *self = SELF;
- PARROT_ASSERT(!"Iterator: implementation have to override this method");
+ PARROT_FAILURE("Iterator: implementation have to override this method");
Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_UNIMPLEMENTED,
"Iterator: unimplemented method");
Modified: branches/pcc_hackathon_6Mar10/src/pmc/null.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/null.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/null.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -41,17 +41,21 @@
*/
VTABLE void init() {
+ UNUSED(interp)
}
VTABLE void *get_pointer() {
+ UNUSED(interp)
return PMCNULL;
}
VTABLE void set_pointer(void *p) {
+ UNUSED(interp)
PMCNULL = (PMC *)p;
}
VTABLE INTVAL does(STRING *what) {
+ UNUSED(interp)
UNUSED(what)
/* XXX maybe a hack to get TGE running again */
return 0;
Modified: branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/orderedhash.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -77,22 +77,11 @@
*/
-/* Create new stored item. FixedPMCArray of (key, value, prev, next). */
-static PMC*
-create_item(PARROT_INTERP, ARGIN(PMC *key), ARGIN(PMC *value)) {
- PMC *ret = Parrot_pmc_new(interp, enum_class_FixedPMCArray);
- VTABLE_set_integer_native(interp, ret, ORDERED_HASH_ITEM_MAX);
-
- VTABLE_set_pmc_keyed_int(interp, ret, ORDERED_HASH_ITEM_KEY, key);
- VTABLE_set_pmc_keyed_int(interp, ret, ORDERED_HASH_ITEM_VALUE, value);
- return ret;
-}
-
/* Get list_item by index */
static PMC*
get_list_item(PARROT_INTERP, ARGIN(PMC *self), INTVAL idx) {
- Parrot_OrderedHash_attributes *attrs = PARROT_ORDEREDHASH(self);
- INTVAL n = VTABLE_elements(interp, attrs->hash);
+ const Parrot_OrderedHash_attributes * const attrs = PARROT_ORDEREDHASH(self);
+ const INTVAL n = VTABLE_elements(interp, attrs->hash);
INTVAL pos;
PMC *list_entry = attrs->first;
@@ -112,10 +101,11 @@
/* Parameter C<pmc_hash> is Hash, not OrderedHash */
static void
find_bounds(PARROT_INTERP, PMC *pmc_hash, PMC **first, PMC **last) {
- PMC *iter = VTABLE_get_iter(interp, pmc_hash);
+ PMC * const iter = VTABLE_get_iter(interp, pmc_hash);
+
while (VTABLE_get_bool(interp, iter)) {
- PMC *item = VTABLE_shift_pmc(interp, iter);
- PMC *entry = VTABLE_get_pmc_keyed(interp, pmc_hash, item);
+ PMC * const item = VTABLE_shift_pmc(interp, iter);
+ PMC * const entry = VTABLE_get_pmc_keyed(interp, pmc_hash, item);
/* First entry doesn't have prev */
PMC *tmp = VTABLE_get_pmc_keyed_int(interp, entry, ORDERED_HASH_ITEM_PREV);
if (PMC_IS_NULL(tmp))
@@ -249,16 +239,17 @@
*/
VTABLE void set_pmc_keyed(PMC *key, PMC *value) {
- Parrot_OrderedHash_attributes *attrs =
+ Parrot_OrderedHash_attributes * const attrs =
PARROT_ORDEREDHASH(SELF);
/* Check for old entry */
PMC *list_entry = VTABLE_get_pmc_keyed(INTERP, attrs->hash, key);
if (!PMC_IS_NULL(list_entry)) {
/* We have old entry. Just update value */
- PMC *nextkey = key_next(INTERP, key);
+ PMC * const nextkey = key_next(INTERP, key);
if (nextkey) {
- PMC *old_value = VTABLE_get_pmc_keyed_int(INTERP, list_entry,
+ /* XXX old_value is unused. Should we be storing this at all? */
+ PMC * const old_value = VTABLE_get_pmc_keyed_int(INTERP, list_entry,
ORDERED_HASH_ITEM_VALUE);
VTABLE_set_pmc_keyed(INTERP, value, nextkey, value);
}
@@ -336,7 +327,7 @@
/* Now we have chicken and egg problem during freeze/thaw */
/* When we try to thaw OrderedHash which stores HLL mapping */
/* Reported by François Perrad */
- PMC *pkey = Parrot_pmc_new(INTERP, enum_class_String);
+ PMC * const pkey = Parrot_pmc_new(INTERP, enum_class_String);
VTABLE_set_string_native(INTERP, pkey, key);
VTABLE_set_pmc_keyed(INTERP, SELF, pkey, value);
}
@@ -369,7 +360,7 @@
*/
VTABLE PMC *get_pmc_keyed_int(INTVAL idx) {
- PMC *list_entry = get_list_item(INTERP, SELF, idx);
+ PMC * const list_entry = get_list_item(INTERP, SELF, idx);
if (PMC_IS_NULL(list_entry))
return PMCNULL;
@@ -391,7 +382,7 @@
}
VTABLE PMC *get_pmc_keyed_str(STRING *key) {
- PMC *pkey = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
+ PMC * const pkey = Parrot_pmc_new(interp, Parrot_get_ctx_HLL_type(interp, enum_class_String));
VTABLE_set_string_native(INTERP, pkey, key);
return STATICSELF.get_pmc_keyed(pkey);
}
@@ -482,10 +473,7 @@
*/
VTABLE void set_pmc_keyed_int(INTVAL idx, PMC *val) {
- const INTVAL n = STATICSELF.elements();
- STRING * const fmt = CONST_STRING(INTERP, "\1%d");
- PMC *list_entry;
- INTVAL pos;
+ const INTVAL n = STATICSELF.elements();
if (idx < -n)
idx = -idx - n - 1;
@@ -494,11 +482,12 @@
if (idx >= n) {
/* TODO warn or fill if there are holes */
+ STRING * const fmt = CONST_STRING(INTERP, "\1%d");
STRING * const key = Parrot_sprintf_s(INTERP, fmt, idx);
SELF.set_pmc_keyed_str(key, val);
}
else {
- list_entry = get_list_item(INTERP, SELF, idx);
+ PMC * const list_entry = get_list_item(INTERP, SELF, idx);
PARROT_ASSERT(!PMC_IS_NULL(list_entry));
VTABLE_set_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_VALUE, val);
}
@@ -577,8 +566,8 @@
VTABLE INTVAL exists_keyed(PMC *key) {
if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
/* Don't fetch item prematurely. It's costy */
- INTVAL intval = VTABLE_get_integer(INTERP, key);
- PMC * const next = VTABLE_shift_pmc(INTERP, key);
+ const INTVAL intval = VTABLE_get_integer(INTERP, key);
+ PMC * const next = VTABLE_shift_pmc(INTERP, key);
if (!next)
return STATICSELF.exists_keyed_int(intval);
@@ -653,8 +642,8 @@
PARROT_ORDEREDHASH(SELF);
PMC *list_entry, *prev, *next;
if ((PObj_get_FLAGS(key) & KEY_type_FLAGS) == KEY_integer_FLAG) {
- INTVAL intval = VTABLE_get_integer(INTERP, key);
- PMC * const next = VTABLE_shift_pmc(INTERP, key);
+ const INTVAL intval = VTABLE_get_integer(INTERP, key);
+ PMC * const next = VTABLE_shift_pmc(INTERP, key);
if (next)
VTABLE_delete_keyed(INTERP, STATICSELF.get_pmc_keyed_int(intval), next);
@@ -693,13 +682,12 @@
}
VTABLE void delete_keyed_int(INTVAL idx) {
- PMC *list_entry;
- if (!STATICSELF.exists_keyed_int(idx))
- return;
-
- list_entry = get_list_item(INTERP, SELF, idx);
- STATICSELF.delete_keyed(
- VTABLE_get_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY));
+ if (STATICSELF.exists_keyed_int(idx)) {
+ PMC * const list_entry = get_list_item(INTERP, SELF, idx);
+ STATICSELF.delete_keyed(
+ VTABLE_get_pmc_keyed_int(INTERP, list_entry, ORDERED_HASH_ITEM_KEY));
+ }
+ return;
}
/*
@@ -777,10 +765,6 @@
F<docs/pdds/pdd08_keys.pod>.
-=head1 HISTORY
-
-Initial rev by leo 2003-08-21.
-
=cut
*/
Modified: branches/pcc_hackathon_6Mar10/src/pmc/os.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/os.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/os.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -22,6 +22,8 @@
#if defined(_MSC_VER)
# include <direct.h>
# include <io.h>
+# include <tchar.h>
+# include <windows.h>
#elif defined(__BORLANDC__)
# include <dir.h>
# include <dirent.h>
@@ -475,11 +477,11 @@
*/
METHOD readdir(STRING *path) {
+ PMC * array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
#ifndef _MSC_VER
char * const cpath = Parrot_str_to_cstring(INTERP, path);
DIR *dir = opendir(cpath);
struct dirent *dirent;
- PMC *array;
STRING *retval;
Parrot_str_free_cstring(cpath);
@@ -490,20 +492,48 @@
errmsg);
}
- array = Parrot_pmc_new(INTERP, enum_class_ResizableStringArray);
-
while ((dirent = readdir(dir)) != NULL) {
retval = Parrot_str_new(INTERP, dirent->d_name, 0) ;
VTABLE_push_string(INTERP, array, retval);
}
closedir(dir);
-
- RETURN(PMC *array);
#else
- Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "Win32 is not POSIX. Need Win32 developer!");
+ WIN32_FIND_DATA file_find_data;
+ char * cpath;
+ HANDLE hFind = INVALID_HANDLE_VALUE;
+
+ /* Add \* to the directory name and start search. */
+ STRING *last_char = Parrot_str_substr(interp, path,
+ Parrot_str_length(interp, path) - 1, 1, NULL, 0);
+ int trailing_slash = Parrot_str_equal(interp, last_char, string_from_literal(interp, "\\"))
+ ||
+ Parrot_str_equal(interp, last_char, string_from_literal(interp, "/"));
+ cpath = Parrot_str_to_cstring(interp, Parrot_str_concat(interp,
+ path, string_from_literal(interp, trailing_slash ? "*" : "\\*"), 0));
+ hFind = FindFirstFile(cpath, &file_find_data);
+ Parrot_str_free_cstring(cpath);
+ if (hFind == INVALID_HANDLE_VALUE)
+ {
+ Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+ "Unable to readdir");
+ }
+
+ /* Loop over all directories and add to result array. */
+ do
+ {
+ VTABLE_push_string(INTERP, array, Parrot_str_new(INTERP,
+ file_find_data.cFileName, 0));
+ }
+ while (FindNextFile(hFind, &file_find_data) != 0);
+ if (GetLastError() != ERROR_NO_MORE_FILES)
+ {
+ Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_EXTERNAL_ERROR,
+ "Error during readdir");
+ }
+ FindClose(hFind);
#endif
+ RETURN(PMC *array);
}
/*
=item C<rename(STRING *oldpath, STRING *newpath)>
Modified: branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/parrotthread.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -79,7 +79,7 @@
return tid;
}
-pmclass ParrotThread extends ParrotInterpreter no_ro {
+pmclass ParrotThread extends ParrotInterpreter no_ro manual_attrs {
/*
Modified: branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/pmc/sub.pmc Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
$Id$
=head1 NAME
@@ -24,9 +24,9 @@
static void
print_sub_name(PARROT_INTERP, ARGIN_NULLOK(PMC *sub))
{
- Interp * const tracer = (interp->pdb && interp->pdb->debugger) ?
- interp->pdb->debugger :
- interp;
+ Interp * const tracer = (interp->pdb && interp->pdb->debugger)
+ ? interp->pdb->debugger
+ : interp;
/* sub was located via globals */
Parrot_io_eprintf(tracer, "# Calling sub '%Ss'\n# ",
@@ -89,7 +89,7 @@
*/
VTABLE void init() {
Parrot_Sub_attributes * const attrs =
- (Parrot_Sub_attributes *) PMC_data(SELF);
+ PMC_data_typed(SELF, Parrot_Sub_attributes *);
attrs->seg = INTERP->code;
attrs->outer_sub = PMCNULL;
@@ -99,6 +99,7 @@
PObj_custom_mark_destroy_SETALL(SELF);
}
+
/*
=item C<void init_pmc()>
@@ -112,10 +113,9 @@
VTABLE void init_pmc(PMC* init) {
Parrot_Sub_attributes * const attrs =
- (Parrot_Sub_attributes *) PMC_data(SELF);
- STRING *field;
+ PMC_data_typed(SELF, Parrot_Sub_attributes *);
+ STRING *field = CONST_STRING(INTERP, "start_offs");
- field = CONST_STRING(INTERP, "start_offs");
if (VTABLE_exists_keyed_str(INTERP, init, field))
attrs->start_offs = VTABLE_get_integer_keyed_str(INTERP, init, field);
@@ -199,15 +199,13 @@
attrs->arg_info->named_slurpy = VTABLE_get_integer_keyed_str(INTERP, tmp, CONST_STRING(INTERP, "named_slurpy"));
}
-
- /*
- C<eval_pmc> and C<ctx> are not handled here. And shouldn't be handled
- here at all because of run-time nature.
- */
+ /* C<eval_pmc> and C<ctx> are not handled here, and shouldn't be,
+ * because of run-time nature. */
PObj_custom_mark_destroy_SETALL(SELF);
}
+
/*
=item C<void destroy()>
@@ -221,12 +219,11 @@
VTABLE void destroy() {
Parrot_Sub_attributes *sub = PARROT_SUB(SELF);
- if (sub) {
- if (sub->arg_info)
- mem_gc_free(INTERP, sub->arg_info);
- }
+ if (sub && sub->arg_info)
+ mem_gc_free(INTERP, sub->arg_info);
}
+
/*
=item C<STRING *get_string()>
@@ -242,7 +239,6 @@
*/
VTABLE STRING *get_string() {
- STRING *name;
Parrot_Sub_attributes *sub;
PMC_get_sub(INTERP, SELF, sub);
@@ -252,12 +248,14 @@
return NULL;
}
+
VTABLE void set_string_native(STRING *subname) {
Parrot_Sub_attributes *sub;
PMC_get_sub(INTERP, SELF, sub);
sub->name = Parrot_str_copy(INTERP, subname);
}
+
/*
=item C<void set_pointer(void *value)>
@@ -276,6 +274,7 @@
"Don't set the address of a sub\nuse .const 'Sub' instead");
}
+
/*
=item C<void *get_pointer()>
@@ -292,6 +291,7 @@
return sub->seg->base.data + sub->start_offs;
}
+
/*
=item C<INTVAL get_integer_keyed(PMC *key)>
@@ -312,6 +312,7 @@
return (INTVAL) (sub->seg->base.data);
}
+
/*
=item C<INTVAL defined()>
@@ -332,6 +333,7 @@
return 1;
}
+
/*
=item C<opcode_t *invoke(void *next)>
@@ -343,10 +345,14 @@
*/
VTABLE opcode_t *invoke(void *next) {
+ PMC *caller_ctx = CURRENT_CONTEXT(interp);
+ PMC *ccont = INTERP->current_cont;
+
+ /* plain subroutine call
+ * create new context, place it in interpreter */
+ PMC *context = Parrot_pcc_get_signature(INTERP, caller_ctx);
+
Parrot_Sub_attributes *sub;
- PMC *caller_ctx;
- PMC *context;
- PMC *ccont;
opcode_t *pc;
PMC_get_sub(INTERP, SELF, sub);
@@ -376,8 +382,6 @@
*
*/
pc = sub->seg->base.data + sub->start_offs;
- caller_ctx = CURRENT_CONTEXT(interp);
- ccont = INTERP->current_cont;
INTERP->current_cont = NULL;
if (ccont == NEED_CONTINUATION)
@@ -385,11 +389,9 @@
PARROT_ASSERT(!PMC_IS_NULL(ccont));
- /* plain subroutine call
- * create new context, place it in interpreter */
- context = Parrot_pcc_get_signature(INTERP, caller_ctx);
if (PMC_IS_NULL(context))
context = Parrot_pmc_new(INTERP, enum_class_CallContext);
+
CURRENT_CONTEXT(INTERP) = context;
Parrot_pcc_set_caller_ctx(INTERP, context, caller_ctx);
Parrot_pcc_allocate_registers(INTERP, context, sub->n_regs_used);
@@ -432,17 +434,17 @@
VTABLE_set_pointer(INTERP, Parrot_pcc_get_lex_pad(interp, context), context);
}
- if (!PMC_IS_NULL(sub->outer_ctx)) {
- /* set outer context */
+ /* set outer context */
+ if (!PMC_IS_NULL(sub->outer_ctx))
Parrot_pcc_set_outer_ctx(interp, context, sub->outer_ctx);
- }
else {
/* autoclose */
- PMC *c = context;
+ PMC *c = context;
PMC *outer_c = Parrot_pcc_get_outer_ctx(interp, c);
+
for (c = context; PMC_IS_NULL(outer_c); c = outer_c) {
- PMC *outer_pmc;
+ PMC *outer_pmc;
Parrot_Sub_attributes *current_sub, *outer_sub;
PMC_get_sub(INTERP, Parrot_pcc_get_sub(interp, c), current_sub);
@@ -459,14 +461,19 @@
Parrot_pcc_set_sub(interp, dummy, outer_pmc);
if (!PMC_IS_NULL(outer_sub->lex_info)) {
- Parrot_pcc_set_lex_pad(interp, dummy, Parrot_pmc_new_init(INTERP,
- Parrot_get_ctx_HLL_type(interp, enum_class_LexPad),
- outer_sub->lex_info));
- VTABLE_set_pointer(INTERP, Parrot_pcc_get_lex_pad(interp, dummy), dummy);
+ Parrot_pcc_set_lex_pad(interp, dummy,
+ Parrot_pmc_new_init(INTERP,
+ Parrot_get_ctx_HLL_type(interp,
+ enum_class_LexPad), outer_sub->lex_info));
+
+ VTABLE_set_pointer(INTERP,
+ Parrot_pcc_get_lex_pad(interp, dummy), dummy);
}
if (!PMC_IS_NULL(outer_sub->outer_ctx))
- Parrot_pcc_set_outer_ctx(interp, dummy, outer_sub->outer_ctx);
+ Parrot_pcc_set_outer_ctx(interp, dummy,
+ outer_sub->outer_ctx);
+
outer_sub->ctx = dummy;
}
@@ -480,8 +487,8 @@
Parrot_switch_to_cs(INTERP, sub->seg, 1);
if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
- if (!(*pc == PARROT_OP_get_params_pc
- || (*pc == PARROT_OP_push_eh_ic
+ if (!(*pc == PARROT_OP_get_params_pc
+ || (*pc == PARROT_OP_push_eh_ic
&& pc[2] == PARROT_OP_get_params_pc))) {
/* TODO keep it or resize it */
@@ -496,6 +503,7 @@
return pc;
}
+
/*
=item C<PMC *clone()>
@@ -507,7 +515,8 @@
*/
VTABLE PMC *clone() {
- PMC * const ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+ PMC * const ret = Parrot_pmc_new(INTERP, SELF->vtable->base_type);
+
Parrot_Sub_attributes *dest_sub;
Parrot_Sub_attributes *sub;
@@ -530,6 +539,7 @@
return ret;
}
+
/*
=item C<void assign_pmc(PMC *other)>
@@ -566,6 +576,7 @@
"Can't assign a non-Sub type to a Sub");
}
+
/*
=item C<void mark()>
@@ -583,17 +594,18 @@
return;
Parrot_gc_mark_STRING_alive(INTERP, sub->name);
+ Parrot_gc_mark_STRING_alive(INTERP, sub->subid);
Parrot_gc_mark_STRING_alive(INTERP, sub->method_name);
Parrot_gc_mark_STRING_alive(INTERP, sub->ns_entry_name);
- Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_name);
- Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_stash);
- Parrot_gc_mark_PMC_alive(INTERP, sub->multi_signature);
- Parrot_gc_mark_PMC_alive(INTERP, sub->lex_info);
- Parrot_gc_mark_PMC_alive(INTERP, sub->outer_sub);
- Parrot_gc_mark_PMC_alive(INTERP, sub->eval_pmc);
- Parrot_gc_mark_STRING_alive(INTERP, sub->subid);
+
Parrot_gc_mark_PMC_alive(interp, sub->ctx);
+ Parrot_gc_mark_PMC_alive(INTERP, sub->eval_pmc);
+ Parrot_gc_mark_PMC_alive(INTERP, sub->lex_info);
Parrot_gc_mark_PMC_alive(interp, sub->outer_ctx);
+ Parrot_gc_mark_PMC_alive(INTERP, sub->outer_sub);
+ Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_name);
+ Parrot_gc_mark_PMC_alive(INTERP, sub->multi_signature);
+ Parrot_gc_mark_PMC_alive(INTERP, sub->namespace_stash);
}
/*
@@ -607,8 +619,7 @@
*/
MULTI INTVAL is_equal(PMC *value) {
- Parrot_Sub_attributes *my_sub;
- Parrot_Sub_attributes *value_sub;
+ Parrot_Sub_attributes *my_sub, *value_sub;
PMC_get_sub(INTERP, SELF, my_sub);
PMC_get_sub(INTERP, value, value_sub);
@@ -618,6 +629,7 @@
&& (my_sub)->seg == (value_sub)->seg;
}
+
/*
=item C<void visit(PMC *info)>
@@ -634,9 +646,7 @@
VTABLE void visit(PMC *info) {
VISIT_PMC_ATTR(INTERP, info, SELF, Sub, namespace_name);
-
VISIT_PMC_ATTR(INTERP, info, SELF, Sub, multi_signature);
-
VISIT_PMC_ATTR(INTERP, info, SELF, Sub, outer_sub);
/*
@@ -652,6 +662,7 @@
SUPER(info);
}
+
VTABLE void freeze(PMC *info) {
Parrot_Sub_attributes *sub;
STRING *hll_name;
@@ -705,9 +716,11 @@
if (!sub->subid)
sub->subid = CONST_STRING(INTERP, "");
+
VTABLE_push_string(INTERP, info, sub->subid);
}
+
/*
=item C<void thaw(PMC *info)>
@@ -748,6 +761,7 @@
sub->subid = VTABLE_shift_string(INTERP, info);
}
+
/*
=item C<PMC *inspect()>
@@ -760,8 +774,8 @@
VTABLE PMC *inspect()
{
- /* Create a hash, then use inspect_str to get all of the data to
- * fill it up with. */
+ /* Create a hash, then use inspect_str to get all of its data */
+
PMC * const metadata = Parrot_pmc_new(interp, enum_class_Hash);
STRING * const pos_required_str = CONST_STRING(interp, "pos_required");
STRING * const pos_optional_str = CONST_STRING(interp, "pos_optional");
@@ -791,6 +805,7 @@
return metadata;
}
+
/*
=item C<PMC *inspect_str(STRING *what)>
@@ -849,16 +864,14 @@
/* If the first instruction is a get_params... */
if (*pc == PARROT_OP_get_params_pc) {
- PMC *sig;
- int i, sig_length;
-
/* Get the signature (the next thing in the bytecode). */
- pc++;
- sig = PF_CONST(sub->seg, *pc)->u.key;
- ASSERT_SIG_PMC(sig);
+ PMC *sig = PF_CONST(sub->seg, *(++pc))->u.key;
/* Iterate over the signature and compute argument counts. */
- sig_length = VTABLE_elements(INTERP, sig);
+ INTVAL sig_length = VTABLE_elements(INTERP, sig);
+ int i;
+
+ ASSERT_SIG_PMC(sig);
for (i = 0; i < sig_length; i++) {
int sig_item = VTABLE_get_integer_keyed_int(INTERP, sig, i);;
@@ -886,7 +899,7 @@
}
}
- /* Return the argument information that was requested. */
+ /* Return the requested argument information */
if (Parrot_str_equal(interp, what, CONST_STRING(interp, "pos_required"))) {
count_found = (INTVAL)sub->arg_info->pos_required;
}
@@ -905,16 +918,17 @@
else if (Parrot_str_equal(interp, what, CONST_STRING(interp, "named_slurpy"))) {
count_found = (INTVAL)sub->arg_info->named_slurpy;
}
- else {
- Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
+ else
+ Parrot_ex_throw_from_c_args(interp, NULL,
+ EXCEPTION_INVALID_OPERATION,
"Unknown introspection value '%S'", what);
- }
retval = Parrot_pmc_new(INTERP, enum_class_Integer);
VTABLE_set_integer_native(INTERP, retval, count_found);
return retval;
}
+
/*
=back
@@ -925,33 +939,33 @@
=item C<INTVAL start_offs()>
-Return the start offset of the Sub.
+Returns the start offset of the Sub.
=item C<INTVAL end_offs()>
-Return the end offset of the Sub.
+Returns the end offset of the Sub.
=item C<PMC *get_namespace()>
-Return the namespace PMC, where the Sub is defined.
+Returns the namespace PMC, where the Sub is defined.
TODO return C<namespace_stash> instead.
=item C<INTVAL __get_regs_used(char *kind)>
-Return amount of used registers for register kinds "I", "S", "P", "N".
+Returns the number of used registers for register kinds "I", "S", "P", "N".
=item C<PMC *get_lexinfo()>
-Return the LexInfo PMC, if any or a Null PMC.
+Returns the LexInfo PMC, if any or a Null PMC.
=item C<PMC *get_multisig()>
-Return the MMD signature PMC, if any or a Null PMC.
+Returns the MMD signature PMC, if any, or a Null PMC.
=item C<PMC *get_outer()>
-Gets the sub that is the outer of this one, if any or a Null PMC.
+Gets the sub that is the outer of this one, if any, or a Null PMC.
=item C<void set_outer(PMC *outer)>
@@ -959,7 +973,7 @@
=item C<INTVAL arity()>
-Return the arity of the Sub (the number of arguments, excluding optional and
+Returns the arity of the Sub (the number of arguments, excluding optional and
slurpy arguments).
=cut
@@ -968,11 +982,13 @@
METHOD start_offs() {
Parrot_Sub_attributes *sub;
INTVAL start_offs;
+
PMC_get_sub(INTERP, SELF, sub);
start_offs = sub->start_offs;
RETURN(INTVAL start_offs);
}
+
METHOD end_offs() {
Parrot_Sub_attributes *sub;
INTVAL end_offs;
@@ -981,9 +997,11 @@
RETURN(INTVAL end_offs);
}
+
METHOD get_namespace() {
- PMC *_namespace;
+ PMC *_namespace;
Parrot_Sub_attributes *sub;
+
PMC_get_sub(INTERP, SELF, sub);
/*
XXX Rakudo's failing with with this code on ASSERT. Why???
@@ -994,8 +1012,8 @@
RETURN(PMC *_namespace);
}
- METHOD __get_regs_used(STRING *reg) {
+ METHOD __get_regs_used(STRING *reg) {
/* TODO switch to canonical NiSP order
* see also imcc/reg_alloc.c */
STRING *types = CONST_STRING(INTERP, "INSP");
@@ -1006,33 +1024,35 @@
PMC_get_sub(INTERP, SELF, sub);
PARROT_ASSERT(sub->n_regs_used);
- if (!reg || Parrot_str_length(INTERP, reg) != 1) {
- Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+ if (!reg || Parrot_str_length(INTERP, reg) != 1)
+ Parrot_ex_throw_from_c_args(INTERP, NULL,
+ EXCEPTION_INVALID_OPERATION,
"illegal register kind '%Ss'", reg);
- }
kind = Parrot_str_find_index(INTERP, types, reg, 0);
if (kind == -1)
- Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
- "illegal register kind '%Ss'", reg);
+ Parrot_ex_throw_from_c_args(INTERP, NULL,
+ EXCEPTION_INVALID_OPERATION, "illegal register kind '%Ss'", reg);
regs_used = sub->n_regs_used[kind];
RETURN(INTVAL regs_used);
}
+
METHOD get_lexinfo() {
- PMC *lexinfo;
+ PMC *lexinfo;
Parrot_Sub_attributes *sub;
PMC_get_sub(INTERP, SELF, sub);
- lexinfo = sub->lex_info ? sub->lex_info: PMCNULL;
+ lexinfo = sub->lex_info ? sub->lex_info : PMCNULL;
RETURN(PMC *lexinfo);
}
+
METHOD get_subid() {
- STRING *subid;
+ STRING *subid;
Parrot_Sub_attributes *sub;
PMC_get_sub(INTERP, SELF, sub);
@@ -1041,6 +1061,7 @@
RETURN(STRING *subid);
}
+
METHOD get_outer() {
PMC *outersub;
Parrot_Sub_attributes *sub;
@@ -1051,10 +1072,11 @@
RETURN(PMC *outersub);
}
+
METHOD set_outer(PMC *outer) {
/* Set outer sub. */
Parrot_Sub_attributes *sub;
- PMC *tmp1;
+ PMC *outer_ctx;
PMC_get_sub(INTERP, SELF, sub);
sub->outer_sub = outer;
@@ -1071,18 +1093,20 @@
/* If we've got a context around for the outer sub, set it as the
* outer context. */
- tmp1 = CURRENT_CONTEXT(interp);
- while (!PMC_IS_NULL(tmp1)) {
- if (Parrot_pcc_get_sub(interp, tmp1) == outer) {
- sub->outer_ctx = tmp1;
+ outer_ctx = CURRENT_CONTEXT(interp);
+
+ while (!PMC_IS_NULL(outer_ctx)) {
+ if (Parrot_pcc_get_sub(interp, outer_ctx) == outer) {
+ sub->outer_ctx = outer_ctx;
break;
}
- tmp1 = Parrot_pcc_get_caller_ctx(interp, tmp1);
+ outer_ctx = Parrot_pcc_get_caller_ctx(interp, outer_ctx);
}
}
+
METHOD get_multisig() {
- PMC *multisig;
+ PMC *multisig;
Parrot_Sub_attributes *sub;
PMC_get_sub(INTERP, SELF, sub);
@@ -1091,17 +1115,19 @@
RETURN(PMC *multisig);
}
+
METHOD arity() {
PMC * const pos_required = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "pos_required"));
PMC * const named_required = VTABLE_inspect_str(interp, SELF, CONST_STRING(interp, "named_required"));
- const INTVAL arity = VTABLE_get_integer(INTERP, pos_required) +
- VTABLE_get_integer(INTERP, named_required);
+ const INTVAL arity = VTABLE_get_integer(INTERP, pos_required)
+ + VTABLE_get_integer(INTERP, named_required);
RETURN(INTVAL arity);
}
}
+
/*
* Local variables:
* c-file-style: "parrot"
Modified: branches/pcc_hackathon_6Mar10/src/runcore/main.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/runcore/main.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/runcore/main.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -485,7 +485,7 @@
interp->all_op_libs = mem_gc_allocate_n_zeroed_typed(interp,
interp->n_libs + 1, op_lib_t*);
else
- mem_gc_realloc_n_typed_zeroed(interp, interp->all_op_libs,
+ interp->all_op_libs = mem_gc_realloc_n_typed_zeroed(interp, interp->all_op_libs,
interp->n_libs + 1, interp->n_libs, op_lib_t *);
init_func = get_dynamic_op_lib_init(interp, lib_pmc);
@@ -585,15 +585,14 @@
const size_t n_tot = n_old + n_new;
op_func_t *ops_addr = NULL;
op_lib_t *cg_lib = init_func(interp, 1);
- op_lib_t *new_lib;
#if 0
/* related to CG and CGP ops issue below */
+ op_lib_t *new_lib;
STRING *op_variant;
-#endif
-
oplib_init_f new_init_func;
PMC *lib_variant;
+#endif
if (cg_lib->flags & OP_FUNC_IS_ALLOCATED) {
ops_addr = mem_gc_realloc_n_typed_zeroed(interp,
Modified: branches/pcc_hackathon_6Mar10/src/string/api.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/string/api.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/string/api.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -73,6 +73,25 @@
/*
+=item C<INTVAL Parrot_str_is_null(PARROT_INTERP, const STRING *s)>
+
+Tests if the given STRING is STRINGNULL.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+INTVAL
+Parrot_str_is_null(SHIM_INTERP, ARGIN_NULLOK(const STRING *s))
+{
+ ASSERT_ARGS(Parrot_str_is_null)
+ return !s || s == STRINGNULL;
+}
+
+
+/*
+
=item C<INTVAL STRING_is_null(PARROT_INTERP, const STRING *s)>
Tests if the given STRING is STRINGNULL.
@@ -2822,9 +2841,6 @@
const CHARSET *charset;
const ENCODING *encoding = NULL;
- /* the default encoding is ascii */
- const char *enc_name = enc_char ? enc_char : "ascii";
-
/* does the encoding have a character set? */
const char *p = enc_char ? strchr(enc_char, ':') : NULL;
size_t clength = strlen(cstring);
Modified: branches/pcc_hackathon_6Mar10/src/thread.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/thread.c Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/thread.c Tue Mar 16 22:37:03 2010 (r44975)
@@ -97,10 +97,6 @@
__attribute__nonnull__(1);
PARROT_CAN_RETURN_NULL
-static QUEUE_ENTRY * remove_queued_suspend_gc(PARROT_INTERP)
- __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
static void* thread_func(ARGIN_NULLOK(void *arg));
#define ASSERT_ARGS_detach __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
@@ -140,8 +136,6 @@
, PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_pt_thread_wait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_remove_queued_suspend_gc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
- PARROT_ASSERT_ARG(interp))
#define ASSERT_ARGS_thread_func __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: static */
@@ -963,62 +957,6 @@
/*
-=item C<static QUEUE_ENTRY * remove_queued_suspend_gc(PARROT_INTERP)>
-
-Removes an event requesting that the interpreter suspend itself for a
-garbage-collection run from the event queue.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static QUEUE_ENTRY *
-remove_queued_suspend_gc(PARROT_INTERP)
-{
- ASSERT_ARGS(remove_queued_suspend_gc)
- parrot_event *ev = NULL;
- QUEUE * const queue = interp->task_queue;
- QUEUE_ENTRY *prev = NULL;
- QUEUE_ENTRY *cur;
-
- queue_lock(queue);
- cur = queue->head;
-
- while (cur) {
- ev = (parrot_event *)cur->data;
-
- if (ev->type == EVENT_TYPE_SUSPEND_FOR_GC)
- break;
-
- prev = cur;
- cur = cur->next;
- }
-
- if (cur) {
- if (prev)
- prev->next = cur->next;
- else
- queue->head = cur->next;
-
- if (cur == queue->tail)
- queue->tail = prev;
-
- if (cur == queue->head)
- queue->head = cur->next;
-
- mem_internal_free(ev);
- mem_internal_free(cur);
- cur = NULL;
- DEBUG_ONLY(fprintf(stderr, "%p: remove_queued_suspend_gc: got one\n", interp));
- }
-
- queue_unlock(queue);
- return cur;
-}
-
-/*
-
=item C<static int pt_gc_count_threads(PARROT_INTERP)>
Returns the number of active threads in the system (running or suspended). Be
Deleted: branches/pcc_hackathon_6Mar10/src/tsq.c
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/tsq.c Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,426 +0,0 @@
-/*
-Copyright (C) 2001-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/tsq.c - Thread-safe queues
-
-=head1 DESCRIPTION
-
-This file implements thread-safe queues for Parrot.
-
-=head2 Functions
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-
-/* HEADERIZER HFILE: include/parrot/tsq.h */
-
-/*
-
-=item C<QUEUE_ENTRY * pop_entry(QUEUE *queue)>
-
-Does a synchronized removal of the head entry off the queue and returns it.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY *
-pop_entry(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(pop_entry)
- QUEUE_ENTRY *returnval;
- queue_lock(queue);
- returnval = nosync_pop_entry(queue);
- queue_unlock(queue);
- return returnval;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * peek_entry(const QUEUE *queue)>
-
-This does no locking, so the result might have changed by the time you
-get the entry, but a synchronized C<pop_entry()> will check again and
-return C<NULL> if the queue is empty.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-QUEUE_ENTRY *
-peek_entry(ARGIN(const QUEUE *queue))
-{
- ASSERT_ARGS(peek_entry)
- return queue->head;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * nosync_pop_entry(QUEUE *queue)>
-
-Grab an entry off the queue with no synchronization. Internal only,
-because it's darned evil and shouldn't be used outside the module. It's
-in here so we don't have to duplicate pop code.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-QUEUE_ENTRY *
-nosync_pop_entry(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(nosync_pop_entry)
- QUEUE_ENTRY *returnval;
- if (!queue->head) {
- return NULL;
- }
- returnval = queue->head;
- if (queue->head == queue->tail) {
- queue->head = NULL;
- queue->tail = NULL;
- }
- else {
- queue->head = queue->head->next;
- }
- returnval->next = NULL;
- return returnval;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * wait_for_entry(QUEUE *queue)>
-
-Does a synchronized removal of the head entry off the queue, waiting if
-necessary until there is an entry, and then returns it.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY *
-wait_for_entry(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(wait_for_entry)
- QUEUE_ENTRY *returnval;
-
- queue_lock(queue);
- while (queue->head == NULL) {
- queue_wait(queue);
- }
- returnval = nosync_pop_entry(queue);
- queue_unlock(queue);
- return returnval;
-
-}
-
-/*
-
-=item C<void push_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insertion of C<entry> onto the tail of the queue.
-
-=cut
-
-*/
-
-void
-push_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(push_entry)
- queue_lock(queue);
- /* Is there something in the queue? */
- if (queue->tail) {
- queue->tail->next = entry;
- queue->tail = entry;
- }
- else {
- queue->head = entry;
- queue->tail = entry;
- }
- queue_signal(queue); /* assumes only one waiter */
- queue_unlock(queue);
-}
-
-/*
-
-=item C<void unshift_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insertion of C<entry> into the head of the queue.
-
-=cut
-
-*/
-
-void
-unshift_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(unshift_entry)
- QUEUE_ENTRY *cur;
-
- queue_lock(queue);
- cur = queue->head;
- if (!cur) {
- /* empty just set head */
- queue->head = entry;
- queue->tail = entry;
- }
- else {
- queue->head = entry;
- entry->next = cur;
- }
- queue_signal(queue);
- queue_unlock(queue);
-}
-
-/*
-
-=item C<void nosync_insert_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Inserts a timed event according to C<abstime>. The caller has to hold the
-queue mutex.
-
-=cut
-
-*/
-
-void
-nosync_insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(nosync_insert_entry)
- QUEUE_ENTRY *cur = queue->head;
- QUEUE_ENTRY *prev;
- parrot_event *event;
- FLOATVAL abs_time;
-
- PARROT_ASSERT(entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT);
- /*
- * empty queue - just insert
- */
- if (!cur) {
- queue->head = entry;
- queue->tail = entry;
- return;
- }
-
- prev = NULL;
- event = (parrot_event *)entry->data;
- abs_time = event->u.timer_event.abs_time;
-
- while (cur && cur->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
- const parrot_event * const cur_event = (parrot_event *)cur->data;
- if (abs_time > cur_event->u.timer_event.abs_time) {
- prev = cur;
- cur = cur->next;
- }
- else
- break;
- }
- if (!prev)
- queue->head = entry;
- else {
- prev->next = entry;
- if (prev == queue->tail)
- queue->tail = entry;
- }
- entry->next = cur;
-}
-
-/*
-
-=item C<void insert_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insert of C<entry>.
-
-=cut
-
-*/
-
-void
-insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
- ASSERT_ARGS(insert_entry)
- queue_lock(queue);
- nosync_insert_entry(queue, entry);
- queue_signal(queue);
- queue_unlock(queue);
-}
-
-/*
-
-=item C<void queue_lock(QUEUE *queue)>
-
-Locks the queue's mutex.
-
-=cut
-
-*/
-
-void
-queue_lock(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(queue_lock)
- LOCK(queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_unlock(QUEUE *queue)>
-
-Unlocks the queue's mutex.
-
-=cut
-
-*/
-
-void
-queue_unlock(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(queue_unlock)
- UNLOCK(queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_broadcast(QUEUE *queue)>
-
-This function wakes up I<every> thread waiting on the queue.
-
-=cut
-
-*/
-
-void
-queue_broadcast(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(queue_broadcast)
- COND_BROADCAST(queue->queue_condition);
-}
-
-/*
-
-=item C<void queue_signal(QUEUE *queue)>
-
-=cut
-
-*/
-
-void
-queue_signal(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(queue_signal)
- COND_SIGNAL(queue->queue_condition);
-}
-
-/*
-
-=item C<void queue_wait(QUEUE *queue)>
-
-Instructs the queue to wait.
-
-=cut
-
-*/
-
-void
-queue_wait(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(queue_wait)
- COND_WAIT(queue->queue_condition, queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_timedwait(QUEUE *queue, const struct timespec *abs_time)>
-
-Instructs the queue to wait for C<abs_time> seconds (?).
-
-=cut
-
-*/
-
-void
-queue_timedwait(ARGMOD(QUEUE *queue), ARGIN(const struct timespec *abs_time))
-{
- ASSERT_ARGS(queue_timedwait)
- COND_TIMED_WAIT(queue->queue_condition, queue->queue_mutex, abs_time);
-}
-
-/*
-
-=item C<QUEUE* queue_init(UINTVAL prio)>
-
-Initializes the queue, setting C<prio> as the queue's priority.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_MALLOC
-QUEUE*
-queue_init(UINTVAL prio)
-{
- ASSERT_ARGS(queue_init)
- QUEUE * const queue = mem_internal_allocate_typed(QUEUE);
-
- queue->head = queue->tail = NULL;
- queue->max_prio = prio;
- COND_INIT(queue->queue_condition);
- MUTEX_INIT(queue->queue_mutex);
- return queue;
-}
-
-/*
-
-=item C<void queue_destroy(QUEUE *queue)>
-
-Destroys the queue, raising an exception if it is not empty.
-
-=cut
-
-*/
-
-void
-queue_destroy(ARGMOD(QUEUE *queue))
-{
- ASSERT_ARGS(queue_destroy)
- if (peek_entry(queue))
- exit_fatal(1, "Queue not empty on destroy");
-
- COND_DESTROY(queue->queue_condition);
- MUTEX_DESTROY(queue->queue_mutex);
- mem_internal_free(queue);
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/tsq.h>.
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- * c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */
Modified: branches/pcc_hackathon_6Mar10/src/vtable.tbl
==============================================================================
--- branches/pcc_hackathon_6Mar10/src/vtable.tbl Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/src/vtable.tbl Tue Mar 16 22:37:03 2010 (r44975)
@@ -281,3 +281,5 @@
void share()
PMC* share_ro()
+
+void init_int(INTVAL initializer)
Modified: branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/codingstd/c_function_docs.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -121,7 +121,6 @@
src/string/charset/binary.c
src/string/charset/iso-8859-1.c
src/string/charset/unicode.c
-src/tsq.c
# Local Variables:
# mode: cperl
Modified: branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/codingstd/perlcritic.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -40,7 +40,13 @@
use Parrot::Distribution;
use Test::More;
-# There's no point in continuing if we're missing some certain modules.
+# There's no point in continuing if we're missing some certain modules, or
+# if the developer doesn't want to.
+
+if (exists $ENV{'PARROT_TEST_NO_PERLCRITIC'}) {
+ give_up('absence of PARROT_TEST_NO_PERLCRITIC environment variable');
+}
+
eval { require Test::Perl::Critic };
if ($@) {
give_up('Test::Perl::Critic');
Modified: branches/pcc_hackathon_6Mar10/t/configure/034-step.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/configure/034-step.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/configure/034-step.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -114,7 +114,7 @@
\$stderr
);
ok($rv, "genfile() returned true when warning expected" );
- like( $stderr, qr/value for 'foobar'/, "got expected warning" );
+ like( $stderr, qr/value for '\@foobar\@'/, "got expected warning" );
unlink $dummy or croak "Unable to delete file after testing";
chdir $cwd or croak "Unable to change back to starting directory";
Deleted: branches/pcc_hackathon_6Mar10/t/dynoplibs/random-range.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/dynoplibs/random-range.t Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,369 +0,0 @@
-#! parrot
-# Copyright (C) 2010, Parrot Foundation.
-# $Id$
-
-=head1 NAME
-
-t/dynoplibs/random-range.t - Tests random range behavior of math_ops lib.
-
-=head1 SYNOPSIS
-
- % prove t/dynoblibs/random-range.t
-
-=head1 DESCRIPTION
-
-Tests random range using chi-square
-
-=cut
-
-.loadlib 'math_ops'
-.sub add_chi2_entry
- .param pmc table
- .param int nu
- .param num p_10
- .param num p_05
- .param num p_025
- .param num p_01
- .param num p_001
-
- $P0 = new ['FixedFloatArray']
- $P0 = 5
-
- $P0[0] = p_10
- $P0[1] = p_05
- $P0[2] = p_025
- $P0[3] = p_01
- $P0[4] = p_001
-
- table[nu] = $P0
-.end
-
-.sub compute_chi_square
- .param pmc histogram
- .param int num_samples
-
- .local int possible_values
- possible_values = elements histogram
-
- .local num expected
- expected = num_samples
- expected /= possible_values
-
- .local num K
- K = 0.0
-
- $I0 = possible_values
- if $I0 == 0 goto end
-chi2_loop:
- dec $I0
-
- # Compute: (O - E)^2 / E
- $N0 = histogram[$I0]
- $N0 -= expected
- $N0 *= $N0
- $N0 /= expected
-
- K += $N0
-
- unless $I0 == 0 goto chi2_loop
-
- #~ print "Chi-squared K is: "
- #~ say K
-end:
- .return (K)
-.end
-
-.sub make_chi2_table
- # This info comes from http://itl.nist.gov/div898/handbook/eda/section3/eda3674.htm
- # Obtained 26 Feb 2010 -- Austin
-
- # Probability of exceeding the critical value
- # nu 0.10 0.05 0.025 0.01 0.001
-
- .local pmc table
- table = new ['ResizablePMCArray']
-
- add_chi2_entry(table, 1, 2.706, 3.841, 5.024, 6.635, 10.828)
- add_chi2_entry(table, 2, 4.605, 5.991, 7.378, 9.210, 13.816)
- add_chi2_entry(table, 3, 6.251, 7.815, 9.348, 11.345, 16.266)
- add_chi2_entry(table, 4, 7.779, 9.488, 11.143, 13.277, 18.467)
- add_chi2_entry(table, 5, 9.236, 11.070, 12.833, 15.086, 20.515)
- add_chi2_entry(table, 6, 10.645, 12.592, 14.449, 16.812, 22.458)
- add_chi2_entry(table, 7, 12.017, 14.067, 16.013, 18.475, 24.322)
- add_chi2_entry(table, 8, 13.362, 15.507, 17.535, 20.090, 26.125)
- add_chi2_entry(table, 9, 14.684, 16.919, 19.023, 21.666, 27.877)
- add_chi2_entry(table, 10, 15.987, 18.307, 20.483, 23.209, 29.588)
- add_chi2_entry(table, 11, 17.275, 19.675, 21.920, 24.725, 31.264)
- add_chi2_entry(table, 12, 18.549, 21.026, 23.337, 26.217, 32.910)
- add_chi2_entry(table, 13, 19.812, 22.362, 24.736, 27.688, 34.528)
- add_chi2_entry(table, 14, 21.064, 23.685, 26.119, 29.141, 36.123)
- add_chi2_entry(table, 15, 22.307, 24.996, 27.488, 30.578, 37.697)
- add_chi2_entry(table, 16, 23.542, 26.296, 28.845, 32.000, 39.252)
- add_chi2_entry(table, 17, 24.769, 27.587, 30.191, 33.409, 40.790)
- add_chi2_entry(table, 18, 25.989, 28.869, 31.526, 34.805, 42.312)
- add_chi2_entry(table, 19, 27.204, 30.144, 32.852, 36.191, 43.820)
- add_chi2_entry(table, 20, 28.412, 31.410, 34.170, 37.566, 45.315)
- add_chi2_entry(table, 21, 29.615, 32.671, 35.479, 38.932, 46.797)
- add_chi2_entry(table, 22, 30.813, 33.924, 36.781, 40.289, 48.268)
- add_chi2_entry(table, 23, 32.007, 35.172, 38.076, 41.638, 49.728)
- add_chi2_entry(table, 24, 33.196, 36.415, 39.364, 42.980, 51.179)
- add_chi2_entry(table, 25, 34.382, 37.652, 40.646, 44.314, 52.620)
- add_chi2_entry(table, 26, 35.563, 38.885, 41.923, 45.642, 54.052)
- add_chi2_entry(table, 27, 36.741, 40.113, 43.195, 46.963, 55.476)
- add_chi2_entry(table, 28, 37.916, 41.337, 44.461, 48.278, 56.892)
- add_chi2_entry(table, 29, 39.087, 42.557, 45.722, 49.588, 58.301)
- add_chi2_entry(table, 30, 40.256, 43.773, 46.979, 50.892, 59.703)
- add_chi2_entry(table, 31, 41.422, 44.985, 48.232, 52.191, 61.098)
- add_chi2_entry(table, 32, 42.585, 46.194, 49.480, 53.486, 62.487)
- add_chi2_entry(table, 33, 43.745, 47.400, 50.725, 54.776, 63.870)
- add_chi2_entry(table, 34, 44.903, 48.602, 51.966, 56.061, 65.247)
- add_chi2_entry(table, 35, 46.059, 49.802, 53.203, 57.342, 66.619)
- add_chi2_entry(table, 36, 47.212, 50.998, 54.437, 58.619, 67.985)
- add_chi2_entry(table, 37, 48.363, 52.192, 55.668, 59.893, 69.347)
- add_chi2_entry(table, 38, 49.513, 53.384, 56.896, 61.162, 70.703)
- add_chi2_entry(table, 39, 50.660, 54.572, 58.120, 62.428, 72.055)
- add_chi2_entry(table, 40, 51.805, 55.758, 59.342, 63.691, 73.402)
- add_chi2_entry(table, 41, 52.949, 56.942, 60.561, 64.950, 74.745)
- add_chi2_entry(table, 42, 54.090, 58.124, 61.777, 66.206, 76.084)
- add_chi2_entry(table, 43, 55.230, 59.304, 62.990, 67.459, 77.419)
- add_chi2_entry(table, 44, 56.369, 60.481, 64.201, 68.710, 78.750)
- add_chi2_entry(table, 45, 57.505, 61.656, 65.410, 69.957, 80.077)
- add_chi2_entry(table, 46, 58.641, 62.830, 66.617, 71.201, 81.400)
- add_chi2_entry(table, 47, 59.774, 64.001, 67.821, 72.443, 82.720)
- add_chi2_entry(table, 48, 60.907, 65.171, 69.023, 73.683, 84.037)
- add_chi2_entry(table, 49, 62.038, 66.339, 70.222, 74.919, 85.351)
- add_chi2_entry(table, 50, 63.167, 67.505, 71.420, 76.154, 86.661)
- add_chi2_entry(table, 51, 64.295, 68.669, 72.616, 77.386, 87.968)
- add_chi2_entry(table, 52, 65.422, 69.832, 73.810, 78.616, 89.272)
- add_chi2_entry(table, 53, 66.548, 70.993, 75.002, 79.843, 90.573)
- add_chi2_entry(table, 54, 67.673, 72.153, 76.192, 81.069, 91.872)
- add_chi2_entry(table, 55, 68.796, 73.311, 77.380, 82.292, 93.168)
- add_chi2_entry(table, 56, 69.919, 74.468, 78.567, 83.513, 94.461)
- add_chi2_entry(table, 57, 71.040, 75.624, 79.752, 84.733, 95.751)
- add_chi2_entry(table, 58, 72.160, 76.778, 80.936, 85.950, 97.039)
- add_chi2_entry(table, 59, 73.279, 77.931, 82.117, 87.166, 98.324)
- add_chi2_entry(table, 60, 74.397, 79.082, 83.298, 88.379, 99.607)
- add_chi2_entry(table, 61, 75.514, 80.232, 84.476, 89.591, 100.888)
- add_chi2_entry(table, 62, 76.630, 81.381, 85.654, 90.802, 102.166)
- add_chi2_entry(table, 63, 77.745, 82.529, 86.830, 92.010, 103.442)
- add_chi2_entry(table, 64, 78.860, 83.675, 88.004, 93.217, 104.716)
- add_chi2_entry(table, 65, 79.973, 84.821, 89.177, 94.422, 105.988)
- add_chi2_entry(table, 66, 81.085, 85.965, 90.349, 95.626, 107.258)
- add_chi2_entry(table, 67, 82.197, 87.108, 91.519, 96.828, 108.526)
- add_chi2_entry(table, 68, 83.308, 88.250, 92.689, 98.028, 109.791)
- add_chi2_entry(table, 69, 84.418, 89.391, 93.856, 99.228, 111.055)
- add_chi2_entry(table, 70, 85.527, 90.531, 95.023, 100.425, 112.317)
- add_chi2_entry(table, 71, 86.635, 91.670, 96.189, 101.621, 113.577)
- add_chi2_entry(table, 72, 87.743, 92.808, 97.353, 102.816, 114.835)
- add_chi2_entry(table, 73, 88.850, 93.945, 98.516, 104.010, 116.092)
- add_chi2_entry(table, 74, 89.956, 95.081, 99.678, 105.202, 117.346)
- add_chi2_entry(table, 75, 91.061, 96.217, 100.839, 106.393, 118.599)
- add_chi2_entry(table, 76, 92.166, 97.351, 101.999, 107.583, 119.850)
- add_chi2_entry(table, 77, 93.270, 98.484, 103.158, 108.771, 121.100)
- add_chi2_entry(table, 78, 94.374, 99.617, 104.316, 109.958, 122.348)
- add_chi2_entry(table, 79, 95.476, 100.749, 105.473, 111.144, 123.594)
- add_chi2_entry(table, 80, 96.578, 101.879, 106.629, 112.329, 124.839)
- add_chi2_entry(table, 81, 97.680, 103.010, 107.783, 113.512, 126.083)
- add_chi2_entry(table, 82, 98.780, 104.139, 108.937, 114.695, 127.324)
- add_chi2_entry(table, 83, 99.880, 105.267, 110.090, 115.876, 128.565)
- add_chi2_entry(table, 84, 100.980, 106.395, 111.242, 117.057, 129.804)
- add_chi2_entry(table, 85, 102.079, 107.522, 112.393, 118.236, 131.041)
- add_chi2_entry(table, 86, 103.177, 108.648, 113.544, 119.414, 132.277)
- add_chi2_entry(table, 87, 104.275, 109.773, 114.693, 120.591, 133.512)
- add_chi2_entry(table, 88, 105.372, 110.898, 115.841, 121.767, 134.746)
- add_chi2_entry(table, 89, 106.469, 112.022, 116.989, 122.942, 135.978)
- add_chi2_entry(table, 90, 107.565, 113.145, 118.136, 124.116, 137.208)
- add_chi2_entry(table, 91, 108.661, 114.268, 119.282, 125.289, 138.438)
- add_chi2_entry(table, 92, 109.756, 115.390, 120.427, 126.462, 139.666)
- add_chi2_entry(table, 93, 110.850, 116.511, 121.571, 127.633, 140.893)
- add_chi2_entry(table, 94, 111.944, 117.632, 122.715, 128.803, 142.119)
- add_chi2_entry(table, 95, 113.038, 118.752, 123.858, 129.973, 143.344)
- add_chi2_entry(table, 96, 114.131, 119.871, 125.000, 131.141, 144.567)
- add_chi2_entry(table, 97, 115.223, 120.990, 126.141, 132.309, 145.789)
- add_chi2_entry(table, 98, 116.315, 122.108, 127.282, 133.476, 147.010)
- add_chi2_entry(table, 99, 117.407, 123.225, 128.422, 134.642, 148.230)
- add_chi2_entry(table, 100, 118.498, 124.342, 129.561, 135.807, 149.449)
-
- .return (table)
-.end
-
-.sub make_random_hist
- .param int min
- .param int max
- .param int num_samples
-
- if max > min goto get_pv
- die "Max must be > min"
-
-get_pv:
- .local int possible_values
- possible_values = max - min
- inc possible_values
-
- .local pmc histogram
- histogram = new ['FixedIntegerArray']
- histogram = possible_values
-
- $I0 = max - min
-init:
- histogram[$I0] = 0
- dec $I0
- unless $I0 < 0 goto init
-
- $I0 = num_samples
- if $I0 == 0 goto loop_done
-loop:
- .local int random
- random = rand min, max
-
- random -= min
- $I1 = histogram[random]
- inc $I1
- histogram[random] = $I1
-
- dec $I0
- unless $I0 <= 0 goto loop
-loop_done:
-
- .return (histogram)
-.end
-
-.sub print_histogram
- .param pmc histogram
- .param int num_samples
-
- .local num expected
- expected = num_samples
- $I0 = elements histogram
- expected /= $I0
-
- .local pmc sprintf_args
- sprintf_args = new ['FixedPMCArray']
- sprintf_args = 2
-
- $I0 = elements histogram
-hist_loop:
- dec $I0
-
- $N0 = histogram[$I0]
- $N0 /= expected
- $P0 = box $N0
- sprintf_args[0] = $P0
-
- $N1 = $N0 * 40
- $I1 = $N1
- $I1 -= 6 # width of printed $N0, plus space
- if $I1 > 0 goto make_stars
- $I1 = 0
-make_stars:
-
- $S0 = repeat '*', $I1
- $P0 = box $S0
- sprintf_args[1] = $P0
-
- $S0 = sprintf "%5.3f %s", sprintf_args
- say $S0
-
- unless $I0 <= 0 goto hist_loop
-
-end:
-.end
-
-.sub test_histogram
- .param pmc histogram
- .param num K
- .param pmc table
-
- .local int degrees_of_freedom
- $I0 = elements histogram
- degrees_of_freedom = $I0 - 1
-
- .local pmc sprintf_args
- sprintf_args = new ['ResizablePMCArray']
- $P0 = box degrees_of_freedom
- push sprintf_args, $P0
-
- $I0 = exists table[degrees_of_freedom]
- if $I0 goto get_data
-
- $S0 = sprintf "Don't have chi2 data for %d degrees of freedom", sprintf_args
- skip(1, $S0)
- goto end
-
-get_data:
-
- .local pmc chi2_data
- chi2_data = table[degrees_of_freedom]
- $N0 = chi2_data[0]
-
- $I0 = islt K, $N0
-
- $P0 = box $N0
- unshift sprintf_args, $P0
- $P0= box K
- unshift sprintf_args, $P0
-
- $S0 = sprintf "K (%5.3f) should be less than limit (%5.3f) for %d degrees of freedom", sprintf_args
- todo($I0, $S0)
-
-end:
- .return ($I0)
-.end
-
-.sub test_random_range
- .param int range
- .param int times
- .param pmc table
-
- .local int num_samples
- num_samples = range * times
-
- .local int min, max
- min = 10
- max = min + range
-
- .local pmc histogram
- histogram = make_random_hist(min, max, num_samples)
-
- .local num K
- K = compute_chi_square(histogram, num_samples)
-
- $I0 = test_histogram(histogram, K, table)
-
- #if $I0 goto end
- #print_histogram(histogram, num_samples)
-end:
-.end
-
-.sub main :main
- .include 'test_more.pir'
-
- .const int TIMES = 10000
-
- .local int num_tries
- num_tries = 101
-
- plan(num_tries)
-
- $S0 = "Running tests expecting #TIMES# hits per bucket"
- $P0 = split '#', $S0
- $S0 = TIMES
- $P0[1] = $S0
- $S0 = join '', $P0
- diag($S0)
-
- .local pmc table
- table = make_chi2_table()
-
- $I0 = 0
-loop:
- inc $I0
- test_random_range($I0, TIMES, table)
- if $I0 < num_tries goto loop
-
-.end
-# Local Variables:
-# mode: pir
-# fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4 ft=pir:
Modified: branches/pcc_hackathon_6Mar10/t/native_pbc/annotations.pbc
==============================================================================
Binary file (source and/or target). No diff available.
Modified: branches/pcc_hackathon_6Mar10/t/native_pbc/integer_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.
Modified: branches/pcc_hackathon_6Mar10/t/native_pbc/number_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.
Modified: branches/pcc_hackathon_6Mar10/t/native_pbc/string_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.
Modified: branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/oo/vtableoverride.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -18,11 +18,12 @@
.sub main :main
.include 'test_more.pir'
- plan(12)
+ plan(13)
newclass_tests()
subclass_tests()
vtable_implies_self_tests()
+ anon_vtable_tests()
.end
.sub 'newclass_tests'
@@ -88,6 +89,21 @@
ok( $I0, ':vtable should imply the self parameter' )
.end
+
+.sub 'anon_vtable_tests'
+ $P0 = newclass "AnonVtableType"
+ $P1 = new 'AnonVtableType'
+ push_eh anon_does_not_work
+ $S0 = $P1
+ is($S0, "foo", "can have :vtable :anon")
+ goto anon_end
+ anon_does_not_work:
+ ok(0, "can not have :anon :vtable")
+ anon_end:
+ pop_eh
+.end
+
+
.namespace [ 'MyObject' ]
.sub '__onload' :anon :init
@@ -171,6 +187,14 @@
.return( 1 )
.end
+
+.namespace [ 'AnonVtableType' ]
+
+.sub '' :vtable('get_string') :method :anon
+ .return("foo")
+.end
+
+
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/pcc_hackathon_6Mar10/t/op/arithmetics.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/arithmetics.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/arithmetics.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -19,6 +19,7 @@
.sub main :main
.include 'test_more.pir'
+ .include 'iglobals.pasm'
plan(130)
@@ -153,18 +154,21 @@
# print -0.0 as -0
#
.sub negate_minus_zero_point_zero
- .include 'sysinfo.pasm'
- $S9 = sysinfo .SYSINFO_PARROT_OS
+ .local pmc interp, config_hash
+ .local string has_negative_zero
+ interp = getinterp
+ config_hash = interp[.IGLOBALS_CONFIG_HASH]
+ has_negative_zero = config_hash['has_negative_zero']
set $N0, 0
neg $N0
$S0 = $N0
- if $S9 == 'MSWin32' goto Todo_test1
+ unless has_negative_zero goto Todo_test1
is( $S0, "-0", '1' )
goto End_test1
Todo_test1:
$I0 = $S0 == "-0"
- todo($I0, 'Faulty on this platform')
+ todo($I0, 'negative zero, TT #313')
End_test1:
set $N0, -0.0
@@ -181,12 +185,12 @@
set $N1, 1
neg $N1, $N0
$S0 = $N1
- if $S9 == 'MSWin32' goto Todo_test4
+ unless has_negative_zero goto Todo_test4
is( $S0, "-0", '4' )
goto End_test4
Todo_test4:
$I0 = $S0 == "-0"
- todo($I0, 'Faulty on this platform')
+ todo($I0, 'negative zero, TT #313')
End_test4:
.end
Modified: branches/pcc_hackathon_6Mar10/t/op/sprintf.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/sprintf.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/sprintf.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -106,8 +106,6 @@
skip_tests = 'set_skip_info'()
# how many tests to run?
- # XXX: this should be summed automatically from test_files data
- # until then, it's set to no plan
test.'plan'(TESTS)
outer_loop:
Modified: branches/pcc_hackathon_6Mar10/t/op/trans.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/trans.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/trans.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -4,7 +4,7 @@
=head1 NAME
-t/op/trans.t - Bitwise Ops
+t/op/trans.t - Trancendental Mathematical Ops
=head1 SYNOPSIS
@@ -18,15 +18,29 @@
.sub main :main
.include 'test_more.pir'
+ .local num epsilon
+ epsilon = _epsilon()
- plan(16)
+ plan(28)
- test_sin_n()
- test_sin_i()
- test_cos_n()
- test_cos_i()
- test_tan_n()
- test_tan_i()
+ test_sin_n(epsilon)
+ test_sin_i(epsilon)
+ test_cos_n(epsilon)
+ test_cos_i(epsilon)
+ test_tan_n(epsilon)
+ test_tan_i(epsilon)
+ test_sec_n(epsilon)
+ test_sec_i(epsilon)
+ test_atan_n(epsilon)
+ test_atan_i(epsilon)
+ test_asin_n(epsilon)
+ test_asin_i(epsilon)
+ test_acos_n(epsilon)
+ test_acos_i(epsilon)
+ test_asec_n(epsilon)
+ test_asec_i(epsilon)
+ test_cosh_n(epsilon)
+ test_cosh_i(epsilon)
.end
.sub _pi
@@ -42,8 +56,7 @@
.end
.sub test_sin_n
- .local num epsilon
- epsilon = _epsilon()
+ .param num epsilon
$N0 = sin 0.0
is($N0, 0.0, "sin(0.0)", epsilon)
@@ -62,8 +75,7 @@
.end
.sub test_sin_i
- .local num epsilon
- epsilon = _epsilon()
+ .param num epsilon
$N0 = sin 0
is($N0, 0.0, "sin(0)", epsilon)
@@ -73,8 +85,7 @@
.end
.sub test_cos_n
- .local num epsilon
- epsilon = _epsilon()
+ .param num epsilon
$N0 = cos 0.0
is($N0, 1.0, "cos(0.0)", epsilon)
@@ -93,8 +104,7 @@
.end
.sub test_cos_i
- .local num epsilon
- epsilon = _epsilon()
+ .param num epsilon
$N0 = cos 0
is($N0, 1.0, "cos(0)", epsilon)
@@ -104,8 +114,7 @@
.end
.sub test_tan_n
- .local num epsilon
- epsilon = _epsilon()
+ .param num epsilon
$N0 = tan 0.0
is($N0, 0.0, "tan(0.0)", epsilon)
@@ -115,8 +124,7 @@
.end
.sub test_tan_i
- .local num epsilon
- epsilon = _epsilon()
+ .param num epsilon
$N0 = tan 0
is($N0, 0.0, "tan(0)", epsilon)
@@ -125,6 +133,109 @@
is($N0, 1.557408, "tan(1)", epsilon)
.end
+.sub test_sec_n
+ .param num epsilon
+
+ $N1 = 1.0
+ $N2 = sec $N1
+ is($N2, 1.850816, "sec(1.0)", epsilon)
+.end
+
+.sub test_sec_i
+ .param num epsilon
+
+ $I1 = 1
+ $N1 = sec $I1
+ is($N1, 1.850816, "sec(1)", epsilon)
+.end
+
+.sub test_atan_n
+ .param num epsilon
+
+ $N1 = 1.0
+ $N2 = atan $N1
+ is($N2, 0.785398, "atan(1.0)", epsilon)
+.end
+
+.sub test_atan_i
+ .param num epsilon
+
+ $I1 = 1
+ $N1 = atan $I1
+ is($N1, 0.785398, "atan(1)", epsilon)
+.end
+
+.sub test_asin_n
+ .param num epsilon
+ .local num pi2
+ pi2 = _pi()
+ pi2 /= 2
+
+ $N1 = 1.0
+ $N2 = asin $N1
+ is($N2, pi2, "asin(1.0)", epsilon)
+.end
+
+.sub test_asin_i
+ .param num epsilon
+ .local num pi2
+ pi2 = _pi()
+ pi2 /= 2
+
+ $I1 = 1
+ $N1 = asin $I1
+ is($N1, pi2, "asin(1)", epsilon)
+.end
+
+.sub test_acos_n
+ .param num epsilon
+
+ $N1 = 1.0
+ $N2 = acos $N1
+ is($N2, 0.0, "acos(1.0)", epsilon)
+.end
+
+.sub test_acos_i
+ .param num epsilon
+
+ $I1 = 1
+ $N1 = acos $I1
+ is($N1, 0.0, "acos(1)", epsilon)
+.end
+
+.sub test_asec_n
+ .param num epsilon
+
+ $N1 = 1.0
+ $N2 = asec $N1
+ is($N2, 0.0, "asec(1.0)", epsilon)
+.end
+
+.sub test_asec_i
+ .param num epsilon
+
+ $I1 = 1
+ $N1 = asec $I1
+ is($N1, 0.0, "asec(1)", epsilon)
+.end
+
+.sub test_cosh_n
+ .param num epsilon
+ .local num result
+
+ $N1 = 1.0
+ $N2 = cosh $N1
+ is($N2, 1.543081, "cosh(1.0)", epsilon)
+.end
+
+.sub test_cosh_i
+ .param num epsilon
+
+ $I1 = 1
+ $N1 = cosh $I1
+ is($N1, 1.543081, "cosh(1)", epsilon)
+.end
+
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/pcc_hackathon_6Mar10/t/op/trans_old.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/op/trans_old.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/op/trans_old.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -6,7 +6,7 @@
use warnings;
use lib qw( . lib ../lib ../../lib );
use Test::More;
-use Parrot::Test tests => 19;
+use Parrot::Test tests => 13;
use Math::Trig qw( tan sec atan asin acos asec cosh sinh tanh sech );
=head1 NAME
@@ -29,124 +29,6 @@
# which will conditionally branch
# to LABEL if abs(n,n) < epsilon
-pasm_output_is( <<"CODE", <<OUTPUT, "sec" );
- .include 'fp_equality.pasm'
- set N1, 1.0
- sec N2, N1
- .fp_eq_pasm (N2, 1.850816, EQ1)
- print "not "
-EQ1: print "ok 1\\n"
-
- set I1, 1
- sec N2, I1
- .fp_eq_pasm (N2, 1.850816, EQ2)
- print "not "
-EQ2: print "ok 2\\n"
- end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "atan" );
- .include 'fp_equality.pasm'
- set N1, 1.0
- atan N2, N1
- .fp_eq_pasm (N2, 0.785398, EQ1)
- print "not "
-EQ1: print "ok 1\\n"
-
- set I1, 1
- atan N2, I1
- .fp_eq_pasm (N2,0.785398 , EQ2)
- print "not "
-EQ2: print "ok 2\\n"
- end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "asin" );
- .include 'fp_equality.pasm'
- set N1, 1.0
- asin N2, N1
- .fp_eq_pasm (N2, 1.570796, EQ1)
- print "not "
-EQ1: print "ok 1\\n"
-
- set I1, 1
- asin N2, I1
- .fp_eq_pasm (N2, 1.570796 , EQ2)
- print "not "
-EQ2: print "ok 2\\n"
-
- end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "acos" );
- .include 'fp_equality.pasm'
- set N1, 1.0
- acos N2, N1
- .fp_eq_pasm (N2, 0.000000, EQ1)
- print "not "
-EQ1: print "ok 1\\n"
-
- set I1, 1
- acos N2, I1
- .fp_eq_pasm (N2, 0.000000, EQ2)
- print "not "
-EQ2: print "ok 2\\n"
-
- end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "asec" );
- .include 'fp_equality.pasm'
- set N1, 1.0
- asec N2, N1
- .fp_eq_pasm (N2, 0.000000, EQ1)
- print "not "
-EQ1: print "ok 1\\n"
-
- set I1, 1
- asec N2, I1
- .fp_eq_pasm (N2, 0.000000, EQ2)
- print "not "
-EQ2: print "ok 2\\n"
-
- end
-CODE
-ok 1
-ok 2
-OUTPUT
-
-pasm_output_is( <<"CODE", <<OUTPUT, "cosh" );
- .include 'fp_equality.pasm'
- set N1, 1.0
- cosh N2, N1
- .fp_eq_pasm (N2, 1.543081, EQ1)
- print "not "
-EQ1: print "ok 1\\n"
-
- set I1, 1
- cosh N2, I1
- .fp_eq_pasm (N2, 1.543081, EQ2)
- print "not "
-EQ2: print "ok 2\\n"
-
- end
-CODE
-ok 1
-ok 2
-OUTPUT
-
my $runcore = $ENV{TEST_PROG_ARGS} || '';
my @bsdtodo = (
$runcore =~ /--runcore=jit/ && $^O =~ m/bsd/i
Modified: branches/pcc_hackathon_6Mar10/t/pmc/complex.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/complex.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/complex.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -21,7 +21,7 @@
.include 'fp_equality.pasm'
.include "iglobals.pasm"
- plan(458)
+ plan(459)
string_parsing()
exception_malformed_string__real_part()
@@ -50,6 +50,7 @@
instantiate__pir__s()
test_complex_neg()
test_clone()
+ test_freeze_thaw()
test_sub()
test_i_sub()
sprintf_with_a_complex()
@@ -591,6 +592,14 @@
.fp_eq_ok($N1, -3.0, '... nor to imag portion')
.end
+.sub test_freeze_thaw
+ $P0 = new ['Complex']
+ set $P0, "1 - 3i"
+ $S0 = freeze $P0
+ $P1 = thaw $S0
+ is($P0, $P1, 'roundtrip serialize Complex PMC')
+.end
+
.sub test_sub
.local pmc d, f, c
d = new ['Undef']
Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedbooleanarray.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -17,12 +17,10 @@
=cut
-.const int TESTS = 37
-
.sub 'test' :main
.include 'test_more.pir'
- plan(TESTS)
+ plan(41)
setting_array_size()
resizing_not_allowed()
@@ -36,9 +34,11 @@
truth()
pmc_keys_and_values()
freeze_thaw()
- 'clone'()
+ test_clone()
get_iter()
fill()
+ test_new_style_init()
+ test_invalid_init_tt1509()
.end
.sub 'setting_array_size'
@@ -244,7 +244,7 @@
is($S0, '01001000100010010', 'FixedBooleanArray after thaw')
.end
-.sub 'clone'
+.sub test_clone
.local pmc fba1, fba2
.local int i
.local string s
@@ -332,6 +332,31 @@
.end
+.sub test_new_style_init
+ $P0 = new 'FixedBooleanArray', 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements")
+
+ $P0 = new ['FixedBooleanArray'], 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+ throws_substring(<<'CODE', 'FixedBooleanArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+ .sub main
+ $P0 = new ['FixedBooleanArray'], -10
+ .end
+CODE
+
+ throws_substring(<<'CODE', 'FixedBooleanArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+ .sub main
+ $P0 = new 'FixedBooleanArray', -10
+ .end
+CODE
+.end
# Local Variables:
# mode: pir
Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedfloatarray.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,5 +1,5 @@
#! parrot
-# Copyright (C) 2001-2007, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
# $Id$
=head1 NAME
@@ -20,7 +20,7 @@
.sub main :main
.include 'fp_equality.pasm'
.include 'test_more.pir'
- plan(26)
+ plan(30)
array_size_tests()
element_set_tests()
@@ -30,6 +30,8 @@
what_is_truth()
interface_check()
get_iter_test()
+ test_new_style_init()
+ test_invalid_init_tt1509()
.end
.sub array_size_tests
@@ -245,6 +247,31 @@
is($S0, "1.1,99.99,-345.001,", "get_iter works")
.end
+.sub test_new_style_init
+ $P0 = new 'FixedFloatArray', 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements")
+
+ $P0 = new ['FixedFloatArray'], 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+ throws_substring(<<'CODE', 'FixedFloatArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+ .sub main
+ $P0 = new ['FixedFloatArray'], -10
+ .end
+CODE
+
+ throws_substring(<<'CODE', 'FixedFloatArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+ .sub main
+ $P0 = new 'FixedFloatArray', -10
+ .end
+CODE
+.end
# Local Variables:
# mode: pir
Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedintegerarray.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -19,18 +19,32 @@
.sub 'main' :main
.include 'test_more.pir'
- plan(29)
+ plan(33)
- 'test_set_size'() # 2 tests
- 'test_reset_size'() # 1 test
- 'test_set_first'() # 3 tests
- 'test_set_second'() # 3 tests
- 'test_out_of_bounds'() # 4 tests
- 'test_set_via_pmc'() # 3 tests
- 'test_get_via_pmc'() # 4 tests
- 'test_interface_done'() # 4 tests
- 'test_get_iter'() # 1 test
- 'test_equality'() # 5 tests
+ test_set_size()
+ test_reset_size()
+ test_set_first()
+ test_set_second()
+ test_out_of_bounds()
+ test_set_via_pmc()
+ test_get_via_pmc()
+ test_interface_done()
+ test_get_iter()
+ test_equality()
+ test_new_style_init()
+ test_invalid_init_tt1509()
+.end
+
+.sub 'test_new_style_init'
+ $P0 = new 'FixedIntegerArray', 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements")
+
+ $P0 = new ['FixedIntegerArray'], 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements for a key constant")
.end
.sub 'test_set_size'
@@ -235,6 +249,26 @@
is(a1, a2, "Equal when second element same")
.end
+.sub 'test_new_style_init'
+ $P0 = new ['FixedIntegerArray'], 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements")
+.end
+
+.sub test_invalid_init_tt1509
+ throws_substring(<<'CODE', 'FixedIntegerArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+ .sub main
+ $P0 = new ['FixedIntegerArray'], -10
+ .end
+CODE
+
+ throws_substring(<<'CODE', 'FixedIntegerArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+ .sub main
+ $P0 = new 'FixedIntegerArray', -10
+ .end
+CODE
+.end
# Local Variables:
# mode: pir
Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedpmcarray.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -19,7 +19,7 @@
.sub main :main
.include 'test_more.pir'
- plan(78)
+ plan(82)
test_setting_array_size()
test_assign_from_another()
test_assign_self()
@@ -46,6 +46,8 @@
test_splice()
test_sort()
test_exists()
+ test_new_style_init()
+ test_invalid_init_tt1509()
.end
.sub test_exists
@@ -666,6 +668,32 @@
is($I0,1,'size of FixedPMCArray is 1')
.end
+.sub 'test_new_style_init'
+ $P0 = new 'FixedPMCArray', 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements")
+
+ $P0 = new ['FixedPMCArray'], 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+ throws_substring(<<'CODE', 'Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+ .sub main
+ $P0 = new ['FixedPMCArray'], -10
+ .end
+CODE
+
+ throws_substring(<<'CODE', 'Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+ .sub main
+ $P0 = new 'FixedPMCArray', -10
+ .end
+CODE
+.end
+
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/fixedstringarray.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -19,25 +19,27 @@
.sub 'main' :main
.include 'test_more.pir'
- plan(46)
+ plan(50)
- 'test_set_size'() # 2 tests
- 'test_reset_size'() # 1 test
- 'test_set_first'() # 3 tests
- 'test_set_second'() # 3 tests
- 'test_out_of_bounds'() # 4 tests
- 'test_set_via_pmc'() # 3 tests
- 'test_get_via_pmc'() # 4 tests
- 'test_interface_done'() # 3 tests
- 'test_clone'() # 3 tests
- 'test_clone_unitialized'() # 2 tests
- 'test_truth'() # 2 tests
- 'test_get_iter'() # 1 test
- 'test_freez_thaw'() # 1 test
- 'test_get_string'() # 1 test
- 'test_equality'() # 5 tests
- 'test_gc'() # 4 tests
- 'test_number'() # 2 tests
+ test_set_size()
+ test_reset_size()
+ test_set_first()
+ test_set_second()
+ test_out_of_bounds()
+ test_set_via_pmc()
+ test_get_via_pmc()
+ test_interface_done()
+ test_clone()
+ test_clone_unitialized()
+ test_truth()
+ test_get_iter()
+ test_freez_thaw()
+ test_get_string()
+ test_equality()
+ test_gc()
+ test_number()
+ test_new_style_init()
+ test_invalid_init_tt1509()
.end
.sub 'test_set_size'
@@ -376,6 +378,31 @@
is($N0, 3.0, "get_number returns correct size")
.end
+.sub 'test_new_style_init'
+ $P0 = new 'FixedStringArray', 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements")
+
+ $P0 = new ['FixedStringArray'], 10
+
+ $I0 = $P0
+ is($I0, 10, "New style init creates the correct # of elements for a key constant")
+.end
+
+.sub test_invalid_init_tt1509
+ throws_substring(<<'CODE', 'FixedStringArray: Cannot set array size to a negative number (-10)', 'New style init does not dump core for negative array lengths')
+ .sub main
+ $P0 = new ['FixedStringArray'], -10
+ .end
+CODE
+
+ throws_substring(<<'CODE', 'FixedStringArray: Cannot set array size to a negative number (-10)', 'New style init (key constant) does not dump core for negative array lengths')
+ .sub main
+ $P0 = new 'FixedStringArray', -10
+ .end
+CODE
+.end
# Local Variables:
# mode: pir
Modified: branches/pcc_hackathon_6Mar10/t/pmc/float.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/float.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/float.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -342,7 +342,7 @@
neg $P0
$S0 = $P0
- is($S0, "-0")
+ is($S0, "-0", "negative 0.0 to string")
.return ()
negative_zero_todoed:
Modified: branches/pcc_hackathon_6Mar10/t/pmc/nci.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/nci.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/nci.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,12 +1,12 @@
#! perl
-# Copyright (C) 2001-2009, Parrot Foundation.
+# Copyright (C) 2001-2010, Parrot Foundation.
# $Id$
use strict;
use warnings;
use lib qw( . lib ../lib ../../lib );
use Test::More;
-use Parrot::Test tests => 71;
+use Parrot::Test;
use Parrot::Config qw(%PConfig);
=head1 NAME
@@ -34,8 +34,9 @@
SKIP: {
unless ( -e "runtime/parrot/dynext/libnci_test$PConfig{load_ext}" ) {
- skip( "Please make libnci_test$PConfig{load_ext}", Test::Builder->expected_tests() );
+ plan skip_all => "Please make libnci_test$PConfig{load_ext}";
}
+ plan tests => 71;
pir_output_is( << 'CODE', << 'OUTPUT', 'load library fails' );
.sub test :main
Modified: branches/pcc_hackathon_6Mar10/t/pmc/signal.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/pmc/signal.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/pmc/signal.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -22,8 +22,7 @@
=cut
-# actually more platforms should work - all POSIX compliant ones - but
-# signals are currently not enabled for all in src/events.c
+# actually more platforms should work - all POSIX compliant ones
# a second problem is to get the test doing the right thing: mainly figuring
# out what PID to kill. The "ps" command isn't one of the portable ones.
Modified: branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/auto/cgoto-01.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -5,7 +5,7 @@
use strict;
use warnings;
-use Test::More tests => 45;
+use Test::More tests => 25;
use Carp;
use lib qw( lib t/configure/testlib );
use_ok('config::auto::cgoto');
@@ -37,10 +37,6 @@
my $ret = $step->runstep($conf);
ok( $ret, "runstep() returned true value" );
ok(defined($step->result()), "A result was defined");
-ok(defined($conf->data->get('TEMP_cg_h')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_c')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_o')), "An attribute has been defined");
-ok(defined($conf->data->get('TEMP_cg_r')), "An attribute has been defined");
ok(defined($conf->data->get('cg_flag')), "An attribute has been defined");
$conf->replenish($serialized);
@@ -68,18 +64,10 @@
########### _evaluate_cgoto() ###########
$step->_evaluate_cgoto($conf, 1);
-ok($conf->data->get('TEMP_cg_h'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_c'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_o'), "An attribute was set to true value");
-ok($conf->data->get('TEMP_cg_r'), "An attribute was set to true value");
ok($conf->data->get('cg_flag'), "An attribute was set to true value");
is($step->result(), q{yes}, "Expected result was set");
$step->_evaluate_cgoto($conf, 0);
-is($conf->data->get('TEMP_cg_h'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_c'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_o'), q{}, "An attribute was set to empty string");
-is($conf->data->get('TEMP_cg_r'), q{}, "An attribute was set to empty string");
is($conf->data->get('cg_flag'), q{}, "An attribute was set to empty string");
is($step->result(), q{no}, "Expected result was set");
@@ -99,10 +87,6 @@
sub { $step->_evaluate_cgoto($conf, 1) },
\$stdout
);
- ok($conf->data->get('TEMP_cg_h'), "An attribute was set to true value");
- ok($conf->data->get('TEMP_cg_c'), "An attribute was set to true value");
- ok($conf->data->get('TEMP_cg_o'), "An attribute was set to true value");
- ok($conf->data->get('TEMP_cg_r'), "An attribute was set to true value");
ok($conf->data->get('cg_flag'), "An attribute was set to true value");
is($step->result(), q{yes}, "Expected result was set");
}
@@ -113,14 +97,6 @@
sub { $step->_evaluate_cgoto($conf, 0) },
\$stdout
);
- is($conf->data->get('TEMP_cg_h'), q{},
- "An attribute was set to empty string");
- is($conf->data->get('TEMP_cg_c'), q{},
- "An attribute was set to empty string");
- is($conf->data->get('TEMP_cg_o'), q{},
- "An attribute was set to empty string");
- is($conf->data->get('TEMP_cg_r'), q{},
- "An attribute was set to empty string");
is($conf->data->get('cg_flag'), q{},
"An attribute was set to empty string");
is($step->result(), q{no}, "Expected result was set");
Modified: branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/auto/warnings-01.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -5,7 +5,7 @@
use strict;
use warnings;
-use Test::More tests => 41;
+use Test::More qw(no_plan); # tests => 26;
use Carp;
use lib qw( lib t/configure/testlib );
use_ok('config::auto::warnings');
@@ -31,111 +31,59 @@
$conf->add_steps($pkg);
my $serialized = $conf->pcfreeze();
+my $step;
-$conf->options->set( %{$args} );
SKIP: {
skip 'Tests not yet passing on Sun/Solaris',
- 39
+ 23
if $^O =~ m/sun|solaris/i;
-my $step = test_step_constructor_and_description($conf);
-
-my %potential_warnings_seen;
-$conf->options->set(cage => 1);
-$step->_add_cage_warnings($conf);
-%potential_warnings_seen = map { $_, 1 } @{ $step->{potential_warnings} };
-ok($potential_warnings_seen{'-std=c89'}, "Cage warning added");
-
-$conf->replenish($serialized);
+# Simulate the case where C compiler is not gcc.
$conf->options->set( %{$args} );
$step = test_step_constructor_and_description($conf);
-$conf->options->set(maintainer => 1);
-$step->_add_maintainer_warnings($conf);
-%potential_warnings_seen = map { $_, 1 } @{ $step->{potential_warnings} };
-ok($potential_warnings_seen{'-Wlarger-than-4096'}, "Maintainer warning added");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $warning = q{-Wphony_warning};
-auto::warnings::_set_warning($conf, $warning, 1, undef);
-ok(! $conf->data->get($warning),
- "Got expected setting for warning");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-{
- my $warning = q{-Wphony_warning};
- my $stdout;
- capture(
- sub { auto::warnings::_set_warning($conf, $warning, 1, 1); },
- \$stdout,
- );
- ok(! $conf->data->get($warning),
- "Got expected setting for warning");
- like($stdout, qr/exit code:\s+1/, "Got expected verbose output");
-}
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-my $output = q{some string};
-my $tryflags = q{some flag};
-my $rv = auto::warnings::_set_ccflags($conf, $output, $tryflags, undef);
-is($rv, 1, "_set_ccflags() returned 1 as expected");
-is($conf->data->get("ccflags"), $tryflags, "ccflags changed as expected");
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-{
- my $output = q{some string};
- my $tryflags = q{some flag};
- my ($rv, $stdout);
- capture(
- sub { $rv = auto::warnings::_set_ccflags($conf, $output, $tryflags, 1); },
- \$stdout,
- );
- is($rv, 1, "_set_ccflags() returned 1 as expected");
- is($conf->data->get("ccflags"), $tryflags, "ccflags changed as expected");
- like($stdout, qr/ccflags:\s+$tryflags/, "Got expected verbose output");
-}
-
-$conf->replenish($serialized);
-
-$conf->options->set( %{$args} );
-$step = test_step_constructor_and_description($conf);
-# Mock case where C compiler is not gcc.
$conf->data->set( gccversion => undef );
ok($step->runstep($conf), "runstep() returned true value");
is($step->result(), q{skipped}, "Got expected result");
+$step->set_result( undef );
$conf->replenish($serialized);
-$conf->options->set( %{$args} );
+# Simulate the case where C compiler is not gcc: verbose
+$conf->options->set( verbose => 1 );
$step = test_step_constructor_and_description($conf);
+$conf->data->set( gccversion => undef );
{
- my ($stdout, $rv);
- # Mock case where C compiler is not gcc.
- $conf->data->set( gccversion => undef );
- $conf->options->set( verbose => 1 );
+ my ($stdout, $stderr, $rv);
capture(
sub { $rv = $step->runstep($conf); },
\$stdout,
+ \$stderr,
);
ok($rv, "runstep() returned true value");
is($step->result(), q{skipped}, "Got expected result");
- like($stdout,
- qr/Currently we only set warnings/,
- "Got expected verbose output"
- );
+ like($stdout, qr/We do not \(yet\) probe for warnings for your compiler/s,
+ "Got expected verbose output: compiler with warnings not yet supported" );
}
+$step->set_result( undef );
+$conf->replenish($serialized);
+
+# Simulate case where --cage warnings are requested
+$conf->options->set( verbose => undef );
+$step = test_step_constructor_and_description($conf);
+$conf->data->set( gccversion => 'defined' );
+$conf->data->set( 'g++' => undef );
+$conf->options->set( cage => 1 );
+ok($step->runstep($conf), "runstep() returned true value");
+
+# This test is fragile, as it depends on the current state of --cage,
+# which changes over time, and on the compiler, which may not support
+# this option.
+like($conf->data->get( 'ccwarn' ),
+ qr/-Wunreachable-code/,
+ "'cage' warning set as expected"
+);
+
} # End SKIP block for Sun/Solaris
$conf->cc_clean();
Modified: branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/gen/makefiles-01.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -68,16 +68,10 @@
#["IF(value == xx)", 0], # invalid op error
#["IF(value = xx)", 0], # invalid op error
["IF(value=xx)", 0], # also invalid, no warning. checks for key value=xx
-
- # Legacy syntax true or false
- ["CONDITIONED_LINE(true)", 1],
- ["INVERSE_CONDITIONED_LINE(true)", 0],
- ["CONDITIONED_LINE(false)", 0],
- ["INVERSE_CONDITIONED_LINE(false)", 1],
);
}
-use Test::More tests => (8 + @cond_tests);
+use Test::More tests => (7 + @cond_tests);
use Carp;
use lib qw( . lib );
@@ -114,7 +108,6 @@
}
is($missing_SOURCE, 0, "No Makefile source file missing");
-ok(-f $step->{CFLAGS_source}, "CFLAGS source file located");
my $index = undef;
sub result {
Modified: branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t
==============================================================================
--- branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/t/steps/init/hints/linux-01.t Tue Mar 16 22:37:03 2010 (r44975)
@@ -39,7 +39,7 @@
my $ccflags = '';
my $verbose = 0;
$ccflags = init::hints::linux::_handle_icc_ccflags($ccflags, $verbose);
-like( $ccflags, qr/\s-wd269/, "On icc, 'cc_flags' set as expected" );
+like( $ccflags, qr/\s-we147/, "On icc, 'cc_flags' set as expected" );
$ccflags = '';
$verbose = 1;
@@ -51,9 +51,9 @@
\$stdout,
\$stderr,
);
- like( $ccflags, qr/\s-wd269/, "On icc, 'cc_flags' set as expected" );
+ like( $ccflags, qr/\s-we147/, "On icc, 'cc_flags' set as expected" );
like( $stdout,
- qr/\sccflags:.*?-wd269/,
+ qr/\sccflags:.*?-we147/,
"On icc, got expected verbose output for 'cc_flags'" );
}
Deleted: branches/pcc_hackathon_6Mar10/tools/build/cc_flags.pl
==============================================================================
--- branches/pcc_hackathon_6Mar10/tools/build/cc_flags.pl Tue Mar 16 22:37:03 2010 (r44974)
+++ /dev/null 00:00:00 1970 (deleted)
@@ -1,131 +0,0 @@
-#! perl
-################################################################################
-# Copyright (C) 2001-2003, Parrot Foundation.
-# $Id$
-################################################################################
-
-=head1 NAME
-
-tools/build/cc_flags.pl - Process compiler flags
-
-=head1 SYNOPSIS
-
- % perl tools/build/cc_flags.pl transform compiler flags
-
-=head1 DESCRIPTION
-
-This script is used in a F<Makefile> to process the flags to pass to the
-compiler for each C file.
-
-See F<config/gen/makefiles/CFLAGS.in> for the transformation file format.
-
-=cut
-
-################################################################################
-
-use strict;
-use warnings;
-
-my $cflags = shift;
-
-open my $F, '<', $cflags or die "open $cflags: $!\n";
-
-my @options;
-
-while (<$F>) {
- chomp;
- s/#.*//;
- next unless /\S/;
-
- my $regex;
- if (s/^\{(.*?)\}\s*//) {
- next unless $1;
- $regex = qr/$1/;
- }
- elsif (s/^(\S+)\s*//) {
- $regex = qr/^\Q$1\E$/;
- }
- else {
- die "syntax error in $cflags: line $., $_\n";
- }
-
- for ( ; ; ) {
- if (s/^([-+])\{(.*?)\}\s*//) {
- next unless $2;
- my ( $sign, $options ) = ( $1, $2 );
- foreach my $option ( split ' ', $options ) {
- push @options, [ $regex, $sign, $option ];
- }
- }
- elsif (s{s(.)(.*?)\1(.*?)\1([imsx]*)\s*}{}) {
- my $mod = "";
- $mod = "(?$4)" if $4;
-
- push @options, [ $regex, 's', "$mod$2", $3 ];
- }
- elsif (/\S/) {
- die "syntax error in $cflags: line $., $_\n";
- }
- else {
- last;
- }
- }
-}
-
-my ($cfile) = grep /\.c$/, @ARGV;
-
-my ( $inject_point, $where );
-
-foreach (@ARGV) {
- last if $_ eq '';
- ++$where;
-}
-if ($where) {
-
- # Found a "" - remove it
- splice @ARGV, $where, 1;
- $inject_point = $where;
-}
-else {
- $inject_point = 1;
-}
-
-if ($cfile) {
- foreach my $option (@options) {
- if ( $cfile =~ $option->[0] ) {
- if ( $option->[1] eq '+' ) {
- splice @ARGV, $inject_point, 0, $option->[2];
- }
- elsif ( $option->[1] eq '-' ) {
- @ARGV = grep { $_ ne $option->[2] } @ARGV;
- }
- else {
- foreach my $arg (@ARGV) {
- $arg =~ s/$option->[2]/$option->[3]/;
- }
- }
- }
- }
-
- # Visual C++ already prints the source file name...
- if ( $ARGV[0] =~ /cl(?:\.exe)?/i ) {
-
- # ...but only the file name, so we print the path
- # to the directory first
- if ( $cfile =~ /(.*[\/\\])/ ) {
- print $1;
- }
- }
- else {
- print "$cfile\n";
- }
-}
-
-exit system(@ARGV) / 256;
-
-# Local Variables:
-# mode: cperl
-# cperl-indent-level: 4
-# fill-column: 100
-# End:
-# vim: expandtab shiftwidth=4:
Modified: branches/pcc_hackathon_6Mar10/tools/dev/branch_status.pl
==============================================================================
--- branches/pcc_hackathon_6Mar10/tools/dev/branch_status.pl Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/tools/dev/branch_status.pl Tue Mar 16 22:37:03 2010 (r44975)
@@ -10,9 +10,10 @@
Generate a report to help developers determine status of repository branches.
-This program uses modules that are not intended to be parrot requirements.
+Defaults to generating wiki-friendly output. Override to human readable
+output with C<-H>.
-Prerequisites: Perl 5.10; XML::Twig; Perl6::Form.
+This program uses modules that are not intended to be parrot requirements.
Assumes that you have a command line svn in your path, but doesn't have
to be run in a working copy.
@@ -23,13 +24,28 @@
use strict;
use warnings;
-use XML::Twig;
use Perl6::Form;
+use Time::Format qw(%time);
+use XML::Twig;
+
+my $human;
+$human = 1 if @ARGV && $ARGV[0] eq '-H';
+
+my $time_format = 'dd Mon yyyy - hh:mm:ss';
my $repo = 'https://svn.parrot.org/parrot/';
my @branches = map {chomp; chop; $_} `svn ls $repo/branches`;
+if (!$human) {
+ print '||';
+ say join ('||', map { "'''$_'''" } qw (
+ Branch Revisions Creator Authors Created
+ Updated Components Commits LastMergeRev
+ ));
+}
+
+
foreach my $branch (@branches) {
my $t = XML::Twig->new();
my $xml = `svn log --stop-on-copy --xml -v $repo/branches/$branch`;
@@ -39,39 +55,50 @@
my $oldest = $t->root->last_child('logentry');
my $creator = $oldest->first_child('author')->xml_text;
- my (%authors,%components);
- my $merge_log;
+ my (%authors, %components, $merge_log, $merge_rev, $author_txt);
+
foreach my $entry ($t->root->children('logentry')) {
- $authors{$entry->first_child('author')->xml_text}++;
- my $msg = $entry->first_child('msg')->xml_text;
- $msg =~ s/\s+$//;
- $msg =~ s/^\s+//;
- if (!defined($merge_log) && $msg =~ /merge/i) {
- $merge_log = $msg;
- }
- while ($msg =~ m/\[(.+?)\]/g) {
- my $component = $1;
- $component =~ s/\s+$//;
- $component =~ s/^\s+//;
- if ($component ne '') {
- $components{$1} = undef;
- }
- }
+ $authors{$entry->first_child('author')->xml_text}++;
+ my $msg = $entry->first_child('msg')->xml_text;
+ $msg =~ s/\s+$//;
+ $msg =~ s/^\s+//;
+ if (!defined($merge_log) && $msg =~ /merge/i) {
+ $merge_log = $msg;
+ $merge_rev = 'r' . $entry->atts->{revision};
+ }
+ while ($msg =~ m/\[(.+?)\]/g) {
+ my $component = $1;
+ $component =~ s/\s+$//;
+ $component =~ s/^\s+//;
+ if ($component ne '') {
+ $components{$1} = undef;
+ }
+ }
}
$merge_log //= 'N/A';
+ $merge_rev //= 'N/A';
+
+ my $first = $oldest->atts->{revision};
+ my $last = $newest->atts->{revision};
+
+ my $revisions_human = "r$first:$last";
+ my $revisions_wiki = "r$first-r$last";
- my $revisions = 'r' .$oldest->atts->{revision} . ':' .
- $newest->atts->{revision};
my $created_date = $oldest->first_child('date')->xml_text;
+ $created_date =~ s/Z//; # workaround Time::Format bug
+ $created_date = $time{$time_format, $created_date};
my $updated_date = $newest->first_child('date')->xml_text;
- my $author_txt = '';
+ $updated_date =~ s/Z//; # workaround Time::Format bug
+ $updated_date = $time{$time_format, $updated_date};
+
if (scalar keys %authors != 1) {
my @counts;
foreach my $author (sort {$authors{$b} <=> $authors{$a}} keys %authors) {
- push @counts, "$author [$authors{$author}]";
+ push @counts, $author . "($authors{$author})";
}
- $author_txt = join (', ', @counts);
+ $author_txt = join ($human ? ', ' : '[[BR]]', @counts);
}
+ $author_txt //='';
my $components = join (', ', sort {lc $a cmp lc $b} keys %components);
my $number_commits = scalar $t->root->children('logentry');
my $initial_log = $oldest->first_child('msg')->xml_text;
@@ -80,13 +107,13 @@
$merge_log =~ s/\n/ /g;
$initial_log =~ s/\n/ /g;
-
- print form
+ if ($human) {
+ print form
'+====================================================================+',
'| branch: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} |',
$branch,
'| revisions: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} |',
- $revisions,
+ $revisions_human,
'| creator: {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<} |',
$creator,
($author_txt ne '') ?
@@ -108,9 +135,17 @@
{bullet => 'last merge log:'},
'|last merge log: {[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[} |',
$merge_log;
+ }
+ else {
+ say join('||','',
+ "[source:/branches/$branch $branch]", $revisions_wiki, $creator,
+ $author_txt, $created_date, $updated_date, $components,
+ "[log:/branches/$branch $number_commits]", $merge_rev
+ );
+ }
}
-say '+', '=' x 68, '+';
+say '+', '=' x 68, '+' if $human;
# Local Variables:
# mode: cperl
Added: branches/pcc_hackathon_6Mar10/tools/dev/faces.pl
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ branches/pcc_hackathon_6Mar10/tools/dev/faces.pl Tue Mar 16 22:37:03 2010 (r44975)
@@ -0,0 +1,47 @@
+#! perl
+# $Id$
+# Copyright (C) 2010, Parrot Foundation.
+
+use strict;
+use warnings;
+
+use Gravatar::URL;
+
+=for usage
+
+use to generate source for http://trac.parrot.org/parrot/wiki/ParrotFaces
+
+=cut
+
+open my $fh, '<', 'CREDITS';
+
+my %urls;
+while(<$fh>) {
+ next unless /^E: (.*)/;
+ my $email = lc $1;
+ next if $email eq 'svn at perl.org' or
+ $email eq 'cvs at perl.org';
+ if (!exists $urls{$email}) {
+ $urls{$email} = gravatar_url(
+ email => $email,
+ rating => 'r',
+ size => 80,
+ default => 'wavatar',
+ );
+ }
+ else {
+ warn "duplicated email address in CREDITS: $email\n";
+ }
+}
+
+foreach my $email (sort keys %urls) {
+ print "[[Image($urls{$email},title=$email)]]\n";
+}
+print "[[BR]]''Generated by $0''\n";
+
+# Local Variables:
+# mode: cperl
+# cperl-indent-level: 4
+# fill-column: 100
+# End:
+# vim: expandtab shiftwidth=4:
Modified: branches/pcc_hackathon_6Mar10/tools/util/release.json
==============================================================================
--- branches/pcc_hackathon_6Mar10/tools/util/release.json Tue Mar 16 21:59:54 2010 (r44974)
+++ branches/pcc_hackathon_6Mar10/tools/util/release.json Tue Mar 16 22:37:03 2010 (r44975)
@@ -1,9 +1,9 @@
{
- "release.version" : "2.0.0",
- "release.name" : "Inevitable",
+ "release.version" : "2.2.0",
+ "release.name" : "Like Clockwork",
"release.day" : "Tuesday",
- "release.date" : "16 Februuary 2010",
- "release.nextdate" : "16 March 2010",
+ "release.date" : "16 March 2010",
+ "release.nextdate" : "20 April 2010",
"web.root" : "http://parrot.org/",
"web.source" : "download",
@@ -17,7 +17,7 @@
"wiki.bugday" : "bug_day_2010_03_13",
"cpan.search" : "http://search.cpan.org/dist/parrot",
- "ftp.path" : "ftp://ftp.parrot.org/pub/parrot/devel/stable/2.1.0/",
+ "ftp.path" : "ftp://ftp.parrot.org/pub/parrot/releases/devel/2.2.0/",
"subversion.root" : "http://subversion.tigris.org/",
"svk.root" : "http://svk.bestpractical.com/"
}
More information about the parrot-commits
mailing list