[svn:parrot] r39444 - in branches/io_rewiring: . compilers/imcc compilers/nqp/bootstrap compilers/nqp/src compilers/nqp/src/Grammar compilers/pct/src/PCT config/auto config/auto/sizes config/gen/config_pm config/gen/makefiles config/init docs docs/book docs/book/draft docs/dev docs/pct docs/pdds examples/languages/abc examples/languages/abc/src/parser examples/languages/squaak examples/library examples/nci examples/tcl include/parrot lib/Parrot lib/Parrot/Pmc2c ports/cpan ports/cygwin ports/debian ports/fedora ports/mandriva ports/suse ports/ubuntu runtime/parrot/languages runtime/parrot/languages/parrot runtime/parrot/library runtime/parrot/library/Math src src/call src/gc src/interp src/ops src/packfile src/pmc src/runcore src/string t/compilers/imcc/syn t/compilers/json t/compilers/tge t/dynpmc t/library t/oo t/op t/pmc t/src t/steps t/tools/install t/tools/ops2pm tools/dev tools/install tools/util
whiteknight at svn.parrot.org
whiteknight at svn.parrot.org
Sun Jun 7 23:41:49 UTC 2009
Author: whiteknight
Date: Sun Jun 7 23:41:42 2009
New Revision: 39444
URL: https://trac.parrot.org/parrot/changeset/39444
Log:
[io_rewiring] merging from trunk r39194:39443. Causes some failures, need to investigate now
Added:
branches/io_rewiring/runtime/parrot/languages/
- copied from r39443, trunk/runtime/parrot/languages/
Replaced:
branches/io_rewiring/runtime/parrot/languages/parrot/
- copied from r39443, trunk/runtime/parrot/languages/parrot/
Modified:
branches/io_rewiring/ (props changed)
branches/io_rewiring/DEPRECATED.pod
branches/io_rewiring/MANIFEST
branches/io_rewiring/PBC_COMPAT
branches/io_rewiring/PLATFORMS
branches/io_rewiring/README
branches/io_rewiring/README_win32.pod
branches/io_rewiring/compilers/imcc/imc.c
branches/io_rewiring/compilers/imcc/imcc.l
branches/io_rewiring/compilers/imcc/imcc.y
branches/io_rewiring/compilers/imcc/imclexer.c
branches/io_rewiring/compilers/imcc/imcparser.c
branches/io_rewiring/compilers/imcc/imcparser.h
branches/io_rewiring/compilers/imcc/main.c
branches/io_rewiring/compilers/imcc/parser_util.c
branches/io_rewiring/compilers/imcc/pcc.c
branches/io_rewiring/compilers/nqp/bootstrap/actions.pm
branches/io_rewiring/compilers/nqp/src/Grammar.pg
branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir
branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir
branches/io_rewiring/config/auto/gcc.pm
branches/io_rewiring/config/auto/icu.pm
branches/io_rewiring/config/auto/sizes/intval_maxmin_c.in (props changed)
branches/io_rewiring/config/gen/config_pm/config_pir.in
branches/io_rewiring/config/gen/makefiles/root.in
branches/io_rewiring/config/init/defaults.pm
branches/io_rewiring/docs/book/appb_patch_submission.pod (props changed)
branches/io_rewiring/docs/book/appc_command_line_options.pod
branches/io_rewiring/docs/book/ch01_introduction.pod (props changed)
branches/io_rewiring/docs/book/ch03_pir.pod (contents, props changed)
branches/io_rewiring/docs/book/ch04_compiler_tools.pod (contents, props changed)
branches/io_rewiring/docs/book/ch07_dynpmcs.pod (props changed)
branches/io_rewiring/docs/book/ch08_dynops.pod (props changed)
branches/io_rewiring/docs/book/ch10_opcode_reference.pod (contents, props changed)
branches/io_rewiring/docs/book/draft/chXX_hlls.pod (props changed)
branches/io_rewiring/docs/book/draft/chXX_library.pod (props changed)
branches/io_rewiring/docs/book/draft/chXX_testing_and_debugging.pod (props changed)
branches/io_rewiring/docs/dev/c_functions.pod (props changed)
branches/io_rewiring/docs/pct/pct_optable_guide.pod
branches/io_rewiring/docs/pdds/pdd19_pir.pod
branches/io_rewiring/docs/pdds/pdd30_install.pod (props changed)
branches/io_rewiring/docs/running.pod
branches/io_rewiring/docs/tests.pod
branches/io_rewiring/examples/languages/abc/ (props changed)
branches/io_rewiring/examples/languages/abc/src/parser/actions.pm
branches/io_rewiring/examples/languages/squaak/ (props changed)
branches/io_rewiring/examples/library/pcre.pir
branches/io_rewiring/examples/nci/xlibtest.pir
branches/io_rewiring/examples/tcl/tcltkdemo.pir
branches/io_rewiring/include/parrot/call.h (props changed)
branches/io_rewiring/include/parrot/embed.h
branches/io_rewiring/include/parrot/gc_api.h (props changed)
branches/io_rewiring/include/parrot/library.h
branches/io_rewiring/include/parrot/runcore_api.h (contents, props changed)
branches/io_rewiring/include/parrot/runcore_trace.h (props changed)
branches/io_rewiring/include/parrot/string_funcs.h
branches/io_rewiring/include/parrot/sub.h
branches/io_rewiring/lib/Parrot/Install.pm
branches/io_rewiring/lib/Parrot/Manifest.pm
branches/io_rewiring/lib/Parrot/Ops2pm.pm
branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm
branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm
branches/io_rewiring/ports/cpan/pause_guide.pod (props changed)
branches/io_rewiring/ports/cygwin/parrot-1.0.0-1.cygport (props changed)
branches/io_rewiring/ports/debian/libparrot-dev.install.in (props changed)
branches/io_rewiring/ports/debian/libparrot.install.in (props changed)
branches/io_rewiring/ports/debian/parrot-doc.install.in (props changed)
branches/io_rewiring/ports/debian/parrot.install.in (props changed)
branches/io_rewiring/ports/fedora/parrot.spec.fedora (props changed)
branches/io_rewiring/ports/mandriva/parrot.spec.mandriva (props changed)
branches/io_rewiring/ports/suse/parrot.spec.suse (props changed)
branches/io_rewiring/ports/ubuntu/changelog
branches/io_rewiring/runtime/parrot/library/Math/Rand.pir (props changed)
branches/io_rewiring/runtime/parrot/library/TclLibrary.pir
branches/io_rewiring/runtime/parrot/library/libpcre.pir
branches/io_rewiring/runtime/parrot/library/pcre.pir
branches/io_rewiring/src/call/ops.c (props changed)
branches/io_rewiring/src/call/pcc.c (props changed)
branches/io_rewiring/src/dynext.c
branches/io_rewiring/src/embed.c
branches/io_rewiring/src/gc/alloc_memory.c (props changed)
branches/io_rewiring/src/gc/alloc_register.c (contents, props changed)
branches/io_rewiring/src/gc/alloc_resources.c (props changed)
branches/io_rewiring/src/gc/api.c (props changed)
branches/io_rewiring/src/gc/gc_ms.c
branches/io_rewiring/src/gc/generational_ms.c (props changed)
branches/io_rewiring/src/gc/incremental_ms.c (props changed)
branches/io_rewiring/src/gc/malloc.c (props changed)
branches/io_rewiring/src/gc/malloc_trace.c (props changed)
branches/io_rewiring/src/gc/mark_sweep.c (props changed)
branches/io_rewiring/src/gc/system.c (props changed)
branches/io_rewiring/src/hash.c
branches/io_rewiring/src/interp/inter_cb.c (props changed)
branches/io_rewiring/src/interp/inter_create.c (contents, props changed)
branches/io_rewiring/src/interp/inter_misc.c (props changed)
branches/io_rewiring/src/library.c
branches/io_rewiring/src/multidispatch.c
branches/io_rewiring/src/oo.c
branches/io_rewiring/src/ops/cmp.ops
branches/io_rewiring/src/ops/io.ops
branches/io_rewiring/src/ops/ops.num
branches/io_rewiring/src/ops/set.ops
branches/io_rewiring/src/packfile.c
branches/io_rewiring/src/packfile/pf_items.c
branches/io_rewiring/src/pmc.c
branches/io_rewiring/src/pmc/bigint.pmc
branches/io_rewiring/src/pmc/bignum.pmc
branches/io_rewiring/src/pmc/continuation.pmc
branches/io_rewiring/src/pmc/coroutine.pmc
branches/io_rewiring/src/pmc/eventhandler.pmc
branches/io_rewiring/src/pmc/fixedintegerarray.pmc
branches/io_rewiring/src/pmc/float.pmc
branches/io_rewiring/src/pmc/integer.pmc
branches/io_rewiring/src/pmc/lexpad.pmc
branches/io_rewiring/src/pmc/resizablestringarray.pmc
branches/io_rewiring/src/pmc/scalar.pmc
branches/io_rewiring/src/pmc/string.pmc
branches/io_rewiring/src/pmc/stringhandle.pmc
branches/io_rewiring/src/pmc/sub.pmc
branches/io_rewiring/src/pmc_freeze.c
branches/io_rewiring/src/runcore/cores.c (props changed)
branches/io_rewiring/src/runcore/main.c (contents, props changed)
branches/io_rewiring/src/runcore/trace.c (contents, props changed)
branches/io_rewiring/src/string/api.c
branches/io_rewiring/t/compilers/imcc/syn/file.t
branches/io_rewiring/t/compilers/imcc/syn/pcc.t
branches/io_rewiring/t/compilers/json/from_parrot.t
branches/io_rewiring/t/compilers/tge/NoneGrammar.tg (props changed)
branches/io_rewiring/t/dynpmc/pair.t (props changed)
branches/io_rewiring/t/library/pcre.t
branches/io_rewiring/t/oo/proxy.t
branches/io_rewiring/t/oo/root_new.t (props changed)
branches/io_rewiring/t/op/copy.t
branches/io_rewiring/t/op/stringu.t
branches/io_rewiring/t/pmc/multidispatch.t
branches/io_rewiring/t/pmc/string.t
branches/io_rewiring/t/pmc/sub.t
branches/io_rewiring/t/pmc/sys.t
branches/io_rewiring/t/src/embed.t (props changed)
branches/io_rewiring/t/steps/auto_gcc-01.t
branches/io_rewiring/t/steps/auto_icu-01.t
branches/io_rewiring/t/steps/auto_jit-01.t
branches/io_rewiring/t/steps/auto_pmc-01.t
branches/io_rewiring/t/steps/gen_platform-01.t
branches/io_rewiring/t/tools/install/02-install_files.t
branches/io_rewiring/t/tools/install/03-lines_to_files.t
branches/io_rewiring/t/tools/install/dev_overall.t
branches/io_rewiring/t/tools/install/overall.t
branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t
branches/io_rewiring/t/tools/ops2pm/10-print_module.t
branches/io_rewiring/t/tools/ops2pm/11-print_h.t
branches/io_rewiring/tools/dev/create_language.pl
branches/io_rewiring/tools/dev/fetch_languages.pl (contents, props changed)
branches/io_rewiring/tools/dev/install_dev_files.pl
branches/io_rewiring/tools/dev/install_files.pl
branches/io_rewiring/tools/dev/mk_gitignore.pl (props changed)
branches/io_rewiring/tools/dev/parrot-fuzzer
branches/io_rewiring/tools/dev/pbc_to_exe.pir
branches/io_rewiring/tools/install/smoke_languages.pl
branches/io_rewiring/tools/util/perlcritic-cage.conf (props changed)
Modified: branches/io_rewiring/DEPRECATED.pod
==============================================================================
--- branches/io_rewiring/DEPRECATED.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/DEPRECATED.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -196,13 +196,6 @@
L<http://rt.perl.org/rt3/Ticket/Display.html?id=53302>
-=item Parrot_readbc, Parrot_loadbc. [eligible in 1.1]
-
-They have been renamed to C<Parrot_pbc_read>, C<Parrot_pbc_load>.
-C<Parrot_pbc_read> has one third int argument.
-
-L<https://trac.parrot.org/parrot/ticket/266>
-
=item C API coding standards cleanup [eligible in 1.1]
All C API functions that aren't currently named according to the
@@ -212,12 +205,6 @@
L<https://trac.parrot.org/parrot/ticket/443>
-=item Parrot_add_library_path [eligible in 1.1]
-
-Will be renamed to C<Parrot_lib_add_path_from_cstring>.
-
-L<https://trac.parrot.org/parrot/ticket/455>
-
=item parrot_new_pmc_hash [eligible in 1.5]
This function will be removed. parrot_new_hash should be used in its place.
Modified: branches/io_rewiring/MANIFEST
==============================================================================
--- branches/io_rewiring/MANIFEST Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/MANIFEST Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,10 +1,10 @@
# ex: set ro:
# $Id$
#
-# generated by tools/dev/mk_manifest_and_skip.pl Sun May 24 16:30:09 2009 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Jun 4 22:51:55 2009 UT
+#
+# See below for documentation on the format of this file.
#
-# See tools/dev/install_files.pl for documentation on the
-# format of this file.
# See docs/submissions.pod on how to recreate this file after SVN
# has been told about new or deleted files.
CREDITS []
@@ -114,6 +114,7 @@
compilers/nqp/t/26-method_ops.t [test]
compilers/nqp/t/27-ternary.t [test]
compilers/nqp/t/28-return.t [test]
+compilers/nqp/t/29-self.t [test]
compilers/nqp/t/harness [test]
compilers/pct/PCT.pir [pct]
compilers/pct/README.pod []doc
@@ -1142,6 +1143,7 @@
runtime/parrot/include/fp_equality.pasm [library]
runtime/parrot/include/hllmacros.pir [library]
runtime/parrot/include/test_more.pir [library]
+runtime/parrot/languages/parrot/parrot.pir [library]
runtime/parrot/library/CGI/QueryHash.pir [library]
runtime/parrot/library/Config/JSON.pir [library]
runtime/parrot/library/Crow.pir [library]
@@ -1759,6 +1761,7 @@
t/op/64bit.t [test]
t/op/annotate.t [test]
t/op/arithmetics.t [test]
+t/op/arithmetics_pmc.t [test]
t/op/basic.t [test]
t/op/bitwise.t [test]
t/op/box.t [test]
@@ -2026,6 +2029,7 @@
t/tools/install/testlib/parrot.pc [test]
t/tools/install/testlib/phony [test]
t/tools/install/testlib/phony.exe [test]
+t/tools/install/testlib/runtime/parrot/include/sockets.pasm [test]
t/tools/install/testlib/runtime/parrot/library/TGE.pbc [test]
t/tools/install/testlib/src/ops/ops.num [test]
t/tools/install/testlib/src/pmc/pmc_object.h [test]
Modified: branches/io_rewiring/PBC_COMPAT
==============================================================================
--- branches/io_rewiring/PBC_COMPAT Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/PBC_COMPAT Sun Jun 7 23:41:42 2009 (r39444)
@@ -27,7 +27,8 @@
# please insert tab separated entries at the top of the list
-4.7 2009.05.30 Infinoid Added Handle, Pipe, PipeHandle PMCs
+4.8 2009.05.30 Infinoid Added Handle, Pipe, PipeHandle PMCs
+4.7 2009.05.29 cotto add cmp_pmc opcode (also, addition of setstdin and root_new in previous commits)
4.6 2009.05.18 bacek removed PackfileAnnotationKeys PMC
4.5 2009.04.10 cotto removed Ref and SharedRef PMCs
4.4 2009.04.07 pmichaud find_caller_lex added
Modified: branches/io_rewiring/PLATFORMS
==============================================================================
--- branches/io_rewiring/PLATFORMS Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/PLATFORMS Sun Jun 7 23:41:42 2009 (r39444)
@@ -58,7 +58,6 @@
netbsd5.0-sparc64-gcc-4.1.3 B8 Y - - Y Y Y Y/1 ? 20090519
netbsd5.0-x86_64-gcc-4.1.3 8 Y - - Y Y Y Y ? 20090419
opensolaris-x86-gcc_4.0.3 4 Y Y ? ? ? Y Y/2 ? 20080325
-sol8-sparc-gcc_4.1.0 B - - - - - - Y/42 ? 20090317
win32-x86-mingw_gcc4.3.0 Y Y - - - Y Y/88 ? 20081203
win32-x86-msvc_6.0 4 - Y - - - Y Y/8 ? 20090315
win32-x64-msvc_9.0 8 - - - - - Y Y/51 ? 20081203
Modified: branches/io_rewiring/README
==============================================================================
--- branches/io_rewiring/README Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/README Sun Jun 7 23:41:42 2009 (r39444)
@@ -18,7 +18,7 @@
linking with the ICU library you have to download and install it before
configuring Parrot.
-Get it from http://www-306.ibm.com/software/globalization/icu/downloads.jsp
+Get it from http://site.icu-project.org/download
You also need Perl 5.8.4 or newer, Storable 2.12 or newer, and Bundle::Parrot
to run various configure and build scripts.
Modified: branches/io_rewiring/README_win32.pod
==============================================================================
--- branches/io_rewiring/README_win32.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/README_win32.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -60,7 +60,7 @@
ignore it (C<--without-icu>).
If you want to use ICU, download it from
-L<http://www.icu-project.org/download/>.
+L<http://site.icu-project.org/download>.
If you want to use precompiled binaries, do the following.
Download the package matching your compiler, unpack it (say, into
Modified: branches/io_rewiring/compilers/imcc/imc.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/imc.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/imc.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -266,6 +266,11 @@
clear_locals(unit);
+ if (unit->vtable_name)
+ mem_sys_free(unit->vtable_name);
+ if (unit->instance_of)
+ mem_sys_free(unit->instance_of);
+
free(unit->hash.data);
free(unit);
}
Modified: branches/io_rewiring/compilers/imcc/imcc.l
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcc.l Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/imcc.l Sun Jun 7 23:41:42 2009 (r39444)
@@ -430,6 +430,7 @@
"stringliteral or register", IMCC_INFO(interp)->cur_macro_name);
define_macro(interp, IMCC_INFO(interp)->cur_macro_name, NULL, valp->s, start_line);
+ mem_sys_free(valp->s);
IMCC_INFO(interp)->cur_macro_name = NULL;
@@ -443,9 +444,12 @@
<emit,INITIAL>".include" {
const int c = yylex(valp, yyscanner, interp);
+
if (c != STRINGC)
return c;
+ /* STRINGCs have a str_dup()ed valp->s */
+ mem_sys_free(valp->s);
YYCHOP();
include_file(interp, yytext + 1, yyscanner);
}
Modified: branches/io_rewiring/compilers/imcc/imcc.y
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcc.y Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/imcc.y Sun Jun 7 23:41:42 2009 (r39444)
@@ -800,14 +800,19 @@
{
ASSERT_ARGS(IMCC_itcall_sub)
IMCC_INFO(interp)->cur_call->pcc_sub->sub = sub;
+
if (IMCC_INFO(interp)->cur_obj) {
if (IMCC_INFO(interp)->cur_obj->set != 'P')
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "object isn't a PMC");
- IMCC_INFO(interp)->cur_call->pcc_sub->object = IMCC_INFO(interp)->cur_obj;
+
+ IMCC_INFO(interp)->cur_call->pcc_sub->object =
+ IMCC_INFO(interp)->cur_obj;
IMCC_INFO(interp)->cur_obj = NULL;
}
+
if (IMCC_INFO(interp)->cur_call->pcc_sub->sub->pmc_type == enum_class_NCI)
IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
+
if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
}
@@ -1165,10 +1170,12 @@
TK_LINE INTC COMMA STRINGC '\n'
{
IMCC_INFO(interp)->line = atoi($2);
+ /* set_filename() frees the STRINGC */
set_filename(interp, $4);
}
| TK_FILE STRINGC '\n'
{
+ /* set_filename() frees the STRINGC */
set_filename(interp, $2);
}
;
@@ -1193,6 +1200,7 @@
Parrot_register_HLL(interp, hll_name);
IMCC_INFO(interp)->cur_namespace = NULL;
+ mem_sys_free($2);
$$ = 0;
}
;
@@ -1210,12 +1218,15 @@
CONST { pesky_global__is_def=1; } INTC var_or_i '=' any_string
{
$$ = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
+ mem_sys_free($6);
pesky_global__is_def = 0;
}
| CONST { pesky_global__is_def=1; } STRINGC var_or_i '=' any_string
{
$$ = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, $3, $4, $6);
+ mem_sys_free($3);
+ mem_sys_free($6);
pesky_global__is_def = 0;
}
;
@@ -1401,13 +1412,13 @@
VTABLE_METHOD
{
$$ = P_VTABLE;
- IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
+ IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
}
| VTABLE_METHOD '(' STRINGC ')'
{
$$ = P_VTABLE;
- IMCC_INFO(interp)->cur_unit->vtable_name = $3;
+ IMCC_INFO(interp)->cur_unit->vtable_name = $3;
IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
}
;
@@ -1417,13 +1428,13 @@
{
$$ = P_METHOD;
IMCC_INFO(interp)->cur_unit->method_name = NULL;
- IMCC_INFO(interp)->cur_unit->is_method = 1;
+ IMCC_INFO(interp)->cur_unit->is_method = 1;
}
| METHOD '(' any_string ')'
{
$$ = P_METHOD;
IMCC_INFO(interp)->cur_unit->method_name = $3;
- IMCC_INFO(interp)->cur_unit->is_method = 1;
+ IMCC_INFO(interp)->cur_unit->is_method = 1;
}
;
@@ -1431,7 +1442,7 @@
NS_ENTRY
{
$$ = 0;
- IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
+ IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
}
| NS_ENTRY '(' any_string ')'
@@ -2086,9 +2097,9 @@
;
the_sub:
- IDENTIFIER { $$ = mk_sub_address(interp, $1); mem_sys_free($1); }
- | STRINGC { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
- | USTRINGC { $$ = mk_sub_address_u(interp, $1); mem_sys_free($1); }
+ IDENTIFIER { $$ = mk_sub_address(interp, $1); mem_sys_free($1); }
+ | STRINGC { $$ = mk_sub_address_fromc(interp, $1); mem_sys_free($1); }
+ | USTRINGC { $$ = mk_sub_address_u(interp, $1); mem_sys_free($1); }
| target
{
$$ = $1;
@@ -2109,6 +2120,12 @@
IMCC_INFO(interp)->cur_obj = $1;
$$ = $3;
}
+ | target DOT USTRINGC
+ {
+ IMCC_INFO(interp)->cur_obj = $1;
+ $$ = mk_const(interp, $3, 'U');
+ mem_sys_free($3);
+ }
| target DOT STRINGC
{
IMCC_INFO(interp)->cur_obj = $1;
Modified: branches/io_rewiring/compilers/imcc/imclexer.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/imclexer.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/imclexer.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -75,7 +75,6 @@
typedef unsigned char flex_uint8_t;
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
/* Limits of integral types. */
#ifndef INT8_MIN
@@ -106,6 +105,8 @@
#define UINT32_MAX (4294967295U)
#endif
+#endif /* ! C99 */
+
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
@@ -179,7 +180,15 @@
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
#endif
/* The state buf must be large enough to hold one state per character in the main buffer.
@@ -2478,7 +2487,7 @@
-#line 2482 "compilers/imcc/imclexer.c"
+#line 2491 "compilers/imcc/imclexer.c"
#define INITIAL 0
#define emit 1
@@ -2613,7 +2622,12 @@
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
#endif
/* Copy whatever the last rule matched to the standard output. */
@@ -2621,7 +2635,7 @@
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -2632,7 +2646,7 @@
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
int c = '*'; \
- int n; \
+ size_t n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -2737,7 +2751,7 @@
return 0;
}
-#line 2741 "compilers/imcc/imclexer.c"
+#line 2755 "compilers/imcc/imclexer.c"
if ( !yyg->yy_init )
{
@@ -3494,6 +3508,7 @@
"stringliteral or register", IMCC_INFO(interp)->cur_macro_name);
define_macro(interp, IMCC_INFO(interp)->cur_macro_name, NULL, valp->s, start_line);
+ mem_sys_free(valp->s);
IMCC_INFO(interp)->cur_macro_name = NULL;
@@ -3503,26 +3518,29 @@
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 440 "compilers/imcc/imcc.l"
+#line 441 "compilers/imcc/imcc.l"
{
return read_macro(valp, interp, yyscanner);
}
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 444 "compilers/imcc/imcc.l"
+#line 445 "compilers/imcc/imcc.l"
{
const int c = yylex(valp,yyscanner,interp);
+
if (c != STRINGC)
return c;
+ /* STRINGCs have a str_dup()ed valp->s */
+ mem_sys_free(valp->s);
YYCHOP();
include_file(interp, yytext + 1, yyscanner);
}
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 453 "compilers/imcc/imcc.l"
+#line 457 "compilers/imcc/imcc.l"
{
if (valp) {
char *label;
@@ -3547,7 +3565,7 @@
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 475 "compilers/imcc/imcc.l"
+#line 479 "compilers/imcc/imcc.l"
{
if (valp) {
@@ -3572,12 +3590,12 @@
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 497 "compilers/imcc/imcc.l"
+#line 501 "compilers/imcc/imcc.l"
return COMMA;
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 499 "compilers/imcc/imcc.l"
+#line 503 "compilers/imcc/imcc.l"
{
/* trim last ':' */
YYCHOP();
@@ -3590,7 +3608,7 @@
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 509 "compilers/imcc/imcc.l"
+#line 513 "compilers/imcc/imcc.l"
{
char * const macro_name = yytext + 1;
@@ -3602,32 +3620,32 @@
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 520 "compilers/imcc/imcc.l"
+#line 524 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, FLOATC);
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 521 "compilers/imcc/imcc.l"
+#line 525 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 522 "compilers/imcc/imcc.l"
+#line 526 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 523 "compilers/imcc/imcc.l"
+#line 527 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 524 "compilers/imcc/imcc.l"
+#line 528 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 526 "compilers/imcc/imcc.l"
+#line 530 "compilers/imcc/imcc.l"
{
valp->s = str_dup(yytext);
@@ -3640,7 +3658,7 @@
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 540 "compilers/imcc/imcc.l"
{
valp->s = str_dup(yytext);
@@ -3650,7 +3668,7 @@
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 543 "compilers/imcc/imcc.l"
+#line 547 "compilers/imcc/imcc.l"
{
macro_frame_t *frame;
@@ -3681,7 +3699,7 @@
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 571 "compilers/imcc/imcc.l"
+#line 575 "compilers/imcc/imcc.l"
{
/* charset:"..." */
valp->s = str_dup(yytext);
@@ -3692,7 +3710,7 @@
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 579 "compilers/imcc/imcc.l"
+#line 583 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3703,7 +3721,7 @@
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 587 "compilers/imcc/imcc.l"
+#line 591 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3714,7 +3732,7 @@
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 595 "compilers/imcc/imcc.l"
+#line 599 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3725,7 +3743,7 @@
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 603 "compilers/imcc/imcc.l"
+#line 607 "compilers/imcc/imcc.l"
{
if (valp) (valp)->s = yytext;
if (IMCC_INFO(interp)->state->pasm_file)
@@ -3736,7 +3754,7 @@
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 611 "compilers/imcc/imcc.l"
+#line 615 "compilers/imcc/imcc.l"
{
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
"'%s' is not a valid register name", yytext);
@@ -3744,7 +3762,7 @@
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 616 "compilers/imcc/imcc.l"
+#line 620 "compilers/imcc/imcc.l"
{
if (IMCC_INFO(interp)->state->pasm_file == 0)
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3758,7 +3776,7 @@
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 627 "compilers/imcc/imcc.l"
+#line 631 "compilers/imcc/imcc.l"
{
if (!pesky_global__is_def) {
SymReg *r = find_sym(interp, yytext);
@@ -3789,19 +3807,19 @@
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 656 "compilers/imcc/imcc.l"
+#line 660 "compilers/imcc/imcc.l"
/* skip */;
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 658 "compilers/imcc/imcc.l"
+#line 662 "compilers/imcc/imcc.l"
{
/* catch all except for state macro */
return yytext[0];
}
YY_BREAK
case YY_STATE_EOF(emit):
-#line 663 "compilers/imcc/imcc.l"
+#line 667 "compilers/imcc/imcc.l"
{
BEGIN(INITIAL);
@@ -3814,18 +3832,18 @@
}
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 674 "compilers/imcc/imcc.l"
+#line 678 "compilers/imcc/imcc.l"
yyterminate();
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 676 "compilers/imcc/imcc.l"
+#line 680 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ENDM);
YY_BREAK
case 136:
/* rule 136 can match eol */
YY_RULE_SETUP
-#line 678 "compilers/imcc/imcc.l"
+#line 682 "compilers/imcc/imcc.l"
{
IMCC_INFO(interp)->line++;
DUP_AND_RET(valp, '\n');
@@ -3833,12 +3851,12 @@
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 683 "compilers/imcc/imcc.l"
+#line 687 "compilers/imcc/imcc.l"
return LABEL;
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 685 "compilers/imcc/imcc.l"
+#line 689 "compilers/imcc/imcc.l"
{
if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3864,7 +3882,7 @@
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 708 "compilers/imcc/imcc.l"
+#line 712 "compilers/imcc/imcc.l"
{
if (valp) {
const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 12;
@@ -3881,49 +3899,49 @@
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 722 "compilers/imcc/imcc.l"
+#line 726 "compilers/imcc/imcc.l"
/* skip leading ws */;
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 723 "compilers/imcc/imcc.l"
+#line 727 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ' ');
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 724 "compilers/imcc/imcc.l"
+#line 728 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, REG);
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 725 "compilers/imcc/imcc.l"
+#line 729 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, REG);
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 726 "compilers/imcc/imcc.l"
+#line 730 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, IDENTIFIER);
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 727 "compilers/imcc/imcc.l"
+#line 731 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, MACRO);
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 728 "compilers/imcc/imcc.l"
+#line 732 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, yytext[0]);
YY_BREAK
case YY_STATE_EOF(macro):
-#line 729 "compilers/imcc/imcc.l"
+#line 733 "compilers/imcc/imcc.l"
yyterminate();
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 731 "compilers/imcc/imcc.l"
+#line 735 "compilers/imcc/imcc.l"
ECHO;
YY_BREAK
-#line 3927 "compilers/imcc/imclexer.c"
+#line 3945 "compilers/imcc/imclexer.c"
case YY_STATE_EOF(pod):
case YY_STATE_EOF(cmt1):
case YY_STATE_EOF(cmt2):
@@ -4702,8 +4720,8 @@
/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
* scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
*/
@@ -5125,7 +5143,7 @@
#define YYTABLES_NAME "yytables"
-#line 731 "compilers/imcc/imcc.l"
+#line 735 "compilers/imcc/imcc.l"
Modified: branches/io_rewiring/compilers/imcc/imcparser.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcparser.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/imcparser.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -1124,14 +1124,19 @@
{
ASSERT_ARGS(IMCC_itcall_sub)
IMCC_INFO(interp)->cur_call->pcc_sub->sub = sub;
+
if (IMCC_INFO(interp)->cur_obj) {
if (IMCC_INFO(interp)->cur_obj->set != 'P')
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, "object isn't a PMC");
- IMCC_INFO(interp)->cur_call->pcc_sub->object = IMCC_INFO(interp)->cur_obj;
+
+ IMCC_INFO(interp)->cur_call->pcc_sub->object =
+ IMCC_INFO(interp)->cur_obj;
IMCC_INFO(interp)->cur_obj = NULL;
}
+
if (IMCC_INFO(interp)->cur_call->pcc_sub->sub->pmc_type == enum_class_NCI)
IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
+
if (IMCC_INFO(interp)->cur_unit->type == IMC_PCCSUB)
IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->pcc_sub->calls_a_sub |= 1;
}
@@ -1371,7 +1376,7 @@
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 1030 "compilers/imcc/imcc.y"
+#line 1035 "compilers/imcc/imcc.y"
{
IdList * idlist;
int t;
@@ -1380,7 +1385,7 @@
Instruction *i;
}
/* Line 187 of yacc.c. */
-#line 1373 "compilers/imcc/imcparser.c"
+#line 1378 "compilers/imcc/imcparser.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -1393,7 +1398,7 @@
/* Line 216 of yacc.c. */
-#line 1386 "compilers/imcc/imcparser.c"
+#line 1391 "compilers/imcc/imcparser.c"
#ifdef short
# undef short
@@ -1608,16 +1613,16 @@
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 31
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 676
+#define YYLAST 680
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 138
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 126
/* YYNRULES -- Number of rules. */
-#define YYNRULES 336
+#define YYNRULES 337
/* YYNRULES -- Number of states. */
-#define YYNSTATES 542
+#define YYNSTATES 543
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
@@ -1700,14 +1705,14 @@
665, 667, 669, 671, 673, 675, 677, 679, 681, 683,
685, 686, 692, 696, 698, 700, 702, 704, 706, 708,
710, 712, 714, 716, 718, 720, 722, 727, 729, 731,
- 733, 735, 739, 743, 747, 748, 754, 755, 759, 761,
- 767, 771, 775, 778, 779, 782, 784, 786, 791, 796,
- 799, 803, 809, 811, 815, 816, 818, 820, 827, 833,
- 838, 843, 850, 856, 858, 860, 862, 864, 866, 868,
- 870, 872, 874, 876, 877, 879, 883, 885, 887, 892,
- 896, 898, 900, 902, 904, 906, 908, 910, 912, 914,
- 916, 918, 919, 922, 923, 926, 928, 932, 934, 936,
- 938, 940, 942, 944, 946, 948, 950
+ 733, 735, 739, 743, 747, 751, 752, 758, 759, 763,
+ 765, 771, 775, 779, 782, 783, 786, 788, 790, 795,
+ 800, 803, 807, 813, 815, 819, 820, 822, 824, 831,
+ 837, 842, 847, 854, 860, 862, 864, 866, 868, 870,
+ 872, 874, 876, 878, 880, 881, 883, 887, 889, 891,
+ 896, 900, 902, 904, 906, 908, 910, 912, 914, 916,
+ 918, 920, 922, 923, 926, 927, 930, 932, 936, 938,
+ 940, 942, 944, 946, 948, 950, 952, 954
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
@@ -1787,67 +1792,67 @@
40, -1, 41, -1, 42, -1, 46, -1, 47, -1,
48, -1, 247, 122, 116, 157, -1, 108, -1, 112,
-1, 115, -1, 247, -1, 247, 120, 252, -1, 247,
- 120, 112, -1, 247, 120, 247, -1, -1, 233, 235,
- 125, 236, 126, -1, -1, 236, 71, 237, -1, 237,
- -1, 236, 71, 112, 21, 255, -1, 255, 21, 255,
- -1, 112, 21, 255, -1, 255, 238, -1, -1, 238,
- 239, -1, 16, -1, 20, -1, 20, 125, 115, 126,
- -1, 20, 125, 112, 126, -1, 247, 194, -1, 241,
- 71, 240, -1, 241, 71, 112, 21, 247, -1, 240,
- -1, 112, 21, 247, -1, -1, 244, -1, 243, -1,
- 12, 255, 246, 255, 9, 253, -1, 12, 13, 255,
- 9, 253, -1, 12, 255, 245, 253, -1, 11, 255,
- 245, 253, -1, 11, 255, 246, 255, 9, 253, -1,
- 11, 13, 255, 9, 253, -1, 71, -1, 9, -1,
- 56, -1, 57, -1, 58, -1, 59, -1, 60, -1,
- 61, -1, 117, -1, 262, -1, -1, 249, -1, 249,
- 71, 250, -1, 250, -1, 254, -1, 247, 123, 256,
- 124, -1, 123, 258, 124, -1, 252, -1, 112, -1,
- 115, -1, 108, -1, 116, -1, 108, -1, 116, -1,
- 253, -1, 255, -1, 247, -1, 263, -1, -1, 257,
- 260, -1, -1, 259, 260, -1, 261, -1, 260, 137,
- 261, -1, 255, -1, 104, -1, 105, -1, 106, -1,
- 107, -1, 109, -1, 113, -1, 114, -1, 112, -1,
- 115, -1
+ 120, 115, -1, 247, 120, 112, -1, 247, 120, 247,
+ -1, -1, 233, 235, 125, 236, 126, -1, -1, 236,
+ 71, 237, -1, 237, -1, 236, 71, 112, 21, 255,
+ -1, 255, 21, 255, -1, 112, 21, 255, -1, 255,
+ 238, -1, -1, 238, 239, -1, 16, -1, 20, -1,
+ 20, 125, 115, 126, -1, 20, 125, 112, 126, -1,
+ 247, 194, -1, 241, 71, 240, -1, 241, 71, 112,
+ 21, 247, -1, 240, -1, 112, 21, 247, -1, -1,
+ 244, -1, 243, -1, 12, 255, 246, 255, 9, 253,
+ -1, 12, 13, 255, 9, 253, -1, 12, 255, 245,
+ 253, -1, 11, 255, 245, 253, -1, 11, 255, 246,
+ 255, 9, 253, -1, 11, 13, 255, 9, 253, -1,
+ 71, -1, 9, -1, 56, -1, 57, -1, 58, -1,
+ 59, -1, 60, -1, 61, -1, 117, -1, 262, -1,
+ -1, 249, -1, 249, 71, 250, -1, 250, -1, 254,
+ -1, 247, 123, 256, 124, -1, 123, 258, 124, -1,
+ 252, -1, 112, -1, 115, -1, 108, -1, 116, -1,
+ 108, -1, 116, -1, 253, -1, 255, -1, 247, -1,
+ 263, -1, -1, 257, 260, -1, -1, 259, 260, -1,
+ 261, -1, 260, 137, 261, -1, 255, -1, 104, -1,
+ 105, -1, 106, -1, 107, -1, 109, -1, 113, -1,
+ 114, -1, 112, -1, 115, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 1125, 1125, 1129, 1130, 1134, 1135, 1136, 1142, 1148,
- 1149, 1150, 1151, 1155, 1156, 1165, 1170, 1177, 1189, 1201,
- 1201, 1210, 1210, 1216, 1216, 1223, 1224, 1228, 1229, 1233,
- 1234, 1235, 1236, 1237, 1238, 1239, 1242, 1242, 1251, 1250,
- 1262, 1266, 1275, 1279, 1283, 1283, 1295, 1297, 1301, 1316,
- 1324, 1329, 1333, 1337, 1328, 1349, 1350, 1351, 1364, 1364,
- 1368, 1382, 1386, 1392, 1401, 1407, 1416, 1422, 1431, 1437,
- 1446, 1454, 1459, 1470, 1473, 1478, 1486, 1487, 1488, 1489,
- 1490, 1501, 1512, 1515, 1517, 1522, 1521, 1554, 1555, 1559,
- 1560, 1564, 1565, 1569, 1570, 1574, 1575, 1576, 1577, 1578,
- 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1591,
- 1596, 1600, 1605, 1609, 1613, 1618, 1627, 1628, 1632, 1637,
- 1638, 1646, 1647, 1647, 1662, 1663, 1667, 1668, 1669, 1670,
- 1671, 1672, 1673, 1678, 1678, 1681, 1689, 1689, 1695, 1696,
- 1701, 1709, 1710, 1715, 1723, 1727, 1732, 1731, 1744, 1745,
- 1749, 1750, 1760, 1765, 1775, 1784, 1785, 1797, 1801, 1803,
- 1804, 1805, 1806, 1807, 1811, 1812, 1816, 1817, 1821, 1830,
- 1831, 1842, 1849, 1858, 1868, 1869, 1874, 1875, 1876, 1876,
- 1892, 1897, 1902, 1902, 1909, 1910, 1910, 1916, 1922, 1926,
- 1938, 1939, 1940, 1941, 1942, 1943, 1947, 1948, 1949, 1950,
- 1954, 1967, 1969, 1971, 1973, 1975, 1980, 1983, 1990, 1989,
- 1998, 1999, 2000, 2001, 2009, 2010, 2011, 2015, 2016, 2017,
- 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027,
- 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037,
- 2043, 2042, 2054, 2061, 2062, 2063, 2064, 2065, 2066, 2067,
- 2068, 2069, 2070, 2071, 2072, 2073, 2078, 2089, 2090, 2091,
- 2092, 2098, 2112, 2118, 2124, 2123, 2132, 2133, 2143, 2153,
- 2160, 2165, 2175, 2179, 2180, 2184, 2185, 2188, 2189, 2193,
- 2197, 2207, 2213, 2223, 2228, 2232, 2233, 2237, 2241, 2245,
- 2252, 2256, 2260, 2267, 2268, 2272, 2273, 2274, 2275, 2276,
- 2277, 2281, 2282, 2286, 2287, 2291, 2292, 2296, 2297, 2304,
- 2311, 2312, 2313, 2317, 2318, 2322, 2323, 2327, 2328, 2332,
- 2333, 2337, 2337, 2350, 2350, 2363, 2364, 2372, 2381, 2382,
- 2383, 2384, 2385, 2389, 2390, 2391, 2392
+ 0, 1130, 1130, 1134, 1135, 1139, 1140, 1141, 1147, 1153,
+ 1154, 1155, 1156, 1160, 1161, 1170, 1176, 1184, 1196, 1209,
+ 1209, 1218, 1218, 1225, 1225, 1234, 1235, 1239, 1240, 1244,
+ 1245, 1246, 1247, 1248, 1249, 1250, 1253, 1253, 1262, 1261,
+ 1273, 1277, 1286, 1290, 1294, 1294, 1306, 1308, 1312, 1327,
+ 1335, 1340, 1344, 1348, 1339, 1360, 1361, 1362, 1375, 1375,
+ 1379, 1393, 1397, 1403, 1412, 1418, 1427, 1433, 1442, 1448,
+ 1457, 1465, 1470, 1481, 1484, 1489, 1497, 1498, 1499, 1500,
+ 1501, 1512, 1523, 1526, 1528, 1533, 1532, 1565, 1566, 1570,
+ 1571, 1575, 1576, 1580, 1581, 1585, 1586, 1587, 1588, 1589,
+ 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1602,
+ 1607, 1611, 1616, 1620, 1624, 1629, 1638, 1639, 1643, 1648,
+ 1649, 1657, 1658, 1658, 1673, 1674, 1678, 1679, 1680, 1681,
+ 1682, 1683, 1684, 1689, 1689, 1692, 1700, 1700, 1706, 1707,
+ 1712, 1720, 1721, 1726, 1734, 1738, 1743, 1742, 1755, 1756,
+ 1760, 1761, 1771, 1776, 1786, 1795, 1796, 1808, 1812, 1814,
+ 1815, 1816, 1817, 1818, 1822, 1823, 1827, 1828, 1832, 1841,
+ 1842, 1853, 1860, 1869, 1879, 1880, 1885, 1886, 1887, 1887,
+ 1903, 1908, 1913, 1913, 1920, 1921, 1921, 1927, 1933, 1937,
+ 1949, 1950, 1951, 1952, 1953, 1954, 1958, 1959, 1960, 1961,
+ 1965, 1978, 1980, 1982, 1984, 1986, 1991, 1994, 2001, 2000,
+ 2009, 2010, 2011, 2012, 2020, 2021, 2022, 2026, 2027, 2028,
+ 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038,
+ 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048,
+ 2054, 2053, 2065, 2072, 2073, 2074, 2075, 2076, 2077, 2078,
+ 2079, 2080, 2081, 2082, 2083, 2084, 2089, 2100, 2101, 2102,
+ 2103, 2109, 2123, 2129, 2135, 2141, 2140, 2149, 2150, 2160,
+ 2170, 2177, 2182, 2192, 2196, 2197, 2201, 2202, 2205, 2206,
+ 2210, 2214, 2224, 2230, 2240, 2245, 2249, 2250, 2254, 2258,
+ 2262, 2269, 2273, 2277, 2284, 2285, 2289, 2290, 2291, 2292,
+ 2293, 2294, 2298, 2299, 2303, 2304, 2308, 2309, 2313, 2314,
+ 2321, 2328, 2329, 2330, 2334, 2335, 2339, 2340, 2344, 2345,
+ 2349, 2350, 2354, 2354, 2367, 2367, 2380, 2381, 2389, 2398,
+ 2399, 2400, 2401, 2402, 2406, 2407, 2408, 2409
};
#endif
@@ -1955,14 +1960,14 @@
227, 227, 227, 227, 227, 227, 227, 227, 227, 227,
229, 228, 230, 231, 231, 231, 231, 231, 231, 231,
231, 231, 231, 231, 231, 231, 232, 233, 233, 233,
- 233, 233, 233, 233, 235, 234, 236, 236, 236, 236,
- 236, 236, 237, 238, 238, 239, 239, 239, 239, 240,
- 241, 241, 241, 241, 241, 242, 242, 243, 243, 243,
- 244, 244, 244, 245, 245, 246, 246, 246, 246, 246,
- 246, 247, 247, 248, 248, 249, 249, 250, 250, 250,
- 251, 251, 251, 252, 252, 253, 253, 254, 254, 255,
- 255, 257, 256, 259, 258, 260, 260, 261, 262, 262,
- 262, 262, 262, 263, 263, 263, 263
+ 233, 233, 233, 233, 233, 235, 234, 236, 236, 236,
+ 236, 236, 236, 237, 238, 238, 239, 239, 239, 239,
+ 240, 241, 241, 241, 241, 241, 242, 242, 243, 243,
+ 243, 244, 244, 244, 245, 245, 246, 246, 246, 246,
+ 246, 246, 247, 247, 248, 248, 249, 249, 250, 250,
+ 250, 251, 251, 251, 252, 252, 253, 253, 254, 254,
+ 255, 255, 257, 256, 259, 258, 260, 260, 261, 262,
+ 262, 262, 262, 262, 263, 263, 263, 263
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -1994,14 +1999,14 @@
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
0, 5, 3, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 4, 1, 1, 1,
- 1, 3, 3, 3, 0, 5, 0, 3, 1, 5,
- 3, 3, 2, 0, 2, 1, 1, 4, 4, 2,
- 3, 5, 1, 3, 0, 1, 1, 6, 5, 4,
- 4, 6, 5, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 1, 3, 1, 1, 4, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 0, 2, 0, 2, 1, 3, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1
+ 1, 3, 3, 3, 3, 0, 5, 0, 3, 1,
+ 5, 3, 3, 2, 0, 2, 1, 1, 4, 4,
+ 2, 3, 5, 1, 3, 0, 1, 1, 6, 5,
+ 4, 4, 6, 5, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 0, 1, 3, 1, 1, 4,
+ 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 0, 2, 0, 2, 1, 3, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1
};
/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -2011,59 +2016,59 @@
{
0, 12, 0, 0, 0, 0, 51, 19, 0, 44,
0, 0, 2, 3, 10, 11, 0, 6, 8, 5,
- 7, 18, 0, 0, 321, 0, 0, 0, 0, 164,
+ 7, 18, 0, 0, 322, 0, 0, 0, 0, 164,
9, 1, 4, 13, 0, 16, 50, 0, 0, 48,
- 313, 311, 312, 314, 52, 310, 196, 197, 198, 199,
+ 314, 312, 313, 315, 52, 311, 196, 197, 198, 199,
0, 14, 21, 168, 0, 32, 31, 35, 34, 164,
- 27, 0, 33, 36, 165, 167, 0, 49, 328, 329,
- 330, 331, 332, 335, 333, 334, 336, 301, 319, 327,
- 322, 325, 302, 320, 91, 0, 0, 0, 30, 28,
+ 27, 0, 33, 36, 165, 167, 0, 49, 329, 330,
+ 331, 332, 333, 336, 334, 335, 337, 302, 320, 328,
+ 323, 326, 303, 321, 91, 0, 0, 0, 30, 28,
45, 0, 0, 38, 0, 0, 166, 15, 0, 97,
95, 96, 98, 99, 66, 100, 0, 101, 0, 64,
0, 71, 68, 102, 103, 104, 105, 106, 107, 108,
0, 92, 93, 0, 0, 0, 40, 0, 91, 29,
- 303, 326, 0, 0, 73, 0, 0, 0, 0, 53,
- 94, 20, 315, 316, 317, 0, 318, 0, 0, 0,
- 323, 37, 319, 43, 304, 306, 307, 25, 26, 0,
- 0, 0, 76, 77, 79, 78, 80, 81, 321, 0,
+ 304, 327, 0, 0, 73, 0, 0, 0, 0, 53,
+ 94, 20, 316, 317, 318, 0, 319, 0, 0, 0,
+ 324, 37, 320, 43, 305, 307, 308, 25, 26, 0,
+ 0, 0, 76, 77, 79, 78, 80, 81, 322, 0,
75, 0, 0, 0, 0, 55, 0, 0, 41, 39,
- 0, 0, 321, 0, 67, 63, 62, 0, 0, 61,
- 65, 70, 72, 69, 56, 157, 22, 24, 309, 324,
- 0, 305, 82, 74, 58, 0, 0, 161, 160, 162,
- 163, 0, 0, 157, 0, 155, 308, 0, 0, 159,
+ 0, 0, 322, 0, 67, 63, 62, 0, 0, 61,
+ 65, 70, 72, 69, 56, 157, 22, 24, 310, 325,
+ 0, 306, 82, 74, 58, 0, 0, 161, 160, 162,
+ 163, 0, 0, 157, 0, 155, 309, 0, 0, 159,
57, 54, 156, 0, 195, 158, 59, 0, 0, 170,
0, 0, 0, 0, 178, 0, 182, 185, 148, 0,
- 149, 240, 0, 0, 0, 257, 258, 259, 303, 208,
+ 149, 240, 0, 0, 0, 257, 258, 259, 304, 208,
184, 192, 193, 194, 135, 0, 0, 176, 210, 211,
- 212, 264, 191, 177, 286, 285, 260, 124, 17, 188,
+ 212, 265, 191, 177, 287, 286, 260, 124, 17, 188,
0, 0, 0, 0, 190, 0, 0, 0, 0, 0,
- 187, 260, 0, 85, 133, 136, 189, 284, 146, 169,
+ 187, 260, 0, 85, 133, 136, 189, 285, 146, 169,
0, 243, 244, 245, 246, 249, 250, 251, 252, 248,
- 247, 253, 254, 255, 0, 0, 321, 0, 60, 0,
- 294, 295, 296, 297, 298, 299, 300, 293, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 284, 116,
- 138, 141, 0, 282, 0, 124, 150, 266, 262, 263,
- 261, 213, 335, 336, 303, 0, 214, 215, 216, 0,
- 207, 319, 201, 0, 242, 126, 127, 128, 129, 132,
- 125, 0, 290, 0, 0, 289, 0, 174, 179, 171,
- 180, 181, 0, 0, 0, 89, 0, 0, 0, 0,
- 0, 279, 335, 0, 151, 273, 335, 0, 268, 273,
- 256, 200, 0, 202, 222, 231, 232, 236, 225, 226,
- 227, 228, 229, 230, 223, 233, 234, 235, 224, 321,
- 239, 217, 218, 219, 220, 221, 237, 238, 0, 0,
- 0, 292, 0, 288, 0, 175, 173, 0, 0, 0,
- 241, 0, 0, 0, 0, 139, 0, 134, 0, 142,
- 0, 137, 0, 283, 0, 280, 0, 0, 0, 147,
- 272, 0, 0, 265, 0, 321, 0, 203, 0, 0,
- 0, 291, 287, 172, 183, 186, 118, 0, 0, 0,
- 0, 87, 117, 273, 140, 273, 143, 0, 0, 152,
- 335, 153, 275, 276, 274, 271, 335, 267, 270, 0,
- 204, 205, 130, 131, 90, 0, 0, 0, 0, 119,
- 0, 144, 145, 281, 266, 0, 0, 0, 206, 110,
- 0, 111, 113, 0, 112, 0, 0, 88, 0, 154,
- 0, 0, 269, 0, 0, 0, 122, 0, 86, 0,
- 209, 278, 277, 109, 115, 114, 0, 124, 120, 0,
- 121, 123
+ 247, 253, 254, 255, 0, 0, 322, 0, 60, 0,
+ 295, 296, 297, 298, 299, 300, 301, 294, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 285, 116,
+ 138, 141, 0, 283, 0, 124, 150, 267, 263, 262,
+ 264, 261, 213, 336, 337, 304, 0, 214, 215, 216,
+ 0, 207, 320, 201, 0, 242, 126, 127, 128, 129,
+ 132, 125, 0, 291, 0, 0, 290, 0, 174, 179,
+ 171, 180, 181, 0, 0, 0, 89, 0, 0, 0,
+ 0, 0, 280, 336, 0, 151, 274, 336, 0, 269,
+ 274, 256, 200, 0, 202, 222, 231, 232, 236, 225,
+ 226, 227, 228, 229, 230, 223, 233, 234, 235, 224,
+ 322, 239, 217, 218, 219, 220, 221, 237, 238, 0,
+ 0, 0, 293, 0, 289, 0, 175, 173, 0, 0,
+ 0, 241, 0, 0, 0, 0, 139, 0, 134, 0,
+ 142, 0, 137, 0, 284, 0, 281, 0, 0, 0,
+ 147, 273, 0, 0, 266, 0, 322, 0, 203, 0,
+ 0, 0, 292, 288, 172, 183, 186, 118, 0, 0,
+ 0, 0, 87, 117, 274, 140, 274, 143, 0, 0,
+ 152, 336, 153, 276, 277, 275, 272, 336, 268, 271,
+ 0, 204, 205, 130, 131, 90, 0, 0, 0, 0,
+ 119, 0, 144, 145, 282, 267, 0, 0, 0, 206,
+ 110, 0, 111, 113, 0, 112, 0, 0, 88, 0,
+ 154, 0, 0, 270, 0, 0, 0, 122, 0, 86,
+ 0, 209, 279, 278, 109, 115, 114, 0, 124, 120,
+ 0, 121, 123
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -2073,95 +2078,95 @@
58, 86, 87, 159, 59, 60, 94, 95, 128, 151,
18, 29, 61, 19, 25, 20, 26, 84, 175, 195,
211, 217, 226, 113, 114, 115, 116, 117, 118, 119,
- 169, 170, 212, 251, 329, 499, 433, 120, 121, 122,
- 471, 375, 434, 516, 529, 536, 308, 360, 252, 330,
- 253, 331, 376, 377, 438, 442, 254, 336, 255, 383,
- 213, 214, 215, 63, 64, 65, 225, 368, 369, 426,
- 256, 275, 278, 279, 50, 392, 257, 287, 349, 418,
- 258, 282, 259, 307, 260, 261, 262, 290, 387, 388,
- 450, 484, 333, 334, 263, 264, 265, 318, 319, 78,
+ 169, 170, 212, 251, 329, 500, 434, 120, 121, 122,
+ 472, 376, 435, 517, 530, 537, 308, 361, 252, 330,
+ 253, 331, 377, 378, 439, 443, 254, 336, 255, 384,
+ 213, 214, 215, 63, 64, 65, 225, 369, 370, 427,
+ 256, 275, 278, 279, 50, 393, 257, 287, 350, 419,
+ 258, 282, 259, 307, 260, 261, 262, 290, 388, 389,
+ 451, 485, 333, 334, 263, 264, 265, 318, 319, 78,
153, 154, 155, 44, 45, 144, 156, 146, 37, 38,
180, 181, 80, 81, 82, 83
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -422
+#define YYPACT_NINF -418
static const yytype_int16 yypact[] =
{
- 4, -422, -77, -34, -46, -31, -422, -422, -4, -422,
- 106, 139, 4, -422, -422, -422, 186, -422, -422, -422,
- -422, -422, 104, 187, 68, 194, 221, 127, 199, 53,
- -422, -422, -422, -422, 92, -422, -422, 84, 489, -422,
- -422, -422, -422, -422, -422, -422, -422, -422, -422, -422,
- 107, -422, 101, -422, 217, -422, -422, -422, -422, 64,
- -422, 122, -422, 14, 125, -422, 223, -422, -422, -422,
- -422, -422, -422, -422, -422, -422, -422, -422, -422, -422,
- 98, -422, -422, -422, 493, 118, 129, 131, -422, -422,
- -422, 489, 132, -422, 241, 130, -422, -422, 489, -422,
- -422, -422, -422, -422, 123, -422, 134, -422, 135, 136,
- 138, 141, 146, -422, -422, -422, -422, -422, -422, -422,
- 245, 493, -422, 74, 239, 239, -422, 181, 493, -422,
- 437, -422, 40, 56, -7, 152, 170, 40, 40, -422,
- -422, -422, -422, -422, -422, 163, -422, 165, 183, 193,
- -422, -422, 173, -422, 226, -422, -422, -422, -422, 180,
- 188, 189, -422, -422, -422, -422, -422, -422, -422, -50,
- -422, 190, 191, 195, 202, 303, 40, 40, -422, -422,
- 206, 489, -422, 437, -422, -422, -422, 207, -7, -422,
- -422, -422, -422, -422, -422, 32, -422, -422, -422, 98,
- 208, -422, -422, -422, -422, 211, 315, -422, -422, -422,
- -422, 316, 262, 43, 261, -422, -422, 127, 267, -422,
- -422, -422, -422, 336, 415, -422, -422, 242, 74, -422,
- -36, 105, 124, 489, -422, 54, 16, -422, -422, 171,
- -422, -422, 353, 360, 368, -422, -422, -422, 437, -422,
- -422, -422, -422, -422, -422, 249, 371, -422, -422, -422,
- -422, -422, -422, -422, -422, -422, 416, -422, -422, -422,
- 489, 197, 489, 197, -422, 127, 308, 310, 127, 127,
- -422, 268, 264, -422, -422, -422, -422, 278, -422, -422,
- 266, -422, -422, -422, -422, -422, -422, -422, -422, -422,
- -422, -422, -422, -422, 196, 18, -422, 489, -3, 383,
- -422, -422, -422, -422, -422, -422, -422, -422, -36, 489,
- 387, -36, 489, 289, 254, 254, 292, 293, 278, -422,
- -422, -422, 382, -422, -42, -422, 503, 517, -422, -422,
- -422, -422, 279, 280, 437, 298, -422, -422, -422, 489,
- -422, -47, 441, 283, -422, -422, -422, -422, 286, -422,
- -422, -36, -422, 403, -36, -422, 406, 317, 347, -422,
- -422, -422, 297, 299, -23, 3, 28, 21, 254, 329,
- 300, -3, 402, -14, -422, -422, 404, -13, -422, 408,
- -422, -422, 309, -422, -422, -422, -422, -422, -422, -422,
- -422, -422, -422, -422, -422, -422, -422, -422, -422, -422,
- -422, -422, -422, -422, -422, -422, -422, -422, 489, 318,
- 58, -422, -36, -422, -36, -422, -422, 289, 74, 74,
- -422, 489, 489, -1, 433, -422, 489, -422, 435, -422,
- 489, -422, 438, -422, 426, -422, 171, 489, 531, -422,
- 69, 489, 545, -422, 489, -422, 324, -422, 489, 333,
- 339, -422, -422, -422, -422, -422, -422, 446, 489, 489,
- 559, 125, -422, -422, -422, -422, -422, 254, 343, -422,
- 449, -422, -422, 346, -422, -422, 452, -422, -422, 350,
- -422, -422, -422, -422, -422, 15, 472, 19, 22, -422,
- 478, 69, 69, -422, 517, 489, 90, 489, -422, -422,
- 489, -422, -422, 489, -422, 489, -6, -422, -9, -422,
- 357, 359, -422, 482, 483, 484, -422, 254, -422, 488,
- -422, -422, -422, -422, -422, -422, 127, -422, -422, 289,
- -3, -422
+ 252, -418, -82, -71, -58, -55, -418, -418, -6, -418,
+ 112, 141, 252, -418, -418, -418, 145, -418, -418, -418,
+ -418, -418, 87, 169, 68, 194, 48, 184, 200, 11,
+ -418, -418, -418, -418, 94, -418, -418, 83, 479, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ 101, -418, 98, -418, 211, -418, -418, -418, -418, 144,
+ -418, 122, -418, 20, 132, -418, 235, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ 109, -418, -418, -418, 451, 127, 137, 143, -418, -418,
+ -418, 479, 149, -418, 249, 148, -418, -418, 479, -418,
+ -418, -418, -418, -418, 140, -418, 146, -418, 150, 152,
+ 154, 155, 158, -418, -418, -418, -418, -418, -418, -418,
+ 253, 451, -418, 173, 464, 464, -418, 195, 451, -418,
+ 412, -418, 54, -41, 5, 156, 180, 54, 54, -418,
+ -418, -418, -418, -418, -418, 171, -418, 174, 188, 203,
+ -418, -418, 183, -418, 236, -418, -418, -418, -418, 189,
+ 190, 191, -418, -418, -418, -418, -418, -418, -418, -46,
+ -418, 192, 202, 204, 205, 305, 54, 54, -418, -418,
+ 197, 479, -418, 412, -418, -418, -418, 198, 5, -418,
+ -418, -418, -418, -418, -418, 43, -418, -418, -418, 109,
+ 208, -418, -418, -418, -418, 217, 310, -418, -418, -418,
+ -418, 316, 264, 0, 74, -418, -418, 184, 262, -418,
+ -418, -418, -418, 333, 261, -418, -418, 230, 173, -418,
+ -69, 321, 336, 479, -418, 55, -50, -418, -418, 354,
+ -418, -418, 338, 340, 341, -418, -418, -418, 412, -418,
+ -418, -418, -418, -418, -418, 215, 342, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, 467, -418, -418, -418,
+ 479, 75, 479, 75, -418, 184, 276, 280, 184, 184,
+ -418, 232, 228, -418, -418, -418, -418, 196, -418, -418,
+ 231, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ -418, -418, -418, -418, 493, 114, -418, 479, -5, 346,
+ -418, -418, -418, -418, -418, -418, -418, -418, -69, 479,
+ 348, -69, 479, 250, 107, 107, 251, 255, 196, -418,
+ -418, -418, 339, -418, -45, -418, 507, 521, -418, -418,
+ -418, -418, -418, 239, 246, 412, 266, -418, -418, -418,
+ 479, -418, -80, 431, 237, -418, -418, -418, -418, 247,
+ -418, -418, -69, -418, 366, -69, -418, 370, 282, 309,
+ -418, -418, -418, 263, 265, -35, 8, 15, 12, 107,
+ 284, 270, -5, 362, -27, -418, -418, 363, -2, -418,
+ 376, -418, -418, 275, -418, -418, -418, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, 479,
+ 283, 72, -418, -69, -418, -69, -418, -418, 250, 173,
+ 173, -418, 479, 479, 89, 398, -418, 479, -418, 400,
+ -418, 479, -418, 402, -418, 386, -418, 354, 479, 535,
+ -418, 131, 479, 549, -418, 479, -418, 288, -418, 479,
+ 287, 290, -418, -418, -418, -418, -418, -418, 404, 479,
+ 479, 563, 132, -418, -418, -418, -418, -418, 107, 293,
+ -418, 399, -418, -418, 294, -418, -418, 401, -418, -418,
+ 299, -418, -418, -418, -418, -418, 17, 420, 18, 19,
+ -418, 425, 131, 131, -418, 521, 479, 73, 479, -418,
+ -418, 479, -418, -418, 479, -418, 479, 4, -418, -1,
+ -418, 311, 313, -418, 440, 442, 443, -418, 107, -418,
+ 448, -418, -418, -418, -418, -418, -418, 184, -418, -418,
+ 250, -5, -418
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -422, -422, -422, 491, 9, -146, -422, -422, -422, -422,
- 270, -422, -422, 47, -422, 445, -422, -422, -422, 161,
- -422, -422, -422, 12, -422, -422, -422, -422, -422, -422,
- -422, -422, -422, -422, -422, -422, -422, -422, -422, -422,
- -422, 319, -422, -422, -422, -422, -422, 378, -422, 391,
- -422, -422, -422, -422, -422, -422, -330, -422, -422, -422,
- -422, -422, -422, -422, -422, -422, -422, -422, -422, -422,
- -422, -422, 301, 302, -422, -63, -422, -422, -418, -422,
- -422, -422, -422, -422, -214, -422, -422, -422, -422, -422,
- -422, -422, -422, -422, -422, 67, -206, -422, 11, -312,
- -421, -422, 147, 200, -422, -422, -422, 244, 252, -128,
- 281, -422, 335, -422, 229, -223, 33, -38, -162, -422,
- -422, -422, 354, 436, -422, -119
+ -418, -418, -418, 444, 14, -167, -418, -418, -418, -418,
+ 233, -418, -418, -100, -418, 395, -418, -418, -418, 110,
+ -418, -418, -418, 23, -418, -418, -418, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ -418, 277, -418, -418, -418, -418, -418, 344, -418, 343,
+ -418, -418, -418, -418, -418, -418, -330, -418, -418, -418,
+ -418, -418, -418, -418, -418, -418, -418, -418, -418, -418,
+ -418, -418, 269, 271, -418, -63, -418, -418, -417, -418,
+ -418, -418, -418, -418, -214, -418, -418, -418, -418, -418,
+ -418, -418, -418, -418, -418, 28, -205, -418, -28, -327,
+ -319, -418, 99, 165, -418, -418, -418, 210, 221, -128,
+ 248, -418, 301, -418, 193, -220, 77, -38, -162, -418,
+ -418, -418, 314, 424, -418, -119
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -2171,146 +2176,148 @@
#define YYTABLE_NINF -261
static const yytype_int16 yytable[] =
{
- 79, 96, 152, 227, 141, 381, 187, 269, 1, 463,
- 2, 3, 4, 431, 355, 356, 357, 358, -42, 509,
- 200, 188, 526, 512, 384, 439, 514, 91, 5, 379,
- 6, 341, 435, 280, 7, 21, 440, 204, 57, 3,
- 4, 62, 436, 92, 162, 163, 164, 165, 379, 209,
- 3, 4, 501, 126, 502, 152, 527, 448, 452, 2,
- 79, 323, 452, 205, 326, 327, 23, 209, 57, 528,
- 2, 62, 142, 304, 205, 468, 189, 5, -260, 22,
- 143, 469, 470, 52, 380, 482, 510, 432, 5, 483,
- 513, 93, 24, 515, 52, 362, 266, 359, 365, 350,
- 8, 166, 441, 430, -83, 167, 9, 437, 28, 268,
- 30, 281, 449, 453, 10, -84, 168, 530, 270, 466,
- 152, 541, 68, 69, 70, 71, 245, 72, -23, -21,
- 342, 74, 75, 343, 344, 77, 481, 272, 421, 31,
- 487, 423, 206, 79, 353, 345, 346, 347, 348, 8,
- 207, 208, 157, 206, 53, 158, -46, 145, 147, 335,
- 8, 207, 208, 54, 160, 53, 276, -47, 161, 277,
- 459, 55, 56, 460, 54, 34, 339, 351, 46, 47,
- 48, 49, 55, 56, 173, 174, 73, 74, 75, 76,
- 33, 35, 36, 271, 273, 274, 370, 371, 39, 461,
- 335, 462, 520, 51, 66, 521, 310, 540, 67, 68,
- 69, 70, 71, -23, 72, 85, 152, 73, 74, 75,
- 76, 88, 77, 196, 197, 90, 53, 97, 68, 69,
- 70, 71, 309, 72, 320, 98, 73, 74, 75, 76,
- 123, 77, 124, 125, 127, 129, 130, 456, 132, 139,
- 443, 335, 148, 311, 312, 313, 314, 315, 316, 133,
- 134, 135, 223, 136, 171, -164, 137, 352, 317, 354,
- -164, 138, -164, -164, -164, 68, 69, 70, 71, 245,
- 72, 363, 172, 246, 366, 176, 247, 177, 77, -164,
- -164, -164, 178, 489, 179, -164, 182, 183, 385, 389,
- 68, 69, 70, 71, 40, 72, 184, 194, 338, 464,
- 465, 393, 43, 77, 185, 186, 190, 191, 281, 219,
- 220, 192, 539, 218, -164, -164, -164, -164, 193, 40,
- 198, 202, 216, 41, 221, -164, 42, 43, 228, -164,
- 229, -164, 498, 68, 69, 70, 71, 142, 72, 503,
- 267, 73, 74, 75, 76, 143, 77, 283, 68, 69,
- 70, 71, 53, 72, 284, -164, -164, -164, -164, -164,
- -164, 77, 285, -164, 288, 289, -164, -164, -164, 324,
- 457, 325, 68, 69, 70, 71, -164, 72, 304, 328,
- 332, 337, 361, 385, 467, 77, 364, 367, 473, 537,
- 372, 373, 475, 378, -258, -259, 391, 419, 500, 479,
- 385, 420, 422, 485, 385, 424, 488, 425, 427, 428,
- 491, 429, 446, 447, 230, 451, 231, 232, 233, 454,
- 495, 496, 455, 68, 69, 70, 71, 472, 72, 474,
- 458, 444, 476, 234, 235, 236, 77, 477, 490, 237,
- 494, 291, 292, 293, 294, 295, 296, 297, 298, 492,
- 299, 300, 301, 302, 303, 493, 389, 519, 504, 522,
- 505, 506, 523, 507, 508, 524, 511, 525, 238, 239,
- 240, 241, 517, 531, 394, 532, 533, 534, 535, 242,
- 395, 396, 538, 243, 250, 244, 397, 398, 399, 400,
- 401, 402, 403, 32, 89, 390, 149, 203, 404, 405,
- 406, 407, 140, 478, 222, 518, 224, 321, 201, 68,
- 69, 70, 71, 245, 72, 322, 445, 246, 374, 286,
- 247, 248, 77, 340, 131, 199, 304, 0, 305, 306,
- 249, 68, 69, 70, 71, 142, 72, 0, 0, 73,
- 74, 75, 76, 143, 77, 0, 0, 0, 0, 0,
- 150, 0, 408, 0, 409, 0, 0, 0, 0, 0,
- 410, 411, 412, 413, 414, 415, 416, 417, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 0,
- 110, 111, 112, 68, 69, 70, 71, 0, 72, 0,
- 0, 73, 74, 75, 76, 0, 77, 68, 69, 70,
- 71, 0, 72, 0, 0, 382, 74, 75, 76, 0,
- 77, 68, 69, 70, 71, 0, 72, 0, 0, 386,
+ 79, 96, 152, 227, 141, 382, 187, 3, 4, 385,
+ 269, 464, 356, 357, 358, 359, 440, 2, 432, 436,
+ 200, 510, 513, 515, -42, 188, 380, 441, 209, 437,
+ 21, 205, 527, 91, 280, 5, 380, 173, 174, 142,
+ 304, 52, 22, 57, 449, -260, 209, 143, 204, 92,
+ 3, 4, 62, 126, 23, 152, 162, 163, 164, 165,
+ 79, 323, -23, -21, 326, 327, 528, 160, 24, 453,
+ 453, 161, -84, 57, 205, 223, 196, 197, -164, 529,
+ 189, 381, 62, -164, 310, -164, -164, -164, 511, 514,
+ 516, 431, 433, 442, 438, 360, 266, 93, 363, 450,
+ 351, 366, -164, -164, -164, 467, 28, 8, -164, 268,
+ 206, 281, 53, 166, -46, -83, 30, 167, 207, 208,
+ 152, 54, 482, 542, 454, 531, 488, 342, 168, 55,
+ 56, 311, 312, 313, 314, 315, 316, -164, -164, -164,
+ -164, 31, 422, 79, 354, 424, 317, 483, -164, 33,
+ 2, 484, -164, 206, -164, 502, 40, 503, 34, 335,
+ 41, 207, 208, 42, 43, 469, 157, 276, 5, 158,
+ 277, 470, 471, 35, 52, 53, 340, 352, -164, -164,
+ -164, -164, -164, -164, 460, 521, -164, 461, 522, -164,
+ -164, -164, 36, 271, 273, 274, 371, 372, 39, -164,
+ 335, 145, 147, 462, 51, 463, 66, 67, 541, 85,
+ -23, 68, 69, 70, 71, 88, 72, 152, 68, 69,
+ 70, 71, 245, 72, 77, 90, 343, 74, 75, 344,
+ 345, 77, 309, 53, 320, 46, 47, 48, 49, 97,
+ 8, 346, 347, 348, 349, 53, 98, -47, 457, 123,
+ 124, 444, 335, 129, 54, 125, 1, 139, 2, 3,
+ 4, 127, 55, 56, 130, 132, 148, 353, 171, 355,
+ 230, 133, 231, 232, 233, 134, 5, 135, 6, 136,
+ 137, 364, 7, 138, 367, 73, 74, 75, 76, 234,
+ 235, 236, 172, 176, 490, 237, 177, 178, 386, 390,
+ 68, 69, 70, 71, 179, 72, 182, 183, 332, 194,
+ 465, 466, 394, 77, 219, 184, 185, 186, 190, 281,
+ 220, 198, 202, 540, 238, 239, 240, 241, 191, 218,
+ 192, 193, 216, 228, 270, 242, 221, 229, 267, 243,
+ 288, 244, 283, 499, 284, 285, 289, 324, 8, 272,
+ 504, 325, 304, 328, 9, 362, 337, 365, 368, 373,
+ 379, 420, 10, 374, -258, 68, 69, 70, 71, 245,
+ 72, -259, 421, 246, 392, 423, 247, 248, 77, 425,
+ 428, 458, 426, 448, 452, 429, 249, 430, 68, 69,
+ 70, 71, 447, 72, 386, 468, 445, 455, 456, 474,
+ 538, 77, 473, 476, 475, 459, 477, 478, 495, 501,
+ 480, 386, 491, 493, 486, 386, 494, 489, 505, 507,
+ 506, 492, 508, 509, 512, 68, 69, 70, 71, 518,
+ 72, 496, 497, 73, 74, 75, 76, 532, 77, 533,
+ 68, 69, 70, 71, 534, 72, 535, 536, 73, 74,
+ 75, 76, 539, 77, 89, 391, 32, 250, 68, 69,
+ 70, 71, 245, 72, 140, 203, 246, 390, 520, 247,
+ 523, 77, 149, 524, 395, 479, 525, 519, 526, 446,
+ 396, 397, 222, 321, 201, 224, 398, 399, 400, 401,
+ 402, 403, 404, 375, 322, 199, 286, 341, 405, 406,
+ 407, 408, 291, 292, 293, 294, 295, 296, 297, 298,
+ 0, 299, 300, 301, 302, 303, 68, 69, 70, 71,
+ 142, 72, 131, 0, 73, 74, 75, 76, 143, 77,
+ 0, 0, 0, 0, 0, 150, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 0, 110, 111,
+ 112, 0, 409, 0, 410, 0, 0, 0, 0, 0,
+ 411, 412, 413, 414, 415, 416, 417, 418, 68, 69,
+ 70, 71, 142, 72, 0, 0, 73, 74, 75, 76,
+ 143, 77, 0, 68, 69, 70, 71, 304, 72, 305,
+ 306, 73, 74, 75, 76, 0, 77, 68, 69, 70,
+ 71, 40, 72, 0, 0, 338, 0, 0, 339, 43,
+ 77, 68, 69, 70, 71, 0, 72, 0, 0, 383,
74, 75, 76, 0, 77, 68, 69, 70, 71, 0,
- 72, 0, 0, 480, 74, 75, 76, 0, 77, 68,
- 69, 70, 71, 0, 72, 0, 0, 486, 74, 75,
+ 72, 0, 0, 387, 74, 75, 76, 0, 77, 68,
+ 69, 70, 71, 0, 72, 0, 0, 481, 74, 75,
76, 0, 77, 68, 69, 70, 71, 0, 72, 0,
- 0, 497, 0, 0, 0, 0, 77
+ 0, 487, 74, 75, 76, 0, 77, 68, 69, 70,
+ 71, 0, 72, 0, 0, 498, 0, 0, 0, 0,
+ 77
};
static const yytype_int16 yycheck[] =
{
- 38, 64, 130, 217, 123, 335, 168, 230, 4, 427,
- 6, 7, 8, 10, 17, 18, 19, 20, 4, 4,
- 182, 71, 28, 4, 336, 4, 4, 13, 24, 71,
- 26, 13, 4, 239, 30, 112, 15, 5, 29, 7,
- 8, 29, 14, 29, 51, 52, 53, 54, 71, 195,
- 7, 8, 473, 91, 475, 183, 62, 71, 71, 6,
- 98, 275, 71, 31, 278, 279, 112, 213, 59, 75,
- 6, 59, 108, 120, 31, 76, 126, 24, 125, 113,
- 116, 82, 83, 30, 126, 16, 71, 84, 24, 20,
- 71, 77, 123, 71, 30, 318, 224, 100, 321, 305,
- 96, 108, 81, 126, 72, 112, 102, 79, 112, 228,
- 4, 239, 126, 126, 110, 72, 123, 126, 13, 431,
- 248, 539, 104, 105, 106, 107, 108, 109, 112, 113,
- 112, 113, 114, 115, 116, 117, 448, 13, 361, 0,
- 452, 364, 110, 181, 306, 127, 128, 129, 130, 96,
- 118, 119, 112, 110, 101, 115, 103, 124, 125, 287,
- 96, 118, 119, 110, 108, 101, 112, 103, 112, 115,
- 112, 118, 119, 115, 110, 71, 304, 305, 51, 52,
- 53, 54, 118, 119, 137, 138, 112, 113, 114, 115,
- 4, 4, 124, 231, 232, 233, 324, 325, 4, 422,
- 328, 424, 112, 4, 112, 115, 9, 537, 124, 104,
- 105, 106, 107, 112, 109, 108, 344, 112, 113, 114,
- 115, 4, 117, 176, 177, 103, 101, 4, 104, 105,
- 106, 107, 270, 109, 272, 137, 112, 113, 114, 115,
- 122, 117, 113, 112, 112, 4, 116, 409, 125, 4,
- 378, 379, 71, 56, 57, 58, 59, 60, 61, 125,
- 125, 125, 1, 125, 112, 4, 125, 305, 71, 307,
- 9, 125, 11, 12, 13, 104, 105, 106, 107, 108,
- 109, 319, 112, 112, 322, 122, 115, 122, 117, 28,
- 29, 30, 109, 455, 101, 34, 123, 71, 336, 337,
- 104, 105, 106, 107, 108, 109, 126, 4, 112, 428,
- 429, 349, 116, 117, 126, 126, 126, 126, 446, 4,
- 4, 126, 536, 112, 63, 64, 65, 66, 126, 108,
- 124, 124, 124, 112, 72, 74, 115, 116, 71, 78,
- 4, 80, 470, 104, 105, 106, 107, 108, 109, 477,
- 108, 112, 113, 114, 115, 116, 117, 4, 104, 105,
- 106, 107, 101, 109, 4, 104, 105, 106, 107, 108,
- 109, 117, 4, 112, 125, 4, 115, 116, 117, 71,
- 418, 71, 104, 105, 106, 107, 125, 109, 120, 125,
- 112, 125, 9, 431, 432, 117, 9, 108, 436, 527,
- 108, 108, 440, 21, 125, 125, 108, 124, 471, 447,
- 448, 125, 9, 451, 452, 9, 454, 100, 71, 122,
- 458, 122, 122, 21, 9, 21, 11, 12, 13, 21,
- 468, 469, 123, 104, 105, 106, 107, 4, 109, 4,
- 122, 112, 4, 28, 29, 30, 117, 21, 124, 34,
- 4, 35, 36, 37, 38, 39, 40, 41, 42, 126,
- 44, 45, 46, 47, 48, 126, 504, 505, 125, 507,
- 21, 125, 510, 21, 124, 513, 4, 515, 63, 64,
- 65, 66, 4, 126, 43, 126, 4, 4, 4, 74,
- 49, 50, 4, 78, 224, 80, 55, 56, 57, 58,
- 59, 60, 61, 12, 59, 344, 128, 188, 67, 68,
- 69, 70, 121, 446, 213, 504, 214, 273, 183, 104,
- 105, 106, 107, 108, 109, 273, 379, 112, 328, 248,
- 115, 116, 117, 304, 98, 181, 120, -1, 122, 123,
- 125, 104, 105, 106, 107, 108, 109, -1, -1, 112,
- 113, 114, 115, 116, 117, -1, -1, -1, -1, -1,
- 123, -1, 121, -1, 123, -1, -1, -1, -1, -1,
- 129, 130, 131, 132, 133, 134, 135, 136, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, -1,
- 97, 98, 99, 104, 105, 106, 107, -1, 109, -1,
- -1, 112, 113, 114, 115, -1, 117, 104, 105, 106,
- 107, -1, 109, -1, -1, 112, 113, 114, 115, -1,
+ 38, 64, 130, 217, 123, 335, 168, 7, 8, 336,
+ 230, 428, 17, 18, 19, 20, 4, 6, 10, 4,
+ 182, 4, 4, 4, 4, 71, 71, 15, 195, 14,
+ 112, 31, 28, 13, 239, 24, 71, 137, 138, 108,
+ 120, 30, 113, 29, 71, 125, 213, 116, 5, 29,
+ 7, 8, 29, 91, 112, 183, 51, 52, 53, 54,
+ 98, 275, 112, 113, 278, 279, 62, 108, 123, 71,
+ 71, 112, 72, 59, 31, 1, 176, 177, 4, 75,
+ 126, 126, 59, 9, 9, 11, 12, 13, 71, 71,
+ 71, 126, 84, 81, 79, 100, 224, 77, 318, 126,
+ 305, 321, 28, 29, 30, 432, 112, 96, 34, 228,
+ 110, 239, 101, 108, 103, 72, 4, 112, 118, 119,
+ 248, 110, 449, 540, 126, 126, 453, 13, 123, 118,
+ 119, 56, 57, 58, 59, 60, 61, 63, 64, 65,
+ 66, 0, 362, 181, 306, 365, 71, 16, 74, 4,
+ 6, 20, 78, 110, 80, 474, 108, 476, 71, 287,
+ 112, 118, 119, 115, 116, 76, 112, 112, 24, 115,
+ 115, 82, 83, 4, 30, 101, 304, 305, 104, 105,
+ 106, 107, 108, 109, 112, 112, 112, 115, 115, 115,
+ 116, 117, 124, 231, 232, 233, 324, 325, 4, 125,
+ 328, 124, 125, 423, 4, 425, 112, 124, 538, 108,
+ 112, 104, 105, 106, 107, 4, 109, 345, 104, 105,
+ 106, 107, 108, 109, 117, 103, 112, 113, 114, 115,
+ 116, 117, 270, 101, 272, 51, 52, 53, 54, 4,
+ 96, 127, 128, 129, 130, 101, 137, 103, 410, 122,
+ 113, 379, 380, 4, 110, 112, 4, 4, 6, 7,
+ 8, 112, 118, 119, 116, 125, 71, 305, 112, 307,
+ 9, 125, 11, 12, 13, 125, 24, 125, 26, 125,
+ 125, 319, 30, 125, 322, 112, 113, 114, 115, 28,
+ 29, 30, 112, 122, 456, 34, 122, 109, 336, 337,
+ 104, 105, 106, 107, 101, 109, 123, 71, 112, 4,
+ 429, 430, 350, 117, 4, 126, 126, 126, 126, 447,
+ 4, 124, 124, 537, 63, 64, 65, 66, 126, 112,
+ 126, 126, 124, 71, 13, 74, 72, 4, 108, 78,
+ 125, 80, 4, 471, 4, 4, 4, 71, 96, 13,
+ 478, 71, 120, 125, 102, 9, 125, 9, 108, 108,
+ 21, 124, 110, 108, 125, 104, 105, 106, 107, 108,
+ 109, 125, 125, 112, 108, 9, 115, 116, 117, 9,
+ 71, 419, 100, 21, 21, 122, 125, 122, 104, 105,
+ 106, 107, 122, 109, 432, 433, 112, 21, 123, 437,
+ 528, 117, 4, 441, 4, 122, 4, 21, 4, 472,
+ 448, 449, 124, 126, 452, 453, 126, 455, 125, 125,
+ 21, 459, 21, 124, 4, 104, 105, 106, 107, 4,
+ 109, 469, 470, 112, 113, 114, 115, 126, 117, 126,
+ 104, 105, 106, 107, 4, 109, 4, 4, 112, 113,
+ 114, 115, 4, 117, 59, 345, 12, 224, 104, 105,
+ 106, 107, 108, 109, 121, 188, 112, 505, 506, 115,
+ 508, 117, 128, 511, 43, 447, 514, 505, 516, 380,
+ 49, 50, 213, 273, 183, 214, 55, 56, 57, 58,
+ 59, 60, 61, 328, 273, 181, 248, 304, 67, 68,
+ 69, 70, 35, 36, 37, 38, 39, 40, 41, 42,
+ -1, 44, 45, 46, 47, 48, 104, 105, 106, 107,
+ 108, 109, 98, -1, 112, 113, 114, 115, 116, 117,
+ -1, -1, -1, -1, -1, 123, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, -1, 97, 98,
+ 99, -1, 121, -1, 123, -1, -1, -1, -1, -1,
+ 129, 130, 131, 132, 133, 134, 135, 136, 104, 105,
+ 106, 107, 108, 109, -1, -1, 112, 113, 114, 115,
+ 116, 117, -1, 104, 105, 106, 107, 120, 109, 122,
+ 123, 112, 113, 114, 115, -1, 117, 104, 105, 106,
+ 107, 108, 109, -1, -1, 112, -1, -1, 115, 116,
117, 104, 105, 106, 107, -1, 109, -1, -1, 112,
113, 114, 115, -1, 117, 104, 105, 106, 107, -1,
109, -1, -1, 112, 113, 114, 115, -1, 117, 104,
105, 106, 107, -1, 109, -1, -1, 112, 113, 114,
115, -1, 117, 104, 105, 106, 107, -1, 109, -1,
- -1, 112, -1, -1, -1, -1, 117
+ -1, 112, 113, 114, 115, -1, 117, 104, 105, 106,
+ 107, -1, 109, -1, -1, 112, -1, -1, -1, -1,
+ 117
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -2350,28 +2357,28 @@
45, 46, 47, 48, 120, 122, 123, 231, 194, 255,
9, 56, 57, 58, 59, 60, 61, 71, 245, 246,
255, 245, 246, 222, 71, 71, 222, 222, 125, 182,
- 197, 199, 112, 240, 241, 247, 205, 125, 112, 247,
- 252, 13, 112, 115, 116, 127, 128, 129, 130, 226,
- 234, 247, 255, 256, 255, 17, 18, 19, 20, 100,
- 195, 9, 253, 255, 9, 253, 255, 108, 215, 216,
- 247, 247, 108, 108, 241, 189, 200, 201, 21, 71,
- 126, 194, 112, 207, 237, 255, 112, 236, 237, 255,
- 157, 108, 223, 255, 43, 49, 50, 55, 56, 57,
- 58, 59, 60, 61, 67, 68, 69, 70, 121, 123,
- 129, 130, 131, 132, 133, 134, 135, 136, 227, 124,
- 125, 253, 9, 253, 9, 100, 217, 71, 122, 122,
- 126, 10, 84, 184, 190, 4, 14, 79, 202, 4,
- 15, 81, 203, 247, 112, 240, 122, 21, 71, 126,
- 238, 21, 71, 126, 21, 123, 256, 255, 122, 112,
- 115, 253, 253, 216, 263, 263, 237, 255, 76, 82,
- 83, 188, 4, 255, 4, 255, 4, 21, 233, 255,
- 112, 237, 16, 20, 239, 255, 112, 237, 255, 256,
- 124, 255, 126, 126, 4, 255, 255, 112, 247, 183,
- 213, 238, 238, 247, 125, 21, 125, 21, 124, 4,
- 71, 4, 4, 71, 4, 71, 191, 4, 236, 255,
- 112, 115, 255, 255, 255, 255, 28, 62, 75, 192,
- 126, 126, 126, 4, 4, 4, 193, 247, 4, 222,
- 194, 216
+ 197, 199, 112, 240, 241, 247, 205, 125, 112, 115,
+ 247, 252, 13, 112, 115, 116, 127, 128, 129, 130,
+ 226, 234, 247, 255, 256, 255, 17, 18, 19, 20,
+ 100, 195, 9, 253, 255, 9, 253, 255, 108, 215,
+ 216, 247, 247, 108, 108, 241, 189, 200, 201, 21,
+ 71, 126, 194, 112, 207, 237, 255, 112, 236, 237,
+ 255, 157, 108, 223, 255, 43, 49, 50, 55, 56,
+ 57, 58, 59, 60, 61, 67, 68, 69, 70, 121,
+ 123, 129, 130, 131, 132, 133, 134, 135, 136, 227,
+ 124, 125, 253, 9, 253, 9, 100, 217, 71, 122,
+ 122, 126, 10, 84, 184, 190, 4, 14, 79, 202,
+ 4, 15, 81, 203, 247, 112, 240, 122, 21, 71,
+ 126, 238, 21, 71, 126, 21, 123, 256, 255, 122,
+ 112, 115, 253, 253, 216, 263, 263, 237, 255, 76,
+ 82, 83, 188, 4, 255, 4, 255, 4, 21, 233,
+ 255, 112, 237, 16, 20, 239, 255, 112, 237, 255,
+ 256, 124, 255, 126, 126, 4, 255, 255, 112, 247,
+ 183, 213, 238, 238, 247, 125, 21, 125, 21, 124,
+ 4, 71, 4, 4, 71, 4, 71, 191, 4, 236,
+ 255, 112, 115, 255, 255, 255, 255, 28, 62, 75,
+ 192, 126, 126, 126, 4, 4, 4, 193, 247, 4,
+ 222, 194, 216
};
#define yyerrok (yyerrstatus = 0)
@@ -3199,22 +3206,22 @@
switch (yyn)
{
case 2:
-#line 1125 "compilers/imcc/imcc.y"
+#line 1130 "compilers/imcc/imcc.y"
{ if (yynerrs) YYABORT; (yyval.i) = 0; }
break;
case 5:
-#line 1134 "compilers/imcc/imcc.y"
+#line 1139 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
case 6:
-#line 1135 "compilers/imcc/imcc.y"
+#line 1140 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
case 7:
-#line 1137 "compilers/imcc/imcc.y"
+#line 1142 "compilers/imcc/imcc.y"
{
(yyval.i) = (yyvsp[(1) - (1)].i);
imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3223,7 +3230,7 @@
break;
case 8:
-#line 1143 "compilers/imcc/imcc.y"
+#line 1148 "compilers/imcc/imcc.y"
{
(yyval.i) = (yyvsp[(1) - (1)].i);
imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3232,32 +3239,32 @@
break;
case 9:
-#line 1148 "compilers/imcc/imcc.y"
+#line 1153 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 10:
-#line 1149 "compilers/imcc/imcc.y"
+#line 1154 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 11:
-#line 1150 "compilers/imcc/imcc.y"
+#line 1155 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 12:
-#line 1151 "compilers/imcc/imcc.y"
+#line 1156 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 13:
-#line 1155 "compilers/imcc/imcc.y"
+#line 1160 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 14:
-#line 1157 "compilers/imcc/imcc.y"
+#line 1162 "compilers/imcc/imcc.y"
{
(yyval.i) = 0;
do_loadlib(interp, (yyvsp[(2) - (3)].s));
@@ -3266,22 +3273,24 @@
break;
case 15:
-#line 1166 "compilers/imcc/imcc.y"
+#line 1171 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s));
+ /* set_filename() frees the STRINGC */
set_filename(interp, (yyvsp[(4) - (5)].s));
}
break;
case 16:
-#line 1171 "compilers/imcc/imcc.y"
+#line 1177 "compilers/imcc/imcc.y"
{
+ /* set_filename() frees the STRINGC */
set_filename(interp, (yyvsp[(2) - (3)].s));
}
break;
case 17:
-#line 1178 "compilers/imcc/imcc.y"
+#line 1185 "compilers/imcc/imcc.y"
{
/* We'll want to store an entry while emitting instructions, so just
* store annotation like it's an instruction. */
@@ -3292,24 +3301,25 @@
break;
case 18:
-#line 1190 "compilers/imcc/imcc.y"
+#line 1197 "compilers/imcc/imcc.y"
{
STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL);
CONTEXT(interp)->current_HLL =
Parrot_register_HLL(interp, hll_name);
IMCC_INFO(interp)->cur_namespace = NULL;
+ mem_sys_free((yyvsp[(2) - (2)].s));
(yyval.t) = 0;
}
break;
case 19:
-#line 1201 "compilers/imcc/imcc.y"
+#line 1209 "compilers/imcc/imcc.y"
{ pesky_global__is_def = 1; }
break;
case 20:
-#line 1202 "compilers/imcc/imcc.y"
+#line 1210 "compilers/imcc/imcc.y"
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
mem_sys_free((yyvsp[(4) - (6)].s));
@@ -3318,63 +3328,66 @@
break;
case 21:
-#line 1210 "compilers/imcc/imcc.y"
+#line 1218 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 22:
-#line 1211 "compilers/imcc/imcc.y"
+#line 1219 "compilers/imcc/imcc.y"
{
(yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
+ mem_sys_free((yyvsp[(6) - (6)].s));
pesky_global__is_def = 0;
}
break;
case 23:
-#line 1216 "compilers/imcc/imcc.y"
+#line 1225 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 24:
-#line 1217 "compilers/imcc/imcc.y"
+#line 1226 "compilers/imcc/imcc.y"
{
(yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s));
+ mem_sys_free((yyvsp[(3) - (6)].s));
+ mem_sys_free((yyvsp[(6) - (6)].s));
pesky_global__is_def = 0;
}
break;
case 29:
-#line 1233 "compilers/imcc/imcc.y"
+#line 1244 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 30:
-#line 1234 "compilers/imcc/imcc.y"
+#line 1245 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 31:
-#line 1235 "compilers/imcc/imcc.y"
+#line 1246 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 32:
-#line 1236 "compilers/imcc/imcc.y"
+#line 1247 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 33:
-#line 1237 "compilers/imcc/imcc.y"
+#line 1248 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
case 36:
-#line 1242 "compilers/imcc/imcc.y"
+#line 1253 "compilers/imcc/imcc.y"
{ clear_state(interp); }
break;
case 37:
-#line 1244 "compilers/imcc/imcc.y"
+#line 1255 "compilers/imcc/imcc.y"
{
(yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit,
(yyvsp[(2) - (3)].s), 0, IMCC_INFO(interp)->regs,
@@ -3384,7 +3397,7 @@
break;
case 38:
-#line 1251 "compilers/imcc/imcc.y"
+#line 1262 "compilers/imcc/imcc.y"
{
imc_close_unit(interp, IMCC_INFO(interp)->cur_unit);
IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM);
@@ -3392,7 +3405,7 @@
break;
case 39:
-#line 1256 "compilers/imcc/imcc.y"
+#line 1267 "compilers/imcc/imcc.y"
{
(yyval.i) = iSUBROUTINE(interp,
IMCC_INFO(interp)->cur_unit,
@@ -3402,14 +3415,14 @@
break;
case 40:
-#line 1263 "compilers/imcc/imcc.y"
+#line 1274 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr));
}
break;
case 41:
-#line 1267 "compilers/imcc/imcc.y"
+#line 1278 "compilers/imcc/imcc.y"
{
SymReg *r = mk_pasm_reg(interp, (yyvsp[(4) - (4)].s));
SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
@@ -3421,17 +3434,17 @@
break;
case 42:
-#line 1275 "compilers/imcc/imcc.y"
+#line 1286 "compilers/imcc/imcc.y"
{ (yyval.i) = 0;}
break;
case 44:
-#line 1283 "compilers/imcc/imcc.y"
+#line 1294 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); }
break;
case 45:
-#line 1286 "compilers/imcc/imcc.y"
+#line 1297 "compilers/imcc/imcc.y"
{
/* if (optimizer_level & OPT_PASM)
imc_compile_unit(interp, IMCC_INFO(interp)->cur_unit);
@@ -3442,7 +3455,7 @@
break;
case 48:
-#line 1302 "compilers/imcc/imcc.y"
+#line 1313 "compilers/imcc/imcc.y"
{
int re_open = 0;
(yyval.i) = 0;
@@ -3457,7 +3470,7 @@
break;
case 49:
-#line 1317 "compilers/imcc/imcc.y"
+#line 1328 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->in_slice)
IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3468,26 +3481,26 @@
break;
case 50:
-#line 1324 "compilers/imcc/imcc.y"
+#line 1335 "compilers/imcc/imcc.y"
{ (yyval.sr) = NULL; }
break;
case 51:
-#line 1329 "compilers/imcc/imcc.y"
+#line 1340 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB);
}
break;
case 52:
-#line 1333 "compilers/imcc/imcc.y"
+#line 1344 "compilers/imcc/imcc.y"
{
iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr));
}
break;
case 53:
-#line 1337 "compilers/imcc/imcc.y"
+#line 1348 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t);
if (!IMCC_INFO(interp)->cur_unit->instructions->symregs[0]->subid) {
@@ -3498,22 +3511,22 @@
break;
case 54:
-#line 1345 "compilers/imcc/imcc.y"
+#line 1356 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
break;
case 55:
-#line 1349 "compilers/imcc/imcc.y"
+#line 1360 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 56:
-#line 1350 "compilers/imcc/imcc.y"
+#line 1361 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 57:
-#line 1352 "compilers/imcc/imcc.y"
+#line 1363 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->adv_named_id) {
add_pcc_named_param(interp, IMCC_INFO(interp)->cur_call,
@@ -3526,17 +3539,17 @@
break;
case 58:
-#line 1364 "compilers/imcc/imcc.y"
+#line 1375 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 59:
-#line 1364 "compilers/imcc/imcc.y"
+#line 1375 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(3) - (3)].sr); pesky_global__is_def=0; }
break;
case 60:
-#line 1369 "compilers/imcc/imcc.y"
+#line 1380 "compilers/imcc/imcc.y"
{
if ((yyvsp[(3) - (3)].t) & VT_UNIQUE_REG)
(yyval.sr) = mk_ident_ur(interp, (yyvsp[(2) - (3)].s), (yyvsp[(1) - (3)].t));
@@ -3548,12 +3561,12 @@
break;
case 61:
-#line 1382 "compilers/imcc/imcc.y"
+#line 1393 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 62:
-#line 1387 "compilers/imcc/imcc.y"
+#line 1398 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->outer = mk_sub_address_fromc(interp, (yyvsp[(3) - (4)].s));
@@ -3562,7 +3575,7 @@
break;
case 63:
-#line 1393 "compilers/imcc/imcc.y"
+#line 1404 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->outer = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3571,52 +3584,52 @@
break;
case 64:
-#line 1402 "compilers/imcc/imcc.y"
+#line 1413 "compilers/imcc/imcc.y"
{
(yyval.t) = P_VTABLE;
- IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
+ IMCC_INFO(interp)->cur_unit->vtable_name = NULL;
IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
}
break;
case 65:
-#line 1408 "compilers/imcc/imcc.y"
+#line 1419 "compilers/imcc/imcc.y"
{
(yyval.t) = P_VTABLE;
- IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
+ IMCC_INFO(interp)->cur_unit->vtable_name = (yyvsp[(3) - (4)].s);
IMCC_INFO(interp)->cur_unit->is_vtable_method = 1;
}
break;
case 66:
-#line 1417 "compilers/imcc/imcc.y"
+#line 1428 "compilers/imcc/imcc.y"
{
(yyval.t) = P_METHOD;
IMCC_INFO(interp)->cur_unit->method_name = NULL;
- IMCC_INFO(interp)->cur_unit->is_method = 1;
+ IMCC_INFO(interp)->cur_unit->is_method = 1;
}
break;
case 67:
-#line 1423 "compilers/imcc/imcc.y"
+#line 1434 "compilers/imcc/imcc.y"
{
(yyval.t) = P_METHOD;
IMCC_INFO(interp)->cur_unit->method_name = (yyvsp[(3) - (4)].s);
- IMCC_INFO(interp)->cur_unit->is_method = 1;
+ IMCC_INFO(interp)->cur_unit->is_method = 1;
}
break;
case 68:
-#line 1432 "compilers/imcc/imcc.y"
+#line 1443 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
- IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
+ IMCC_INFO(interp)->cur_unit->ns_entry_name = NULL;
IMCC_INFO(interp)->cur_unit->has_ns_entry_name = 1;
}
break;
case 69:
-#line 1438 "compilers/imcc/imcc.y"
+#line 1449 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->ns_entry_name = (yyvsp[(3) - (4)].s);
@@ -3625,7 +3638,7 @@
break;
case 70:
-#line 1447 "compilers/imcc/imcc.y"
+#line 1458 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->instance_of = (yyvsp[(3) - (4)].s);
@@ -3633,7 +3646,7 @@
break;
case 71:
-#line 1455 "compilers/imcc/imcc.y"
+#line 1466 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->subid = NULL;
@@ -3641,7 +3654,7 @@
break;
case 72:
-#line 1460 "compilers/imcc/imcc.y"
+#line 1471 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
IMCC_INFO(interp)->cur_unit->subid = mk_const(interp, (yyvsp[(3) - (4)].s), 'S');
@@ -3651,14 +3664,14 @@
break;
case 73:
-#line 1470 "compilers/imcc/imcc.y"
+#line 1481 "compilers/imcc/imcc.y"
{
add_pcc_multi(IMCC_INFO(interp)->cur_call, NULL);
}
break;
case 74:
-#line 1474 "compilers/imcc/imcc.y"
+#line 1485 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(3) - (3)].sr));
@@ -3666,7 +3679,7 @@
break;
case 75:
-#line 1479 "compilers/imcc/imcc.y"
+#line 1490 "compilers/imcc/imcc.y"
{
(yyval.t) = 0;
add_pcc_multi(IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (1)].sr));
@@ -3674,27 +3687,27 @@
break;
case 76:
-#line 1486 "compilers/imcc/imcc.y"
+#line 1497 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "INTVAL", 'S'); }
break;
case 77:
-#line 1487 "compilers/imcc/imcc.y"
+#line 1498 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); }
break;
case 78:
-#line 1488 "compilers/imcc/imcc.y"
+#line 1499 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "PMC", 'S'); }
break;
case 79:
-#line 1489 "compilers/imcc/imcc.y"
+#line 1500 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, "STRING", 'S'); }
break;
case 80:
-#line 1491 "compilers/imcc/imcc.y"
+#line 1502 "compilers/imcc/imcc.y"
{
SymReg *r;
if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3708,7 +3721,7 @@
break;
case 81:
-#line 1502 "compilers/imcc/imcc.y"
+#line 1513 "compilers/imcc/imcc.y"
{
SymReg *r;
if (strcmp((yyvsp[(1) - (1)].s), "_") != 0)
@@ -3722,12 +3735,12 @@
break;
case 82:
-#line 1512 "compilers/imcc/imcc.y"
+#line 1523 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); }
break;
case 85:
-#line 1522 "compilers/imcc/imcc.y"
+#line 1533 "compilers/imcc/imcc.y"
{
char name[128];
SymReg *r, *r1;
@@ -3754,82 +3767,82 @@
break;
case 86:
-#line 1550 "compilers/imcc/imcc.y"
+#line 1561 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
break;
case 87:
-#line 1554 "compilers/imcc/imcc.y"
+#line 1565 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; }
break;
case 88:
-#line 1555 "compilers/imcc/imcc.y"
+#line 1566 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; }
break;
case 89:
-#line 1559 "compilers/imcc/imcc.y"
+#line 1570 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; }
break;
case 90:
-#line 1560 "compilers/imcc/imcc.y"
+#line 1571 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); }
break;
case 91:
-#line 1564 "compilers/imcc/imcc.y"
+#line 1575 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 93:
-#line 1569 "compilers/imcc/imcc.y"
+#line 1580 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (1)].t); }
break;
case 94:
-#line 1570 "compilers/imcc/imcc.y"
+#line 1581 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
break;
case 95:
-#line 1574 "compilers/imcc/imcc.y"
+#line 1585 "compilers/imcc/imcc.y"
{ (yyval.t) = P_LOAD; }
break;
case 96:
-#line 1575 "compilers/imcc/imcc.y"
+#line 1586 "compilers/imcc/imcc.y"
{ (yyval.t) = P_INIT; }
break;
case 97:
-#line 1576 "compilers/imcc/imcc.y"
+#line 1587 "compilers/imcc/imcc.y"
{ (yyval.t) = P_MAIN; }
break;
case 98:
-#line 1577 "compilers/imcc/imcc.y"
+#line 1588 "compilers/imcc/imcc.y"
{ (yyval.t) = P_IMMEDIATE; }
break;
case 99:
-#line 1578 "compilers/imcc/imcc.y"
+#line 1589 "compilers/imcc/imcc.y"
{ (yyval.t) = P_POSTCOMP; }
break;
case 100:
-#line 1579 "compilers/imcc/imcc.y"
+#line 1590 "compilers/imcc/imcc.y"
{ (yyval.t) = P_ANON; }
break;
case 101:
-#line 1580 "compilers/imcc/imcc.y"
+#line 1591 "compilers/imcc/imcc.y"
{ (yyval.t) = P_NEED_LEX; }
break;
case 109:
-#line 1592 "compilers/imcc/imcc.y"
+#line 1603 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3837,14 +3850,14 @@
break;
case 110:
-#line 1597 "compilers/imcc/imcc.y"
+#line 1608 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
}
break;
case 111:
-#line 1601 "compilers/imcc/imcc.y"
+#line 1612 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isNCI;
@@ -3852,21 +3865,21 @@
break;
case 112:
-#line 1606 "compilers/imcc/imcc.y"
+#line 1617 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
}
break;
case 113:
-#line 1610 "compilers/imcc/imcc.y"
+#line 1621 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S'));
}
break;
case 114:
-#line 1614 "compilers/imcc/imcc.y"
+#line 1625 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr));
add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3874,7 +3887,7 @@
break;
case 115:
-#line 1619 "compilers/imcc/imcc.y"
+#line 1630 "compilers/imcc/imcc.y"
{
add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S'));
add_pcc_cc(IMCC_INFO(interp)->cur_call, (yyvsp[(4) - (5)].sr));
@@ -3882,27 +3895,27 @@
break;
case 116:
-#line 1627 "compilers/imcc/imcc.y"
+#line 1638 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 117:
-#line 1628 "compilers/imcc/imcc.y"
+#line 1639 "compilers/imcc/imcc.y"
{ add_pcc_arg(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); }
break;
case 118:
-#line 1632 "compilers/imcc/imcc.y"
+#line 1643 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (2)].sr); }
break;
case 119:
-#line 1637 "compilers/imcc/imcc.y"
+#line 1648 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 120:
-#line 1639 "compilers/imcc/imcc.y"
+#line 1650 "compilers/imcc/imcc.y"
{
if ((yyvsp[(2) - (3)].sr))
add_pcc_result(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr));
@@ -3910,17 +3923,17 @@
break;
case 121:
-#line 1646 "compilers/imcc/imcc.y"
+#line 1657 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
break;
case 122:
-#line 1647 "compilers/imcc/imcc.y"
+#line 1658 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 123:
-#line 1648 "compilers/imcc/imcc.y"
+#line 1659 "compilers/imcc/imcc.y"
{
IdList *l = (yyvsp[(4) - (4)].idlist);
SymReg *ignored;
@@ -3935,62 +3948,62 @@
break;
case 124:
-#line 1662 "compilers/imcc/imcc.y"
+#line 1673 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 125:
-#line 1663 "compilers/imcc/imcc.y"
+#line 1674 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
break;
case 126:
-#line 1667 "compilers/imcc/imcc.y"
+#line 1678 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_FLAT; }
break;
case 127:
-#line 1668 "compilers/imcc/imcc.y"
+#line 1679 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_OPTIONAL; }
break;
case 128:
-#line 1669 "compilers/imcc/imcc.y"
+#line 1680 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_OPT_FLAG; }
break;
case 129:
-#line 1670 "compilers/imcc/imcc.y"
+#line 1681 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_NAMED; }
break;
case 130:
-#line 1671 "compilers/imcc/imcc.y"
+#line 1682 "compilers/imcc/imcc.y"
{ adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
break;
case 131:
-#line 1672 "compilers/imcc/imcc.y"
+#line 1683 "compilers/imcc/imcc.y"
{ adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
break;
case 132:
-#line 1673 "compilers/imcc/imcc.y"
+#line 1684 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_UNIQUE_REG; }
break;
case 133:
-#line 1678 "compilers/imcc/imcc.y"
+#line 1689 "compilers/imcc/imcc.y"
{ begin_return_or_yield(interp, 0); }
break;
case 134:
-#line 1680 "compilers/imcc/imcc.y"
+#line 1691 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
break;
case 135:
-#line 1682 "compilers/imcc/imcc.y"
+#line 1693 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->asm_state = AsmDefault;
(yyval.i) = 0;
@@ -3998,22 +4011,22 @@
break;
case 136:
-#line 1689 "compilers/imcc/imcc.y"
+#line 1700 "compilers/imcc/imcc.y"
{ begin_return_or_yield(interp, 1); }
break;
case 137:
-#line 1691 "compilers/imcc/imcc.y"
+#line 1702 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; }
break;
case 138:
-#line 1695 "compilers/imcc/imcc.y"
+#line 1706 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 139:
-#line 1697 "compilers/imcc/imcc.y"
+#line 1708 "compilers/imcc/imcc.y"
{
if ((yyvsp[(1) - (2)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4021,7 +4034,7 @@
break;
case 140:
-#line 1702 "compilers/imcc/imcc.y"
+#line 1713 "compilers/imcc/imcc.y"
{
if ((yyvsp[(2) - (3)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4029,12 +4042,12 @@
break;
case 141:
-#line 1709 "compilers/imcc/imcc.y"
+#line 1720 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
case 142:
-#line 1711 "compilers/imcc/imcc.y"
+#line 1722 "compilers/imcc/imcc.y"
{
if ((yyvsp[(1) - (2)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(1) - (2)].sr));
@@ -4042,7 +4055,7 @@
break;
case 143:
-#line 1716 "compilers/imcc/imcc.y"
+#line 1727 "compilers/imcc/imcc.y"
{
if ((yyvsp[(2) - (3)].sr))
add_pcc_result(IMCC_INFO(interp)->sr_return, (yyvsp[(2) - (3)].sr));
@@ -4050,17 +4063,17 @@
break;
case 144:
-#line 1723 "compilers/imcc/imcc.y"
+#line 1734 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
break;
case 145:
-#line 1727 "compilers/imcc/imcc.y"
+#line 1738 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); }
break;
case 146:
-#line 1732 "compilers/imcc/imcc.y"
+#line 1743 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->asm_state == AsmDefault)
begin_return_or_yield(interp, (yyvsp[(1) - (2)].t));
@@ -4068,7 +4081,7 @@
break;
case 147:
-#line 1737 "compilers/imcc/imcc.y"
+#line 1748 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->asm_state = AsmDefault;
(yyval.t) = 0;
@@ -4076,22 +4089,22 @@
break;
case 148:
-#line 1744 "compilers/imcc/imcc.y"
+#line 1755 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 149:
-#line 1745 "compilers/imcc/imcc.y"
+#line 1756 "compilers/imcc/imcc.y"
{ (yyval.t) = 1; }
break;
case 150:
-#line 1749 "compilers/imcc/imcc.y"
+#line 1760 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 151:
-#line 1751 "compilers/imcc/imcc.y"
+#line 1762 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->adv_named_id) {
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4104,7 +4117,7 @@
break;
case 152:
-#line 1761 "compilers/imcc/imcc.y"
+#line 1772 "compilers/imcc/imcc.y"
{
SymReg *name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S');
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(3) - (3)].sr));
@@ -4112,7 +4125,7 @@
break;
case 153:
-#line 1766 "compilers/imcc/imcc.y"
+#line 1777 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->adv_named_id) {
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return,
@@ -4125,7 +4138,7 @@
break;
case 154:
-#line 1776 "compilers/imcc/imcc.y"
+#line 1787 "compilers/imcc/imcc.y"
{
SymReg *name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S');
add_pcc_named_return(interp, IMCC_INFO(interp)->sr_return, name, (yyvsp[(5) - (5)].sr));
@@ -4133,59 +4146,59 @@
break;
case 157:
-#line 1797 "compilers/imcc/imcc.y"
+#line 1808 "compilers/imcc/imcc.y"
{ clear_state(interp); }
break;
case 158:
-#line 1802 "compilers/imcc/imcc.y"
+#line 1813 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(2) - (2)].i); }
break;
case 159:
-#line 1803 "compilers/imcc/imcc.y"
+#line 1814 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 160:
-#line 1804 "compilers/imcc/imcc.y"
+#line 1815 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 161:
-#line 1805 "compilers/imcc/imcc.y"
+#line 1816 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 162:
-#line 1806 "compilers/imcc/imcc.y"
+#line 1817 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 163:
-#line 1807 "compilers/imcc/imcc.y"
+#line 1818 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
case 164:
-#line 1811 "compilers/imcc/imcc.y"
+#line 1822 "compilers/imcc/imcc.y"
{ (yyval.i) = NULL; }
break;
case 168:
-#line 1822 "compilers/imcc/imcc.y"
+#line 1833 "compilers/imcc/imcc.y"
{
(yyval.i) = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s)));
}
break;
case 169:
-#line 1830 "compilers/imcc/imcc.y"
+#line 1841 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(2) - (3)].i); }
break;
case 170:
-#line 1832 "compilers/imcc/imcc.y"
+#line 1843 "compilers/imcc/imcc.y"
{
if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) {
IMCC_warning(interp, "Too many errors. Correct some first.\n");
@@ -4196,7 +4209,7 @@
break;
case 171:
-#line 1843 "compilers/imcc/imcc.y"
+#line 1854 "compilers/imcc/imcc.y"
{
IdList* l = (yyvsp[(1) - (1)].idlist);
l->next = NULL;
@@ -4205,7 +4218,7 @@
break;
case 172:
-#line 1850 "compilers/imcc/imcc.y"
+#line 1861 "compilers/imcc/imcc.y"
{
IdList* l = (yyvsp[(3) - (3)].idlist);
l->next = (yyvsp[(1) - (3)].idlist);
@@ -4214,7 +4227,7 @@
break;
case 173:
-#line 1859 "compilers/imcc/imcc.y"
+#line 1870 "compilers/imcc/imcc.y"
{
IdList* const l = mem_allocate_n_zeroed_typed(1, IdList);
l->id = (yyvsp[(1) - (2)].s);
@@ -4224,22 +4237,22 @@
break;
case 174:
-#line 1868 "compilers/imcc/imcc.y"
+#line 1879 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
case 175:
-#line 1869 "compilers/imcc/imcc.y"
+#line 1880 "compilers/imcc/imcc.y"
{ (yyval.t) = 1; }
break;
case 178:
-#line 1876 "compilers/imcc/imcc.y"
+#line 1887 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 179:
-#line 1877 "compilers/imcc/imcc.y"
+#line 1888 "compilers/imcc/imcc.y"
{
IdList *l = (yyvsp[(4) - (4)].idlist);
while (l) {
@@ -4258,7 +4271,7 @@
break;
case 180:
-#line 1893 "compilers/imcc/imcc.y"
+#line 1904 "compilers/imcc/imcc.y"
{
SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'S');
set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
@@ -4266,7 +4279,7 @@
break;
case 181:
-#line 1898 "compilers/imcc/imcc.y"
+#line 1909 "compilers/imcc/imcc.y"
{
SymReg *n = mk_const(interp, (yyvsp[(2) - (4)].s), 'U');
set_lexical(interp, (yyvsp[(4) - (4)].sr), n); (yyval.i) = 0;
@@ -4274,12 +4287,12 @@
break;
case 182:
-#line 1902 "compilers/imcc/imcc.y"
+#line 1913 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 183:
-#line 1903 "compilers/imcc/imcc.y"
+#line 1914 "compilers/imcc/imcc.y"
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0);
pesky_global__is_def=0;
@@ -4288,12 +4301,12 @@
break;
case 185:
-#line 1910 "compilers/imcc/imcc.y"
+#line 1921 "compilers/imcc/imcc.y"
{ pesky_global__is_def=1; }
break;
case 186:
-#line 1911 "compilers/imcc/imcc.y"
+#line 1922 "compilers/imcc/imcc.y"
{
mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1);
pesky_global__is_def=0;
@@ -4302,7 +4315,7 @@
break;
case 187:
-#line 1917 "compilers/imcc/imcc.y"
+#line 1928 "compilers/imcc/imcc.y"
{
(yyval.i) = NULL;
IMCC_INFO(interp)->cur_call->pcc_sub->flags |= isTAIL_CALL;
@@ -4311,14 +4324,14 @@
break;
case 188:
-#line 1923 "compilers/imcc/imcc.y"
+#line 1934 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr));
}
break;
case 189:
-#line 1927 "compilers/imcc/imcc.y"
+#line 1938 "compilers/imcc/imcc.y"
{
(yyval.i) = INS(interp,
IMCC_INFO(interp)->cur_unit,
@@ -4333,47 +4346,47 @@
break;
case 190:
-#line 1938 "compilers/imcc/imcc.y"
+#line 1949 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); }
break;
case 191:
-#line 1939 "compilers/imcc/imcc.y"
+#line 1950 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; }
break;
case 192:
-#line 1940 "compilers/imcc/imcc.y"
+#line 1951 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 195:
-#line 1943 "compilers/imcc/imcc.y"
+#line 1954 "compilers/imcc/imcc.y"
{ (yyval.i) = 0;}
break;
case 196:
-#line 1947 "compilers/imcc/imcc.y"
+#line 1958 "compilers/imcc/imcc.y"
{ (yyval.t) = 'I'; }
break;
case 197:
-#line 1948 "compilers/imcc/imcc.y"
+#line 1959 "compilers/imcc/imcc.y"
{ (yyval.t) = 'N'; }
break;
case 198:
-#line 1949 "compilers/imcc/imcc.y"
+#line 1960 "compilers/imcc/imcc.y"
{ (yyval.t) = 'S'; }
break;
case 199:
-#line 1950 "compilers/imcc/imcc.y"
+#line 1961 "compilers/imcc/imcc.y"
{ (yyval.t) = 'P'; }
break;
case 200:
-#line 1955 "compilers/imcc/imcc.y"
+#line 1966 "compilers/imcc/imcc.y"
{
/* there'd normally be a str_dup() here, but the lexer already
* copied the string, so it's safe to use directly */
@@ -4386,37 +4399,37 @@
break;
case 201:
-#line 1968 "compilers/imcc/imcc.y"
+#line 1979 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); }
break;
case 202:
-#line 1970 "compilers/imcc/imcc.y"
+#line 1981 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr)); }
break;
case 203:
-#line 1972 "compilers/imcc/imcc.y"
+#line 1983 "compilers/imcc/imcc.y"
{ (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); }
break;
case 204:
-#line 1974 "compilers/imcc/imcc.y"
+#line 1985 "compilers/imcc/imcc.y"
{ (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); }
break;
case 205:
-#line 1976 "compilers/imcc/imcc.y"
+#line 1987 "compilers/imcc/imcc.y"
{ (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); }
break;
case 206:
-#line 1981 "compilers/imcc/imcc.y"
+#line 1992 "compilers/imcc/imcc.y"
{ (yyval.i) = iNEW(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (7)].sr), (yyvsp[(4) - (7)].s), (yyvsp[(6) - (7)].sr), 1); }
break;
case 207:
-#line 1984 "compilers/imcc/imcc.y"
+#line 1995 "compilers/imcc/imcc.y"
{
add_pcc_result((yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr));
IMCC_INFO(interp)->cur_call = NULL;
@@ -4425,14 +4438,14 @@
break;
case 208:
-#line 1990 "compilers/imcc/imcc.y"
+#line 2001 "compilers/imcc/imcc.y"
{
(yyval.i) = IMCC_create_itcall_label(interp);
}
break;
case 209:
-#line 1994 "compilers/imcc/imcc.y"
+#line 2005 "compilers/imcc/imcc.y"
{
IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr));
IMCC_INFO(interp)->cur_call = NULL;
@@ -4440,144 +4453,144 @@
break;
case 213:
-#line 2002 "compilers/imcc/imcc.y"
+#line 2013 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr));
}
break;
case 214:
-#line 2009 "compilers/imcc/imcc.y"
+#line 2020 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"not"; }
break;
case 215:
-#line 2010 "compilers/imcc/imcc.y"
+#line 2021 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bnot"; }
break;
case 216:
-#line 2011 "compilers/imcc/imcc.y"
+#line 2022 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"neg"; }
break;
case 217:
-#line 2015 "compilers/imcc/imcc.y"
+#line 2026 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"sub"; }
break;
case 218:
-#line 2016 "compilers/imcc/imcc.y"
+#line 2027 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"add"; }
break;
case 219:
-#line 2017 "compilers/imcc/imcc.y"
+#line 2028 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mul"; }
break;
case 220:
-#line 2018 "compilers/imcc/imcc.y"
+#line 2029 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"div"; }
break;
case 221:
-#line 2019 "compilers/imcc/imcc.y"
+#line 2030 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mod"; }
break;
case 222:
-#line 2020 "compilers/imcc/imcc.y"
+#line 2031 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"fdiv"; }
break;
case 223:
-#line 2021 "compilers/imcc/imcc.y"
+#line 2032 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"pow"; }
break;
case 224:
-#line 2022 "compilers/imcc/imcc.y"
+#line 2033 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"concat"; }
break;
case 225:
-#line 2023 "compilers/imcc/imcc.y"
+#line 2034 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"iseq"; }
break;
case 226:
-#line 2024 "compilers/imcc/imcc.y"
+#line 2035 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isne"; }
break;
case 227:
-#line 2025 "compilers/imcc/imcc.y"
+#line 2036 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isgt"; }
break;
case 228:
-#line 2026 "compilers/imcc/imcc.y"
+#line 2037 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isge"; }
break;
case 229:
-#line 2027 "compilers/imcc/imcc.y"
+#line 2038 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"islt"; }
break;
case 230:
-#line 2028 "compilers/imcc/imcc.y"
+#line 2039 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"isle"; }
break;
case 231:
-#line 2029 "compilers/imcc/imcc.y"
+#line 2040 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shl"; }
break;
case 232:
-#line 2030 "compilers/imcc/imcc.y"
+#line 2041 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shr"; }
break;
case 233:
-#line 2031 "compilers/imcc/imcc.y"
+#line 2042 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"lsr"; }
break;
case 234:
-#line 2032 "compilers/imcc/imcc.y"
+#line 2043 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"and"; }
break;
case 235:
-#line 2033 "compilers/imcc/imcc.y"
+#line 2044 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"or"; }
break;
case 236:
-#line 2034 "compilers/imcc/imcc.y"
+#line 2045 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"xor"; }
break;
case 237:
-#line 2035 "compilers/imcc/imcc.y"
+#line 2046 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"band"; }
break;
case 238:
-#line 2036 "compilers/imcc/imcc.y"
+#line 2047 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bor"; }
break;
case 239:
-#line 2037 "compilers/imcc/imcc.y"
+#line 2048 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bxor"; }
break;
case 240:
-#line 2043 "compilers/imcc/imcc.y"
+#line 2054 "compilers/imcc/imcc.y"
{
(yyval.i) = IMCC_create_itcall_label(interp);
(yyval.i)->type &= ~ITCALL;
@@ -4586,84 +4599,84 @@
break;
case 241:
-#line 2048 "compilers/imcc/imcc.y"
+#line 2059 "compilers/imcc/imcc.y"
{ (yyval.i) = 0; }
break;
case 242:
-#line 2055 "compilers/imcc/imcc.y"
+#line 2066 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
}
break;
case 243:
-#line 2061 "compilers/imcc/imcc.y"
+#line 2072 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"add"; }
break;
case 244:
-#line 2062 "compilers/imcc/imcc.y"
+#line 2073 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"sub"; }
break;
case 245:
-#line 2063 "compilers/imcc/imcc.y"
+#line 2074 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mul"; }
break;
case 246:
-#line 2064 "compilers/imcc/imcc.y"
+#line 2075 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"div"; }
break;
case 247:
-#line 2065 "compilers/imcc/imcc.y"
+#line 2076 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"mod"; }
break;
case 248:
-#line 2066 "compilers/imcc/imcc.y"
+#line 2077 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"fdiv"; }
break;
case 249:
-#line 2067 "compilers/imcc/imcc.y"
+#line 2078 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"concat"; }
break;
case 250:
-#line 2068 "compilers/imcc/imcc.y"
+#line 2079 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"band"; }
break;
case 251:
-#line 2069 "compilers/imcc/imcc.y"
+#line 2080 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bor"; }
break;
case 252:
-#line 2070 "compilers/imcc/imcc.y"
+#line 2081 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"bxor"; }
break;
case 253:
-#line 2071 "compilers/imcc/imcc.y"
+#line 2082 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shr"; }
break;
case 254:
-#line 2072 "compilers/imcc/imcc.y"
+#line 2083 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"shl"; }
break;
case 255:
-#line 2073 "compilers/imcc/imcc.y"
+#line 2084 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"lsr"; }
break;
case 256:
-#line 2079 "compilers/imcc/imcc.y"
+#line 2090 "compilers/imcc/imcc.y"
{
(yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s),
IMCC_INFO(interp) -> regs,
@@ -4674,22 +4687,22 @@
break;
case 257:
-#line 2089 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2100 "compilers/imcc/imcc.y"
+ { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 258:
-#line 2090 "compilers/imcc/imcc.y"
+#line 2101 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 259:
-#line 2091 "compilers/imcc/imcc.y"
- { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
+#line 2102 "compilers/imcc/imcc.y"
+ { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
case 260:
-#line 2093 "compilers/imcc/imcc.y"
+#line 2104 "compilers/imcc/imcc.y"
{
(yyval.sr) = (yyvsp[(1) - (1)].sr);
if ((yyvsp[(1) - (1)].sr)->set != 'P')
@@ -4698,7 +4711,7 @@
break;
case 261:
-#line 2099 "compilers/imcc/imcc.y"
+#line 2110 "compilers/imcc/imcc.y"
{
/* disallow bareword method names; SREG name constants are fine */
char *name = (yyvsp[(3) - (3)].sr)->name;
@@ -4715,39 +4728,48 @@
break;
case 262:
-#line 2113 "compilers/imcc/imcc.y"
+#line 2124 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
- (yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
+ (yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'U');
mem_sys_free((yyvsp[(3) - (3)].s));
}
break;
case 263:
-#line 2118 "compilers/imcc/imcc.y"
- { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
+#line 2130 "compilers/imcc/imcc.y"
+ {
+ IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr);
+ (yyval.sr) = mk_const(interp, (yyvsp[(3) - (3)].s), 'S');
+ mem_sys_free((yyvsp[(3) - (3)].s));
+ }
break;
case 264:
-#line 2124 "compilers/imcc/imcc.y"
+#line 2135 "compilers/imcc/imcc.y"
+ { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); }
+ break;
+
+ case 265:
+#line 2141 "compilers/imcc/imcc.y"
{
(yyval.i) = IMCC_create_itcall_label(interp);
IMCC_itcall_sub(interp, (yyvsp[(1) - (1)].sr));
}
break;
- case 265:
-#line 2128 "compilers/imcc/imcc.y"
+ case 266:
+#line 2145 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(2) - (5)].i); }
break;
- case 266:
-#line 2132 "compilers/imcc/imcc.y"
+ case 267:
+#line 2149 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
- case 267:
-#line 2134 "compilers/imcc/imcc.y"
+ case 268:
+#line 2151 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4759,8 +4781,8 @@
}
break;
- case 268:
-#line 2144 "compilers/imcc/imcc.y"
+ case 269:
+#line 2161 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4772,8 +4794,8 @@
}
break;
- case 269:
-#line 2154 "compilers/imcc/imcc.y"
+ case 270:
+#line 2171 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -4782,16 +4804,16 @@
}
break;
- case 270:
-#line 2161 "compilers/imcc/imcc.y"
+ case 271:
+#line 2178 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
add_pcc_named_arg_var(interp, IMCC_INFO(interp)->cur_call, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));
}
break;
- case 271:
-#line 2166 "compilers/imcc/imcc.y"
+ case 272:
+#line 2183 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
add_pcc_named_arg(interp, IMCC_INFO(interp)->cur_call,
@@ -4800,48 +4822,48 @@
}
break;
- case 272:
-#line 2175 "compilers/imcc/imcc.y"
+ case 273:
+#line 2192 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
break;
- case 273:
-#line 2179 "compilers/imcc/imcc.y"
+ case 274:
+#line 2196 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
- case 274:
-#line 2180 "compilers/imcc/imcc.y"
+ case 275:
+#line 2197 "compilers/imcc/imcc.y"
{ (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); }
break;
- case 275:
-#line 2184 "compilers/imcc/imcc.y"
+ case 276:
+#line 2201 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_FLAT; }
break;
- case 276:
-#line 2185 "compilers/imcc/imcc.y"
+ case 277:
+#line 2202 "compilers/imcc/imcc.y"
{ (yyval.t) = VT_NAMED; }
break;
- case 277:
-#line 2188 "compilers/imcc/imcc.y"
+ case 278:
+#line 2205 "compilers/imcc/imcc.y"
{ adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
break;
- case 278:
-#line 2189 "compilers/imcc/imcc.y"
+ case 279:
+#line 2206 "compilers/imcc/imcc.y"
{ adv_named_set(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = 0; }
break;
- case 279:
-#line 2193 "compilers/imcc/imcc.y"
+ case 280:
+#line 2210 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); }
break;
- case 280:
-#line 2198 "compilers/imcc/imcc.y"
+ case 281:
+#line 2215 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4853,8 +4875,8 @@
}
break;
- case 281:
-#line 2208 "compilers/imcc/imcc.y"
+ case 282:
+#line 2225 "compilers/imcc/imcc.y"
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call,
mk_const(interp, (yyvsp[(3) - (5)].s), 'S'), (yyvsp[(5) - (5)].sr));
@@ -4862,8 +4884,8 @@
}
break;
- case 282:
-#line 2214 "compilers/imcc/imcc.y"
+ case 283:
+#line 2231 "compilers/imcc/imcc.y"
{
(yyval.sr) = 0;
if (IMCC_INFO(interp)->adv_named_id) {
@@ -4875,133 +4897,133 @@
}
break;
- case 283:
-#line 2224 "compilers/imcc/imcc.y"
+ case 284:
+#line 2241 "compilers/imcc/imcc.y"
{
add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr));
mem_sys_free((yyvsp[(1) - (3)].s));
}
break;
- case 284:
-#line 2228 "compilers/imcc/imcc.y"
+ case 285:
+#line 2245 "compilers/imcc/imcc.y"
{ (yyval.sr) = 0; }
break;
- case 285:
-#line 2232 "compilers/imcc/imcc.y"
+ case 286:
+#line 2249 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
- case 286:
-#line 2233 "compilers/imcc/imcc.y"
+ case 287:
+#line 2250 "compilers/imcc/imcc.y"
{ (yyval.i) = (yyvsp[(1) - (1)].i); }
break;
- case 287:
-#line 2238 "compilers/imcc/imcc.y"
+ case 288:
+#line 2255 "compilers/imcc/imcc.y"
{
(yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
}
break;
- case 288:
-#line 2242 "compilers/imcc/imcc.y"
+ case 289:
+#line 2259 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
}
break;
- case 289:
-#line 2246 "compilers/imcc/imcc.y"
+ case 290:
+#line 2263 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
}
break;
- case 290:
-#line 2253 "compilers/imcc/imcc.y"
+ case 291:
+#line 2270 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr));
}
break;
- case 291:
-#line 2257 "compilers/imcc/imcc.y"
+ case 292:
+#line 2274 "compilers/imcc/imcc.y"
{
(yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr));
}
break;
- case 292:
-#line 2261 "compilers/imcc/imcc.y"
+ case 293:
+#line 2278 "compilers/imcc/imcc.y"
{
(yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr));
}
break;
- case 293:
-#line 2267 "compilers/imcc/imcc.y"
+ case 294:
+#line 2284 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
- case 294:
-#line 2268 "compilers/imcc/imcc.y"
+ case 295:
+#line 2285 "compilers/imcc/imcc.y"
{ (yyval.t) = 0; }
break;
- case 295:
-#line 2272 "compilers/imcc/imcc.y"
+ case 296:
+#line 2289 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"eq"; }
break;
- case 296:
-#line 2273 "compilers/imcc/imcc.y"
+ case 297:
+#line 2290 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"ne"; }
break;
- case 297:
-#line 2274 "compilers/imcc/imcc.y"
+ case 298:
+#line 2291 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"gt"; }
break;
- case 298:
-#line 2275 "compilers/imcc/imcc.y"
+ case 299:
+#line 2292 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"ge"; }
break;
- case 299:
-#line 2276 "compilers/imcc/imcc.y"
+ case 300:
+#line 2293 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"lt"; }
break;
- case 300:
-#line 2277 "compilers/imcc/imcc.y"
+ case 301:
+#line 2294 "compilers/imcc/imcc.y"
{ (yyval.s) = (char *)"le"; }
break;
- case 303:
-#line 2286 "compilers/imcc/imcc.y"
+ case 304:
+#line 2303 "compilers/imcc/imcc.y"
{ (yyval.sr) = NULL; }
break;
- case 304:
-#line 2287 "compilers/imcc/imcc.y"
+ case 305:
+#line 2304 "compilers/imcc/imcc.y"
{ (yyval.sr) = (yyvsp[(1) - (1)].sr); }
break;
- case 305:
-#line 2291 "compilers/imcc/imcc.y"
+ case 306:
+#line 2308 "compilers/imcc/imcc.y"
{ (yyval.sr) = IMCC_INFO(interp)->regs[0]; }
break;
- case 307:
-#line 2296 "compilers/imcc/imcc.y"
+ case 308:
+#line 2313 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); }
break;
- case 308:
-#line 2298 "compilers/imcc/imcc.y"
+ case 309:
+#line 2315 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr);
IMCC_INFO(interp) -> keyvec |= KEY_BIT(IMCC_INFO(interp)->nargs);
@@ -5010,54 +5032,54 @@
}
break;
- case 309:
-#line 2305 "compilers/imcc/imcc.y"
+ case 310:
+#line 2322 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr);
(yyval.sr) = (yyvsp[(2) - (3)].sr);
}
break;
- case 311:
-#line 2312 "compilers/imcc/imcc.y"
+ case 312:
+#line 2329 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 312:
-#line 2313 "compilers/imcc/imcc.y"
+ case 313:
+#line 2330 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 313:
-#line 2317 "compilers/imcc/imcc.y"
+ case 314:
+#line 2334 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 314:
-#line 2318 "compilers/imcc/imcc.y"
+ case 315:
+#line 2335 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 315:
-#line 2322 "compilers/imcc/imcc.y"
+ case 316:
+#line 2339 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 316:
-#line 2323 "compilers/imcc/imcc.y"
+ case 317:
+#line 2340 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 321:
-#line 2337 "compilers/imcc/imcc.y"
+ case 322:
+#line 2354 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->nkeys = 0;
IMCC_INFO(interp)->in_slice = 0;
}
break;
- case 322:
-#line 2342 "compilers/imcc/imcc.y"
+ case 323:
+#line 2359 "compilers/imcc/imcc.y"
{
(yyval.sr) = link_keys(interp,
IMCC_INFO(interp)->nkeys,
@@ -5065,16 +5087,16 @@
}
break;
- case 323:
-#line 2350 "compilers/imcc/imcc.y"
+ case 324:
+#line 2367 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->nkeys = 0;
IMCC_INFO(interp)->in_slice = 0;
}
break;
- case 324:
-#line 2355 "compilers/imcc/imcc.y"
+ case 325:
+#line 2372 "compilers/imcc/imcc.y"
{
(yyval.sr) = link_keys(interp,
IMCC_INFO(interp)->nkeys,
@@ -5082,21 +5104,21 @@
}
break;
- case 325:
-#line 2363 "compilers/imcc/imcc.y"
+ case 326:
+#line 2380 "compilers/imcc/imcc.y"
{ IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); }
break;
- case 326:
-#line 2365 "compilers/imcc/imcc.y"
+ case 327:
+#line 2382 "compilers/imcc/imcc.y"
{
IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr);
(yyval.sr) = IMCC_INFO(interp)->keys[0];
}
break;
- case 327:
-#line 2373 "compilers/imcc/imcc.y"
+ case 328:
+#line 2390 "compilers/imcc/imcc.y"
{
if (IMCC_INFO(interp)->in_slice)
(yyvsp[(1) - (1)].sr)->type |= VT_START_SLICE | VT_END_SLICE;
@@ -5104,54 +5126,54 @@
}
break;
- case 328:
-#line 2381 "compilers/imcc/imcc.y"
+ case 329:
+#line 2398 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); }
break;
- case 329:
-#line 2382 "compilers/imcc/imcc.y"
+ case 330:
+#line 2399 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); }
break;
- case 330:
-#line 2383 "compilers/imcc/imcc.y"
+ case 331:
+#line 2400 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); }
break;
- case 331:
-#line 2384 "compilers/imcc/imcc.y"
+ case 332:
+#line 2401 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); }
break;
- case 332:
-#line 2385 "compilers/imcc/imcc.y"
+ case 333:
+#line 2402 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 333:
-#line 2389 "compilers/imcc/imcc.y"
+ case 334:
+#line 2406 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 334:
-#line 2390 "compilers/imcc/imcc.y"
+ case 335:
+#line 2407 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 335:
-#line 2391 "compilers/imcc/imcc.y"
+ case 336:
+#line 2408 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
- case 336:
-#line 2392 "compilers/imcc/imcc.y"
+ case 337:
+#line 2409 "compilers/imcc/imcc.y"
{ (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); }
break;
/* Line 1267 of yacc.c. */
-#line 5144 "compilers/imcc/imcparser.c"
+#line 5166 "compilers/imcc/imcparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5365,7 +5387,7 @@
}
-#line 2398 "compilers/imcc/imcc.y"
+#line 2415 "compilers/imcc/imcc.y"
/* I need this prototype somewhere... */
Modified: branches/io_rewiring/compilers/imcc/imcparser.h
==============================================================================
--- branches/io_rewiring/compilers/imcc/imcparser.h Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/imcparser.h Sun Jun 7 23:41:42 2009 (r39444)
@@ -295,7 +295,7 @@
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 1030 "compilers/imcc/imcc.y"
+#line 1035 "compilers/imcc/imcc.y"
{
IdList * idlist;
int t;
Modified: branches/io_rewiring/compilers/imcc/main.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/main.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/main.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -219,14 +219,9 @@
" -L --library add path to library search\n"
" -X --dynext add path to dynamic extension search\n"
" <Run core options>\n"
- " -R --runcore CORE\n"
- " --bounds-checks|--slow-core\n"
- " --CGP-core\n"
- " --fast-core\n"
- " --computed-goto-core\n"
- " --jit-core\n"
+ " -R --runcore slow|bounds|fast|jit|cgoto|cgp|cgp-jit\n"
+ " -R --runcore switch|switch-jit|trace|exec|gcdebug\n"
" -p --profile\n"
- " --switched-core\n"
" -t --trace [flags]\n"
" <VM options>\n"
" -D --parrot-debug[=HEXFLAGS]\n"
@@ -534,15 +529,15 @@
SET_FLAG(PARROT_DESTROY_FLAG);
break;
case 'I':
- Parrot_add_library_path_from_cstring(interp, opt.opt_arg,
+ Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
PARROT_LIB_PATH_INCLUDE);
break;
case 'L':
- Parrot_add_library_path_from_cstring(interp, opt.opt_arg,
+ Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
PARROT_LIB_PATH_LIBRARY);
break;
case 'X':
- Parrot_add_library_path_from_cstring(interp, opt.opt_arg,
+ Parrot_lib_add_path_from_cstring(interp, opt.opt_arg,
PARROT_LIB_PATH_DYNEXT);
break;
default:
Modified: branches/io_rewiring/compilers/imcc/parser_util.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/parser_util.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/parser_util.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -330,6 +330,12 @@
/* in constant */
int dirs = 1;
+ /* XXX: Maybe the check for n == 0 is the only one required
+ * and the other must be assertions? */
+ if (n == 0 || r[0] == NULL || r[0]->name == NULL)
+ IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
+ "The opcode '%s' needs arguments", name);
+
r[0] = mk_const(interp, r[0]->name, 'P');
r[0]->pmc_type = enum_class_FixedIntegerArray;
Modified: branches/io_rewiring/compilers/imcc/pcc.c
==============================================================================
--- branches/io_rewiring/compilers/imcc/pcc.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/imcc/pcc.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -816,7 +816,12 @@
if (!(arg->type == VTIDENTIFIER
|| arg->type == VTPASM
|| arg->type == VTREG))
- meth = mk_const(interp, arg->name, 'S');
+ if (arg->type & VT_ENCODED) {
+ meth = mk_const(interp, arg->name, 'U');
+ }
+ else {
+ meth = mk_const(interp, arg->name, 'S');
+ }
}
}
Modified: branches/io_rewiring/compilers/nqp/bootstrap/actions.pm
==============================================================================
--- branches/io_rewiring/compilers/nqp/bootstrap/actions.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/nqp/bootstrap/actions.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -339,6 +339,8 @@
my $params := $past[0];
if $<declarator> eq 'method' {
$past.blocktype('method');
+ unshift $past, PAST::Op.new('inline'=>'.lex "self", self',
+ 'pasttype'=>'inline');
}
for $<signature>[0] {
my $parameter := $($_<parameter>);
@@ -703,7 +705,12 @@
method noun($/, $key) {
- make $($/{$key});
+ if $key eq 'self' {
+ make PAST::Var.new('name'=>'self', 'node'=>$/);
+ }
+ else {
+ make $($/{$key});
+ }
}
##.sub 'noun' :method
## .param pmc match
Modified: branches/io_rewiring/compilers/nqp/src/Grammar.pg
==============================================================================
--- branches/io_rewiring/compilers/nqp/src/Grammar.pg Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/nqp/src/Grammar.pg Sun Jun 7 23:41:42 2009 (r39444)
@@ -287,6 +287,7 @@
| <circumfix> {*} #= circumfix
| <variable> {*} #= variable
| <subcall> {*} #= subcall
+ | 'self' >> {*} #= self
| <value> {*} #= value
| <name> {*} #= name
}
Modified: branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir
==============================================================================
--- branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/nqp/src/Grammar/Actions.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -377,6 +377,8 @@
## my $params := $past[0];
## if $<declarator> eq 'method' {
## $past.blocktype('method');
+## $past.push(PAST::Op.new('inline'=>'.lex 'self', self);
+## $past.symbol('self', :scope('lexical'));
## }
## for $<signature>[0] {
## my $parameter := $($_<parameter>);
@@ -400,6 +402,10 @@
$S0 = match['declarator']
if $S0 != 'method' goto add_signature
past.'blocktype'('method')
+ $P3 = get_hll_global ['PAST'], 'Op'
+ $P4 = $P3.'new'('inline'=>' .lex "self", self', 'pasttype'=>'inline')
+ unshift past, $P4
+ past.'symbol'('self', 'scope'=>'lexical')
add_signature:
$P0 = match['signature']
$P0 = $P0[0]
@@ -738,14 +744,26 @@
## method noun($/, $key) {
-## make $($/{$key});
+## if $key eq 'self' {
+## make PAST::Var.new(:name('self'), :scope('lexical'), :node($/));
+## }
+## else {
+## make $($/{$key});
+## }
## }
.sub 'noun' :method
.param pmc match
.param pmc key
+
$P0 = match[key]
+ if key == 'self' goto make_self
$P1 = $P0.'ast'()
match.'!make'($P1)
+ .return()
+ make_self:
+ $P9 = get_hll_global ['PAST'], 'Var'
+ $P1 = $P9.'new'('scope'=>'lexical', 'name'=>'self', 'node'=>$P0)
+ match.'!make'($P1)
.end
Modified: branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir
==============================================================================
--- branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/compilers/pct/src/PCT/HLLCompiler.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -326,13 +326,31 @@
.local string tcode
tcode = adverbs['transcode']
unless tcode goto transcode_done
- push_eh transcode_skip
+ .local pmc tcode_it
+ $P0 = split ' ', tcode
+ tcode_it = iter $P0
+ tcode_loop:
+ unless tcode_it goto transcode_done
+ tcode = shift tcode_it
+ push_eh tcode_enc
$I0 = find_charset tcode
$S0 = source
$S0 = trans_charset $S0, $I0
assign source, $S0
- transcode_skip:
pop_eh
+ goto transcode_done
+ tcode_enc:
+ pop_eh
+ push_eh tcode_fail
+ $I0 = find_encoding tcode
+ $S0 = source
+ $S0 = trans_encoding $S0, $I0
+ assign source, $S0
+ pop_eh
+ goto transcode_done
+ tcode_fail:
+ pop_eh
+ goto tcode_loop
transcode_done:
.local string target
Modified: branches/io_rewiring/config/auto/gcc.pm
==============================================================================
--- branches/io_rewiring/config/auto/gcc.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/config/auto/gcc.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -93,10 +93,7 @@
$conf->data->set(
ccwarn => "$ccwarn",
gccversion => $gccversion,
- HAS_aligned_funcptr => 1
);
- $conf->data->set( HAS_aligned_funcptr => 0 )
- if $conf->data->get_p5('OSNAME') eq 'hpux';
return 1;
}
Modified: branches/io_rewiring/config/auto/icu.pm
==============================================================================
--- branches/io_rewiring/config/auto/icu.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/config/auto/icu.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -299,6 +299,7 @@
print "Trying $arg->{icuconfig} with '--prefix'\n"
if $arg->{verbose};
$icuheaders = capture_output("$arg->{icuconfig} --prefix");
+ chomp($icuheaders);
print "icuheaders: captured $icuheaders\n"
if $arg->{verbose};
($icuheaders, $arg->{without}) =
Modified: branches/io_rewiring/config/gen/config_pm/config_pir.in
==============================================================================
--- branches/io_rewiring/config/gen/config_pm/config_pir.in Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/config/gen/config_pm/config_pir.in Sun Jun 7 23:41:42 2009 (r39444)
@@ -8,6 +8,7 @@
.sub _some
...
+ load_bytecode 'config.pbc'
# store the config data into $P0
$P0 = _config()
# Retrieve and print a key
@@ -18,7 +19,6 @@
...
.end
- .include "library/config.pir"
=head1 DESCRIPTION
Modified: branches/io_rewiring/config/gen/makefiles/root.in
==============================================================================
--- branches/io_rewiring/config/gen/makefiles/root.in Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/config/gen/makefiles/root.in Sun Jun 7 23:41:42 2009 (r39444)
@@ -1485,7 +1485,10 @@
# integrating them in a single run is difficult.
# Normal test package
-test : test_prep test_pbc_annotation_persistence nqp_test
+test : test_core nqp_test
+
+# Test Parrot core.
+test_core: test_prep test_pbc_annotation_persistence
$(PERL) t/harness $(EXTRA_TEST_ARGS)
# Test the NQP compiler
Modified: branches/io_rewiring/config/init/defaults.pm
==============================================================================
--- branches/io_rewiring/config/init/defaults.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/config/init/defaults.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -206,9 +206,6 @@
make_set_make => $Config{make_set_make},
make_and => '&&',
- # for cygwin
- cygchkdll => '',
-
# make_c: Command to emulate GNU make's C<-C directory> option: chdir
# to C<directory> before executing $(MAKE)
make_c => '$(PERL) -e \'chdir shift @ARGV; system q{$(MAKE)}, @ARGV; exit $$? >> 8;\'',
Modified: branches/io_rewiring/docs/book/appc_command_line_options.pod
==============================================================================
--- branches/io_rewiring/docs/book/appc_command_line_options.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/book/appc_command_line_options.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -252,37 +252,59 @@
=over 4
-=item --bounds-checks
+=item -R slow
+
+Run with the I<slow core>
+
+=item -R bounds
Activate bounds checking. This also runs with the I<slow core> as a
side effect.
-=item --fast-core
+=item -R fast
Run with the I<fast core>.
-=item --computed-goto-core
+=item -R cgoto
Run the I<computed goto core> (CGoto).
-=item --jit-core
+=item -R jit
Run with the I<JIT core> if available.
-=item -p,--profile
+=item -R cgp
-Activate profiling. This prints a summary of opcode usage and
-execution times after the program stops. It also runs within the
-I<slow core>.
+Run with the I<CGoto-Prederefed> core.
-=item --CGP-core
+=item -R cgp-jit
-Run with the I<CGoto-Prederefed> core.
+Run with the I<CGoto-Prederefed with jit> core.
-=item --switched-core
+=item -R switch
Run with the I<Switched core>.
+=item -R switch-jit
+
+Run with the I<Switched core with jit>.
+
+=item -R exec
+
+Run with the I<exec core>
+(uses JIT at compile time to generate native code)
+
+=item -R gcdebug
+
+Performs a full GC run before every op dispatch
+(good for debugging GC problems)
+
+=item -p,--profile
+
+Activate profiling. This prints a summary of opcode usage and
+execution times after the program stops. It also runs within the
+I<slow core>.
+
=item -t,--trace
Trace execution. This also turns on the I<slow core>.
Modified: branches/io_rewiring/docs/book/ch03_pir.pod
==============================================================================
--- branches/io_rewiring/docs/book/ch03_pir.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/book/ch03_pir.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -1681,7 +1681,7 @@
Adding a role to a class is called I<composing> that role, and any class
that has been composed with a role C<does> that role.
-Roles are created as PMC and can be manipulated through opcodes and methods
+Roles are created as PMCs and can be manipulated through opcodes and methods
like other PMCs:
$P0 = new 'Role'
@@ -2362,7 +2362,7 @@
is especially important when dealing with high-level languages. We'll go into
detail about annotations and their use in Chapter 10.
-Annotations are created using the c<.annotation> keyword. Annotations consist
+Annotations are created using the C<.annotation> keyword. Annotations consist
of a key/value pair, where the key is a string and the value is an integer,
a number, or a string. Since annotations are stored compactly as constants in
the compiled bytecode, PMCs cannot be used.
Modified: branches/io_rewiring/docs/book/ch04_compiler_tools.pod
==============================================================================
--- branches/io_rewiring/docs/book/ch04_compiler_tools.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/book/ch04_compiler_tools.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -253,12 +253,12 @@
=over 4
-=item* C<commandline_prompt>
+=item * C<commandline_prompt>
The C<commandline_prompt> method allows you to specify a custom prompt to
display to users in interactive mode.
-=item* C<commandline_banner>
+=item * C<commandline_banner>
The C<commandline_banner> method allows you to specify a banner message that
displays at the beginning of interactive mode.
Modified: branches/io_rewiring/docs/book/ch10_opcode_reference.pod
==============================================================================
--- branches/io_rewiring/docs/book/ch10_opcode_reference.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/book/ch10_opcode_reference.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -442,6 +442,17 @@
I<Arguments: IR, P, P>
+=head3 cmp_pmc
+
+X<cmp_pmc opcode (PASM)>
+
+ cmp_pmc R<DEST>, R<VAL1>, R<VAL2>
+
+Like C<cmp>, but places a PMC in R<DEST>. This opcode is useful for avoiding
+semipredicate problems in HLLs where two PMCs are not always comparable.
+
+I<Arguments: P, P, P>
+
=head3 collect
X<collect opcode (PASM)>
@@ -2234,12 +2245,12 @@
=head3 setstd*
X<setstderr opcode (PASM)>
-X<setstdout opcode (PASM)>
X<setstdin opcode (PASM)>
+X<setstdout opcode (PASM)>
setstderr R<DEST>
- setstdout R<DEST>
setstdin R<DEST>
+ setstdout R<DEST>
Set a FileHandle object for the given standard handle.
Modified: branches/io_rewiring/docs/pct/pct_optable_guide.pod
==============================================================================
--- branches/io_rewiring/docs/pct/pct_optable_guide.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/pct/pct_optable_guide.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -245,7 +245,7 @@
course, this fully depends on the specification of your language. Sometimes,
you need a different rule to define subroutine invocation syntax. This is the
case when arguments can be other objects than operands of normal operators
-(which, again, are defined by the c<term:> rule).
+(which, again, are defined by the C<term:> rule).
An example to handle indexing (assuming the index is an operand as any other
operator's operand) is this:
Modified: branches/io_rewiring/docs/pdds/pdd19_pir.pod
==============================================================================
--- branches/io_rewiring/docs/pdds/pdd19_pir.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/pdds/pdd19_pir.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -302,7 +302,7 @@
constant indicating the PMC type. This allows you to create PMC constants
representing subroutines; the value of the constant in that case is the
name of the subroutine. If the referred subroutine has an C<:immediate>
-flag and it returns a value, then that value is stored instead of the
+modifier and it returns a value, then that value is stored instead of the
subroutine.
C<.const> declarations representing subroutines can only be written
@@ -312,16 +312,16 @@
=item .globalconst <type> <identifier> = <const>
As C<.const> above, but the defined constant is globally accessible.
-C<.globalconst> may only be used withing a C<.sub>.
+C<.globalconst> may only be used within a C<.sub>.
=item .sub
- .sub <identifier> [:<flag> ...]
- .sub <quoted string> [:<flag> ...]
+ .sub <identifier> [:<modifier> ...]
+ .sub <quoted string> [:<modifier> ...]
Define a subroutine. All code in a PIR source file must be defined in a
-subroutine. See the section L<Subroutine flags> for available flags.
-Optional flags are a list of I<flag>, separated by spaces.
+subroutine. See the section L<Subroutine modifiers> for available
+modifiers. Optional modifiers are a list separated by spaces.
The name of the sub may be either a bare identifier or a quoted string
constant. Bare identifiers must be valid PIR identifiers (see L<Identifiers>
@@ -426,7 +426,7 @@
=back
-=head4 Subroutine flags
+=head4 Subroutine modifiers
=over 4
@@ -435,7 +435,7 @@
Define "main" entry point to start execution. If multiple subroutines are
marked as B<:main>, the B<last> marked subroutine is used. Only the first
file loaded or compiled counts; subs marked as B<:main> are ignored by the
-B<load_bytecode> op. If no B<:main> flag is specified at all, execution
+B<load_bytecode> op. If no B<:main> modifier is specified, execution
starts at the first subroutine in the file.
=item :load
@@ -459,7 +459,7 @@
=item :multi(type1, type2...)
Engage in multiple dispatch with the listed types.
-See L<docs/pdds/pdd27_multi_dispatch.pod> for more information on the
+See F<docs/pdds/pdd27_multi_dispatch.pod> for more information on the
multiple dispatch system.
=item :immediate
@@ -477,7 +477,7 @@
{{ TODO: need a freeze/thaw reference }}.
For instance, after compilation of the sub 'init', that sub is executed
-immediately (hence the :immediate flag). Instead of storing the sub
+immediately (hence the C<:immediate> modifier). Instead of storing the sub
'init' in the constants table, the value returned by 'init' is stored,
which in this example is a FixedIntegerArrray.
@@ -561,7 +561,7 @@
.sub bar :vtable
# ...
.end
-
+
.sub bar :vtable('foo')
# ...
.end
@@ -574,8 +574,8 @@
C<:vtable('...')>. For example, to have a C<.sub> named I<ToString> also
be the vtable function C<get_string>), use C<:vtable('get_string')>.
-When the B<:vtable> flag is set, the object PMC can be referred to with
-C<self>, as with the B<:method> flag.
+When the B<:vtable> modifier is set, the object PMC can be referred to with
+C<self>, as with the B<:method> modifier.
=item :outer(subname)
@@ -599,9 +599,9 @@
=item :nsentry( <string_constant> )
Specify the name by which the subroutine is stored in the namespace. The
-default name by which a subroutine is stored in the namespace (if this flag
-is missing), is the subroutine's name as given after the C<.sub> directive.
-This flag allows to override this.
+default name by which a subroutine is stored in the namespace (if this
+modifier is missing), is the subroutine's name as given after the
+C<.sub> directive. This modifier allows to override this.
=back
@@ -644,30 +644,30 @@
Directive to make a call through the Native Calling Interface (NCI).
The specified subroutine must be loaded using the <dlfunc> op that takes
the library, function name and function signature as arguments.
-See L<docs/pdds/pdd16_native_call> for details.
+See F<docs/pdds/pdd16_native_call> for details.
-=item .set_return <var> [:<flag>]*
+=item .set_return <var> [:<modifier>]*
Between C<.begin_return> and C<.end_return>, specify one or
more of the return value(s) of the current subroutine. Available
-flags: C<:flat>, C<:named>.
+modifiers: C<:flat>, C<:named>.
-=item .set_yield <var> [:<flag>]*
+=item .set_yield <var> [:<modifier>]*
Between C<.begin_yield> and C<.end_yield>, specify one or
more of the yield value(s) of the current subroutine. Available
-flags: C<:flat>, C<:named>.
+modifiers: C<:flat>, C<:named>.
-=item .set_arg <var> [:<flag>]*
+=item .set_arg <var> [:<modifier>]*
Between C<.begin_call> and C<.call>, specify an argument to be
-passed. Available flags: C<:flat>, C<:named>.
+passed. Available modifiers: C<:flat>, C<:named>.
-=item .get_result <var> [:<flag>]*
+=item .get_result <var> [:<modifier>]*
Between C<.call> and C<.end_call>, specify where one or more return
-value(s) should be stored. Available flags:
-C<:slurpy>, C<:named>, C<:optional>, and C<:opt_flag>.
+value(s) should be stored. Available modifiers: C<:slurpy>, C<:named>,
+C<:optional>, and C<:opt_flag>.
=back
@@ -675,12 +675,12 @@
=over 4
-=item .param <type> <identifier> [:<flag>]*
+=item .param <type> <identifier> [:<modifier>]*
At the top of a subroutine, declare a local variable, in the manner
of C<.local>, into which parameter(s) of the current subroutine should
-be stored. Available flags:
-C<:slurpy>, C<:named>, C<:optional>, C<:opt_flag> and C<:unique_reg>.
+be stored. Available modifiers: C<:slurpy>, C<:named>, C<:optional>,
+C<:opt_flag> and C<:unique_reg>.
=back
@@ -688,7 +688,7 @@
See L<PDD03|pdds/pdd03_calling_conventions.pod> for a description of
the meaning of the flag bits C<SLURPY>, C<OPTIONAL>, C<OPT_FLAG>,
-and C<FLAT>, which correspond to the calling convention flags
+and C<FLAT>, which correspond to the calling convention modifiers
C<:slurpy>, C<:optional>, C<:opt_flag>, and C<:flat>.
@@ -711,9 +711,9 @@
=end PIR_FRAGMENT
-This is syntactic sugar for the C<get_results> op, but any flags set on the
-targets will be handled automatically by the PIR compiler.
-The C<.get_results> directive must be the first instruction of the exception
+This is syntactic sugar for the C<get_results> op, but any modifiers set
+on the targets will be handled automatically by the PIR compiler. The
+C<.get_results> directive must be the first instruction of the exception
handler; only declarations (.lex, .local) may come first.
To resume execution after handling the exception, just invoke the continuation
@@ -846,31 +846,31 @@
Note that this only works for opcodes that have have a leading C<OUT>
parameter. [this restriction unimplemented: RT #36283]
-=item ([<var1> [:<flag1> ...], ...]) = <var2>([<arg1> [:<flag2> ...], ...])
+=item ([<var1> [:<modifier1> ...], ...]) = <var2>([<arg1> [:<modifier2> ...], ...])
This is short for:
.begin_call
- .set_arg <arg1> <flag2>
+ .set_arg <arg1> <modifier2>
...
.call <var2>
- .get_result <var1> <flag1>
+ .get_result <var1> <modifier1>
...
.end_call
-=item <var> = <var>([arg [:<flag> ...], ...])
+=item <var> = <var>([arg [:<modifier> ...], ...])
-=item <var>([arg [:<flag> ...], ...])
+=item <var>([arg [:<modifier> ...], ...])
-=item <var>."_method"([arg [:<flag> ...], ...])
+=item <var>."_method"([arg [:<modifier> ...], ...])
-=item <var>.<var>([arg [:<flag> ...], ...])
+=item <var>.<var>([arg [:<modifier> ...], ...])
Function or method call. These notations are shorthand for a longer PCC
function call. I<var> can denote a global subroutine, a local I<identifier> or
a I<reg>.
-=item .return ([<var> [:<flag> ...], ...])
+=item .return ([<var> [:<modifier> ...], ...])
Return from the current subroutine with zero or more values.
@@ -1052,7 +1052,7 @@
EOS
-=cut PIR_TODO
+=end PIR_TODO
Using braces, { }, allows you to span multiple lines for an argument.
See runtime/parrot/include/hllmacros.pir for examples and possible usage.
@@ -1074,7 +1074,7 @@
})
.end
-=cut PIR
+=end PIR
This will expand the macro C<foo>, after which the input to the PIR parser is:
@@ -1087,7 +1087,7 @@
print "4"
.end
-=cut PIR
+=end PIR
which will result in the output:
@@ -1108,7 +1108,7 @@
# ...
.endm
-=cut PIR
+=end PIR
=head4 Unique local variables
@@ -1128,7 +1128,7 @@
# ...
.endm
-=cut PIR
+=end PIR
The C<.macro_local> directive declares a local variable with a unique name in
the macro. When the macro C<.foo()> is called, the resulting code that is
@@ -1144,7 +1144,7 @@
.end
-=cut
+=end PIR
The user can also declare a local variable with a unique name set to the
symbolic value of one of the macro parameters.
@@ -1234,7 +1234,7 @@
.foo("y")
.end
-=begin PIR
+=end PIR
the resulting code that is given to the parser will read as follows:
@@ -1258,7 +1258,7 @@
=head3 Subroutine Definition
A simple subroutine, marked with C<:main>, indicating it's the entry point
-in the file. Other sub flags include C<:load>, C<:init>, etc.
+in the file. Other sub modifiers include C<:load>, C<:init>, etc.
=begin PIR
Modified: branches/io_rewiring/docs/running.pod
==============================================================================
--- branches/io_rewiring/docs/running.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/running.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2008, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
# $Id$
=head1 NAME
@@ -147,35 +147,10 @@
switch-jit switch core with JIT
trace bounds checking core w/ trace info (see 'parrot --help-debug')
-=item --bounds-checks, --slow-core
-
-Select the bounds-checking slow core (default).
-
-=item --computed-goto-core
-
-Select the CGoto core (if available).
-
-=item --CGP-core
-
-Select the CGP (CGoto Predereferenced) core (if available).
-
-=item --fast-core
-
-Select the fast (or function) core. Bounds checking, profiling, and tracing
-are not available. (That's why it's so fast.)
-
-=item --jit-core
-
-Run with the JIT subsystem (if available).
-
=item -p, --profile
Run with the slow core and print an execution profile.
-=item --switched-core
-
-TODO: This needs to be documented briefly here and also in glossary.pod.
-
=item -t, --trace
Run with the slow core and print trace information to B<stderr>. See C<parrot
Modified: branches/io_rewiring/docs/tests.pod
==============================================================================
--- branches/io_rewiring/docs/tests.pod Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/docs/tests.pod Sun Jun 7 23:41:42 2009 (r39444)
@@ -81,8 +81,6 @@
C<pir_output_is> and friends.
pir_output_is(<<'CODE',<<'OUT','nothing useful');
- .include 'library/config.pir'
-
.sub main :main
print "hi\n"
.end
Modified: branches/io_rewiring/examples/languages/abc/src/parser/actions.pm
==============================================================================
--- branches/io_rewiring/examples/languages/abc/src/parser/actions.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/examples/languages/abc/src/parser/actions.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -33,10 +33,10 @@
=item
-The C<make> function and C< $(...) > are used to set and retrieve
+The C<make> function and C< .ast > are used to set and retrieve
the I<result object> for a match. Here, we use the result object
to hold the ast representation of any given match. So, in the
-code below, whenever you see an expression like C<< $($<foo>) >>,
+code below, whenever you see an expression like C<< $<foo>.ast >>,
we're really saying "the ast of C<< <foo> >>".
=back
@@ -48,7 +48,7 @@
## The ast of the entire program is the ast of the
## top-level <statement_list>.
method TOP($/) {
- make $($<statement_list>);
+ make $<statement_list>.ast;
}
@@ -61,7 +61,7 @@
method statement_list($/) {
my $past := PAST::Stmts.new( :node($/) );
for $<statement> {
- $past.push( $($_) );
+ $past.push( $_.ast );
}
make $past;
}
@@ -71,7 +71,7 @@
## In the parse grammar, we've set up $key to tell us the
## name of whatever subrule was matched by this statement.
## We can then use $key to quickly get the subrule's ast
-## with $( $/{$key} ).
+## with $/{$key}.ast .
##
## bc(1) expression statements also have special semantics
## which we handle here. If a statement is an expression
@@ -81,7 +81,7 @@
## Similarly, if the statement consists of a simple string, it's
## displayed on the output.
method statement($/, $key) {
- my $past := $( $/{$key} );
+ my $past := $/{$key}.ast;
if ($key eq 'expression' && ~$past.name() ne 'infix:=') {
my $last := PAST::Var.new( :name('last'),
:scope('package'),
@@ -109,12 +109,12 @@
## matches and set them as the children of a
## PAST::Op node with a pasttype of 'if'.
method if_statement($/) {
- my $past := PAST::Op.new( $($<expression>),
- $( $<statement>[0] ),
+ my $past := PAST::Op.new( $<expression>.ast,
+ $<statement>[0].ast,
:pasttype('if'),
:node( $/ ) );
if ( $<statement>[1] ) {
- $past.push( $( $<statement>[1] ) );
+ $past.push( $<statement>[1].ast );
}
make $past;
}
@@ -124,8 +124,8 @@
## This is basically the same as if_statement above, except
## we use a pasttype of 'while'.
method while_statement($/) {
- make PAST::Op.new( $($<expression>),
- $($<statement>),
+ make PAST::Op.new( $<expression>.ast,
+ $<statement>.ast,
:pasttype('while'),
:node($/) );
}
@@ -140,13 +140,13 @@
my $past := PAST::Stmts.new( :node($/) );
# add the initial "expr0;" node
- $past.push( $( $<expression>[0] ) );
+ $past.push( $<expression>[0].ast );
# create the "{ body; expr2; }" part
- my $body := PAST::Stmts.new( $($<statement>), $($<expression>[2]) );
+ my $body := PAST::Stmts.new( $<statement>.ast, $<expression>[2].ast );
# now create the "while (expr1) { body; expr2; }" part
- $past.push( PAST::Op.new( $($<expression>[1]), $body, :pasttype('while')));
+ $past.push( PAST::Op.new( $<expression>[1].ast, $body, :pasttype('while')));
make $past;
}
@@ -156,7 +156,7 @@
## A compound statement is just a list of statements, so we
## return the ast of its embedded <statement_list>.
method compound_statement($/) {
- make $($<statement_list>);
+ make $<statement_list>.ast;
}
@@ -182,7 +182,7 @@
## is invoked with the expression in $<expr> and a $key of 'end'.
method expression($/, $key) {
if ($key eq 'end') {
- make $($<expr>);
+ make $<expr>.ast;
}
else {
my $past := PAST::Op.new( :name($<type>),
@@ -192,7 +192,7 @@
:node($/)
);
for @($/) {
- $past.push( $($_) );
+ $past.push( $_.ast );
}
make $past;
}
@@ -203,7 +203,7 @@
## Like 'statement' above, the $key has been set to let us know
## which term subrule was matched.
method term($/, $key) {
- make $( $/{$key} );
+ make $/{$key}.ast;
}
## float/integer:
@@ -246,7 +246,7 @@
);
}
if ($key eq 'call') {
- $past := PAST::Op.new( $($<expression>),
+ $past := PAST::Op.new( $<expression>.ast,
:name( ~$<name> ),
:pasttype('call'),
:node( $/ )
Modified: branches/io_rewiring/examples/library/pcre.pir
==============================================================================
--- branches/io_rewiring/examples/library/pcre.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/examples/library/pcre.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -21,10 +21,6 @@
=cut
-
-.include 'library/pcre.pir'
-
-
.sub main :main
.param pmc argv
@@ -35,6 +31,7 @@
.local pmc func
.local pmc lib
+ load_bytecode 'pcre.pbc'
func= get_hll_global ['PCRE'], 'init'
lib= func()
Modified: branches/io_rewiring/examples/nci/xlibtest.pir
==============================================================================
--- branches/io_rewiring/examples/nci/xlibtest.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/examples/nci/xlibtest.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -11,16 +11,25 @@
Compile Xlib.pir to Xlib.pbc before usage:
-../../parrot -o Xlib.pbc Xlib.pir
+../../parrot -o Xlib.pbc Xlib.pir [ filename ]
Press Escape key to exit.
-=cut
+Press S to save to filename
+=cut
.include 'Xlibconstants.pir'
+# Key for JSON line data
+.const string JKEY_LINES = 'lines'
+
.sub main :main
+ .param pmc args
+
+ .local string filename
+ filename = args [1]
+ say filename
load_bytecode 'Xlib.pbc'
@@ -82,8 +91,18 @@
codeEscape = display.'KeysymToKeycode'($I0)
# say codeEscape
+ $I0 = StringToKeysym('S')
+# print $I0
+# print '-'
+ .local int codeS
+ codeS = display.'KeysymToKeycode'($I0)
+# say codeS
+
.local pmc listline
- listline = new 'ResizablePMCArray'
+ listline = load(filename)
+
+mainloop:
+
.local pmc line
# Event loop
@@ -131,16 +150,24 @@
# say $S0
# eq $S0, 'Escape', finish
- ne $I0, codeEscape, loop
+ if $I0 == codeEscape goto handleescape
+ if $I0 == codeS goto handleS
+ goto loop
+handleescape:
w.'Unmap'()
w.'Destroy'()
goto loop
+handleS:
+ say 'S'
+ save(filename, listline)
+ goto loop
+
press:
lastpx = event.'x'()
lastpy = event.'y'()
w.'DrawPoint'(lastpx, lastpy)
- line = new 'ResizableIntegerArray'
+ line = new [ 'ResizableIntegerArray' ]
push listline, line
push line, lastpx
push line, lastpy
@@ -243,6 +270,72 @@
.end
#-----------------------------------------------------------------------
+.sub load
+ .param string filename
+ .local pmc listline
+ if null filename goto newfile
+
+ push_eh newfile
+ .local pmc handle
+ handle = open filename, 'r'
+ pop_eh
+
+ push_eh failed
+ .local string jsonfile
+ jsonfile = handle.'readall'()
+ close handle
+
+ load_bytecode 'compilers/json/JSON.pbc'
+ .local pmc json
+ json = compreg 'JSON'
+ .local pmc jsonobject
+ jsonobject = json(jsonfile)
+ listline = jsonobject [JKEY_LINES]
+ goto finish
+
+failed:
+ .local pmc exception
+ .get_results(exception)
+ pop_eh
+ print "\nERROR LOADING FILE: "
+ print exception
+ print "\n\n"
+
+newfile:
+ listline = new [ 'ResizablePMCArray' ]
+finish:
+ .return(listline)
+.end
+
+#-----------------------------------------------------------------------
+.sub save
+ .param string filename
+ .param pmc listline
+
+ push_eh failed
+ load_bytecode 'JSON.pbc'
+
+ .local pmc jsondata
+ jsondata = new [ 'Hash' ]
+ jsondata [JKEY_LINES] = listline
+ .local string jsonfile
+ jsonfile = _json(jsondata)
+ .local pmc handle
+ handle = open filename, 'w'
+ print handle, jsonfile
+ print handle, "\n"
+ close handle
+ .return()
+failed:
+ .local pmc exception
+ .get_results(exception)
+ pop_eh
+ print "\nERROR SAVING FILE: "
+ print exception
+ print "\n\n"
+.end
+
+#-----------------------------------------------------------------------
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/io_rewiring/examples/tcl/tcltkdemo.pir
==============================================================================
--- branches/io_rewiring/examples/tcl/tcltkdemo.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/examples/tcl/tcltkdemo.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -2,9 +2,8 @@
# $Id$
# demonstrate Tcl/Tk GUI using NCI
-.include 'runtime/parrot/library/TclLibrary.pir'
-
.sub try :main
+ load_bytecode 'TclLibrary.pbc'
.local pmc tcl
tcl = new 'TclLibrary'
.local string res
Modified: branches/io_rewiring/include/parrot/embed.h
==============================================================================
--- branches/io_rewiring/include/parrot/embed.h Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/include/parrot/embed.h Sun Jun 7 23:41:42 2009 (r39444)
@@ -84,12 +84,6 @@
int Parrot_revision(void);
-/* Deprecated */
-
-/* with 0.9.1 TT #266 */
-#define Parrot_readbc(i, c) Parrot_pbc_read((i), (c), 0)
-#define Parrot_loadbc(i, pf) Parrot_pbc_load((i), (pf))
-
#endif /* PARROT_EMBED_H_GUARD */
/*
Modified: branches/io_rewiring/include/parrot/library.h
==============================================================================
--- branches/io_rewiring/include/parrot/library.h Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/include/parrot/library.h Sun Jun 7 23:41:42 2009 (r39444)
@@ -39,20 +39,6 @@
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
PARROT_EXPORT
-void Parrot_add_library_path(PARROT_INTERP,
- ARGIN(STRING *path),
- enum_lib_paths which)
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_EXPORT
-void Parrot_add_library_path_from_cstring(PARROT_INTERP,
- ARGIN(const char *path),
- enum_lib_paths which)
- __attribute__nonnull__(1)
- __attribute__nonnull__(2);
-
-PARROT_EXPORT
PARROT_CANNOT_RETURN_NULL
STRING * Parrot_get_runtime_path(PARROT_INTERP)
__attribute__nonnull__(1);
@@ -64,6 +50,20 @@
__attribute__nonnull__(1);
PARROT_EXPORT
+void Parrot_lib_add_path(PARROT_INTERP,
+ ARGIN(STRING *path_str),
+ enum_lib_paths which)
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
+void Parrot_lib_add_path_from_cstring(PARROT_INTERP,
+ ARGIN(const char *path),
+ enum_lib_paths which)
+ __attribute__nonnull__(1)
+ __attribute__nonnull__(2);
+
+PARROT_EXPORT
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
PARROT_MALLOC
@@ -100,17 +100,17 @@
FUNC_MODIFIES(*wo_ext)
FUNC_MODIFIES(*ext);
-#define ASSERT_ARGS_Parrot_add_library_path __attribute__unused__ int _ASSERT_ARGS_CHECK = \
- PARROT_ASSERT_ARG(interp) \
- || PARROT_ASSERT_ARG(path)
-#define ASSERT_ARGS_Parrot_add_library_path_from_cstring \
- __attribute__unused__ int _ASSERT_ARGS_CHECK = \
- PARROT_ASSERT_ARG(interp) \
- || PARROT_ASSERT_ARG(path)
#define ASSERT_ARGS_Parrot_get_runtime_path __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp)
#define ASSERT_ARGS_Parrot_get_runtime_prefix __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_lib_add_path __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(path_str)
+#define ASSERT_ARGS_Parrot_lib_add_path_from_cstring \
+ __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(path)
#define ASSERT_ARGS_Parrot_locate_runtime_file __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(file_name)
Modified: branches/io_rewiring/include/parrot/runcore_api.h
==============================================================================
--- branches/io_rewiring/include/parrot/runcore_api.h Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/include/parrot/runcore_api.h Sun Jun 7 23:41:42 2009 (r39444)
@@ -14,6 +14,66 @@
# define DO_OP(PC, INTERP) ((PC) = (((INTERP)->op_func_table)[*(PC)])((PC), (INTERP)))
+/* HEADERIZER BEGIN: src/runcore/main.c */
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
+
+PARROT_EXPORT
+void disable_event_checking(PARROT_INTERP)
+ __attribute__nonnull__(1);
+
+PARROT_EXPORT
+void enable_event_checking(PARROT_INTERP)
+ __attribute__nonnull__(1);
+
+void do_prederef(void **pc_prederef, PARROT_INTERP, int type)
+ __attribute__nonnull__(2);
+
+void dynop_register(PARROT_INTERP, PMC *lib_pmc)
+ __attribute__nonnull__(1);
+
+void exec_init_prederef(PARROT_INTERP, void *prederef_arena)
+ __attribute__nonnull__(1);
+
+PARROT_WARN_UNUSED_RESULT
+PARROT_CAN_RETURN_NULL
+void * init_jit(PARROT_INTERP, SHIM(opcode_t *pc))
+ __attribute__nonnull__(1);
+
+void Parrot_runcore_destroy(PARROT_INTERP)
+ __attribute__nonnull__(1);
+
+void Parrot_setup_event_func_ptrs(PARROT_INTERP)
+ __attribute__nonnull__(1);
+
+void prepare_for_run(PARROT_INTERP)
+ __attribute__nonnull__(1);
+
+void runops_int(PARROT_INTERP, size_t offset)
+ __attribute__nonnull__(1);
+
+#define ASSERT_ARGS_disable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_enable_event_checking __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_do_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_exec_init_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_init_jit __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_runcore_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_Parrot_setup_event_func_ptrs __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_prepare_for_run __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_runops_int __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
+/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
+/* HEADERIZER END: src/runcore/main.c */
+
/* HEADERIZER BEGIN: src/runcore/cores.c */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
Modified: branches/io_rewiring/include/parrot/string_funcs.h
==============================================================================
--- branches/io_rewiring/include/parrot/string_funcs.h Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/include/parrot/string_funcs.h Sun Jun 7 23:41:42 2009 (r39444)
@@ -497,6 +497,16 @@
PARROT_EXPORT
PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING * string_make_from_charset(PARROT_INTERP,
+ ARGIN_NULLOK(const char *buffer),
+ UINTVAL len,
+ INTVAL charset_nr,
+ UINTVAL flags)
+ __attribute__nonnull__(1);
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
INTVAL string_max_bytes(SHIM_INTERP, ARGIN(const STRING *s), UINTVAL nchars)
__attribute__nonnull__(2);
@@ -710,6 +720,8 @@
|| PARROT_ASSERT_ARG(s)
#define ASSERT_ARGS_string_make __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp)
+#define ASSERT_ARGS_string_make_from_charset __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
#define ASSERT_ARGS_string_max_bytes __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(s)
#define ASSERT_ARGS_string_ord __attribute__unused__ int _ASSERT_ARGS_CHECK = \
Modified: branches/io_rewiring/include/parrot/sub.h
==============================================================================
--- branches/io_rewiring/include/parrot/sub.h Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/include/parrot/sub.h Sun Jun 7 23:41:42 2009 (r39444)
@@ -178,7 +178,7 @@
else { \
(sub) = Parrot_get_sub_pmc_from_subclass((interp), (pmc)); \
} \
- } while (0);
+ } while (0)
/* the first entries must match Parrot_sub, so we can cast
* these two to the other type
Modified: branches/io_rewiring/lib/Parrot/Install.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Install.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/lib/Parrot/Install.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -5,7 +5,7 @@
use warnings;
use File::Basename qw(dirname);
use File::Copy;
-use File::Path; # mkpath
+use File::Path qw( mkpath );
use File::Spec;
use base qw( Exporter );
our @EXPORT_OK = qw(
@@ -175,9 +175,11 @@
sub create_directories {
my($destdir, $directories) = @_;
- mkpath([
- grep { ! -d } map { $destdir . $_ } keys %$directories
- ],0,0777);
+ my @dirs_created = mkpath(
+ ( grep { ! -d } map { $destdir . $_ } keys %$directories ),
+ { mode => 0777 },
+ );
+ return 1;
}
=head2 C<install_files()>
Modified: branches/io_rewiring/lib/Parrot/Manifest.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Manifest.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/lib/Parrot/Manifest.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,11 +1,58 @@
# $Id$
# Copyright (C) 2007, Parrot Foundation.
+=head1 NAME
+
+Parrot::Manifest - Re-create MANIFEST and MANIFEST.SKIP
+
+=head1 SYNOPSIS
+
+ use Parrot::Manifest;
+
+ $mani = Parrot::Manifest->new($0);
+
+ $manifest_lines_ref = $mani->prepare_manifest();
+ $need_for_files = $mani->determine_need_for_manifest($manifest_lines_ref);
+ $mani->print_manifest($manifest_lines_ref) if $need_for_files;
+
+ $print_str = $mani->prepare_manifest_skip();
+ $need_for_skip = $mani->determine_need_for_manifest_skip($print_str);
+ $mani->print_manifest_skip($print_str) if $need_for_skip;
+
+ $print_str = $mani->prepare_gitignore();
+ $mani->print_gitignore($print_str) if $need_for_skip;
+
+=cut
+
package Parrot::Manifest;
use strict;
use warnings;
use Carp;
+=head1 METHODS
+
+=head2 new
+
+ $mani = Parrot::Manifest->new({
+ script => $0,
+ file => $filename,
+ skip => $skipfilename,
+ gitignore => $gitignoresfilename,
+ })
+
+Creates a Parrot::Manifest object by asking C<svn status> for verbose output,
+and parsing the results.
+
+C<file> is the name of the file that the manifest will eventually be written
+to, and defaults to F<MANIFEST>. C<skip> is the name of the file that will
+hold the list of files to be skipped, and defaults to F<MANIFEST.SKIP>.
+C<gitignore> contains the same information as F<MANIFEST.SKIP> in a different
+format. It defaults to F<.gitignore>. The C<script> parameter is the name of
+the program invoking Parrot::Manifest, for use in messages.
+
+=cut
+
+# ...the results go into $self->{dirs} and $self->{versioned_files}
sub new {
my $class = shift;
my $argsref = shift;
@@ -55,6 +102,16 @@
return $self;
}
+=head2 prepare_manifest
+
+ $manifest_lines_ref = $mani->prepare_manifest();
+
+Prepares the manifest from the read in by the C<new()> method, and returns a
+hash of the files. The keys of the hash are the filenames, and the values are
+strings representing the package and a list of the meta flags.
+
+=cut
+
sub prepare_manifest {
my $self = shift;
@@ -66,6 +123,32 @@
return \%manifest_lines;
}
+=head2 determine_need_for_manifest
+
+ $need_for_files =
+ $mani->determine_need_for_manifest($manifest_lines_ref);
+
+Determines the need for the manifest. The checks are:
+
+=over 4
+
+=item *
+
+If there's no manifest yet, we need one.
+
+=item *
+
+If there's a difference between what's already there and what's in the list,
+we need a new one.
+
+=back
+
+If a new manifest is needed, the return value is C<1>; otherwise it is
+undefined. The value passed in is the hash as returned from I<e.g.>,
+C<prepare_manifest()>.
+
+=cut
+
sub determine_need_for_manifest {
my $self = shift;
my $proposed_files_ref = shift;
@@ -84,6 +167,15 @@
$different_patterns_count ? return 1 : return;
}
+=head2 print_manifest
+
+ $mani->print_manifest($manifest_lines_ref) if $need_for_files;
+
+Writes the manifest to a file. The example above does so only if an update is
+needed.
+
+=cut
+
my $text_file_coda = <<'CODA';
# Local variables:
# mode: text
@@ -101,8 +193,8 @@
#
# generated by $self->{script} $self->{time} UT
#
-# See tools/dev/install_files.pl for documentation on the
-# format of this file.
+# See below for documentation on the format of this file.
+#
# See docs/submissions.pod on how to recreate this file after SVN
# has been told about new or deleted files.
END_HEADER
@@ -119,6 +211,9 @@
return 1;
}
+# Gets the package and the meta flags for the given file. This function does
+# it based on the directory the file is in. If a particular file is needed,
+# then _get_special (below) provides that functionality.
sub _get_manifest_entry {
my $file = shift;
@@ -156,6 +251,7 @@
return $loc;
}
+# See comments for _get_manifest_entry, above
sub _get_special {
my %special = qw(
LICENSE [main]doc
@@ -191,6 +287,7 @@
return \%special;
}
+# Gets files currently listed in manifest, and returns a hash
sub _get_current_files {
my $self = shift;
@@ -212,6 +309,15 @@
return \%current_files;
}
+=head2 prepare_manifest_skip
+
+ $print_str = $mani->prepare_manifest_skip();
+
+Gets a list of the files that SVN ignores, and returns a string that can be
+put into F<MANIFEST.SKIP>.
+
+=cut
+
sub prepare_manifest_skip {
my $self = shift;
@@ -220,6 +326,15 @@
return $self->_compose_manifest_skip($ignores_ref);
}
+=head2 prepare_gitignore
+
+ $print_str = $mani->prepare_gitignore();
+
+Gets a list of the files that SVN ignores, and then writes it to the
+F<.gitignore> file.
+
+=cut
+
sub prepare_gitignore {
my $self = shift;
@@ -228,6 +343,27 @@
return $self->_compose_gitignore($ignores_ref);
}
+=head2 determine_need_for_manifest_skip
+
+ $need_for_skip =
+ $mani->determine_need_for_manifest_skip($print_str);
+
+Determines whether F<MANIFEST.SKIP> is needed. The tests used are:
+
+=over 4
+
+=item *
+
+If the file doesn't exist, we need one.
+
+=item *
+
+If the proposed and existing contents differ, we need one.
+
+=back
+
+=cut
+
sub determine_need_for_manifest_skip {
my $self = shift;
my $print_str = shift;
@@ -250,6 +386,14 @@
}
}
+=head2 print_manifest_skip
+
+ $mani->print_manifest_skip($print_str) if $need_for_skip;
+
+Writes F<MANIFEST.SKIP> to a file. The example above does so only if needed.
+
+=cut
+
sub print_manifest_skip {
my $self = shift;
my $print_str = shift;
@@ -264,6 +408,14 @@
return 1;
}
+=head2 print_gitignore
+
+ $mani->print_gitignore($print_str) if $need_for_skip;
+
+Writes the F<.gitignore> file. The example above does so only if needed.
+
+=cut
+
sub print_gitignore {
my $self = shift;
my $print_str = shift;
@@ -278,6 +430,7 @@
return 1;
}
+# Gets a list of files that SVN ignores
sub _get_ignores {
my $self = shift;
@@ -305,6 +458,7 @@
return \%ignores;
}
+# Turns the list of ignored files into .gitignore format
sub _compose_gitignore {
my $self = shift;
my $ignores_ref = shift;
@@ -337,6 +491,7 @@
return $print_str;
}
+# Turns list of ignored files into F<MANIFEST.SKIP> format
sub _compose_manifest_skip {
my $self = shift;
my $ignore_ref = shift;
@@ -378,6 +533,7 @@
return $print_str;
}
+# Gets a list of the currently skipped files from F<MANIFEST.SKIP>
sub _get_current_skips {
my $self = shift;
@@ -395,6 +551,7 @@
return \%current_skips;
}
+# Gets list of files we're proposing to skip
sub _get_proposed_skips {
my $print_str = shift;
@@ -411,28 +568,61 @@
1;
-#################### DOCUMENTATION ####################
+=head1 MANIFEST FORMAT
-=head1 NAME
+The format of the F<MANIFEST> (currently F<MANIFEST> and F<MANIFEST.generated>
+are used) is:
-Parrot::Manifest - Re-create MANIFEST and MANIFEST.SKIP
+ source_path <whitespace> [package]meta1,meta2,...
-=head1 SYNOPSIS
+or you may optionally specify a different destination path:
- use Parrot::Manifest;
+ source_path <whitespace> [package]meta1,meta2,... <whitespace> destination
- $mani = Parrot::Manifest->new($0);
+Additionally, there may be a C<*> in front of the whole line to designate
+a generated file:
- $manifest_lines_ref = $mani->prepare_manifest();
- $need_for_files = $mani->determine_need_for_manifest($manifest_lines_ref);
- $mani->print_manifest($manifest_lines_ref) if $need_for_files;
+ source_path <whitespace> *[package]meta1,meta2,... <whitespace> destination
- $print_str = $mani->prepare_manifest_skip();
- $need_for_skip = $mani->determine_need_for_manifest_skip($print_str);
- $mani->print_manifest_skip($print_str) if $need_for_skip;
+The square brackets around C<package> are literal. C<package> gives
+the name of the RPM that the given file will be installed for, and is
+only used by this script to skip files that are not members of any
+package.
- $print_str = $mani->prepare_gitignore();
- $mani->print_gitignore($print_str) if $need_for_skip;
+The various meta flags recognized are:
+
+=over 4
+
+=item C<doc>
+
+Tag this file with C<%doc> in the RPM, and omit the leading path (because
+F<rpm> will put it into a directory of its choosing).
+
+=item C<include>
+
+Write this file to the location given by the C<--includedir> option.
+
+=item C<lib>
+
+Write this file to the location given by the C<--libdir> option.
+
+=item C<bin>
+
+Write this file to the location given by the C<--bindir> option.
+
+=back
+
+The optional C<destination> field provides a general way to change
+where a file will be written to. It will be applied before any
+metadata tags.
+
+Example: if this line is in the F<MANIFEST.generated> file
+
+ languages/snorkfest/snork-compile [main]bin
+
+and the C<--bindir=/usr/parroty/bin>, then the generated
+F<parrot-E<lt>VERSIONE<gt>-1.E<lt>archE<gt>.rpm> file will contain the file
+C</usr/parroty/bin/snork-compile>.
=head1 SEE ALSO
Modified: branches/io_rewiring/lib/Parrot/Ops2pm.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Ops2pm.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/lib/Parrot/Ops2pm.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -323,7 +323,7 @@
my $cwd = cwd();
my $fulldir = File::Spec->catdir( $cwd, $self->{moddir} );
if ( !-d $fulldir ) {
- if ( !File::Path::mkpath( $fulldir, 0, 0755 ) ) {
+ if ( !File::Path::mkpath( $fulldir, { mode => 0755 } ) ) {
-d $fulldir
or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
}
@@ -412,7 +412,7 @@
my $cwd = cwd();
my $fulldir = File::Spec->catdir( $cwd, $self->{inc_dir} );
if ( !-d $fulldir ) {
- if ( !File::Path::mkpath( $fulldir, 0, 0755 ) ) {
+ if ( !File::Path::mkpath( $fulldir, { mode => 0755 } ) ) {
-d $fulldir
or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
}
Modified: branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/lib/Parrot/Pmc2c/Attribute.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -168,7 +168,7 @@
} \\
else \\
(dest) = ((Parrot_${pmcname}_attributes *)PMC_data(pmc))->$attrname; \\
- } while (0);
+ } while (0)
#define SETATTR_${pmcname}_${attrname}(interp, pmc, value) \\
do { \\
@@ -225,7 +225,7 @@
} \\
else \\
((Parrot_${pmcname}_attributes *)PMC_data(pmc))->$attrname = (value); \\
- } while (0);
+ } while (0)
EOA
Modified: branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/lib/Parrot/Pmc2c/PMCEmitter.pm Sun Jun 7 23:41:42 2009 (r39444)
@@ -333,7 +333,18 @@
return $ret;
}
+=item C<pre_method_gen>
+
+Generate switch-bases VTABLE for MULTI
+
+=cut
+
sub pre_method_gen {
+ my ($self) = @_;
+
+ $self->gen_switch_vtable;
+
+ 1;
}
=item C<gen_methods()>
@@ -407,7 +418,7 @@
my $full_sig = $pmcname . "," . $method->{MULTI_full_sig};
my $functionname = 'Parrot_' . $pmcname . '_' . $method->name;
push @multi_names, [ $method->symbol, $short_sig, $full_sig,
- $pmcname, $functionname ];
+ $pmcname, $functionname, $method ];
}
return ( \@multi_names );
}
@@ -936,6 +947,138 @@
return $self->{vtable};
}
+=item C<gen_switch_vtable>
+
+Generate switch-bases VTABLE for MULTI
+
+=cut
+
+sub gen_switch_vtable {
+ my ($self) = @_;
+
+ # No cookies for DynPMC. At least not now.
+ return 1 if $self->is_dynamic;
+
+ # Convert list of multis to name->[(type,,ssig,fsig,ns,func)] hash.
+ my %multi_methods;
+ foreach (@{$self->find_multi_functions}) {
+ my ($name, $ssig, $fsig, $ns, $func, $method) = @$_;
+ my @sig = split /,/, $fsig;
+ push @{ $multi_methods{ $name } }, [ $sig[1], $ssig, $fsig, $ns, $func, $method ];
+ }
+
+ # vtable methods
+ foreach my $method ( @{ $self->vtable->methods } ) {
+ my $vt_method_name = $method->name;
+ next if $vt_method_name eq 'class_init';
+
+ next if $self->implements_vtable($vt_method_name);
+ next unless exists $multi_methods{$vt_method_name};
+
+ my $multis = $multi_methods{$vt_method_name};
+
+ # Gather "case :"
+ my @cases = map { $self->generate_single_case($vt_method_name, $_) } @$multis;
+ my $cases = join "\n", @cases;
+
+ my $body = <<"BODY";
+ INTVAL type = VTABLE_type(INTERP, value);
+ /* For dynpmc fallback to MMD */
+ if ((type >= enum_class_core_max) || (SELF.type() >= enum_class_core_max))
+ type = enum_class_core_max;
+ switch(type) {
+$cases
+ }
+BODY
+
+ my $vtable = $method->clone({
+ body => Parrot::Pmc2c::Emitter->text($body),
+ });
+ $self->add_method($vtable);
+ }
+
+ 1;
+}
+
+# Generate signle case for switch VTABLE
+sub generate_single_case {
+ my ($self, $vt_method_name, $multi) = @_;
+
+ my ($type, $ssig, $fsig, $ns, $func, $impl) = @$multi;
+ my $case;
+
+ # Gather parameters names
+ my @parameters = map { s/\s*PMC\s*\*\s*//; $_ } split (/,/, $impl->parameters);
+ my $parameters = join ', ', @parameters;
+ # ISO C forbids return with expression from void functions.
+ my $return = $impl->return_type =~ /^void\s*$/
+ ? ''
+ : 'return ';
+
+ if ($type eq 'DEFAULT' || $type eq 'PMC') {
+ # For default case we have to handle return manually.
+ my ($pcc_signature, $retval, $call_tail, $pcc_return)
+ = $self->gen_defaul_case_wrapping($ssig, @parameters);
+
+ $case = <<"CASE";
+ default:
+ if (type < enum_class_core_max)
+ $return$func(INTERP, SELF, $parameters);
+ else {
+ $retval
+ Parrot_mmd_multi_dispatch_from_c_args(INTERP, "$vt_method_name", "$pcc_signature", SELF, $parameters$call_tail);
+ $pcc_return
+ }
+ break;
+CASE
+ }
+ else {
+ $case = <<"CASE";
+ case enum_class_$type:
+ $return$func(INTERP, SELF, $parameters);
+ break;
+CASE
+ }
+
+ $case;
+}
+
+# Generate (pcc_signature, retval holder, pcc_call_tail, return statement)
+# for default case in switch.
+sub gen_defaul_case_wrapping {
+ my ($self, $ssig, @parameters) = @_;
+
+ my $letter = substr($ssig, 0, 1);
+ if ($letter eq 'I') {
+ return (
+ "PP->" . $letter,
+ "INTVAL retval;",
+ ', &retval',
+ 'return retval;',
+ );
+ }
+ elsif ($letter eq 'P') {
+ return (
+ 'PPP->P',
+ '',
+ ", &$parameters[1]",
+ "return $parameters[1];",
+ );
+ }
+ elsif ($letter eq 'v') {
+ return (
+ 'PP->',
+ '',
+ '',
+ 'return;',
+ );
+ }
+ else {
+ die "Can't handle signature $ssig!";
+ }
+}
+
+
1;
# Local Variables:
Modified: branches/io_rewiring/ports/ubuntu/changelog
==============================================================================
--- branches/io_rewiring/ports/ubuntu/changelog Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/ports/ubuntu/changelog Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,7 +1,9 @@
-parrot (1.0.0-1ubuntu1~ppa10~karmic1) karmic; urgency=low
+parrot (1.0.0-1ubuntu1) karmic; urgency=low
* Resynchronize with Debian unstable.
+ * Add a patch to detect the lpia architecture, to correctly configure for
+ unaligned function pointers.
- -- Allison Randal <allison at parrot.org> Thu, 14 May 2009 17:25:13 -0700
+ -- Allison Randal <allison at parrot.org> Thu, 28 May 2009 13:13:12 -0700
parrot (1.0.0-1) unstable; urgency=low
* New upstream release
Modified: branches/io_rewiring/runtime/parrot/library/TclLibrary.pir
==============================================================================
--- branches/io_rewiring/runtime/parrot/library/TclLibrary.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/runtime/parrot/library/TclLibrary.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -204,6 +204,8 @@
push libnames, 'tcl84'
push libnames, 'libtcl8.5'
push libnames, 'libtcl8.4'
+ push libnames, 'libtcl8.5.so'
+ push libnames, 'libtcl8.4.so'
standard_names_e:
.local pmc libtcl
Modified: branches/io_rewiring/runtime/parrot/library/libpcre.pir
==============================================================================
--- branches/io_rewiring/runtime/parrot/library/libpcre.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/runtime/parrot/library/libpcre.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -35,11 +35,11 @@
## allocate space in string for error message
repeat error, " ", error_size
- PCRE_NCI_compile= get_hll_global ['PCRE::NCI'], 'PCRE_compile'
+ PCRE_NCI_compile = get_hll_global ['PCRE::NCI'], 'PCRE_compile'
.local pmc code
- code= PCRE_NCI_compile( pat, options, error, errptr, NULL )
+ code = PCRE_NCI_compile( pat, options, error, errptr, NULL )
.local int is_code_defined
is_code_defined = defined code
@@ -66,18 +66,18 @@
## osize -- 1/(2/3) * 4 * 2
.local int osize
- osize= 12
+ osize = 12
## number of result pairs
.local int num_result_pairs
- num_result_pairs= 10
+ num_result_pairs = 10
.local int ovector_length
- ovector_length= osize * num_result_pairs
+ ovector_length = osize * num_result_pairs
.local pmc ovector
- ovector= new 'ManagedStruct'
- ovector= ovector_length
+ ovector = new 'ManagedStruct'
+ ovector = ovector_length
## on 32 bit systems
.local pmc PCRE_NCI_exec
@@ -85,7 +85,7 @@
.local int ok
- ok= PCRE_NCI_exec( regex, NULL, s, len, start, options, ovector, 10 )
+ ok = PCRE_NCI_exec( regex, NULL, s, len, start, options, ovector, 10 )
.return( ok, ovector )
.end
Modified: branches/io_rewiring/runtime/parrot/library/pcre.pir
==============================================================================
--- branches/io_rewiring/runtime/parrot/library/pcre.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/runtime/parrot/library/pcre.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,4 +1,4 @@
-# Copyright (C) 2004-2008, Parrot Foundation.
+# Copyright (C) 2004-2009, Parrot Foundation.
# $Id$
=head1 TITLE
@@ -8,7 +8,10 @@
=head1 SYNOPSIS
load_bytecode 'pcre.pbc'
- lib = pcre_init()
+
+ .local pmc func, lib
+ func = get_hll_global ['PCRE'], 'init'
+ lib = func()
func = get_hll_global ['PCRE'], 'compile'
( regex, error, errptr )= func( pat, options )
@@ -194,7 +197,7 @@
.sub version
.local pmc pcre_function
- pcre_function= get_hll_global ['PCRE::NCI'], 'PCRE_version'
+ pcre_function = get_hll_global ['PCRE::NCI'], 'PCRE_version'
.local string ver
Modified: branches/io_rewiring/src/dynext.c
==============================================================================
--- branches/io_rewiring/src/dynext.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/dynext.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -352,6 +352,14 @@
return path;
}
#endif
+
+ /* And after-finally, let the OS use his own search */
+ if (!STRING_IS_EMPTY(lib)) {
+ *handle = dlopen_string(interp, lib);
+ if (*handle)
+ return lib;
+ }
+
err = Parrot_dlerror();
Parrot_warn(interp, PARROT_WARNINGS_DYNEXT_FLAG,
"Couldn't load '%Ss': %s\n",
Modified: branches/io_rewiring/src/embed.c
==============================================================================
--- branches/io_rewiring/src/embed.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/embed.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -106,6 +106,7 @@
return make_interpreter(parent, PARROT_NO_FLAGS);
}
+
/*
=item C<void Parrot_init_stacktop(PARROT_INTERP, void *stack_top)>
@@ -388,17 +389,17 @@
PackFile *
Parrot_pbc_read(PARROT_INTERP, ARGIN_NULLOK(const char *fullname), const int debug)
{
+ PackFile *pf;
+ char *program_code;
FILE *io = NULL;
INTVAL is_mapped = 0;
- char *program_code;
- PackFile *pf;
INTVAL program_size;
#ifdef PARROT_HAS_HEADER_SYSMMAN
int fd = -1;
#endif
- if (fullname == NULL || STREQ(fullname, "-")) {
+ if (!fullname || STREQ(fullname, "-")) {
/* read from STDIN */
io = stdin;
@@ -418,8 +419,9 @@
/* we may need to relax this if we want to read bytecode from pipes */
if (!Parrot_stat_info_intval(interp, fs, STAT_ISREG)) {
- Parrot_io_eprintf(interp, "Parrot VM: '%s', is not a regular file %i.\n",
- fullname, errno);
+ Parrot_io_eprintf(interp,
+ "Parrot VM: '%s', is not a regular file %i.\n",
+ fullname, errno);
return NULL;
}
@@ -446,17 +448,18 @@
INTVAL wanted = program_size;
size_t read_result;
- program_code = (char *)mem_sys_allocate(chunk_size);
+ program_code = mem_allocate_n_typed(chunk_size, char);
+ cursor = program_code;
program_size = 0;
- cursor = (char *)program_code;
while ((read_result = fread(cursor, 1, chunk_size, io)) > 0) {
program_size += read_result;
+
if (program_size == wanted)
break;
+
chunk_size = 1024;
- program_code =
- (char *)mem_sys_realloc(program_code, program_size + chunk_size);
+ mem_realloc_n_typed(program_code, program_size + chunk_size, char);
if (!program_code) {
Parrot_io_eprintf(interp,
@@ -466,15 +469,17 @@
return NULL;
}
- cursor = (char *)program_code + program_size;
+ cursor = (char *)(program_code + program_size);
}
if (ferror(io)) {
- Parrot_io_eprintf(interp, "Parrot VM: Problem reading packfile from PIO: code %d.\n",
+ Parrot_io_eprintf(interp,
+ "Parrot VM: Problem reading packfile from PIO: code %d.\n",
ferror(io));
mem_sys_free(program_code);
return NULL;
}
+
fclose(io);
}
else {
@@ -507,12 +512,13 @@
/* try again, now with IO reading the file */
io = fopen(fullname, "rb");
if (!io) {
- Parrot_io_eprintf(interp, "Parrot VM: Can't open %s, code %i.\n",
- fullname, errno);
+ Parrot_io_eprintf(interp,
+ "Parrot VM: Can't open %s, code %i.\n", fullname, errno);
return NULL;
}
goto again;
}
+
is_mapped = 1;
#else /* PARROT_HAS_HEADER_SYSMMAN */
@@ -539,8 +545,8 @@
return NULL;
}
+ /* Set :main routine */
if (!(pf->options & PFOPT_HEADERONLY))
- /* Set :main routine */
do_sub_pragmas(interp, pf->cur_cs, PBC_PBC, NULL);
/* JITting and/or prederefing the sub/the bytecode is done
@@ -573,7 +579,7 @@
void
Parrot_pbc_load(PARROT_INTERP, NOTNULL(PackFile *pf))
{
- if (pf == NULL) {
+ if (!pf) {
Parrot_io_eprintf(interp, "Invalid packfile\n");
return;
}
@@ -582,6 +588,7 @@
interp->code = pf->cur_cs;
}
+
/*
=item C<void Parrot_pbc_fixup_loaded(PARROT_INTERP)>
@@ -599,6 +606,7 @@
PackFile_fixup_subs(interp, PBC_LOADED, NULL);
}
+
/*
=item C<static PMC* setup_argv(PARROT_INTERP, int argc, char **argv)>
@@ -614,9 +622,8 @@
setup_argv(PARROT_INTERP, int argc, ARGIN(char **argv))
{
ASSERT_ARGS(setup_argv)
+ PMC *userargv = pmc_new(interp, enum_class_ResizableStringArray);
INTVAL i;
- PMC *userargv;
-
if (Interp_debug_TEST(interp, PARROT_START_DEBUG_FLAG)) {
Parrot_io_eprintf(interp,
@@ -624,14 +631,10 @@
argc);
}
- userargv = pmc_new_noinit(interp, enum_class_ResizableStringArray);
-
/* immediately anchor pmc to root set */
VTABLE_set_pmc_keyed_int(interp, interp->iglobals,
(INTVAL)IGLOBALS_ARGV_LIST, userargv);
- VTABLE_init(interp, userargv);
-
for (i = 0; i < argc; i++) {
/* Run through argv, adding everything to @ARGS. */
STRING * const arg =
@@ -726,10 +729,10 @@
calibrate(PARROT_INTERP)
{
ASSERT_ARGS(calibrate)
- size_t count = 1000000;
- size_t n = count;
opcode_t code[] = { 1 }; /* noop */
opcode_t *pc = code;
+ size_t count = 1000000;
+ size_t n = count;
FLOATVAL start = Parrot_floatval_time();
FLOATVAL now = start;
@@ -869,7 +872,6 @@
set_current_sub(PARROT_INTERP)
{
ASSERT_ARGS(set_current_sub)
- opcode_t i;
Parrot_sub *sub_pmc_sub;
PMC *sub_pmc;
@@ -877,6 +879,8 @@
PackFile_FixupTable * const ft = cur_cs->fixups;
PackFile_ConstTable * const ct = cur_cs->const_table;
+ opcode_t i;
+
/*
* Walk the fixup table. The first Sub-like entry should be our
* entry point with the address at our resume_offset.
@@ -903,7 +907,7 @@
}
}
- /* if we didn't find anything put a dummy PMC into current_sub */
+ /* if we didn't find anything, put a dummy PMC into current_sub */
sub_pmc = pmc_new(interp, enum_class_Sub);
PMC_get_sub(interp, sub_pmc, sub_pmc_sub);
@@ -971,7 +975,8 @@
Parrot_io_eprintf(interp, "EXEC core");
break;
default:
- Parrot_ex_throw_from_c_args(interp, NULL, 1, "Unknown run core");
+ Parrot_ex_throw_from_c_args(interp, NULL, 1,
+ "Unknown run core");
}
Parrot_io_eprintf(interp, " ***\n");
@@ -1051,11 +1056,12 @@
return NULL;
}
+
/*
=item C<static void print_constant_table(PARROT_INTERP)>
-Print the contents of the constants table.
+Prints the contents of the constants table.
=cut
@@ -1087,17 +1093,20 @@
break;
case PFC_PMC: {
Parrot_io_printf(interp, "PMC_CONST(%d): ", i);
+
switch (c->u.key->vtable->base_type) {
- /* each PBC file has a ParrotInterpreter, but it can't stringify by itself */
+ /* each PBC file has a ParrotInterpreter, but it can't
+ * stringify by itself */
case enum_class_ParrotInterpreter:
Parrot_io_printf(interp, "'ParrotInterpreter'");
break;
- /* FixedIntegerArrays are used for signatures, handy to print */
+ /* FixedIntegerArrays used for signatures, handy to print */
case enum_class_FixedIntegerArray: {
INTVAL n = VTABLE_elements(interp, c->u.key);
INTVAL i;
Parrot_io_printf(interp, "[");
+
for (i = 0; i < n; ++i) {
INTVAL val = VTABLE_get_integer_keyed_int(interp, c->u.key, i);
Parrot_io_printf(interp, "%d", val);
@@ -1237,9 +1246,8 @@
=item C<void Parrot_run_native(PARROT_INTERP, native_func_t func)>
-Run the C function C<func> through the program C<[enternative, end]>.
-This ensures that the function is run with the same setup as in other
-run loops.
+Runs the C function C<func> through the program C<[enternative, end]>. This
+ensures that the function runs with the same setup as in other run loops.
This function is used in some of the source tests in F<t/src> which use
the interpreter outside a runloop.
@@ -1273,12 +1281,13 @@
runops(interp, interp->resume_offset);
}
+
/*
=item C<Parrot_PMC Parrot_compile_string(PARROT_INTERP, Parrot_String type,
const char *code, Parrot_String *error)>
-Compile code string.
+Compiles a code string.
=cut
@@ -1289,16 +1298,14 @@
Parrot_compile_string(PARROT_INTERP, Parrot_String type,
const char *code, Parrot_String *error)
{
+ /* For the benefit of embedders that do not load any pbc
+ * before compiling a string */
- /* For the benefit of embedders that does not load any pbc
- * before compiling a string
- */
- if (! interp->initial_pf) {
+ if (!interp->initial_pf) {
PackFile *pf = PackFile_new_dummy(interp, "compile_string");
/* Assumption: there is no valid reason to fail to create it.
- * If the assumption changes, replace the assertio with a
- * runtime check
- */
+ * If the assumption changes, replace the assertion with a
+ * runtime check */
PARROT_ASSERT(interp->initial_pf);
}
@@ -1312,6 +1319,7 @@
return NULL;
}
+
/*
=back
Modified: branches/io_rewiring/src/gc/alloc_register.c
==============================================================================
--- branches/io_rewiring/src/gc/alloc_register.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/gc/alloc_register.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -181,6 +181,7 @@
mem_sys_free(ptr);
ptr = next;
}
+ interp->ctx_mem.free_list[slot] = NULL;
}
mem_sys_free(interp->ctx_mem.free_list);
}
Modified: branches/io_rewiring/src/gc/gc_ms.c
==============================================================================
--- branches/io_rewiring/src/gc/gc_ms.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/gc/gc_ms.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -123,6 +123,7 @@
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
/* HEADERIZER END: static */
+/* the percent of used Arena items at which to trace next time through */
#define GC_DEBUG_REPLENISH_LEVEL_FACTOR 0.0
#define GC_DEBUG_UNITS_PER_ALLOC_GROWTH_FACTOR 1
#define REPLENISH_LEVEL_FACTOR 0.3
@@ -372,7 +373,7 @@
if (arena->used == arena->total_objects)
Parrot_gc_mark_and_sweep(interp, GC_trace_stack_FLAG);
- if (pool->num_free_objects <= pool->replenish_level)
+ if (pool->num_free_objects > pool->replenish_level)
pool->skip = 1;
}
}
Modified: branches/io_rewiring/src/hash.c
==============================================================================
--- branches/io_rewiring/src/hash.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/hash.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -33,7 +33,7 @@
/* the number of entries above which it's faster to hash the hashval instead of
* looping over the used HashBuckets directly */
#define SMALL_HASH_SIZE 4
-#define INITIAL_BUCKETS 16
+#define INITIAL_BUCKETS 4
/* HEADERIZER HFILE: include/parrot/hash.h */
Modified: branches/io_rewiring/src/interp/inter_create.c
==============================================================================
--- branches/io_rewiring/src/interp/inter_create.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/interp/inter_create.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -20,6 +20,7 @@
#include "parrot/parrot.h"
+#include "parrot/runcore_api.h"
#include "parrot/oplib/core_ops.h"
#include "../compilers/imcc/imc.h"
#include "inter_create.str"
@@ -374,10 +375,9 @@
*/
/* we destroy all child interpreters and the last one too,
- * if the --leak-test commandline was given
- */
- if (! (interp->parent_interpreter ||
- Interp_flags_TEST(interp, PARROT_DESTROY_FLAG)))
+ * if the --leak-test commandline was given */
+ if (! (interp->parent_interpreter
+ || Interp_flags_TEST(interp, PARROT_DESTROY_FLAG)))
return;
if (interp->parent_interpreter
@@ -419,9 +419,6 @@
interp->profile = NULL;
}
- /* deinit op_lib */
- (void) PARROT_CORE_OPLIB_INIT(0);
-
destroy_context(interp);
destroy_runloop_jump_points(interp);
@@ -433,6 +430,8 @@
/* strings, charsets, encodings - only once */
Parrot_str_finish(interp);
+ PARROT_CORE_OPLIB_INIT(0);
+
if (!interp->parent_interpreter) {
if (interp->thread_data)
mem_sys_free(interp->thread_data);
@@ -444,6 +443,9 @@
if (interp->n_libs > 0) {
mem_sys_free(interp->op_info_table);
mem_sys_free(interp->op_func_table);
+
+ /* deinit op_lib */
+ Parrot_runcore_destroy(interp);
}
MUTEX_DESTROY(interpreter_array_mutex);
Modified: branches/io_rewiring/src/library.c
==============================================================================
--- branches/io_rewiring/src/library.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/library.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -594,10 +594,10 @@
/*
-=item C<void Parrot_add_library_path(PARROT_INTERP, STRING *path, enum_lib_paths
+=item C<void Parrot_lib_add_path(PARROT_INTERP, STRING *path_str, enum_lib_paths
which)>
-Add a path to the library searchpath of the given type.
+Add a path to the library searchpath of the given type (passing in a STRING).
=cut
@@ -605,41 +605,38 @@
PARROT_EXPORT
void
-Parrot_add_library_path(PARROT_INTERP,
- ARGIN(STRING *path),
+Parrot_lib_add_path(PARROT_INTERP,
+ ARGIN(STRING *path_str),
enum_lib_paths which)
{
- ASSERT_ARGS(Parrot_add_library_path)
+ ASSERT_ARGS(Parrot_lib_add_path)
PMC * const iglobals = interp->iglobals;
PMC * const lib_paths = VTABLE_get_pmc_keyed_int(interp, iglobals,
IGLOBALS_LIB_PATHS);
PMC * const paths = VTABLE_get_pmc_keyed_int(interp, lib_paths, which);
- VTABLE_push_string(interp, paths, path);
+ VTABLE_push_string(interp, paths, path_str);
}
/*
-=item C<void Parrot_add_library_path_from_cstring(PARROT_INTERP, const char
-*path, enum_lib_paths which)>
+=item C<void Parrot_lib_add_path_from_cstring(PARROT_INTERP, const char *path,
+enum_lib_paths which)>
Add a path to the library searchpath of the given type (passing in a C string).
-This function is just an interface to C<Parrot_add_library_path> for low-level
-code.
-
=cut
*/
PARROT_EXPORT
void
-Parrot_add_library_path_from_cstring(PARROT_INTERP,
+Parrot_lib_add_path_from_cstring(PARROT_INTERP,
ARGIN(const char *path),
enum_lib_paths which)
{
- ASSERT_ARGS(Parrot_add_library_path_from_cstring)
+ ASSERT_ARGS(Parrot_lib_add_path_from_cstring)
STRING * const path_str = Parrot_str_new(interp, path, 0);
- Parrot_add_library_path(interp, path_str, which);
+ Parrot_lib_add_path(interp, path_str, which);
}
/*
Modified: branches/io_rewiring/src/multidispatch.c
==============================================================================
--- branches/io_rewiring/src/multidispatch.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/multidispatch.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -1356,10 +1356,6 @@
/* Create an NCI sub for the C function */
PMC *sub_obj = constant_pmc_new(interp, enum_class_NCI);
-#ifdef PARROT_HAS_ALIGNED_FUNCPTR
- PARROT_ASSERT((PTR2UINTVAL(func_ptr) & 3) == 0);
-#endif
-
VTABLE_set_pointer_keyed_str(interp, sub_obj, short_sig,
F2DPTR(func_ptr));
Modified: branches/io_rewiring/src/oo.c
==============================================================================
--- branches/io_rewiring/src/oo.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/oo.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -59,6 +59,12 @@
__attribute__nonnull__(2)
__attribute__nonnull__(3);
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC * get_pmc_proxy(PARROT_INTERP, INTVAL type)
+ __attribute__nonnull__(1);
+
static void invalidate_all_caches(PARROT_INTERP)
__attribute__nonnull__(1);
@@ -79,6 +85,8 @@
PARROT_ASSERT_ARG(interp) \
|| PARROT_ASSERT_ARG(_class) \
|| PARROT_ASSERT_ARG(method_name)
+#define ASSERT_ARGS_get_pmc_proxy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
+ PARROT_ASSERT_ARG(interp)
#define ASSERT_ARGS_invalidate_all_caches __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp)
#define ASSERT_ARGS_invalidate_type_caches __attribute__unused__ int _ASSERT_ARGS_CHECK = \
@@ -236,14 +244,7 @@
else
type = pmc_type(interp, VTABLE_get_string(interp, key));
- /* Reject invalid type numbers */
- if (type > interp->n_vtable_max || type <= 0)
- classobj = PMCNULL;
- else {
- PMC * const type_num = pmc_new(interp, enum_class_Integer);
- VTABLE_set_integer_native(interp, type_num, type);
- classobj = pmc_new_init(interp, enum_class_PMCProxy, type_num);
- }
+ classobj = get_pmc_proxy(interp, type);
}
return classobj;
@@ -299,9 +300,9 @@
/* Now create the underlying structure, and clone attributes list.class. */
cloned_guts = mem_allocate_zeroed_typed(Parrot_Object_attributes);
+ PMC_data(cloned) = cloned_guts;
cloned_guts->_class = obj->_class;
cloned_guts->attrib_store = VTABLE_clone(interp, obj->attrib_store);
- PMC_data(cloned) = cloned_guts;
num_attrs = VTABLE_elements(interp, cloned_guts->attrib_store);
for (i = 0; i < num_attrs; i++) {
PMC * const to_clone = VTABLE_get_pmc_keyed_int(interp, cloned_guts->attrib_store, i);
@@ -358,6 +359,51 @@
/*
+=item C<static PMC * get_pmc_proxy(PARROT_INTERP, INTVAL type)>
+
+Get the PMC proxy for a PMC with the given type, creating it if does not exist.
+If type is not a valid type, return PMCNULL. This code assumes that
+all PMCProxy objects live in the 'parrot' HLL namespace -- if/when
+we allow PMC types to exist in other HLL namespaces, this code will
+need to be updated.
+
+For internal use only.
+
+=cut
+
+*/
+
+PARROT_INLINE
+PARROT_CANNOT_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
+static PMC *
+get_pmc_proxy(PARROT_INTERP, INTVAL type)
+{
+ ASSERT_ARGS(get_pmc_proxy)
+
+ /* Check if not a PMC or invalid type number */
+ if (type > interp->n_vtable_max || type <= 0)
+ return PMCNULL;
+ else {
+ PMC * const parrot_hll = Parrot_get_namespace_keyed_str(interp, interp->root_namespace, CONST_STRING(interp, "parrot"));
+ PMC * const pmc_ns =
+ Parrot_make_namespace_keyed_str(interp, parrot_hll,
+ interp->vtables[type]->whoami);
+ PMC * proxy = VTABLE_get_class(interp, pmc_ns);
+
+ /* Create proxy if not found */
+ if (PMC_IS_NULL(proxy)) {
+ PMC * const type_num = pmc_new(interp, enum_class_Integer);
+ VTABLE_set_integer_native(interp, type_num, type);
+ proxy = pmc_new_init(interp, enum_class_PMCProxy, type_num);
+ Parrot_PCCINVOKE(interp, pmc_ns, CONST_STRING(interp, "set_class"), "P->", proxy);
+ }
+ return proxy;
+ }
+}
+
+/*
+
=item C<PMC * Parrot_oo_get_class_str(PARROT_INTERP, STRING *name)>
Lookup a class object from a builtin string.
@@ -373,35 +419,19 @@
Parrot_oo_get_class_str(PARROT_INTERP, ARGIN(STRING *name))
{
ASSERT_ARGS(Parrot_oo_get_class_str)
+
+ /* First check in current HLL namespace */
PMC * const hll_ns = VTABLE_get_pmc_keyed_int(interp, interp->HLL_namespace,
CONTEXT(interp)->current_HLL);
PMC * const ns = Parrot_get_namespace_keyed_str(interp, hll_ns, name);
PMC * const _class = PMC_IS_NULL(ns)
? PMCNULL : VTABLE_get_class(interp, ns);
- /* Look up a low-level class and create a proxy */
- if (PMC_IS_NULL(_class)) {
- const INTVAL type = pmc_type(interp, name);
-
- /* Reject invalid type numbers */
- if (type > interp->n_vtable_max || type <= 0)
- return PMCNULL;
- else {
- PMC * new_class;
- PMC * new_ns;
- PMC * const type_num = pmc_new(interp, enum_class_Integer);
- VTABLE_set_integer_native(interp, type_num, type);
- new_ns = ns;
- new_class = pmc_new_init(interp, enum_class_PMCProxy, type_num);
- if (ns->vtable->base_type != enum_class_NameSpace) {
- new_ns = Parrot_make_namespace_keyed_str(interp, hll_ns, name);
- }
- Parrot_PCCINVOKE(interp, new_ns, CONST_STRING(interp, "set_class"), "P->", new_class);
- return new_class;
- }
- }
-
- return _class;
+ /* If not found, check for a PMC */
+ if (PMC_IS_NULL(_class))
+ return get_pmc_proxy(interp, pmc_type(interp, name));
+ else
+ return _class;
}
@@ -985,8 +1015,7 @@
sizeof (Meth_cache_entry ***) * mc->mc_size);
}
else {
- mc->idx = (Meth_cache_entry ***)mem_sys_allocate_zeroed(
- sizeof (Meth_cache_entry ***) * (type + 1));
+ mc->idx = mem_allocate_n_zeroed_typed(type + 1, Meth_cache_entry**);
}
mc->mc_size = type + 1;
}
Modified: branches/io_rewiring/src/ops/cmp.ops
==============================================================================
--- branches/io_rewiring/src/ops/cmp.ops Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/ops/cmp.ops Sun Jun 7 23:41:42 2009 (r39444)
@@ -614,7 +614,6 @@
=item B<cmp_num>(out INT, invar PMC, invar PMC)
-
Sets $1 to -1 if $2 < $3, +1 if $2 > $3, and 0 otherwise.
=cut
@@ -666,6 +665,18 @@
$1 = VTABLE_cmp_num(interp, $2, $3);
}
+=item B<cmp_pmc>(out PMC, invar PMC, invar PMC)
+
+Does the same thing as the other cmp_* variants, but puts a PMC in $1. This is
+useful for avoiding the semipredicate problem in HLLs where two aggregate PMCs
+are not always comparable.
+
+=cut
+
+inline op cmp_pmc(out PMC, invar PMC, invar PMC) :base_core {
+ $1 = VTABLE_cmp_pmc(interp, $2, $3);
+}
+
########################################
=item B<issame>(out INT, invar PMC, invar PMC)
Modified: branches/io_rewiring/src/ops/io.ops
==============================================================================
--- branches/io_rewiring/src/ops/io.ops Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/ops/io.ops Sun Jun 7 23:41:42 2009 (r39444)
@@ -90,19 +90,27 @@
#########################################
+=item B<setstdin>(invar PMC)
+
+Sets the standard input for a bare C<read> op to go to the supplied PMC.
+Call C<getstdin> first if you care about retaining the previous PMC.
+
=item B<setstdout>(invar PMC)
-Sets the standard output for a bare C<print> op to go to the supplied ParrotIO
-PMC. Call C<getstdout> first if you care about retaining the previous PMC.
+Sets the standard output for a bare C<print> op to go to the supplied PMC.
+Call C<getstdout> first if you care about retaining the previous PMC.
=item B<setstderr>(invar PMC)
-Sets the standard error for a bare C<printerr> op to go to the supplied
-ParrotIO PMC. Call C<getstderr> first if you care about retaining the previous
-PMC.
+Sets the standard error for a bare C<printerr> op to go to the supplied PMC.
+Call C<getstderr> first if you care about retaining the previous PMC.
=cut
+inline op setstdin(invar PMC) :base_io {
+ _PIO_STDIN(interp) = $1;
+}
+
inline op setstdout(invar PMC) :base_io {
_PIO_STDOUT(interp) = $1;
}
@@ -235,7 +243,7 @@
STRING * const s = $1;
if (s && Parrot_str_byte_length(interp, s))
Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
- Parrot_io_puts(interp, _PIO_STDOUT(interp), "\n");
+ Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
}
op say(invar PMC) :base_io {
@@ -251,7 +259,7 @@
STRING * const s = VTABLE_get_string(interp, p);
if (s)
Parrot_io_putps(interp, _PIO_STDOUT(interp), s);
- Parrot_io_puts(interp, _PIO_STDOUT(interp), "\n");
+ Parrot_io_putps(interp, _PIO_STDOUT(interp), Parrot_str_new_constant(interp, "\n"));
}
}
Modified: branches/io_rewiring/src/ops/ops.num
==============================================================================
--- branches/io_rewiring/src/ops/ops.num Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/ops/ops.num Sun Jun 7 23:41:42 2009 (r39444)
@@ -380,899 +380,901 @@
cmp_i_p_sc 356
cmp_str_i_p_p 357
cmp_num_i_p_p 358
-issame_i_p_p 359
-issame_i_s_s 360
-issame_i_sc_s 361
-issame_i_s_sc 362
-issame_i_sc_sc 363
-isntsame_i_p_p 364
-isntsame_i_s_s 365
-isntsame_i_sc_s 366
-isntsame_i_s_sc 367
-isntsame_i_sc_sc 368
-istrue_i_p 369
-isfalse_i_p 370
-isnull_i_p 371
-isnull_i_pc 372
-isgt_i_p_p 373
-isge_i_p_p 374
-isle_i_i_i 375
-isle_i_ic_i 376
-isle_i_i_ic 377
-isle_i_n_n 378
-isle_i_nc_n 379
-isle_i_n_nc 380
-isle_i_s_s 381
-isle_i_sc_s 382
-isle_i_s_sc 383
-isle_i_p_p 384
-islt_i_i_i 385
-islt_i_ic_i 386
-islt_i_i_ic 387
-islt_i_n_n 388
-islt_i_nc_n 389
-islt_i_n_nc 390
-islt_i_s_s 391
-islt_i_sc_s 392
-islt_i_s_sc 393
-islt_i_p_p 394
-iseq_i_i_i 395
-iseq_i_ic_i 396
-iseq_i_i_ic 397
-iseq_i_n_n 398
-iseq_i_nc_n 399
-iseq_i_n_nc 400
-iseq_i_s_s 401
-iseq_i_sc_s 402
-iseq_i_s_sc 403
-iseq_i_p_p 404
-isne_i_i_i 405
-isne_i_ic_i 406
-isne_i_i_ic 407
-isne_i_n_n 408
-isne_i_nc_n 409
-isne_i_n_nc 410
-isne_i_s_s 411
-isne_i_sc_s 412
-isne_i_s_sc 413
-isne_i_p_p 414
-and_i_i_i 415
-and_i_ic_i 416
-and_i_i_ic 417
-and_p_p_p 418
-not_i 419
-not_i_i 420
-not_p 421
-not_p_p 422
-or_i_i_i 423
-or_i_ic_i 424
-or_i_i_ic 425
-or_p_p_p 426
-xor_i_i_i 427
-xor_i_ic_i 428
-xor_i_i_ic 429
-xor_p_p_p 430
-debug_init 431
-debug_load_sc 432
-debug_break 433
-debug_print 434
-backtrace 435
-getline_i 436
-getfile_s 437
-close_p 438
-fdopen_p_i_s 439
-fdopen_p_ic_s 440
-fdopen_p_i_sc 441
-fdopen_p_ic_sc 442
-getstdin_p 443
-getstdout_p 444
-getstderr_p 445
-setstdout_p 446
-setstderr_p 447
-open_p_s_s 448
-open_p_sc_s 449
-open_p_s_sc 450
-open_p_sc_sc 451
-open_p_s 452
-open_p_sc 453
-print_i 454
-print_ic 455
-print_n 456
-print_nc 457
-print_s 458
-print_sc 459
-print_p 460
-say_i 461
-say_ic 462
-say_n 463
-say_nc 464
-say_s 465
-say_sc 466
-say_p 467
-printerr_i 468
-printerr_ic 469
-printerr_n 470
-printerr_nc 471
-printerr_s 472
-printerr_sc 473
-printerr_p 474
-print_p_i 475
-print_p_ic 476
-print_p_n 477
-print_p_nc 478
-print_p_s 479
-print_p_sc 480
-print_p_p 481
-read_s_i 482
-read_s_ic 483
-read_s_p_i 484
-read_s_p_ic 485
-readline_s_p 486
-peek_s 487
-peek_s_p 488
-stat_i_s_i 489
-stat_i_sc_i 490
-stat_i_s_ic 491
-stat_i_sc_ic 492
-stat_i_i_i 493
-stat_i_ic_i 494
-stat_i_i_ic 495
-stat_i_ic_ic 496
-seek_p_i_i 497
-seek_p_ic_i 498
-seek_p_i_ic 499
-seek_p_ic_ic 500
-seek_p_i_i_i 501
-seek_p_ic_i_i 502
-seek_p_i_ic_i 503
-seek_p_ic_ic_i 504
-seek_p_i_i_ic 505
-seek_p_ic_i_ic 506
-seek_p_i_ic_ic 507
-seek_p_ic_ic_ic 508
-tell_i_p 509
-tell_i_i_p 510
-abs_i 511
-abs_n 512
-abs_i_i 513
-abs_n_n 514
-abs_p 515
-abs_p_p 516
-add_i_i 517
-add_i_ic 518
-add_n_n 519
-add_n_nc 520
-add_p_p 521
-add_p_i 522
-add_p_ic 523
-add_p_n 524
-add_p_nc 525
-add_i_i_i 526
-add_i_ic_i 527
-add_i_i_ic 528
-add_n_n_n 529
-add_n_nc_n 530
-add_n_n_nc 531
-add_p_p_p 532
-add_p_p_i 533
-add_p_p_ic 534
-add_p_p_n 535
-add_p_p_nc 536
-cmod_i_i_i 537
-cmod_i_ic_i 538
-cmod_i_i_ic 539
-cmod_p_p_i 540
-cmod_p_p_ic 541
-cmod_p_p_p 542
-cmod_n_n_n 543
-cmod_n_nc_n 544
-cmod_n_n_nc 545
-cmod_p_p_n 546
-cmod_p_p_nc 547
-dec_i 548
-dec_n 549
-dec_p 550
-div_i_i 551
-div_i_ic 552
-div_n_n 553
-div_n_nc 554
-div_p_p 555
-div_p_i 556
-div_p_ic 557
-div_p_n 558
-div_p_nc 559
-div_i_i_i 560
-div_i_ic_i 561
-div_i_i_ic 562
-div_i_ic_ic 563
-div_n_n_n 564
-div_n_nc_n 565
-div_n_n_nc 566
-div_n_nc_nc 567
-div_p_p_p 568
-div_p_p_i 569
-div_p_p_ic 570
-div_p_p_n 571
-div_p_p_nc 572
-fdiv_i_i 573
-fdiv_i_ic 574
-fdiv_n_n 575
-fdiv_n_nc 576
-fdiv_p_p 577
-fdiv_p_i 578
-fdiv_p_ic 579
-fdiv_p_n 580
-fdiv_p_nc 581
-fdiv_i_i_i 582
-fdiv_i_ic_i 583
-fdiv_i_i_ic 584
-fdiv_n_n_n 585
-fdiv_n_nc_n 586
-fdiv_n_n_nc 587
-fdiv_p_p_p 588
-fdiv_p_p_i 589
-fdiv_p_p_ic 590
-fdiv_p_p_n 591
-fdiv_p_p_nc 592
-ceil_n 593
-ceil_i_n 594
-ceil_n_n 595
-floor_n 596
-floor_i_n 597
-floor_n_n 598
-inc_i 599
-inc_n 600
-inc_p 601
-mod_i_i 602
-mod_i_ic 603
-mod_n_n 604
-mod_n_nc 605
-mod_p_p 606
-mod_p_i 607
-mod_p_ic 608
-mod_p_n 609
-mod_p_nc 610
-mod_i_i_i 611
-mod_i_ic_i 612
-mod_i_i_ic 613
-mod_n_n_n 614
-mod_n_nc_n 615
-mod_n_n_nc 616
-mod_p_p_p 617
-mod_p_p_i 618
-mod_p_p_ic 619
-mod_p_p_n 620
-mod_p_p_nc 621
-mul_i_i 622
-mul_i_ic 623
-mul_n_n 624
-mul_n_nc 625
-mul_p_p 626
-mul_p_i 627
-mul_p_ic 628
-mul_p_n 629
-mul_p_nc 630
-mul_i_i_i 631
-mul_i_ic_i 632
-mul_i_i_ic 633
-mul_n_n_n 634
-mul_n_nc_n 635
-mul_n_n_nc 636
-mul_p_p_p 637
-mul_p_p_i 638
-mul_p_p_ic 639
-mul_p_p_n 640
-mul_p_p_nc 641
-neg_i 642
-neg_n 643
-neg_p 644
-neg_i_i 645
-neg_n_n 646
-neg_p_p 647
-pow_n_n_n 648
-pow_n_nc_n 649
-pow_n_n_nc 650
-pow_p_p_p 651
-pow_p_p_i 652
-pow_p_p_ic 653
-pow_p_p_n 654
-pow_p_p_nc 655
-pow_n_n_i 656
-pow_n_nc_i 657
-pow_n_n_ic 658
-pow_n_nc_ic 659
-sub_i_i 660
-sub_i_ic 661
-sub_n_n 662
-sub_n_nc 663
-sub_p_p 664
-sub_p_i 665
-sub_p_ic 666
-sub_p_n 667
-sub_p_nc 668
-sub_i_i_i 669
-sub_i_ic_i 670
-sub_i_i_ic 671
-sub_n_n_n 672
-sub_n_nc_n 673
-sub_n_n_nc 674
-sub_p_p_p 675
-sub_p_p_i 676
-sub_p_p_ic 677
-sub_p_p_n 678
-sub_p_p_nc 679
-sqrt_n_n 680
-acos_n_n 681
-asec_n_n 682
-asin_n_n 683
-atan_n_n 684
-atan_n_n_n 685
-atan_n_nc_n 686
-atan_n_n_nc 687
-cos_n_n 688
-cosh_n_n 689
-exp_n_n 690
-ln_n_n 691
-log10_n_n 692
-log2_n_n 693
-sec_n_n 694
-sech_n_n 695
-sin_n_n 696
-sinh_n_n 697
-tan_n_n 698
-tanh_n_n 699
-gcd_i_i_i 700
-gcd_i_ic_i 701
-gcd_i_i_ic 702
-lcm_i_i_i 703
-lcm_i_ic_i 704
-lcm_i_i_ic 705
-fact_i_i 706
-fact_n_i 707
-callmethodcc_p_s 708
-callmethodcc_p_sc 709
-callmethodcc_p_p 710
-callmethod_p_s_p 711
-callmethod_p_sc_p 712
-callmethod_p_p_p 713
-tailcallmethod_p_s 714
-tailcallmethod_p_sc 715
-tailcallmethod_p_p 716
-addmethod_p_s_p 717
-addmethod_p_sc_p 718
-can_i_p_s 719
-can_i_p_sc 720
-does_i_p_s 721
-does_i_p_sc 722
-does_i_p_p 723
-does_i_p_pc 724
-isa_i_p_s 725
-isa_i_p_sc 726
-isa_i_p_p 727
-isa_i_p_pc 728
-newclass_p_s 729
-newclass_p_sc 730
-newclass_p_p 731
-newclass_p_pc 732
-subclass_p_p 733
-subclass_p_pc 734
-subclass_p_p_s 735
-subclass_p_pc_s 736
-subclass_p_p_sc 737
-subclass_p_pc_sc 738
-subclass_p_p_p 739
-subclass_p_pc_p 740
-subclass_p_p_pc 741
-subclass_p_pc_pc 742
-subclass_p_s 743
-subclass_p_sc 744
-subclass_p_s_s 745
-subclass_p_sc_s 746
-subclass_p_s_sc 747
-subclass_p_sc_sc 748
-subclass_p_s_p 749
-subclass_p_sc_p 750
-subclass_p_s_pc 751
-subclass_p_sc_pc 752
-get_class_p_s 753
-get_class_p_sc 754
-get_class_p_p 755
-get_class_p_pc 756
-class_p_p 757
-addparent_p_p 758
-removeparent_p_p 759
-addrole_p_p 760
-addattribute_p_s 761
-addattribute_p_sc 762
-removeattribute_p_s 763
-removeattribute_p_sc 764
-getattribute_p_p_s 765
-getattribute_p_p_sc 766
-getattribute_p_p_p_s 767
-getattribute_p_p_pc_s 768
-getattribute_p_p_p_sc 769
-getattribute_p_p_pc_sc 770
-setattribute_p_s_p 771
-setattribute_p_sc_p 772
-setattribute_p_p_s_p 773
-setattribute_p_pc_s_p 774
-setattribute_p_p_sc_p 775
-setattribute_p_pc_sc_p 776
-inspect_p_p 777
-inspect_p_pc 778
-inspect_p_p_s 779
-inspect_p_pc_s 780
-inspect_p_p_sc 781
-inspect_p_pc_sc 782
-pic_infix___ic_p_p 783
-pic_inline_sub___ic_p_p 784
-pic_get_params___pc 785
-pic_set_returns___pc 786
-pic_callr___pc 787
-new_p_s 788
-new_p_sc 789
-new_p_s_p 790
-new_p_sc_p 791
-new_p_s_pc 792
-new_p_sc_pc 793
-new_p_p 794
-new_p_pc 795
-new_p_p_p 796
-new_p_pc_p 797
-new_p_p_pc 798
-new_p_pc_pc 799
-root_new_p_p 800
-root_new_p_pc 801
-root_new_p_p_p 802
-root_new_p_pc_p 803
-root_new_p_p_pc 804
-root_new_p_pc_pc 805
-typeof_s_p 806
-typeof_p_p 807
-get_repr_s_p 808
-find_method_p_p_s 809
-find_method_p_p_sc 810
-defined_i_p 811
-defined_i_p_ki 812
-defined_i_p_kic 813
-defined_i_p_k 814
-defined_i_p_kc 815
-exists_i_p_ki 816
-exists_i_p_kic 817
-exists_i_p_k 818
-exists_i_p_kc 819
-delete_p_k 820
-delete_p_kc 821
-delete_p_ki 822
-delete_p_kic 823
-elements_i_p 824
-push_p_i 825
-push_p_ic 826
-push_p_n 827
-push_p_nc 828
-push_p_s 829
-push_p_sc 830
-push_p_p 831
-pop_i_p 832
-pop_n_p 833
-pop_s_p 834
-pop_p_p 835
-unshift_p_i 836
-unshift_p_ic 837
-unshift_p_n 838
-unshift_p_nc 839
-unshift_p_s 840
-unshift_p_sc 841
-unshift_p_p 842
-shift_i_p 843
-shift_n_p 844
-shift_s_p 845
-shift_p_p 846
-splice_p_p_i_i 847
-splice_p_p_ic_i 848
-splice_p_p_i_ic 849
-splice_p_p_ic_ic 850
-setprop_p_s_p 851
-setprop_p_sc_p 852
-getprop_p_s_p 853
-getprop_p_sc_p 854
-delprop_p_s 855
-delprop_p_sc 856
-prophash_p_p 857
-freeze_s_p 858
-thaw_p_s 859
-thaw_p_sc 860
-add_multi_s_s_p 861
-add_multi_sc_s_p 862
-add_multi_s_sc_p 863
-add_multi_sc_sc_p 864
-find_multi_p_s_s 865
-find_multi_p_sc_s 866
-find_multi_p_s_sc 867
-find_multi_p_sc_sc 868
-register_p 869
-unregister_p 870
-box_p_i 871
-box_p_ic 872
-box_p_n 873
-box_p_nc 874
-box_p_s 875
-box_p_sc 876
-iter_p_p 877
-morph_p_p 878
-morph_p_pc 879
-clone_s_s 880
-clone_s_sc 881
-exchange_i_i 882
-exchange_p_p 883
-exchange_n_n 884
-exchange_s_s 885
-set_i_i 886
-set_i_ic 887
-set_i_n 888
-set_i_nc 889
-set_i_s 890
-set_i_sc 891
-set_n_n 892
-set_n_nc 893
-set_n_i 894
-set_n_ic 895
-set_n_s 896
-set_n_sc 897
-set_n_p 898
-set_s_p 899
-set_s_s 900
-set_s_sc 901
-set_s_i 902
-set_s_ic 903
-set_s_n 904
-set_s_nc 905
-set_p_pc 906
-set_p_p 907
-set_p_i 908
-set_p_ic 909
-set_p_n 910
-set_p_nc 911
-set_p_s 912
-set_p_sc 913
-set_i_p 914
-assign_p_p 915
-assign_p_i 916
-assign_p_ic 917
-assign_p_n 918
-assign_p_nc 919
-assign_p_s 920
-assign_p_sc 921
-assign_s_s 922
-assign_s_sc 923
-setref_p_p 924
-deref_p_p 925
-setp_ind_i_p 926
-setp_ind_ic_p 927
-setn_ind_i_n 928
-setn_ind_ic_n 929
-setn_ind_i_nc 930
-setn_ind_ic_nc 931
-sets_ind_i_s 932
-sets_ind_ic_s 933
-sets_ind_i_sc 934
-sets_ind_ic_sc 935
-seti_ind_i_i 936
-seti_ind_ic_i 937
-seti_ind_i_ic 938
-seti_ind_ic_ic 939
-set_p_ki_i 940
-set_p_kic_i 941
-set_p_ki_ic 942
-set_p_kic_ic 943
-set_p_ki_n 944
-set_p_kic_n 945
-set_p_ki_nc 946
-set_p_kic_nc 947
-set_p_ki_s 948
-set_p_kic_s 949
-set_p_ki_sc 950
-set_p_kic_sc 951
-set_p_ki_p 952
-set_p_kic_p 953
-set_i_p_ki 954
-set_i_p_kic 955
-set_n_p_ki 956
-set_n_p_kic 957
-set_s_p_ki 958
-set_s_p_kic 959
-set_p_p_ki 960
-set_p_p_kic 961
-set_p_k_i 962
-set_p_kc_i 963
-set_p_k_ic 964
-set_p_kc_ic 965
-set_p_k_n 966
-set_p_kc_n 967
-set_p_k_nc 968
-set_p_kc_nc 969
-set_p_k_s 970
-set_p_kc_s 971
-set_p_k_sc 972
-set_p_kc_sc 973
-set_p_k_p 974
-set_p_kc_p 975
-set_i_p_k 976
-set_i_p_kc 977
-set_n_p_k 978
-set_n_p_kc 979
-set_s_p_k 980
-set_s_p_kc 981
-set_p_p_k 982
-set_p_p_kc 983
-clone_p_p 984
-clone_p_p_p 985
-clone_p_p_pc 986
-copy_p_p 987
-null_s 988
-null_i 989
-null_p 990
-null_n 991
-cleari 992
-clearn 993
-clears 994
-clearp 995
-ord_i_s 996
-ord_i_sc 997
-ord_i_s_i 998
-ord_i_sc_i 999
-ord_i_s_ic 1000
-ord_i_sc_ic 1001
-chr_s_i 1002
-chr_s_ic 1003
-chopn_s_i 1004
-chopn_s_ic 1005
-chopn_s_s_i 1006
-chopn_s_sc_i 1007
-chopn_s_s_ic 1008
-chopn_s_sc_ic 1009
-concat_s_s 1010
-concat_s_sc 1011
-concat_p_p 1012
-concat_p_s 1013
-concat_p_sc 1014
-concat_s_s_s 1015
-concat_s_sc_s 1016
-concat_s_s_sc 1017
-concat_p_p_s 1018
-concat_p_p_sc 1019
-concat_p_p_p 1020
-repeat_s_s_i 1021
-repeat_s_sc_i 1022
-repeat_s_s_ic 1023
-repeat_s_sc_ic 1024
-repeat_p_p_i 1025
-repeat_p_p_ic 1026
-repeat_p_p_p 1027
-repeat_p_i 1028
-repeat_p_ic 1029
-repeat_p_p 1030
-length_i_s 1031
-length_i_sc 1032
-bytelength_i_s 1033
-bytelength_i_sc 1034
-pin_s 1035
-unpin_s 1036
-substr_s_s_i 1037
-substr_s_sc_i 1038
-substr_s_s_ic 1039
-substr_s_sc_ic 1040
-substr_s_s_i_i 1041
-substr_s_sc_i_i 1042
-substr_s_s_ic_i 1043
-substr_s_sc_ic_i 1044
-substr_s_s_i_ic 1045
-substr_s_sc_i_ic 1046
-substr_s_s_ic_ic 1047
-substr_s_sc_ic_ic 1048
-substr_s_s_i_i_s 1049
-substr_s_s_ic_i_s 1050
-substr_s_s_i_ic_s 1051
-substr_s_s_ic_ic_s 1052
-substr_s_s_i_i_sc 1053
-substr_s_s_ic_i_sc 1054
-substr_s_s_i_ic_sc 1055
-substr_s_s_ic_ic_sc 1056
-substr_s_i_i_s 1057
-substr_s_ic_i_s 1058
-substr_s_i_ic_s 1059
-substr_s_ic_ic_s 1060
-substr_s_i_i_sc 1061
-substr_s_ic_i_sc 1062
-substr_s_i_ic_sc 1063
-substr_s_ic_ic_sc 1064
-substr_s_p_i_i 1065
-substr_s_p_ic_i 1066
-substr_s_p_i_ic 1067
-substr_s_p_ic_ic 1068
-index_i_s_s 1069
-index_i_sc_s 1070
-index_i_s_sc 1071
-index_i_sc_sc 1072
-index_i_s_s_i 1073
-index_i_sc_s_i 1074
-index_i_s_sc_i 1075
-index_i_sc_sc_i 1076
-index_i_s_s_ic 1077
-index_i_sc_s_ic 1078
-index_i_s_sc_ic 1079
-index_i_sc_sc_ic 1080
-sprintf_s_s_p 1081
-sprintf_s_sc_p 1082
-sprintf_p_p_p 1083
-new_s 1084
-new_s_i 1085
-new_s_ic 1086
-stringinfo_i_s_i 1087
-stringinfo_i_sc_i 1088
-stringinfo_i_s_ic 1089
-stringinfo_i_sc_ic 1090
-upcase_s_s 1091
-upcase_s_sc 1092
-upcase_s 1093
-downcase_s_s 1094
-downcase_s_sc 1095
-downcase_s 1096
-titlecase_s_s 1097
-titlecase_s_sc 1098
-titlecase_s 1099
-join_s_s_p 1100
-join_s_sc_p 1101
-split_p_s_s 1102
-split_p_sc_s 1103
-split_p_s_sc 1104
-split_p_sc_sc 1105
-charset_i_s 1106
-charset_i_sc 1107
-charsetname_s_i 1108
-charsetname_s_ic 1109
-find_charset_i_s 1110
-find_charset_i_sc 1111
-trans_charset_s_i 1112
-trans_charset_s_ic 1113
-trans_charset_s_s_i 1114
-trans_charset_s_sc_i 1115
-trans_charset_s_s_ic 1116
-trans_charset_s_sc_ic 1117
-encoding_i_s 1118
-encoding_i_sc 1119
-encodingname_s_i 1120
-encodingname_s_ic 1121
-find_encoding_i_s 1122
-find_encoding_i_sc 1123
-trans_encoding_s_i 1124
-trans_encoding_s_ic 1125
-trans_encoding_s_s_i 1126
-trans_encoding_s_sc_i 1127
-trans_encoding_s_s_ic 1128
-trans_encoding_s_sc_ic 1129
-is_cclass_i_i_s_i 1130
-is_cclass_i_ic_s_i 1131
-is_cclass_i_i_sc_i 1132
-is_cclass_i_ic_sc_i 1133
-is_cclass_i_i_s_ic 1134
-is_cclass_i_ic_s_ic 1135
-is_cclass_i_i_sc_ic 1136
-is_cclass_i_ic_sc_ic 1137
-find_cclass_i_i_s_i_i 1138
-find_cclass_i_ic_s_i_i 1139
-find_cclass_i_i_sc_i_i 1140
-find_cclass_i_ic_sc_i_i 1141
-find_cclass_i_i_s_ic_i 1142
-find_cclass_i_ic_s_ic_i 1143
-find_cclass_i_i_sc_ic_i 1144
-find_cclass_i_ic_sc_ic_i 1145
-find_cclass_i_i_s_i_ic 1146
-find_cclass_i_ic_s_i_ic 1147
-find_cclass_i_i_sc_i_ic 1148
-find_cclass_i_ic_sc_i_ic 1149
-find_cclass_i_i_s_ic_ic 1150
-find_cclass_i_ic_s_ic_ic 1151
-find_cclass_i_i_sc_ic_ic 1152
-find_cclass_i_ic_sc_ic_ic 1153
-find_not_cclass_i_i_s_i_i 1154
-find_not_cclass_i_ic_s_i_i 1155
-find_not_cclass_i_i_sc_i_i 1156
-find_not_cclass_i_ic_sc_i_i 1157
-find_not_cclass_i_i_s_ic_i 1158
-find_not_cclass_i_ic_s_ic_i 1159
-find_not_cclass_i_i_sc_ic_i 1160
-find_not_cclass_i_ic_sc_ic_i 1161
-find_not_cclass_i_i_s_i_ic 1162
-find_not_cclass_i_ic_s_i_ic 1163
-find_not_cclass_i_i_sc_i_ic 1164
-find_not_cclass_i_ic_sc_i_ic 1165
-find_not_cclass_i_i_s_ic_ic 1166
-find_not_cclass_i_ic_s_ic_ic 1167
-find_not_cclass_i_i_sc_ic_ic 1168
-find_not_cclass_i_ic_sc_ic_ic 1169
-escape_s_s 1170
-compose_s_s 1171
-compose_s_sc 1172
-spawnw_i_s 1173
-spawnw_i_sc 1174
-spawnw_i_p 1175
-err_i 1176
-err_s 1177
-err_s_i 1178
-err_s_ic 1179
-time_i 1180
-time_n 1181
-gmtime_s_i 1182
-gmtime_s_ic 1183
-localtime_s_i 1184
-localtime_s_ic 1185
-decodetime_p_i 1186
-decodetime_p_ic 1187
-decodelocaltime_p_i 1188
-decodelocaltime_p_ic 1189
-sysinfo_s_i 1190
-sysinfo_s_ic 1191
-sysinfo_i_i 1192
-sysinfo_i_ic 1193
-sleep_i 1194
-sleep_ic 1195
-sleep_n 1196
-sleep_nc 1197
-sizeof_i_i 1198
-sizeof_i_ic 1199
-store_lex_s_p 1200
-store_lex_sc_p 1201
-find_lex_p_s 1202
-find_lex_p_sc 1203
-find_caller_lex_p_s 1204
-find_caller_lex_p_sc 1205
-get_namespace_p 1206
-get_namespace_p_p 1207
-get_namespace_p_pc 1208
-get_hll_namespace_p 1209
-get_hll_namespace_p_p 1210
-get_hll_namespace_p_pc 1211
-get_root_namespace_p 1212
-get_root_namespace_p_p 1213
-get_root_namespace_p_pc 1214
-get_global_p_s 1215
-get_global_p_sc 1216
-get_global_p_p_s 1217
-get_global_p_pc_s 1218
-get_global_p_p_sc 1219
-get_global_p_pc_sc 1220
-get_hll_global_p_s 1221
-get_hll_global_p_sc 1222
-get_hll_global_p_p_s 1223
-get_hll_global_p_pc_s 1224
-get_hll_global_p_p_sc 1225
-get_hll_global_p_pc_sc 1226
-get_root_global_p_s 1227
-get_root_global_p_sc 1228
-get_root_global_p_p_s 1229
-get_root_global_p_pc_s 1230
-get_root_global_p_p_sc 1231
-get_root_global_p_pc_sc 1232
-set_global_s_p 1233
-set_global_sc_p 1234
-set_global_p_s_p 1235
-set_global_pc_s_p 1236
-set_global_p_sc_p 1237
-set_global_pc_sc_p 1238
-set_hll_global_s_p 1239
-set_hll_global_sc_p 1240
-set_hll_global_p_s_p 1241
-set_hll_global_pc_s_p 1242
-set_hll_global_p_sc_p 1243
-set_hll_global_pc_sc_p 1244
-set_root_global_s_p 1245
-set_root_global_sc_p 1246
-set_root_global_p_s_p 1247
-set_root_global_pc_s_p 1248
-set_root_global_p_sc_p 1249
-set_root_global_pc_sc_p 1250
-find_name_p_s 1251
-find_name_p_sc 1252
-find_sub_not_null_p_s 1253
-find_sub_not_null_p_sc 1254
+cmp_pmc_p_p_p 359
+issame_i_p_p 360
+issame_i_s_s 361
+issame_i_sc_s 362
+issame_i_s_sc 363
+issame_i_sc_sc 364
+isntsame_i_p_p 365
+isntsame_i_s_s 366
+isntsame_i_sc_s 367
+isntsame_i_s_sc 368
+isntsame_i_sc_sc 369
+istrue_i_p 370
+isfalse_i_p 371
+isnull_i_p 372
+isnull_i_pc 373
+isgt_i_p_p 374
+isge_i_p_p 375
+isle_i_i_i 376
+isle_i_ic_i 377
+isle_i_i_ic 378
+isle_i_n_n 379
+isle_i_nc_n 380
+isle_i_n_nc 381
+isle_i_s_s 382
+isle_i_sc_s 383
+isle_i_s_sc 384
+isle_i_p_p 385
+islt_i_i_i 386
+islt_i_ic_i 387
+islt_i_i_ic 388
+islt_i_n_n 389
+islt_i_nc_n 390
+islt_i_n_nc 391
+islt_i_s_s 392
+islt_i_sc_s 393
+islt_i_s_sc 394
+islt_i_p_p 395
+iseq_i_i_i 396
+iseq_i_ic_i 397
+iseq_i_i_ic 398
+iseq_i_n_n 399
+iseq_i_nc_n 400
+iseq_i_n_nc 401
+iseq_i_s_s 402
+iseq_i_sc_s 403
+iseq_i_s_sc 404
+iseq_i_p_p 405
+isne_i_i_i 406
+isne_i_ic_i 407
+isne_i_i_ic 408
+isne_i_n_n 409
+isne_i_nc_n 410
+isne_i_n_nc 411
+isne_i_s_s 412
+isne_i_sc_s 413
+isne_i_s_sc 414
+isne_i_p_p 415
+and_i_i_i 416
+and_i_ic_i 417
+and_i_i_ic 418
+and_p_p_p 419
+not_i 420
+not_i_i 421
+not_p 422
+not_p_p 423
+or_i_i_i 424
+or_i_ic_i 425
+or_i_i_ic 426
+or_p_p_p 427
+xor_i_i_i 428
+xor_i_ic_i 429
+xor_i_i_ic 430
+xor_p_p_p 431
+debug_init 432
+debug_load_sc 433
+debug_break 434
+debug_print 435
+backtrace 436
+getline_i 437
+getfile_s 438
+close_p 439
+fdopen_p_i_s 440
+fdopen_p_ic_s 441
+fdopen_p_i_sc 442
+fdopen_p_ic_sc 443
+getstdin_p 444
+getstdout_p 445
+getstderr_p 446
+setstdin_p 447
+setstdout_p 448
+setstderr_p 449
+open_p_s_s 450
+open_p_sc_s 451
+open_p_s_sc 452
+open_p_sc_sc 453
+open_p_s 454
+open_p_sc 455
+print_i 456
+print_ic 457
+print_n 458
+print_nc 459
+print_s 460
+print_sc 461
+print_p 462
+say_i 463
+say_ic 464
+say_n 465
+say_nc 466
+say_s 467
+say_sc 468
+say_p 469
+printerr_i 470
+printerr_ic 471
+printerr_n 472
+printerr_nc 473
+printerr_s 474
+printerr_sc 475
+printerr_p 476
+print_p_i 477
+print_p_ic 478
+print_p_n 479
+print_p_nc 480
+print_p_s 481
+print_p_sc 482
+print_p_p 483
+read_s_i 484
+read_s_ic 485
+read_s_p_i 486
+read_s_p_ic 487
+readline_s_p 488
+peek_s 489
+peek_s_p 490
+stat_i_s_i 491
+stat_i_sc_i 492
+stat_i_s_ic 493
+stat_i_sc_ic 494
+stat_i_i_i 495
+stat_i_ic_i 496
+stat_i_i_ic 497
+stat_i_ic_ic 498
+seek_p_i_i 499
+seek_p_ic_i 500
+seek_p_i_ic 501
+seek_p_ic_ic 502
+seek_p_i_i_i 503
+seek_p_ic_i_i 504
+seek_p_i_ic_i 505
+seek_p_ic_ic_i 506
+seek_p_i_i_ic 507
+seek_p_ic_i_ic 508
+seek_p_i_ic_ic 509
+seek_p_ic_ic_ic 510
+tell_i_p 511
+tell_i_i_p 512
+abs_i 513
+abs_n 514
+abs_i_i 515
+abs_n_n 516
+abs_p 517
+abs_p_p 518
+add_i_i 519
+add_i_ic 520
+add_n_n 521
+add_n_nc 522
+add_p_p 523
+add_p_i 524
+add_p_ic 525
+add_p_n 526
+add_p_nc 527
+add_i_i_i 528
+add_i_ic_i 529
+add_i_i_ic 530
+add_n_n_n 531
+add_n_nc_n 532
+add_n_n_nc 533
+add_p_p_p 534
+add_p_p_i 535
+add_p_p_ic 536
+add_p_p_n 537
+add_p_p_nc 538
+cmod_i_i_i 539
+cmod_i_ic_i 540
+cmod_i_i_ic 541
+cmod_p_p_i 542
+cmod_p_p_ic 543
+cmod_p_p_p 544
+cmod_n_n_n 545
+cmod_n_nc_n 546
+cmod_n_n_nc 547
+cmod_p_p_n 548
+cmod_p_p_nc 549
+dec_i 550
+dec_n 551
+dec_p 552
+div_i_i 553
+div_i_ic 554
+div_n_n 555
+div_n_nc 556
+div_p_p 557
+div_p_i 558
+div_p_ic 559
+div_p_n 560
+div_p_nc 561
+div_i_i_i 562
+div_i_ic_i 563
+div_i_i_ic 564
+div_i_ic_ic 565
+div_n_n_n 566
+div_n_nc_n 567
+div_n_n_nc 568
+div_n_nc_nc 569
+div_p_p_p 570
+div_p_p_i 571
+div_p_p_ic 572
+div_p_p_n 573
+div_p_p_nc 574
+fdiv_i_i 575
+fdiv_i_ic 576
+fdiv_n_n 577
+fdiv_n_nc 578
+fdiv_p_p 579
+fdiv_p_i 580
+fdiv_p_ic 581
+fdiv_p_n 582
+fdiv_p_nc 583
+fdiv_i_i_i 584
+fdiv_i_ic_i 585
+fdiv_i_i_ic 586
+fdiv_n_n_n 587
+fdiv_n_nc_n 588
+fdiv_n_n_nc 589
+fdiv_p_p_p 590
+fdiv_p_p_i 591
+fdiv_p_p_ic 592
+fdiv_p_p_n 593
+fdiv_p_p_nc 594
+ceil_n 595
+ceil_i_n 596
+ceil_n_n 597
+floor_n 598
+floor_i_n 599
+floor_n_n 600
+inc_i 601
+inc_n 602
+inc_p 603
+mod_i_i 604
+mod_i_ic 605
+mod_n_n 606
+mod_n_nc 607
+mod_p_p 608
+mod_p_i 609
+mod_p_ic 610
+mod_p_n 611
+mod_p_nc 612
+mod_i_i_i 613
+mod_i_ic_i 614
+mod_i_i_ic 615
+mod_n_n_n 616
+mod_n_nc_n 617
+mod_n_n_nc 618
+mod_p_p_p 619
+mod_p_p_i 620
+mod_p_p_ic 621
+mod_p_p_n 622
+mod_p_p_nc 623
+mul_i_i 624
+mul_i_ic 625
+mul_n_n 626
+mul_n_nc 627
+mul_p_p 628
+mul_p_i 629
+mul_p_ic 630
+mul_p_n 631
+mul_p_nc 632
+mul_i_i_i 633
+mul_i_ic_i 634
+mul_i_i_ic 635
+mul_n_n_n 636
+mul_n_nc_n 637
+mul_n_n_nc 638
+mul_p_p_p 639
+mul_p_p_i 640
+mul_p_p_ic 641
+mul_p_p_n 642
+mul_p_p_nc 643
+neg_i 644
+neg_n 645
+neg_p 646
+neg_i_i 647
+neg_n_n 648
+neg_p_p 649
+pow_n_n_n 650
+pow_n_nc_n 651
+pow_n_n_nc 652
+pow_p_p_p 653
+pow_p_p_i 654
+pow_p_p_ic 655
+pow_p_p_n 656
+pow_p_p_nc 657
+pow_n_n_i 658
+pow_n_nc_i 659
+pow_n_n_ic 660
+pow_n_nc_ic 661
+sub_i_i 662
+sub_i_ic 663
+sub_n_n 664
+sub_n_nc 665
+sub_p_p 666
+sub_p_i 667
+sub_p_ic 668
+sub_p_n 669
+sub_p_nc 670
+sub_i_i_i 671
+sub_i_ic_i 672
+sub_i_i_ic 673
+sub_n_n_n 674
+sub_n_nc_n 675
+sub_n_n_nc 676
+sub_p_p_p 677
+sub_p_p_i 678
+sub_p_p_ic 679
+sub_p_p_n 680
+sub_p_p_nc 681
+sqrt_n_n 682
+acos_n_n 683
+asec_n_n 684
+asin_n_n 685
+atan_n_n 686
+atan_n_n_n 687
+atan_n_nc_n 688
+atan_n_n_nc 689
+cos_n_n 690
+cosh_n_n 691
+exp_n_n 692
+ln_n_n 693
+log10_n_n 694
+log2_n_n 695
+sec_n_n 696
+sech_n_n 697
+sin_n_n 698
+sinh_n_n 699
+tan_n_n 700
+tanh_n_n 701
+gcd_i_i_i 702
+gcd_i_ic_i 703
+gcd_i_i_ic 704
+lcm_i_i_i 705
+lcm_i_ic_i 706
+lcm_i_i_ic 707
+fact_i_i 708
+fact_n_i 709
+callmethodcc_p_s 710
+callmethodcc_p_sc 711
+callmethodcc_p_p 712
+callmethod_p_s_p 713
+callmethod_p_sc_p 714
+callmethod_p_p_p 715
+tailcallmethod_p_s 716
+tailcallmethod_p_sc 717
+tailcallmethod_p_p 718
+addmethod_p_s_p 719
+addmethod_p_sc_p 720
+can_i_p_s 721
+can_i_p_sc 722
+does_i_p_s 723
+does_i_p_sc 724
+does_i_p_p 725
+does_i_p_pc 726
+isa_i_p_s 727
+isa_i_p_sc 728
+isa_i_p_p 729
+isa_i_p_pc 730
+newclass_p_s 731
+newclass_p_sc 732
+newclass_p_p 733
+newclass_p_pc 734
+subclass_p_p 735
+subclass_p_pc 736
+subclass_p_p_s 737
+subclass_p_pc_s 738
+subclass_p_p_sc 739
+subclass_p_pc_sc 740
+subclass_p_p_p 741
+subclass_p_pc_p 742
+subclass_p_p_pc 743
+subclass_p_pc_pc 744
+subclass_p_s 745
+subclass_p_sc 746
+subclass_p_s_s 747
+subclass_p_sc_s 748
+subclass_p_s_sc 749
+subclass_p_sc_sc 750
+subclass_p_s_p 751
+subclass_p_sc_p 752
+subclass_p_s_pc 753
+subclass_p_sc_pc 754
+get_class_p_s 755
+get_class_p_sc 756
+get_class_p_p 757
+get_class_p_pc 758
+class_p_p 759
+addparent_p_p 760
+removeparent_p_p 761
+addrole_p_p 762
+addattribute_p_s 763
+addattribute_p_sc 764
+removeattribute_p_s 765
+removeattribute_p_sc 766
+getattribute_p_p_s 767
+getattribute_p_p_sc 768
+getattribute_p_p_p_s 769
+getattribute_p_p_pc_s 770
+getattribute_p_p_p_sc 771
+getattribute_p_p_pc_sc 772
+setattribute_p_s_p 773
+setattribute_p_sc_p 774
+setattribute_p_p_s_p 775
+setattribute_p_pc_s_p 776
+setattribute_p_p_sc_p 777
+setattribute_p_pc_sc_p 778
+inspect_p_p 779
+inspect_p_pc 780
+inspect_p_p_s 781
+inspect_p_pc_s 782
+inspect_p_p_sc 783
+inspect_p_pc_sc 784
+pic_infix___ic_p_p 785
+pic_inline_sub___ic_p_p 786
+pic_get_params___pc 787
+pic_set_returns___pc 788
+pic_callr___pc 789
+new_p_s 790
+new_p_sc 791
+new_p_s_p 792
+new_p_sc_p 793
+new_p_s_pc 794
+new_p_sc_pc 795
+new_p_p 796
+new_p_pc 797
+new_p_p_p 798
+new_p_pc_p 799
+new_p_p_pc 800
+new_p_pc_pc 801
+root_new_p_p 802
+root_new_p_pc 803
+root_new_p_p_p 804
+root_new_p_pc_p 805
+root_new_p_p_pc 806
+root_new_p_pc_pc 807
+typeof_s_p 808
+typeof_p_p 809
+get_repr_s_p 810
+find_method_p_p_s 811
+find_method_p_p_sc 812
+defined_i_p 813
+defined_i_p_ki 814
+defined_i_p_kic 815
+defined_i_p_k 816
+defined_i_p_kc 817
+exists_i_p_ki 818
+exists_i_p_kic 819
+exists_i_p_k 820
+exists_i_p_kc 821
+delete_p_k 822
+delete_p_kc 823
+delete_p_ki 824
+delete_p_kic 825
+elements_i_p 826
+push_p_i 827
+push_p_ic 828
+push_p_n 829
+push_p_nc 830
+push_p_s 831
+push_p_sc 832
+push_p_p 833
+pop_i_p 834
+pop_n_p 835
+pop_s_p 836
+pop_p_p 837
+unshift_p_i 838
+unshift_p_ic 839
+unshift_p_n 840
+unshift_p_nc 841
+unshift_p_s 842
+unshift_p_sc 843
+unshift_p_p 844
+shift_i_p 845
+shift_n_p 846
+shift_s_p 847
+shift_p_p 848
+splice_p_p_i_i 849
+splice_p_p_ic_i 850
+splice_p_p_i_ic 851
+splice_p_p_ic_ic 852
+setprop_p_s_p 853
+setprop_p_sc_p 854
+getprop_p_s_p 855
+getprop_p_sc_p 856
+delprop_p_s 857
+delprop_p_sc 858
+prophash_p_p 859
+freeze_s_p 860
+thaw_p_s 861
+thaw_p_sc 862
+add_multi_s_s_p 863
+add_multi_sc_s_p 864
+add_multi_s_sc_p 865
+add_multi_sc_sc_p 866
+find_multi_p_s_s 867
+find_multi_p_sc_s 868
+find_multi_p_s_sc 869
+find_multi_p_sc_sc 870
+register_p 871
+unregister_p 872
+box_p_i 873
+box_p_ic 874
+box_p_n 875
+box_p_nc 876
+box_p_s 877
+box_p_sc 878
+iter_p_p 879
+morph_p_p 880
+morph_p_pc 881
+clone_s_s 882
+clone_s_sc 883
+exchange_i_i 884
+exchange_p_p 885
+exchange_n_n 886
+exchange_s_s 887
+set_i_i 888
+set_i_ic 889
+set_i_n 890
+set_i_nc 891
+set_i_s 892
+set_i_sc 893
+set_n_n 894
+set_n_nc 895
+set_n_i 896
+set_n_ic 897
+set_n_s 898
+set_n_sc 899
+set_n_p 900
+set_s_p 901
+set_s_s 902
+set_s_sc 903
+set_s_i 904
+set_s_ic 905
+set_s_n 906
+set_s_nc 907
+set_p_pc 908
+set_p_p 909
+set_p_i 910
+set_p_ic 911
+set_p_n 912
+set_p_nc 913
+set_p_s 914
+set_p_sc 915
+set_i_p 916
+assign_p_p 917
+assign_p_i 918
+assign_p_ic 919
+assign_p_n 920
+assign_p_nc 921
+assign_p_s 922
+assign_p_sc 923
+assign_s_s 924
+assign_s_sc 925
+setref_p_p 926
+deref_p_p 927
+setp_ind_i_p 928
+setp_ind_ic_p 929
+setn_ind_i_n 930
+setn_ind_ic_n 931
+setn_ind_i_nc 932
+setn_ind_ic_nc 933
+sets_ind_i_s 934
+sets_ind_ic_s 935
+sets_ind_i_sc 936
+sets_ind_ic_sc 937
+seti_ind_i_i 938
+seti_ind_ic_i 939
+seti_ind_i_ic 940
+seti_ind_ic_ic 941
+set_p_ki_i 942
+set_p_kic_i 943
+set_p_ki_ic 944
+set_p_kic_ic 945
+set_p_ki_n 946
+set_p_kic_n 947
+set_p_ki_nc 948
+set_p_kic_nc 949
+set_p_ki_s 950
+set_p_kic_s 951
+set_p_ki_sc 952
+set_p_kic_sc 953
+set_p_ki_p 954
+set_p_kic_p 955
+set_i_p_ki 956
+set_i_p_kic 957
+set_n_p_ki 958
+set_n_p_kic 959
+set_s_p_ki 960
+set_s_p_kic 961
+set_p_p_ki 962
+set_p_p_kic 963
+set_p_k_i 964
+set_p_kc_i 965
+set_p_k_ic 966
+set_p_kc_ic 967
+set_p_k_n 968
+set_p_kc_n 969
+set_p_k_nc 970
+set_p_kc_nc 971
+set_p_k_s 972
+set_p_kc_s 973
+set_p_k_sc 974
+set_p_kc_sc 975
+set_p_k_p 976
+set_p_kc_p 977
+set_i_p_k 978
+set_i_p_kc 979
+set_n_p_k 980
+set_n_p_kc 981
+set_s_p_k 982
+set_s_p_kc 983
+set_p_p_k 984
+set_p_p_kc 985
+clone_p_p 986
+clone_p_p_p 987
+clone_p_p_pc 988
+copy_p_p 989
+null_s 990
+null_i 991
+null_p 992
+null_n 993
+cleari 994
+clearn 995
+clears 996
+clearp 997
+ord_i_s 998
+ord_i_sc 999
+ord_i_s_i 1000
+ord_i_sc_i 1001
+ord_i_s_ic 1002
+ord_i_sc_ic 1003
+chr_s_i 1004
+chr_s_ic 1005
+chopn_s_i 1006
+chopn_s_ic 1007
+chopn_s_s_i 1008
+chopn_s_sc_i 1009
+chopn_s_s_ic 1010
+chopn_s_sc_ic 1011
+concat_s_s 1012
+concat_s_sc 1013
+concat_p_p 1014
+concat_p_s 1015
+concat_p_sc 1016
+concat_s_s_s 1017
+concat_s_sc_s 1018
+concat_s_s_sc 1019
+concat_p_p_s 1020
+concat_p_p_sc 1021
+concat_p_p_p 1022
+repeat_s_s_i 1023
+repeat_s_sc_i 1024
+repeat_s_s_ic 1025
+repeat_s_sc_ic 1026
+repeat_p_p_i 1027
+repeat_p_p_ic 1028
+repeat_p_p_p 1029
+repeat_p_i 1030
+repeat_p_ic 1031
+repeat_p_p 1032
+length_i_s 1033
+length_i_sc 1034
+bytelength_i_s 1035
+bytelength_i_sc 1036
+pin_s 1037
+unpin_s 1038
+substr_s_s_i 1039
+substr_s_sc_i 1040
+substr_s_s_ic 1041
+substr_s_sc_ic 1042
+substr_s_s_i_i 1043
+substr_s_sc_i_i 1044
+substr_s_s_ic_i 1045
+substr_s_sc_ic_i 1046
+substr_s_s_i_ic 1047
+substr_s_sc_i_ic 1048
+substr_s_s_ic_ic 1049
+substr_s_sc_ic_ic 1050
+substr_s_s_i_i_s 1051
+substr_s_s_ic_i_s 1052
+substr_s_s_i_ic_s 1053
+substr_s_s_ic_ic_s 1054
+substr_s_s_i_i_sc 1055
+substr_s_s_ic_i_sc 1056
+substr_s_s_i_ic_sc 1057
+substr_s_s_ic_ic_sc 1058
+substr_s_i_i_s 1059
+substr_s_ic_i_s 1060
+substr_s_i_ic_s 1061
+substr_s_ic_ic_s 1062
+substr_s_i_i_sc 1063
+substr_s_ic_i_sc 1064
+substr_s_i_ic_sc 1065
+substr_s_ic_ic_sc 1066
+substr_s_p_i_i 1067
+substr_s_p_ic_i 1068
+substr_s_p_i_ic 1069
+substr_s_p_ic_ic 1070
+index_i_s_s 1071
+index_i_sc_s 1072
+index_i_s_sc 1073
+index_i_sc_sc 1074
+index_i_s_s_i 1075
+index_i_sc_s_i 1076
+index_i_s_sc_i 1077
+index_i_sc_sc_i 1078
+index_i_s_s_ic 1079
+index_i_sc_s_ic 1080
+index_i_s_sc_ic 1081
+index_i_sc_sc_ic 1082
+sprintf_s_s_p 1083
+sprintf_s_sc_p 1084
+sprintf_p_p_p 1085
+new_s 1086
+new_s_i 1087
+new_s_ic 1088
+stringinfo_i_s_i 1089
+stringinfo_i_sc_i 1090
+stringinfo_i_s_ic 1091
+stringinfo_i_sc_ic 1092
+upcase_s_s 1093
+upcase_s_sc 1094
+upcase_s 1095
+downcase_s_s 1096
+downcase_s_sc 1097
+downcase_s 1098
+titlecase_s_s 1099
+titlecase_s_sc 1100
+titlecase_s 1101
+join_s_s_p 1102
+join_s_sc_p 1103
+split_p_s_s 1104
+split_p_sc_s 1105
+split_p_s_sc 1106
+split_p_sc_sc 1107
+charset_i_s 1108
+charset_i_sc 1109
+charsetname_s_i 1110
+charsetname_s_ic 1111
+find_charset_i_s 1112
+find_charset_i_sc 1113
+trans_charset_s_i 1114
+trans_charset_s_ic 1115
+trans_charset_s_s_i 1116
+trans_charset_s_sc_i 1117
+trans_charset_s_s_ic 1118
+trans_charset_s_sc_ic 1119
+encoding_i_s 1120
+encoding_i_sc 1121
+encodingname_s_i 1122
+encodingname_s_ic 1123
+find_encoding_i_s 1124
+find_encoding_i_sc 1125
+trans_encoding_s_i 1126
+trans_encoding_s_ic 1127
+trans_encoding_s_s_i 1128
+trans_encoding_s_sc_i 1129
+trans_encoding_s_s_ic 1130
+trans_encoding_s_sc_ic 1131
+is_cclass_i_i_s_i 1132
+is_cclass_i_ic_s_i 1133
+is_cclass_i_i_sc_i 1134
+is_cclass_i_ic_sc_i 1135
+is_cclass_i_i_s_ic 1136
+is_cclass_i_ic_s_ic 1137
+is_cclass_i_i_sc_ic 1138
+is_cclass_i_ic_sc_ic 1139
+find_cclass_i_i_s_i_i 1140
+find_cclass_i_ic_s_i_i 1141
+find_cclass_i_i_sc_i_i 1142
+find_cclass_i_ic_sc_i_i 1143
+find_cclass_i_i_s_ic_i 1144
+find_cclass_i_ic_s_ic_i 1145
+find_cclass_i_i_sc_ic_i 1146
+find_cclass_i_ic_sc_ic_i 1147
+find_cclass_i_i_s_i_ic 1148
+find_cclass_i_ic_s_i_ic 1149
+find_cclass_i_i_sc_i_ic 1150
+find_cclass_i_ic_sc_i_ic 1151
+find_cclass_i_i_s_ic_ic 1152
+find_cclass_i_ic_s_ic_ic 1153
+find_cclass_i_i_sc_ic_ic 1154
+find_cclass_i_ic_sc_ic_ic 1155
+find_not_cclass_i_i_s_i_i 1156
+find_not_cclass_i_ic_s_i_i 1157
+find_not_cclass_i_i_sc_i_i 1158
+find_not_cclass_i_ic_sc_i_i 1159
+find_not_cclass_i_i_s_ic_i 1160
+find_not_cclass_i_ic_s_ic_i 1161
+find_not_cclass_i_i_sc_ic_i 1162
+find_not_cclass_i_ic_sc_ic_i 1163
+find_not_cclass_i_i_s_i_ic 1164
+find_not_cclass_i_ic_s_i_ic 1165
+find_not_cclass_i_i_sc_i_ic 1166
+find_not_cclass_i_ic_sc_i_ic 1167
+find_not_cclass_i_i_s_ic_ic 1168
+find_not_cclass_i_ic_s_ic_ic 1169
+find_not_cclass_i_i_sc_ic_ic 1170
+find_not_cclass_i_ic_sc_ic_ic 1171
+escape_s_s 1172
+compose_s_s 1173
+compose_s_sc 1174
+spawnw_i_s 1175
+spawnw_i_sc 1176
+spawnw_i_p 1177
+err_i 1178
+err_s 1179
+err_s_i 1180
+err_s_ic 1181
+time_i 1182
+time_n 1183
+gmtime_s_i 1184
+gmtime_s_ic 1185
+localtime_s_i 1186
+localtime_s_ic 1187
+decodetime_p_i 1188
+decodetime_p_ic 1189
+decodelocaltime_p_i 1190
+decodelocaltime_p_ic 1191
+sysinfo_s_i 1192
+sysinfo_s_ic 1193
+sysinfo_i_i 1194
+sysinfo_i_ic 1195
+sleep_i 1196
+sleep_ic 1197
+sleep_n 1198
+sleep_nc 1199
+sizeof_i_i 1200
+sizeof_i_ic 1201
+store_lex_s_p 1202
+store_lex_sc_p 1203
+find_lex_p_s 1204
+find_lex_p_sc 1205
+find_caller_lex_p_s 1206
+find_caller_lex_p_sc 1207
+get_namespace_p 1208
+get_namespace_p_p 1209
+get_namespace_p_pc 1210
+get_hll_namespace_p 1211
+get_hll_namespace_p_p 1212
+get_hll_namespace_p_pc 1213
+get_root_namespace_p 1214
+get_root_namespace_p_p 1215
+get_root_namespace_p_pc 1216
+get_global_p_s 1217
+get_global_p_sc 1218
+get_global_p_p_s 1219
+get_global_p_pc_s 1220
+get_global_p_p_sc 1221
+get_global_p_pc_sc 1222
+get_hll_global_p_s 1223
+get_hll_global_p_sc 1224
+get_hll_global_p_p_s 1225
+get_hll_global_p_pc_s 1226
+get_hll_global_p_p_sc 1227
+get_hll_global_p_pc_sc 1228
+get_root_global_p_s 1229
+get_root_global_p_sc 1230
+get_root_global_p_p_s 1231
+get_root_global_p_pc_s 1232
+get_root_global_p_p_sc 1233
+get_root_global_p_pc_sc 1234
+set_global_s_p 1235
+set_global_sc_p 1236
+set_global_p_s_p 1237
+set_global_pc_s_p 1238
+set_global_p_sc_p 1239
+set_global_pc_sc_p 1240
+set_hll_global_s_p 1241
+set_hll_global_sc_p 1242
+set_hll_global_p_s_p 1243
+set_hll_global_pc_s_p 1244
+set_hll_global_p_sc_p 1245
+set_hll_global_pc_sc_p 1246
+set_root_global_s_p 1247
+set_root_global_sc_p 1248
+set_root_global_p_s_p 1249
+set_root_global_pc_s_p 1250
+set_root_global_p_sc_p 1251
+set_root_global_pc_sc_p 1252
+find_name_p_s 1253
+find_name_p_sc 1254
+find_sub_not_null_p_s 1255
+find_sub_not_null_p_sc 1256
Modified: branches/io_rewiring/src/ops/set.ops
==============================================================================
--- branches/io_rewiring/src/ops/set.ops Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/ops/set.ops Sun Jun 7 23:41:42 2009 (r39444)
@@ -490,33 +490,40 @@
=cut
inline op copy(inout PMC, invar PMC) :base_mem {
- PMC * const clone = VTABLE_clone(interp, $2);
-
- /* Preserve the metadata on the destination. */
- PMC * const meta = VTABLE_getprops(interp, $1);
-
- /* avoid leaks and unreachable memory by destroying the destination PMC */
- if (PObj_active_destroy_TEST($1))
- VTABLE_destroy(interp, $1);
-
- /* the source PMC knows how to clone itself, but we must reuse the
- destination header */
- memmove($1, clone, sizeof (PMC));
-
- /* don't let the clone's destruction destroy the destination's data */
- PObj_active_destroy_CLEAR(clone);
- if (PObj_is_PMC_EXT_TEST(clone))
- clone->pmc_ext = NULL;
-
- /* Restore metadata. */
- if (!PMC_IS_NULL(meta)) {
- PMC * const iter = VTABLE_get_iter(interp, meta);
- while (VTABLE_get_bool(interp, iter)) {
- STRING * const key = VTABLE_shift_string(interp, iter);
- PMC * const value = VTABLE_get_pmc_keyed_str(interp, meta, key);
- VTABLE_setprop(interp, $1, key, value);
- }
- }
+ if (PMC_IS_NULL($1)) {
+ opcode_t *dest = expr NEXT();
+ opcode_t *handler = Parrot_ex_throw_from_op_args(interp, dest,
+ EXCEPTION_NULL_REG_ACCESS, "Null PMC in copy");
+ goto ADDRESS(handler);
+ }
+ else {
+ PMC * const clone = VTABLE_clone(interp, $2);
+ /* Preserve the metadata on the destination. */
+ PMC * const meta = VTABLE_getprops(interp, $1);
+
+ /* avoid leaks and unreachable memory by destroying the destination PMC */
+ if (PObj_active_destroy_TEST($1))
+ VTABLE_destroy(interp, $1);
+
+ /* the source PMC knows how to clone itself, but we must reuse the
+ * destination header */
+ memmove($1, clone, sizeof (PMC));
+
+ /* don't let the clone's destruction destroy the destination's data */
+ PObj_active_destroy_CLEAR(clone);
+ if (PObj_is_PMC_EXT_TEST(clone))
+ clone->pmc_ext = NULL;
+
+ /* Restore metadata. */
+ if (!PMC_IS_NULL(meta)) {
+ PMC * const iter = VTABLE_get_iter(interp, meta);
+ while (VTABLE_get_bool(interp, iter)) {
+ STRING * const key = VTABLE_shift_string(interp, iter);
+ PMC * const value = VTABLE_get_pmc_keyed_str(interp, meta, key);
+ VTABLE_setprop(interp, $1, key, value);
+ }
+ }
+ }
}
=back
Modified: branches/io_rewiring/src/packfile.c
==============================================================================
--- branches/io_rewiring/src/packfile.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/packfile.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -38,7 +38,8 @@
/* HEADERIZER BEGIN: static */
/* Don't modify between HEADERIZER BEGIN / HEADERIZER END. Your changes will be lost. */
-static void byte_code_destroy(SHIM_INTERP, ARGMOD(PackFile_Segment *self))
+static void byte_code_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
+ __attribute__nonnull__(1)
__attribute__nonnull__(2)
FUNC_MODIFIES(*self);
@@ -335,7 +336,8 @@
__attribute__nonnull__(3);
#define ASSERT_ARGS_byte_code_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = \
- PARROT_ASSERT_ARG(self)
+ PARROT_ASSERT_ARG(interp) \
+ || PARROT_ASSERT_ARG(self)
#define ASSERT_ARGS_byte_code_new __attribute__unused__ int _ASSERT_ARGS_CHECK = 0
#define ASSERT_ARGS_clone_constant __attribute__unused__ int _ASSERT_ARGS_CHECK = \
PARROT_ASSERT_ARG(interp) \
@@ -2518,7 +2520,7 @@
*/
static void
-byte_code_destroy(SHIM_INTERP, ARGMOD(PackFile_Segment *self))
+byte_code_destroy(PARROT_INTERP, ARGMOD(PackFile_Segment *self))
{
ASSERT_ARGS(byte_code_destroy)
PackFile_ByteCode * const byte_code = (PackFile_ByteCode *)self;
@@ -4694,6 +4696,12 @@
if (!pf)
Parrot_ex_throw_from_c_args(interp, NULL, 1,
"Unable to append PBC to the current directory");
+
+ mem_sys_free(pf->header);
+ pf->header = NULL;
+ mem_sys_free(pf->dirp);
+ pf->dirp = NULL;
+
}
else {
STRING *err;
@@ -4764,9 +4772,9 @@
parrot_split_path_ext(interp, path, &found_path, &found_ext);
name_length = Parrot_str_length(interp, lang_name);
found_path = Parrot_str_substr(interp, found_path, -name_length, name_length, NULL, 0);
- Parrot_add_library_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
+ Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "include/")),
PARROT_LIB_PATH_INCLUDE);
- Parrot_add_library_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
+ Parrot_lib_add_path(interp, Parrot_str_append(interp, found_path, CONST_STRING(interp, "dynext/")),
PARROT_LIB_PATH_DYNEXT);
Modified: branches/io_rewiring/src/packfile/pf_items.c
==============================================================================
--- branches/io_rewiring/src/packfile/pf_items.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/packfile/pf_items.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -1306,42 +1306,43 @@
PF_fetch_string(PARROT_INTERP, ARGIN_NULLOK(PackFile *pf), ARGIN(const opcode_t **cursor))
{
ASSERT_ARGS(PF_fetch_string)
- UINTVAL flags;
- opcode_t charset_nr;
- size_t size;
- STRING *s;
+ STRING *s;
+ UINTVAL flags = PF_fetch_opcode(pf, cursor);
const int wordsize = pf ? pf->header->wordsize : sizeof (opcode_t);
- const char *charset_name;
+ size_t size;
+ opcode_t charset_nr;
- flags = PF_fetch_opcode(pf, cursor);
/* don't let PBC mess our internals - only constant or not */
- flags &= (PObj_constant_FLAG | PObj_private7_FLAG);
- charset_nr = PF_fetch_opcode(pf, cursor);
+ flags &= (PObj_constant_FLAG | PObj_private7_FLAG);
+ charset_nr = PF_fetch_opcode(pf, cursor);
/* These may need to be separate */
- size = (size_t)PF_fetch_opcode(pf, cursor);
+ size = (size_t)PF_fetch_opcode(pf, cursor);
+
TRACE_PRINTF(("PF_fetch_string(): flags=0x%04x, ", flags));
TRACE_PRINTF(("charset_nr=%ld, ", charset_nr));
TRACE_PRINTF(("size=%ld.\n", size));
- charset_name = Parrot_charset_c_name(interp, charset_nr);
- s = string_make(interp, (const char *)*cursor, size, charset_name, flags);
+
+ s = string_make_from_charset(interp, (const char *)*cursor,
+ size, charset_nr, flags);
/* print only printable characters */
TRACE_PRINTF_VAL(("PF_fetch_string(): string is '%s' at 0x%x\n",
s->strstart, OFFS(pf, *cursor)));
-/* s = string_make(interp, *cursor, size,
- encoding_lookup_index(encoding),
- flags); */
TRACE_PRINTF_ALIGN(("-s ROUND_UP_B: cursor=0x%x, size=%d, wordsize=%d\n",
(const char *)*cursor + size, size, wordsize));
+
size = ROUND_UP_B(size, wordsize);
+
TRACE_PRINTF(("PF_fetch_string(): round size up to %ld.\n", size));
*((const unsigned char **) (cursor)) += size;
+
TRACE_PRINTF_ALIGN(("+s ROUND_UP_B: cursor=0x%x, size=%d\n", *cursor, size));
return s;
}
+
/*
=item C<opcode_t* PF_store_string(opcode_t *cursor, const STRING *s)>
Modified: branches/io_rewiring/src/pmc.c
==============================================================================
--- branches/io_rewiring/src/pmc.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -225,6 +225,7 @@
return pmc;
}
+
/*
=item C<static void check_pmc_reuse_flags(PARROT_INTERP, UINTVAL srcflags,
Modified: branches/io_rewiring/src/pmc/bigint.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/bigint.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/bigint.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -311,7 +311,6 @@
static void
bigint_abs(PARROT_INTERP, PMC *self, PMC *dest) {
BIGINT *bi_self, *bi_dest;
- pmc_reuse(interp, dest, enum_class_BigInt, 0);
GETATTR_BigInt_bi(interp, self, bi_self);
GETATTR_BigInt_bi(interp, dest, bi_dest);
mpz_abs(bi_dest->b, bi_self->b);
@@ -320,7 +319,6 @@
static void
bigint_neg(PARROT_INTERP, PMC *self, PMC *dest) {
BIGINT *bi_self, *bi_dest;
- pmc_reuse(interp, dest, enum_class_BigInt, 0);
GETATTR_BigInt_bi(interp, self, bi_self);
GETATTR_BigInt_bi(interp, dest, bi_dest);
mpz_neg(bi_dest->b, bi_self->b);
@@ -837,14 +835,14 @@
}
MULTI PMC *add(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_add_bigint(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *add(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_add_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -859,7 +857,7 @@
}
VTABLE PMC *add_int(INTVAL value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_add_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -893,20 +891,14 @@
MULTI PMC *subtract(BigInt value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_sub_bigint(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *subtract(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_sub_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -921,10 +913,7 @@
}
VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_sub_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -958,14 +947,14 @@
MULTI PMC *multiply(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_mul_bigint(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *multiply(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_mul_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -980,7 +969,7 @@
}
VTABLE PMC *multiply_int(INTVAL value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_mul_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -1011,10 +1000,7 @@
}
VTABLE PMC *pow_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_pow_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -1023,7 +1009,7 @@
MULTI PMC *pow(PMC *value, PMC *dest) {
/* XXX only Integer RHS currently */
const INTVAL r = VTABLE_get_integer(INTERP, value);
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_pow_bigint_int(INTERP, SELF, r, dest);
return dest;
@@ -1031,10 +1017,7 @@
MULTI PMC *divide(BigInt value, PMC *dest) {
BIGINT *bi;
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_div_bigint(INTERP, SELF, value, dest);
#if 0
@@ -1050,10 +1033,7 @@
}
MULTI PMC *divide(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_div_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -1068,10 +1048,7 @@
}
VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_div_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -1095,14 +1072,14 @@
}
MULTI PMC *floor_divide(BigInt value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_fdiv_bigint(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *floor_divide(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_fdiv_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -1117,10 +1094,7 @@
}
VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_fdiv_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -1146,20 +1120,14 @@
}
MULTI PMC *modulus(BigInt value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_mod_bigint(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *modulus(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_mod_bigint_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -1229,7 +1197,7 @@
*/
VTABLE PMC *absolute(PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_abs(INTERP, SELF, dest);
return dest;
@@ -1253,7 +1221,7 @@
*/
VTABLE PMC *neg(PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_neg(INTERP, SELF, dest);
return dest;
@@ -1282,10 +1250,7 @@
*/
MULTI PMC *bitwise_shl(BigInt value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_bitwise_shl_bigint_int(INTERP, SELF,
VTABLE_get_integer(INTERP, value),
@@ -1294,10 +1259,7 @@
}
MULTI PMC *bitwise_shl(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_bitwise_shl_bigint_int(INTERP, SELF,
VTABLE_get_integer(interp, value), dest);
@@ -1312,10 +1274,7 @@
}
VTABLE PMC *bitwise_shl_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_bitwise_shl_bigint_int(INTERP, SELF, value, dest);
return dest;
@@ -1363,10 +1322,7 @@
*/
MULTI PMC *bitwise_shr(BigInt value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_bitwise_shr_bigint_int(INTERP, SELF,
VTABLE_get_integer(INTERP, value),
@@ -1375,10 +1331,7 @@
}
MULTI PMC *bitwise_shr(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_bitwise_shr_bigint_int(INTERP, SELF,
VTABLE_get_integer(interp, value), dest);
@@ -1394,10 +1347,7 @@
}
VTABLE PMC *bitwise_shr_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bigint_bitwise_shr_bigint_int(INTERP, SELF, value, dest);
return dest;
Modified: branches/io_rewiring/src/pmc/bignum.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/bignum.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/bignum.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -546,7 +546,6 @@
static void
bignum_abs(PARROT_INTERP, PMC *self, PMC *dest) {
BIGNUM *bn_self, *bn_dest;
- pmc_reuse(interp, dest, enum_class_BigNum, 0);
GETATTR_BigNum_bn(interp, self, bn_self);
GETATTR_BigNum_bn(interp, dest, bn_dest);
mpf_abs(bn_dest->b, bn_self->b);
@@ -555,7 +554,6 @@
static void
bignum_neg(PARROT_INTERP, PMC *self, PMC *dest) {
BIGNUM *bn_self, *bn_dest;
- pmc_reuse(interp, dest, enum_class_BigNum, 0);
GETATTR_BigNum_bn(interp, self, bn_self);
GETATTR_BigNum_bn(interp, dest, bn_dest);
mpf_neg(bn_dest->b, bn_self->b);
@@ -1133,8 +1131,12 @@
bignum_add_bignum(INTERP, SELF, value, SELF);
}
- MULTI void i_add(FLOATVAL value) {
- bignum_add_bignum_float(INTERP, SELF, value, SELF);
+ MULTI void i_add(Integer value) {
+ bignum_add_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
+ }
+
+ MULTI void i_add(Float value) {
+ bignum_add_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
}
MULTI void i_add(DEFAULT value) {
@@ -1149,9 +1151,7 @@
}
VTABLE void i_add_float(FLOATVAL value) {
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigNum: no multiple dispatch variant 'i_add_float' for FLOATVAL");
+ bignum_add_bignum_float(INTERP, SELF, value, SELF);
}
/*
@@ -1163,20 +1163,14 @@
*/
MULTI PMC *subtract(BigNum value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_sub_bignum(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *subtract(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -1190,10 +1184,7 @@
}
VTABLE PMC *subtract_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_sub_bignum_int(INTERP, SELF, value, dest);
return dest;
@@ -1203,8 +1194,12 @@
bignum_sub_bignum(INTERP, SELF, value, SELF);
}
- MULTI void i_subtract(FLOATVAL value) {
- bignum_sub_bignum_float(INTERP, SELF, value, SELF);
+ MULTI void i_subtract(Integer value) {
+ bignum_sub_bignum_int(INTERP, SELF, VTABLE_get_integer(INTERP, value), SELF);
+ }
+
+ MULTI void i_subtract(Float value) {
+ bignum_sub_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
}
MULTI void i_subtract(DEFAULT value) {
@@ -1219,9 +1214,7 @@
}
VTABLE void i_subtract_float(FLOATVAL value) {
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigNum: no multiple dispatch variant 'i_subtract_float' for FLOATVAL");
+ bignum_sub_bignum_float(INTERP, SELF, value, SELF);
}
/*
@@ -1264,8 +1257,8 @@
bignum_mul_bignum(INTERP, SELF, value, SELF);
}
- MULTI void i_multiply(FLOATVAL value) {
- bignum_mul_bignum_float(INTERP, SELF, value, SELF);
+ MULTI void i_multiply(Float value) {
+ bignum_mul_bignum_float(INTERP, SELF, VTABLE_get_number(INTERP, value), SELF);
}
MULTI void i_multiply(Integer value) {
@@ -1284,9 +1277,7 @@
}
VTABLE void i_multiply_float(FLOATVAL value) {
- Parrot_ex_throw_from_c_args(INTERP, NULL,
- EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
- "BigNum: no multiple dispatch variant 'i_multiply_float' for FLOATVAL");
+ bignum_mul_bignum_float(INTERP, SELF, value, SELF);
}
/*
@@ -1298,10 +1289,7 @@
*/
VTABLE PMC *pow_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_pow_bignum_int(INTERP, SELF, value, dest);
return dest;
@@ -1326,10 +1314,7 @@
MULTI PMC *divide(BigNum value, PMC *dest) {
BIGNUM *bn;
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_div_bignum(INTERP, SELF, value, dest);
#if 0
@@ -1345,10 +1330,7 @@
}
MULTI PMC *divide(Integer value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -1362,10 +1344,7 @@
}
VTABLE PMC *divide_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_div_bignum_int(INTERP, SELF, value, dest);
return dest;
@@ -1377,6 +1356,9 @@
MULTI void i_divide(Integer value) {
bignum_div_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
}
+ MULTI void i_divide(Float value) {
+ bignum_div_bignum_float(INTERP, SELF, VTABLE_get_integer(interp, value), SELF);
+ }
MULTI void i_divide(DEFAULT value) {
Parrot_ex_throw_from_c_args(INTERP, NULL,
EXCEPTION_INTERNAL_NOT_IMPLEMENTED,
@@ -1397,14 +1379,14 @@
*/
MULTI PMC *floor_divide(BigNum value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_fdiv_bignum(INTERP, SELF, value, dest);
return dest;
}
MULTI PMC *floor_divide(Integer value, PMC *dest) {
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_fdiv_bignum_int(INTERP, SELF, VTABLE_get_integer(interp, value), dest);
return dest;
@@ -1418,10 +1400,7 @@
}
VTABLE PMC *floor_divide_int(INTVAL value, PMC *dest) {
- if (dest)
- pmc_reuse(interp, dest, SELF->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, SELF->vtable->base_type);
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
bignum_fdiv_bignum_int(INTERP, SELF, value, dest);
return dest;
Modified: branches/io_rewiring/src/pmc/continuation.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/continuation.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/continuation.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -134,11 +134,17 @@
*/
VTABLE PMC *clone() {
- Parrot_cont * const cc_self = PMC_cont(SELF);
- Parrot_cont * const cc = new_continuation(INTERP, cc_self);
- PMC * const ret = pmc_new(INTERP, enum_class_Continuation);
+ Parrot_cont * const cc_self = PMC_cont(SELF);
+ Parrot_cont * const cc = new_continuation(INTERP, cc_self);
+ PMC * const ret = pmc_new(INTERP, enum_class_Continuation);
+ Parrot_cont * const ret_cont = PMC_cont(ret);
PObj_custom_mark_destroy_SETALL(ret);
+
+ /* free ret's PMC_cont */
+ Parrot_free_context(interp, ret_cont->from_ctx, 1);
+ mem_sys_free(ret_cont);
+
cc->runloop_id = cc_self->runloop_id;
PMC_cont(ret) = cc;
Modified: branches/io_rewiring/src/pmc/coroutine.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/coroutine.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/coroutine.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -8,7 +8,7 @@
=head1 DESCRIPTION
-C<Coroutine> extends C<Continuation> to provide a subroutine that can
+C<Coroutine> extends C<Sub> to provide a subroutine that can
stop in the middle, and start back up later at the point at which it
stopped. See the L<Glossary|docs/glossary.pod> for more information.
@@ -76,41 +76,33 @@
VTABLE void init() {
Parrot_Coroutine_attributes *attrs =
- mem_allocate_zeroed_typed(Parrot_Coroutine_attributes);
- attrs->sub = (Parrot_sub*)new_coroutine(INTERP);
+ mem_allocate_typed(Parrot_Coroutine_attributes);
+
+ attrs->sub = (Parrot_sub *)new_coroutine(INTERP);
PMC_data(SELF) = attrs;
+
PObj_custom_mark_destroy_SETALL(SELF);
}
+
/*
-=item C<void destroy()>
+=item C<PMC * clone()>
-Destroys the coroutine.
+Clones the coroutine.
=cut
*/
- VTABLE void destroy() {
- Parrot_Coroutine_attributes *attrs = PARROT_COROUTINE(SELF);
- Parrot_sub *sub = attrs->sub;
-
- if (sub->ctx)
- Parrot_free_context(interp, sub->ctx, 1);
-
- SUPER();
- }
-
VTABLE PMC *clone() {
- Parrot_coro * const coro_sub = mem_allocate_typed(Parrot_coro);
PMC * const ret = pmc_new(INTERP, SELF->vtable->base_type);
Parrot_sub *sub;
+ Parrot_sub *coro_sub;
PObj_custom_mark_destroy_SETALL(ret);
- SET_ATTR_sub(INTERP, ret, (Parrot_sub *)coro_sub);
-
+ PMC_get_sub(INTERP, ret, coro_sub);
PMC_get_sub(INTERP, SELF, sub);
memcpy(coro_sub, sub, sizeof (Parrot_coro));
@@ -132,7 +124,7 @@
VTABLE opcode_t *invoke(void *next) {
PackFile_ByteCode *wanted_seg;
Parrot_Coroutine_attributes *attrs = PARROT_COROUTINE(SELF);
- Parrot_coro * const co = (Parrot_coro*)attrs->sub;
+ Parrot_coro * const co = (Parrot_coro *)attrs->sub;
opcode_t * dest = co->address;
if (Interp_trace_TEST(INTERP, PARROT_TRACE_SUB_CALL_FLAG))
@@ -262,17 +254,15 @@
VTABLE void mark() {
Parrot_Coroutine_attributes *attrs = PARROT_COROUTINE(SELF);
- Parrot_coro * const co = (Parrot_coro *)attrs->sub;
+ Parrot_coro * const co = (Parrot_coro *)attrs->sub;
+ /* co->ctx marked in SUPER(), so do not mark here */
if (co) {
- if (co->ctx)
- mark_context(INTERP, co->ctx);
if (co->dynamic_state)
mark_stack(INTERP, co->dynamic_state);
+ SUPER();
}
-
- SUPER();
}
}
Modified: branches/io_rewiring/src/pmc/eventhandler.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/eventhandler.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/eventhandler.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2007-2008, Parrot Foundation.
+Copyright (C) 2007-2009, Parrot Foundation.
$Id$
=head1 NAME
@@ -138,25 +138,8 @@
if (! PMC_IS_NULL(e->code))
Parrot_gc_mark_PObj_alive(INTERP, (PObj *)e->code);
- }
- }
-
-/*
-=item C<void destroy()>
-
-Frees any memory held by this PMC.
-
-=cut
-
-*/
-
- VTABLE void destroy() {
- Parrot_EventHandler_attributes *e = PMC_data_typed(SELF, Parrot_EventHandler_attributes *);
-
- if (e) {
- mem_sys_free(e);
- PMC_data(SELF) = NULL;
+ SUPER();
}
}
Modified: branches/io_rewiring/src/pmc/fixedintegerarray.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/fixedintegerarray.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/fixedintegerarray.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -659,6 +659,7 @@
Parrot_FixedIntegerArray_attributes *attrs =
mem_allocate_zeroed_typed(Parrot_FixedIntegerArray_attributes);
PMC_data(SELF) = attrs;
+ PObj_active_destroy_SET(SELF);
if (info->extra_flags == EXTRA_IS_NULL) {
IMAGE_IO * const io = info->image_io;
Modified: branches/io_rewiring/src/pmc/float.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/float.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/float.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -33,8 +33,11 @@
VTABLE void init() {
Parrot_Float_attributes * const fattr = mem_allocate_zeroed_typed(Parrot_Float_attributes);
- fattr->fv = 0.0;
+
+ fattr->fv = 0.0;
PMC_data(SELF) = fattr;
+
+ PObj_active_destroy_SET(SELF);
}
/*
Modified: branches/io_rewiring/src/pmc/integer.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/integer.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/integer.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -364,7 +364,7 @@
MULTI PMC *add(Complex value, PMC *dest) {
const INTVAL a = SELF.get_integer();
- dest = pmc_new(INTERP, VTABLE_type(interp, value));
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
VTABLE_set_number_native(INTERP, dest,
a + VTABLE_get_number_keyed_int(INTERP, value, 0));
@@ -425,32 +425,26 @@
*/
- VTABLE void i_add(PMC *value) {
- const INTVAL type = value->vtable->base_type;
+ MULTI void i_add(Integer value) {
+ STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value));
+ }
- switch (type) {
- case enum_class_Integer:
- STATICSELF.i_add_int(VTABLE_get_integer(INTERP, value));
- break;
- case enum_class_Complex:
- pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
- VTABLE_set_number_native(INTERP, SELF,
- SELF.get_integer() + VTABLE_get_number(INTERP, value));
- break;
+ MULTI void i_add(Complex value) {
+ const INTVAL a = SELF.get_integer();
- default:
- VTABLE_set_number_native(INTERP, SELF,
- SELF.get_integer() + VTABLE_get_number(INTERP, value));
- break;
- }
+ pmc_reuse(INTERP, SELF, enum_class_Complex, 0);
+ VTABLE_set_number_native(INTERP, SELF,
+ SELF.get_integer() + VTABLE_get_number(INTERP, value));
}
+
MULTI void i_add(DEFAULT value) {
VTABLE_set_number_native(INTERP, SELF,
SELF.get_integer() + VTABLE_get_number(INTERP, value));
}
+
VTABLE void i_add_int(INTVAL b) {
const INTVAL a = SELF.get_integer();
const INTVAL c = a + b;
Modified: branches/io_rewiring/src/pmc/lexpad.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/lexpad.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/lexpad.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -80,6 +80,9 @@
VTABLE void init_pmc(PMC *lexinfo) {
Parrot_LexPad_attributes * const attrs =
mem_allocate_zeroed_typed(Parrot_LexPad_attributes);
+
+ PObj_active_destroy_SET(SELF);
+
attrs->lexinfo = lexinfo;
PMC_data(SELF) = attrs;
}
Modified: branches/io_rewiring/src/pmc/resizablestringarray.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/resizablestringarray.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/resizablestringarray.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -36,7 +36,6 @@
*/
VTABLE void init() {
-
Parrot_ResizableStringArray_attributes *attrs =
mem_allocate_zeroed_typed(Parrot_ResizableStringArray_attributes);
Modified: branches/io_rewiring/src/pmc/scalar.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/scalar.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/scalar.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -76,7 +76,7 @@
dest = pmc_new(interp, enum_class_BigInt);
VTABLE_set_integer_native(interp, dest, base);
- interp->vtables[enum_class_BigInt]->bitwise_shl_int(interp, dest, shift_amount, dest);
+ VTABLE_i_bitwise_shl_int(interp, dest, shift_amount);
}
return dest;
@@ -257,10 +257,7 @@
MULTI PMC *subtract(Complex value, PMC *dest) {
const FLOATVAL a = SELF.get_number();
- if (dest)
- pmc_reuse(INTERP, dest, value->vtable->base_type, 0);
- else
- dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
+ dest = pmc_new(INTERP, VTABLE_type(INTERP, value));
VTABLE_set_number_native(INTERP, dest,
a - VTABLE_get_number_keyed_int(INTERP, value, 0));
@@ -866,7 +863,7 @@
return dest;
}
- MULTI PMC *bitwise_xor_int(INTVAL value, PMC *dest) {
+ VTABLE PMC *bitwise_xor_int(INTVAL value, PMC *dest) {
const INTVAL result = SELF.get_integer() ^ value;
dest = pmc_new(INTERP, VTABLE_type(INTERP, SELF));
Modified: branches/io_rewiring/src/pmc/string.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/string.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/string.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -241,8 +241,10 @@
VTABLE void set_string_native(STRING *value) {
/* Only allow constant PMCs to embed constant strings */
if (PObj_constant_TEST(SELF) && !PObj_constant_TEST(value)) {
- const char *copy = Parrot_str_to_cstring(INTERP, value);
- value = Parrot_str_new_constant(INTERP, copy);
+ char *copy = Parrot_str_to_cstring(INTERP, value);
+ value = Parrot_str_new_init(INTERP, copy, strlen(copy),
+ PARROT_DEFAULT_ENCODING, PARROT_DEFAULT_CHARSET, PObj_constant_FLAG);
+ Parrot_str_free_cstring(copy);
}
SET_ATTR_str_val(INTERP, SELF, value);
@@ -259,8 +261,11 @@
*/
VTABLE void assign_string_native(STRING *value) {
- SET_ATTR_str_val(INTERP, SELF,
- Parrot_str_set(INTERP, SELF.get_string(), value));
+ if (!STRING_IS_NULL(value))
+ SET_ATTR_str_val(INTERP, SELF,
+ Parrot_str_set(INTERP, SELF.get_string(), value));
+ else
+ SET_ATTR_str_val(INTERP, SELF, NULL);
}
/*
Modified: branches/io_rewiring/src/pmc/stringhandle.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/stringhandle.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/stringhandle.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -11,15 +11,40 @@
The StringHandle PMC performs I/O operations, but on an internal string rather
than an external file. Commonly used as a mock FileHandle for testing.
-=head2 Vtable Functions
+=cut
+
+*/
+
+#include "../src/io/io_private.h"
+
+PARROT_INLINE
+static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(STRING *s));
+
+/*
+
+=head2 Internal Functions
=over 4
+=item C<static int encoding_is_utf8()>
+
+Helper function for internal usage. Return 1 if the string argument is
+not null and has utf8 encoding, 0 otherwise.
+
+=back
+
=cut
*/
-#include "../src/io/io_private.h"
+PARROT_INLINE
+static int encoding_is_utf8(PARROT_INTERP, ARGIN_NULLOK(STRING *s))
+{
+ if (STRING_IS_NULL(s))
+ return 0;
+ else
+ return Parrot_str_equal(interp, s, CONST_STRING(interp, "utf8"));
+}
pmclass StringHandle extends Handle need_ext {
ATTR INTVAL flags; /* Filehandle flags */
@@ -31,6 +56,10 @@
/*
+=head2 Vtable Functions
+
+=over 4
+
=item C<void init()>
Initializes a newly created StringHandle object.
@@ -176,8 +205,7 @@
STRING *encoding;
GET_ATTR_encoding(INTERP, SELF, encoding);
- if (!STRING_IS_NULL(encoding)
- && Parrot_str_equal(INTERP, encoding, CONST_STRING(INTERP, "utf8")))
+ if (encoding_is_utf8(INTERP, encoding))
new_string = string_make(INTERP, "", 0, "unicode", 0);
else
new_string = Parrot_str_new(INTERP, "", 0);
@@ -294,9 +322,7 @@
if (STRING_IS_NULL(string_result)) {
STRING *encoding;
GET_ATTR_encoding(INTERP, SELF, encoding);
- if (!STRING_IS_NULL(encoding) &&
- Parrot_str_equal(INTERP, encoding,
- Parrot_str_new_constant(INTERP, "utf8")))
+ if (encoding_is_utf8(INTERP, encoding))
string_result = string_make(INTERP, "", 0, "unicode", 0);
else
string_result = Parrot_str_new_constant(INTERP, "");
@@ -383,9 +409,9 @@
METHOD buffer_type(STRING *new_type :optional, INTVAL got_type :opt_flag) {
INTVAL flags;
- STRING * const nobuffer_string = Parrot_str_new_constant(INTERP, "unbuffered");
- STRING * const linebuffer_string = Parrot_str_new_constant(INTERP, "line-buffered");
- STRING * const fullbuffer_string = Parrot_str_new_constant(INTERP, "full-buffered");
+ STRING * const nobuffer_string = CONST_STRING(INTERP, "unbuffered");
+ STRING * const linebuffer_string = CONST_STRING(INTERP, "line-buffered");
+ STRING * const fullbuffer_string = CONST_STRING(INTERP, "full-buffered");
GET_ATTR_flags(INTERP, SELF, flags);
Modified: branches/io_rewiring/src/pmc/sub.pmc
==============================================================================
--- branches/io_rewiring/src/pmc/sub.pmc Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc/sub.pmc Sun Jun 7 23:41:42 2009 (r39444)
@@ -120,9 +120,10 @@
VTABLE STRING *get_string() {
Parrot_sub *sub;
PMC_get_sub(INTERP, SELF, sub);
- if (sub->name != NULL) {
+
+ if (sub->name)
return Parrot_str_copy(INTERP, sub->name);
- }
+
return NULL;
}
@@ -260,10 +261,8 @@
PARROT_ASSERT(!PMC_IS_NULL(ccont));
- /*
- * plain subroutine call
- * create new context, place it in interpreter
- */
+ /* plain subroutine call
+ * create new context, place it in interpreter */
context = Parrot_set_new_context(INTERP, sub->n_regs_used);
context->current_sub = SELF;
context->caller_ctx = caller_ctx;
@@ -280,8 +279,7 @@
/* if this is an outer sub, then we need to set sub->ctx
* to the new context (refcounted) and convert the
- * retcontinuation to a normal continuation.
- */
+ * retcontinuation to a normal continuation. */
if (PObj_get_FLAGS(SELF) & SUB_FLAG_IS_OUTER) {
/* release any previously held context */
if (sub->ctx)
@@ -360,9 +358,9 @@
Parrot_switch_to_cs(INTERP, sub->seg, 1);
if (PObj_get_FLAGS(ccont) & SUB_FLAG_TAILCALL) {
- if (!(*pc == PARROT_OP_get_params_pc ||
- (*pc == PARROT_OP_push_eh_ic &&
- pc[2] == PARROT_OP_get_params_pc))) {
+ if (!(*pc == PARROT_OP_get_params_pc
+ || (*pc == PARROT_OP_push_eh_ic
+ && pc[2] == PARROT_OP_get_params_pc))) {
/* TODO keep it or resize it */
--context->recursion_depth;
@@ -395,9 +393,17 @@
/* we have to mark it ourselves */
PObj_custom_mark_destroy_SETALL(ret);
- /* first set the sub struct, Parrot_str_copy may cause GC */
PMC_get_sub(INTERP, ret, sub);
+
+ /* release any previously held contexts */
+ if (sub->ctx)
+ Parrot_free_context(INTERP, sub->ctx, 1);
+ if (sub->outer_ctx)
+ Parrot_free_context(INTERP, sub->outer_ctx, 1);
+
PMC_get_sub(INTERP, SELF, dest_sub);
+
+ /* first set the sub struct, Parrot_str_copy may cause GC */
*sub = *dest_sub;
if (sub->name)
@@ -406,6 +412,7 @@
/* Be sure not to share arg_info. */
dest_sub->arg_info = NULL;
+ /* mark any newly held contexts */
if (sub->ctx)
Parrot_context_ref(INTERP, sub->ctx);
if (sub->outer_ctx)
@@ -433,18 +440,28 @@
if (other->vtable->base_type == SELF->vtable->base_type) {
Parrot_sub *my_sub;
Parrot_sub *other_sub;
-
- /* copy the sub struct */
PMC_get_sub(INTERP, SELF, my_sub);
PMC_get_sub(INTERP, other, other_sub);
- memcpy(my_sub, other_sub, sizeof (struct Parrot_sub));
+
+ /* Increase reference count of destination before
+ * freeing the one in self, to avoid problems in
+ * case of self assignment */
+ if (other_sub->ctx)
+ Parrot_context_ref(interp, other_sub->ctx);
+ /* get rid of this context, if attached */
+ if (my_sub->ctx)
+ Parrot_free_context(INTERP, my_sub->ctx, 1);
+
+ /* copy the sub struct */
+ memmove(my_sub, other_sub, sizeof (Parrot_sub));
/* copy the name so it's a different string in memory */
- if (my_sub->name != NULL)
+ if (my_sub->name)
my_sub->name = Parrot_str_copy(INTERP, my_sub->name);
}
else
- Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
+ Parrot_ex_throw_from_c_args(INTERP, NULL,
+ EXCEPTION_INVALID_OPERATION,
"Can't assign a non-Sub type to a Sub");
}
@@ -500,15 +517,14 @@
*/
MULTI INTVAL is_equal(PMC *value) {
-
Parrot_sub *my_sub, *value_sub;
PMC_get_sub(INTERP, SELF, my_sub);
PMC_get_sub(INTERP, value, value_sub);
- return SELF->vtable == value->vtable &&
- (my_sub)->start_offs == (value_sub)->start_offs &&
- (my_sub)->seg == (value_sub)->seg;
+ return SELF->vtable == value->vtable
+ && (my_sub)->start_offs == (value_sub)->start_offs
+ && (my_sub)->seg == (value_sub)->seg;
}
/*
@@ -630,6 +646,7 @@
int i;
PMC_get_sub(INTERP, SELF, sub);
+
/* we get relative offsets */
sub->start_offs = (size_t) VTABLE_shift_integer(INTERP, io);
sub->end_offs = (size_t) VTABLE_shift_integer(INTERP, io);
@@ -666,13 +683,13 @@
{
/* Create a hash, then use inspect_str to get all of the data to
* fill it up with. */
- PMC * const metadata = pmc_new(interp, enum_class_Hash);
- STRING * const pos_required_str = CONST_STRING(interp, "pos_required");
- STRING * const pos_optional_str = CONST_STRING(interp, "pos_optional");
- STRING * const named_required_str = CONST_STRING(interp, "named_required");
- STRING * const named_optional_str = CONST_STRING(interp, "named_optional");
- STRING * const pos_slurpy_str = CONST_STRING(interp, "pos_slurpy");
- STRING * const named_slurpy_str = CONST_STRING(interp, "named_slurpy");
+ PMC * const metadata = pmc_new(interp, enum_class_Hash);
+ STRING * const pos_required_str = CONST_STRING(interp, "pos_required");
+ STRING * const pos_optional_str = CONST_STRING(interp, "pos_optional");
+ STRING * const named_required_str = CONST_STRING(interp, "named_required");
+ STRING * const named_optional_str = CONST_STRING(interp, "named_optional");
+ STRING * const pos_slurpy_str = CONST_STRING(interp, "pos_slurpy");
+ STRING * const named_slurpy_str = CONST_STRING(interp, "named_slurpy");
VTABLE_set_pmc_keyed_str(interp, metadata, pos_required_str,
VTABLE_inspect_str(interp, SELF, pos_required_str));
@@ -737,12 +754,13 @@
VTABLE PMC *inspect_str(STRING *what)
{
Parrot_sub *sub;
- INTVAL count_found = -1;
- PMC *retval;
+ PMC *retval;
+ INTVAL count_found = -1;
PMC_get_sub(INTERP, SELF, sub);
+
/* If the argument info hasn't been generated yet, generate it. */
- if (sub->arg_info == NULL) {
+ if (!sub->arg_info) {
/* Get pointer into the bytecode where this sub starts. */
opcode_t *pc = sub->seg->base.data + sub->start_offs;
@@ -751,8 +769,8 @@
/* If the first instruction is a get_params... */
if (*pc == PARROT_OP_get_params_pc) {
- int i, sig_length;
PMC *sig;
+ int i, sig_length;
/* Get the signature (the next thing in the bytecode). */
pc++;
@@ -761,6 +779,7 @@
/* Iterate over the signature and compute argument counts. */
sig_length = VTABLE_elements(INTERP, sig);
+
for (i = 0; i < sig_length; i++) {
int sig_item = VTABLE_get_integer_keyed_int(INTERP, sig, i);;
if (PARROT_ARG_SLURPY_ARRAY_ISSET(sig_item)){
@@ -908,6 +927,15 @@
RETURN(PMC *lexinfo);
}
+ METHOD get_subid() {
+ Parrot_sub *sub;
+ STRING *subid;
+
+ PMC_get_sub(INTERP, SELF, sub);
+ subid = sub->subid ? sub->subid : CONST_STRING(interp, "");
+ RETURN(STRING *subid);
+ }
+
METHOD get_outer() {
Parrot_sub *sub;
PMC *outersub;
Modified: branches/io_rewiring/src/pmc_freeze.c
==============================================================================
--- branches/io_rewiring/src/pmc_freeze.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/pmc_freeze.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -742,8 +742,11 @@
op_append(PARROT_INTERP, ARGIN(STRING *s), opcode_t b, size_t len)
{
ASSERT_ARGS(op_append)
+ char *str_pos;
+
op_check_size(interp, s, len);
- *((opcode_t *)((ptrcast_t)s->strstart + s->bufused)) = b;
+ str_pos = s->strstart + s->bufused;
+ *((opcode_t *)(str_pos)) = b;
s->bufused += len;
s->strlen += len;
}
@@ -1759,7 +1762,6 @@
* collected under us.
*/
if (1 || (Parrot_str_byte_length(interp, image) > THAW_BLOCK_GC_SIZE)) {
- Parrot_gc_mark_and_sweep(interp, 1);
Parrot_block_GC_mark(interp);
Parrot_block_GC_sweep(interp);
gc_block = 1;
Modified: branches/io_rewiring/src/runcore/main.c
==============================================================================
--- branches/io_rewiring/src/runcore/main.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/runcore/main.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -49,7 +49,7 @@
#include "../pmc/pmc_parrotlibrary.h"
-/* HEADERIZER HFILE: none */
+/* HEADERIZER HFILE: include/parrot/runcore_api.h */
/* XXX Needs to get done at the same time as the other interpreter files */
/* HEADERIZER BEGIN: static */
@@ -300,6 +300,7 @@
void
do_prederef(void **pc_prederef, PARROT_INTERP, int type)
{
+ ASSERT_ARGS(do_prederef)
const size_t offset = pc_prederef - interp->code->prederef.code;
opcode_t * const pc = ((opcode_t *)interp->code->base.data) + offset;
const op_info_t *opinfo;
@@ -620,6 +621,7 @@
void
exec_init_prederef(PARROT_INTERP, void *prederef_arena)
{
+ ASSERT_ARGS(exec_init_prederef)
load_prederef(interp, PARROT_CGP_CORE);
if (!interp->code->prederef.code) {
@@ -648,6 +650,7 @@
void *
init_jit(PARROT_INTERP, SHIM(opcode_t *pc))
{
+ ASSERT_ARGS(init_jit)
#if JIT_CAPABLE
opcode_t *code_start;
UINTVAL code_size; /* in opcodes */
@@ -695,7 +698,9 @@
void
prepare_for_run(PARROT_INTERP)
{
+ ASSERT_ARGS(prepare_for_run)
void *ignored;
+
switch (interp->run_core) {
case PARROT_JIT_CORE:
ignored = init_jit(interp, interp->code->base.data);
@@ -892,6 +897,7 @@
void
runops_int(PARROT_INTERP, size_t offset)
{
+ ASSERT_ARGS(runops_int)
opcode_t *(*core) (PARROT_INTERP, opcode_t *) = NULL;
/* setup event function ptrs */
@@ -1009,6 +1015,7 @@
void
Parrot_setup_event_func_ptrs(PARROT_INTERP)
{
+ ASSERT_ARGS(Parrot_setup_event_func_ptrs)
const size_t n = interp->op_count;
const oplib_init_f init_func = get_core_op_lib_init(interp, interp->run_core);
op_lib_t * const lib = init_func(1);
@@ -1034,6 +1041,36 @@
/*
+=item C<void Parrot_runcore_destroy(PARROT_INTERP)>
+
+Shuts down the runcores and deallocates any dynops memory.
+
+=cut
+
+*/
+
+void
+Parrot_runcore_destroy(PARROT_INTERP)
+{
+ ASSERT_ARGS(Parrot_runcore_destroy)
+ op_lib_t *cg_lib;
+
+#ifdef HAVE_COMPUTED_GOTO
+ cg_lib = PARROT_CORE_CGP_OPLIB_INIT(1);
+ if (cg_lib->op_func_table)
+ mem_sys_free(cg_lib->op_func_table);
+ cg_lib->op_func_table = NULL;
+
+ cg_lib = PARROT_CORE_CG_OPLIB_INIT(1);
+ if (cg_lib->op_func_table)
+ mem_sys_free(cg_lib->op_func_table);
+ cg_lib->op_func_table = NULL;
+#endif
+}
+
+
+/*
+
=back
=head2 Dynamic Loading Functions
@@ -1051,6 +1088,7 @@
void
dynop_register(PARROT_INTERP, PMC *lib_pmc)
{
+ ASSERT_ARGS(dynop_register)
op_lib_t *lib, *core;
oplib_init_f init_func;
op_func_t *new_func_table, *new_evc_func_table;
@@ -1341,6 +1379,7 @@
void
disable_event_checking(PARROT_INTERP)
{
+ ASSERT_ARGS(disable_event_checking)
/* restore func table */
PARROT_ASSERT(interp->save_func_table);
notify_func_table(interp, interp->save_func_table, 0);
@@ -1366,6 +1405,7 @@
void
enable_event_checking(PARROT_INTERP)
{
+ ASSERT_ARGS(enable_event_checking)
/* put table in place */
notify_func_table(interp, interp->evc_func_table, 1);
}
Modified: branches/io_rewiring/src/runcore/trace.c
==============================================================================
--- branches/io_rewiring/src/runcore/trace.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/runcore/trace.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -45,7 +45,7 @@
/* HEADERIZER END: static */
/*
-
+
=item C<Interp * debugger_or_interp(PARROT_INTERP)>
Get debugger if available
@@ -55,6 +55,8 @@
PARROT_CANNOT_RETURN_NULL
Interp *
debugger_or_interp(PARROT_INTERP) {
+ ASSERT_ARGS(debugger_or_interp)
+
return interp->pdb && interp->pdb->debugger
? interp->pdb->debugger
: interp;
Modified: branches/io_rewiring/src/string/api.c
==============================================================================
--- branches/io_rewiring/src/string/api.c Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/src/string/api.c Sun Jun 7 23:41:42 2009 (r39444)
@@ -684,6 +684,7 @@
return s;
}
+
/*
=item C<STRING * string_make(PARROT_INTERP, const char *buffer, UINTVAL len,
@@ -720,7 +721,7 @@
UINTVAL len, ARGIN_NULLOK(const char *charset_name), UINTVAL flags)
{
ASSERT_ARGS(string_make)
- const CHARSET *charset;
+ const CHARSET *charset;
if (!charset_name)
charset_name = "ascii";
@@ -731,12 +732,57 @@
Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
"Can't make '%s' charset strings", charset_name);
-
return Parrot_str_new_init(interp, buffer, len,
charset->preferred_encoding, charset, flags);
}
+
+/*
+
+=item C<STRING * string_make_from_charset(PARROT_INTERP, const char *buffer,
+UINTVAL len, INTVAL charset_nr, UINTVAL flags)>
+
+Creates and returns a new Parrot string using C<len> bytes of string data read
+from C<buffer>.
+
+The value of C<charset_name> specifies the string's representation. It must be
+a valid charset identifier.
+
+ 'iso-8859-1'
+ 'ascii'
+ 'binary'
+ 'unicode'
+
+The encoding is implicitly guessed; C<unicode> implies the C<utf-8> encoding,
+and the other three assume C<fixed-8> encoding.
+
+The value of C<flags> is optionally one or more C<PObj_*> flags C<OR>-ed
+together.
+
+=cut
+
+*/
+
+PARROT_EXPORT
+PARROT_WARN_UNUSED_RESULT
+PARROT_CANNOT_RETURN_NULL
+STRING *
+string_make_from_charset(PARROT_INTERP, ARGIN_NULLOK(const char *buffer),
+ UINTVAL len, INTVAL charset_nr, UINTVAL flags)
+{
+ ASSERT_ARGS(string_make_from_charset)
+ const CHARSET *charset = Parrot_get_charset(interp, charset_nr);
+
+ if (!charset)
+ Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_UNIMPLEMENTED,
+ "Invalid charset number '%d' specified", charset_nr);
+
+ return Parrot_str_new_init(interp, buffer, len,
+ charset->preferred_encoding, charset, flags);
+}
+
+
/*
=item C<STRING * Parrot_str_new_init(PARROT_INTERP, const char *buffer, UINTVAL
@@ -2358,19 +2404,27 @@
Parrot_str_to_hashval(PARROT_INTERP, ARGMOD_NULLOK(STRING *s))
{
ASSERT_ARGS(Parrot_str_to_hashval)
- register size_t h;
- const UINTVAL seed = interp->hash_seed;
+ String_iter iter;
+ UINTVAL offs;
+ size_t hashval = interp->hash_seed;
if (!s)
- return seed;
+ return hashval;
/* ZZZZZ workaround for something not setting up encodings right */
saneify_string(s);
- h = CHARSET_COMPUTE_HASH(interp, s, seed);
- s->hashval = h;
+ ENCODING_ITER_INIT(interp, s, &iter);
+
+ for (offs = 0; offs < s->strlen; ++offs) {
+ const UINTVAL c = iter.get_and_advance(interp, &iter);
+ hashval += hashval << 5;
+ hashval += c;
+ }
+
+ s->hashval = hashval;
- return h;
+ return hashval;
}
Modified: branches/io_rewiring/t/compilers/imcc/syn/file.t
==============================================================================
--- branches/io_rewiring/t/compilers/imcc/syn/file.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/compilers/imcc/syn/file.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -33,7 +33,8 @@
my $ended_ok = 0;
-my ($FOO, $temp_pasm) = create_tempfile( SUFFIX => '.pasm', DIR => cwd(), UNLINK => 1 );
+#my ($FOO, $temp_pasm) = create_tempfile( SUFFIX => '.pasm', DIR => cwd(), UNLINK => 1 );
+my ($FOO, $temp_pasm) = create_tempfile( SUFFIX => '.pasm', UNLINK => 1 );
print $FOO <<'ENDF';
.macro_const BAR 42
Modified: branches/io_rewiring/t/compilers/imcc/syn/pcc.t
==============================================================================
--- branches/io_rewiring/t/compilers/imcc/syn/pcc.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/compilers/imcc/syn/pcc.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,5 +1,5 @@
#!perl
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
# $Id$
use strict;
@@ -7,7 +7,7 @@
use lib qw( . lib ../lib ../../lib );
use Test::More;
use Parrot::Config;
-use Parrot::Test tests => 22;
+use Parrot::Test tests => 23;
##############################
# Parrot Calling Conventions
@@ -542,6 +542,27 @@
pir_output_is( $too_many_params, "didn't segfault\n", "calling a sub with way too many params" );
+pir_output_is( <<'CODE', <<'OUT', 'Unicode allowed in method names, TT #730' );
+.sub 'main' :main
+ $P0 = newclass 'Foo'
+ $P1 = new $P0
+ $S0 = unicode:"foo\x{b1}"
+ $P1.$S0(1)
+ $P1.unicode:"foo\x{b1}"(2)
+.end
+
+.namespace ['Foo']
+.sub unicode:"foo\x{b1}" :method
+ .param int count
+ print 'ok '
+ print count
+ say ' - Unicode method names allowed'
+.end
+CODE
+ok 1 - Unicode method names allowed
+ok 2 - Unicode method names allowed
+OUT
+
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
Modified: branches/io_rewiring/t/compilers/json/from_parrot.t
==============================================================================
--- branches/io_rewiring/t/compilers/json/from_parrot.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/compilers/json/from_parrot.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -30,10 +30,10 @@
.local string s
s = ''
+ load_bytecode 'JSON.pbc'
$S0 = _json( s, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
""
OUT
@@ -45,10 +45,10 @@
.local string s
s = 'abcdeABCDE01234$%^&*'
+ load_bytecode 'JSON.pbc'
$S0 = _json( s, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
"abcdeABCDE01234$%^&*"
OUT
@@ -60,10 +60,10 @@
.local string s
s = "abcde\\ABCDE\"01234\n$%^&*"
# XXX more escapes need to be tested; see http://www.json.org/
+ load_bytecode 'JSON.pbc'
$S0 = _json( s, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
"abcde\\ABCDE\"01234\n$%^&*"
OUT
@@ -74,6 +74,7 @@
.sub test :main
.local int i
i = 0
+ load_bytecode 'JSON.pbc'
$S0 = _json( i, 0 )
say $S0
i = 35
@@ -89,7 +90,6 @@
$S0 = _json( i, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
0
35
@@ -104,6 +104,7 @@
.sub test :main
.local num n
n = 0.0
+ load_bytecode 'JSON.pbc'
$S0 = _json( n )
say $S0
n = 2.50
@@ -116,7 +117,6 @@
$S0 = _json( n )
say $S0
.end
-.include 'library/JSON.pir'
CODE
0
2.5
@@ -130,6 +130,7 @@
.sub test :main
.local string s
s = "abcde\\ABCDE\"01234\n$%^&*"
+ load_bytecode 'JSON.pbc'
$S0 = _json( s, 1 )
print $S0
@@ -143,7 +144,6 @@
$S0 = _json( n, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
"abcde\\ABCDE\"01234\n$%^&*"
-42
@@ -169,10 +169,10 @@
array[8] = 8
array[9] = 9
+ load_bytecode 'JSON.pbc'
$S0 = _json( array, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
[0,1,2,3,4,5,6,7,8,9]
OUT
@@ -196,10 +196,10 @@
array[8] = 8
array[9] = 9
+ load_bytecode 'JSON.pbc'
$S0 = _json( array, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
[
0,
@@ -230,10 +230,10 @@
array[4] = -2147483648
array[5] = 2147483647
+ load_bytecode 'JSON.pbc'
$S0 = _json( array, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
[
35,
@@ -260,10 +260,10 @@
array[4] = "json"
array[5] = 0.0
+ load_bytecode 'JSON.pbc'
$S0 = _json( array, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
[
0,
@@ -287,10 +287,10 @@
hash["gamma"] = 3.1
hash["delta"] = "DELTA"
+ load_bytecode 'JSON.pbc'
$S0 = _json( hash, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
{
"alpha" : 29,
@@ -312,10 +312,10 @@
hash["gamma"] = 3.1
hash["delta"] = "DELTA"
+ load_bytecode 'JSON.pbc'
$S0 = _json( hash, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
{"alpha":29,"beta":"B","delta":"DELTA","gamma":3.1}
OUT
@@ -349,10 +349,10 @@
world["population"] = 1234567890
world["some_country"] = country
+ load_bytecode 'JSON.pbc'
$S0 = _json( world, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
{
"population" : 1234567890,
@@ -400,10 +400,10 @@
world["population"] = 1234567890
world["some_country"] = country
+ load_bytecode 'JSON.pbc'
$S0 = _json( world, 0 )
say $S0
.end
-.include 'library/JSON.pir'
CODE
{"population":1234567890,"some_country":[[{"Perl":"Highway","Python":"Grove","Ruby":"Lane"},{}],[]]}
OUT
@@ -416,6 +416,7 @@
s = new 'String'
s = ''
+ load_bytecode 'JSON.pbc'
$S0 = _json( s, 0 )
say $S0
$S0 = _json( s, 1 )
@@ -428,7 +429,6 @@
$S0 = _json( s, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
""
""
@@ -444,6 +444,7 @@
i = new 'Integer'
i = 0
+ load_bytecode 'JSON.pbc'
$S0 = _json( i, 0 )
say $S0
$S0 = _json( i, 1 )
@@ -456,7 +457,6 @@
$S0 = _json( i, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
0
0
@@ -472,6 +472,7 @@
b = new 'Boolean'
b = 0
+ load_bytecode 'JSON.pbc'
$S0 = _json( b, 0 )
say $S0
$S0 = _json( b, 1 )
@@ -484,7 +485,6 @@
$S0 = _json( b, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
false
false
@@ -499,6 +499,7 @@
.local pmc n
null n
+ load_bytecode 'JSON.pbc'
$S0 = _json( n, 0 )
say $S0
$S0 = _json( n, 1 )
@@ -510,7 +511,6 @@
$S0 = _json( n, 1 )
print $S0
.end
-.include 'library/JSON.pir'
CODE
null
null
Modified: branches/io_rewiring/t/library/pcre.t
==============================================================================
--- branches/io_rewiring/t/library/pcre.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/library/pcre.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -1,10 +1,11 @@
#!perl
-# Copyright (C) 2001-2005, Parrot Foundation.
+# Copyright (C) 2001-2009, Parrot Foundation.
# $Id$
use strict;
use warnings;
use lib qw( t . lib ../lib ../../lib );
+
use Test::More;
use Parrot::Test tests => 1;
@@ -26,22 +27,22 @@
# if we keep pcre, we need a config test
my $cmd = ( $^O =~ /MSWin32/ ) ? "pcregrep --version" : "pcre-config --version";
my $has_pcre = !Parrot::Test::run_command( $cmd, STDERR => File::Spec->devnull, );
-my $pcre_libpath = "";
+my $pcre_libpath = '';
# It's possible that libpcre is installed in some non-standard path...
if ($has_pcre && ($^O !~ /MSWin32/)) {
# Extract the library path for non-windows platforms (in case it isn't in
# the normal lookup locations)
- my $outfile = "pcre-config.out";
- Parrot::Test::run_command("pcre-config --prefix", STDOUT => $outfile);
+ my $outfile = 'pcre-config.out';
+ Parrot::Test::run_command('pcre-config --prefix', STDOUT => $outfile);
my $out = Parrot::Test::slurp_file($outfile);
unlink $outfile;
chomp $out;
- $pcre_libpath="$out/lib";
+ $pcre_libpath = "$out/lib";
}
SKIP: {
- skip( "no pcre-config", Test::Builder->new()->expected_tests() )
+ skip( 'no pcre-config', Test::Builder->new()->expected_tests() )
unless $has_pcre;
## 1
@@ -65,22 +66,21 @@
.local pmc func
.local pmc lib
-
get_global func, ['PCRE'], 'init'
if_null func, NOK1
branch OK1
NOK1:
print 'not '
OK1:
- say "ok 1"
+ say 'ok 1'
- lib= func()
+ lib = func()
if_null lib, NOK2
branch OK2
NOK2:
print 'not '
OK2:
- say "ok 2"
+ say 'ok 2'
.local string s
@@ -101,7 +101,7 @@
if is_code_defined goto OK3
print 'not '
OK3:
- say "ok 3"
+ say 'ok 3'
.local int ok
.local pmc result
@@ -112,18 +112,18 @@
unless ok < 0 goto OK4
print 'not '
OK4:
- say "ok 4"
+ say 'ok 4'
.local int i
- i= 0
+ i = 0
.local string match
- func= get_global ['PCRE'], 'dollar'
- match= func( s, ok, result, i )
+ func = get_global ['PCRE'], 'dollar'
+ match = func( s, ok, result, i )
if 'a' == match goto OK5
print 'not '
OK5:
- say "ok 5"
+ say 'ok 5'
.end
CODE
Modified: branches/io_rewiring/t/oo/proxy.t
==============================================================================
--- branches/io_rewiring/t/oo/proxy.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/oo/proxy.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -19,14 +19,17 @@
.sub main :main
.include 'test_more.pir'
- plan(9)
+ plan(11)
typeof_a_low_level_object()
typeof_a_high_level_object()
typeof_a_class_object()
proxy_as_parent_of_class()
proxy_as_parent_of_class_with_new()
-
+ proxy_no_method_conflict()
+ .local pmc proxy_no_invade
+ proxy_no_invade = get_root_global ['foo'], 'proxy_no_invade'
+ proxy_no_invade()
.end
.sub typeof_a_low_level_object
@@ -81,6 +84,36 @@
is ($S0, 'Foo;Bar', 'object is typeof Foo;Bar')
.end
+.sub proxy_no_method_conflict
+ $P0 = new 'Complex'
+ $P0['real'] = 1
+ $P1 = $P0.'Complex'()
+ $S0 = $P1
+ is($S0, "1+0i", 'Complex method survived')
+.end
+
+.namespace ['Complex']
+.sub 'Complex' :method
+ .return (self)
+.end
+
+.HLL 'foo'
+
+.sub proxy_no_invade
+ .local pmc is
+ is = get_root_global ['parrot'], 'is'
+
+ $P0 = new 'Class'
+ $I0 = isa $P0, 'Sub'
+ $P1 = get_root_global ['foo'], 'Sub'
+ $I1 = 0
+ if null $P1 goto do_test
+ inc $I1
+do_test:
+ is($I1, 0, 'No proxy in current HLL namespace, TT #715')
+.end
+
+
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/io_rewiring/t/op/copy.t
==============================================================================
--- branches/io_rewiring/t/op/copy.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/op/copy.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -19,10 +19,11 @@
.sub 'main' :main
.include 'test_more.pir'
- plan(3)
+ plan(4)
test_basic()
test_rt48467()
+ test_tonull()
.end
.sub 'test_basic'
@@ -63,6 +64,22 @@
is( dest, 3.2, 'copy should make independent copies' )
.end
+.sub 'test_tonull'
+ null $P1
+ $P2 = new 'Undef'
+ .local string msg
+ msg = 'failed'
+ push_eh catch
+ copy $P1, $P2
+ goto check
+catch:
+ .get_results($P3)
+ msg = $P3 ['message']
+check:
+ pop_eh
+ is( msg, 'Null PMC in copy', 'copy to null throws' )
+.end
+
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/io_rewiring/t/op/stringu.t
==============================================================================
--- branches/io_rewiring/t/op/stringu.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/op/stringu.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -6,7 +6,7 @@
use warnings;
use lib qw( . lib ../lib ../../lib );
use Test::More;
-use Parrot::Test tests => 27;
+use Parrot::Test tests => 28;
use Parrot::Config;
=head1 NAME
@@ -435,23 +435,75 @@
OUTPUT
}
-pasm_output_is( <<'CODE', <<OUTPUT, "UTF-8 and Unicode literals", todo => 'TT #24' );
- set S0, unicode:"\u00ab"
- length I0, S0
- say I0
- say S0
- set S0, iso-8859-1:"\xab"
- length I0, S0
- say I0
- say S0
- end
+pir_output_is( <<'CODE', <<OUTPUT, "UTF-8 and Unicode hash keys");
+.sub 'main'
+ .local string str0, str1
+ str0 = unicode:"\u00ab"
+ str1 = iso-8859-1:"\xab"
+
+ .local pmc hash
+ hash = new 'Hash'
+ hash[str0] = 'hello'
+
+ $I0 = iseq str0, str1
+ say $I0
+
+ $S0 = hash[str0]
+ $S1 = hash[str1]
+ $I0 = iseq $S0, $S1
+ say $I0
+ say $S0
+ say $S1
+.end
CODE
1
-\xc2\xab
1
-\xc2\xab
+hello
+hello
OUTPUT
+pir_output_is( <<'CODE', <<OUTPUT, "UTF-8 and Unicode hash keys, full bucket" );
+.sub 'main'
+ .local string str0, str1
+ str0 = unicode:"infix:\u00b1"
+ str1 = iso-8859-1:"infix:\xb1"
+
+ .local pmc hash
+ hash = new 'Hash'
+ hash[str0] = 'hello'
+
+ $I0 = 0
+ fill_loop:
+ unless $I0 < 200 goto fill_done
+ inc $I0
+ $S0 = $I0
+ $S0 = concat 'infix:', $S0
+ hash[$S0] = 'foo'
+ goto fill_loop
+ fill_done:
+
+ $I0 = iseq str0, str1
+ #print "iseq str0, str1 => "
+ say $I0
+
+ $S0 = hash[str0]
+ $S1 = hash[str1]
+ $I0 = iseq $S0, $S1
+ #print "iseq hash[str0], hash[str1] => "
+ say $I0
+ say $S0
+ say $S1
+.end
+CODE
+1
+1
+hello
+hello
+OUTPUT
+
+
+
+
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
Modified: branches/io_rewiring/t/pmc/multidispatch.t
==============================================================================
--- branches/io_rewiring/t/pmc/multidispatch.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/pmc/multidispatch.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -25,7 +25,7 @@
=cut
-pir_output_is( <<'CODE', <<'OUTPUT', 'Integer_divide_Integer 10 / 3 = 1003' );
+pir_output_is( <<'CODE', <<'OUTPUT', 'Integer_divide_Integer 10 / 3 = 1003', todo => 'TT #452' );
.sub 'test' :main
.local pmc divide
@@ -57,7 +57,7 @@
1003
OUTPUT
-pir_output_is( <<'CODE', <<'OUTPUT', "1+1=3" );
+pir_output_is( <<'CODE', <<'OUTPUT', "1+1=3", todo => 'TT #452' );
.sub _main
.local pmc add
@@ -89,7 +89,7 @@
3
OUTPUT
-pir_output_is( <<'CODE', <<'OUTPUT', "PASM divide - override builtin 10 / 3 = 42" );
+pir_output_is( <<'CODE', <<'OUTPUT', "PASM divide - override builtin 10 / 3 = 42", todo => 'TT #452' );
.sub _main
.local pmc divide
@@ -117,7 +117,7 @@
42
OUTPUT
-pir_output_is( <<'CODE', <<'OUTPUT', "INTVAL return numeq" );
+pir_output_is( <<'CODE', <<'OUTPUT', "INTVAL return numeq", todo => 'TT #452' );
.sub _main
.local pmc comp
@@ -220,7 +220,7 @@
EOF
close $TEMP;
-pir_output_is( <<"CODE", <<'OUTPUT', "PASM MMD divide - loaded sub" );
+pir_output_is( <<"CODE", <<'OUTPUT', "PASM MMD divide - loaded sub", todo => 'TT #452' );
.sub _main
.local pmc divide
load_bytecode "$temp_pir"
@@ -239,7 +239,7 @@
42
OUTPUT
-pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - new result" );
+pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - new result", todo => 'TT #452' );
.include "datatypes.pasm"
get_global P10, "Integer_bxor_Intval"
add_multi "bitwise_xor_int", "Integer,INTVAL,PMC", P10
@@ -264,7 +264,7 @@
1
OUTPUT
-pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - existing result" );
+pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - existing result", todo => 'TT #452' );
.include "datatypes.pasm"
get_global P10, "Integer_bxor_Intval"
add_multi "bitwise_xor_int", "Integer,INTVAL,PMC", P10
@@ -289,7 +289,7 @@
1
OUTPUT
-pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - mixed" );
+pasm_output_is( <<'CODE', <<'OUTPUT', "PASM INTVAL - mixed", todo => 'TT #452' );
.include "datatypes.pasm"
get_global P10, "Integer_bxor_Intval"
add_multi "bitwise_xor_int", "Integer,INTVAL,PMC", P10
Modified: branches/io_rewiring/t/pmc/string.t
==============================================================================
--- branches/io_rewiring/t/pmc/string.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/pmc/string.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -20,7 +20,7 @@
.sub main :main
.include 'test_more.pir'
- plan(164)
+ plan(165)
set_or_get_strings()
setting_integers()
@@ -70,6 +70,7 @@
out_of_bounds_substr_negative_offset()
exception_to_int_2()
exception_to_int_3()
+ assign_null_string()
# END_OF_TESTS
@@ -1017,6 +1018,20 @@
.exception_is( 'invalid conversion to int - bad base 37' )
.end
+.sub assign_null_string
+ .local pmc s
+ .local string m
+ s = new ['String']
+ null m
+ assign s, m
+ m = 'Any other thing'
+ m = s
+ $I0 = 0
+ if null m goto check
+ inc $I0
+check:
+ is( $I0, 0, 'assign null string, TT #729' )
+.end
# Local Variables:
# mode: cperl
Modified: branches/io_rewiring/t/pmc/sub.t
==============================================================================
--- branches/io_rewiring/t/pmc/sub.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/pmc/sub.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -9,7 +9,7 @@
use Test::More;
use Parrot::Test::Util 'create_tempfile';
-use Parrot::Test tests => 68;
+use Parrot::Test tests => 69;
use Parrot::Config;
=head1 NAME
@@ -1589,6 +1589,39 @@
lived
OUTPUT
+pir_output_is( <<'CODE', <<'OUTPUT', '.get_subid' );
+.sub 'main'
+ .const 'Sub' foo = 'foo'
+ $S0 = foo.'get_subid'()
+ say $S0
+
+ $P0 = get_global 'bar'
+ $S0 = $P0.'get_subid'()
+ say $S0
+
+ $P0 = get_global 'baz'
+ $S0 = $P0.'get_subid'()
+ say $S0
+.end
+
+.sub '' :subid('foo')
+ say 'foo'
+.end
+
+.sub 'bar'
+ say 'bar'
+.end
+
+.sub 'baz' :subid('bazsubid')
+ say 'baz'
+.end
+CODE
+foo
+bar
+bazsubid
+OUTPUT
+
+
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
Modified: branches/io_rewiring/t/pmc/sys.t
==============================================================================
--- branches/io_rewiring/t/pmc/sys.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/pmc/sys.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -36,6 +36,7 @@
print O, "\tsay \\"Hello, World!\\"\\n"
print O, ".end\\n"
close O
+ load_bytecode 'config.pbc'
.local pmc conf_hash
conf_hash = _config()
.local string slash
@@ -51,7 +52,6 @@
say \$I0
.end
-.include "library/config.pir"
CODE
Hello, World!
0
@@ -59,6 +59,7 @@
pir_output_is( <<'CODE', <<'OUT', "conf_hash is read-only")
.sub _test :main
+ load_bytecode 'config.pbc'
.local pmc conf_hash
conf_hash = _config()
push_eh is_ro
@@ -70,7 +71,6 @@
end:
.end
-.include 'library/config.pir'
CODE
hash is read-only
OUT
Modified: branches/io_rewiring/t/steps/auto_gcc-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_gcc-01.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/steps/auto_gcc-01.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -5,7 +5,7 @@
use strict;
use warnings;
-use Test::More tests => 123;
+use Test::More tests => 122;
use Carp;
use lib qw( lib t/configure/testlib );
use_ok('config::init::defaults');
@@ -288,8 +288,6 @@
"gccversion defined as expected");
is($conf->data->get( 'gccversion' ), q{3.1},
"Got expected value for gccversion");
- is($conf->data->get( 'HAS_aligned_funcptr' ), 0,
- "Got expected value for HAS_aligned_funcptr");
like($step->result(), qr/^yes/, "Got expected result");
}
Modified: branches/io_rewiring/t/steps/auto_icu-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_icu-01.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/steps/auto_icu-01.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -228,7 +228,7 @@
my $expected_include_dir =
$expected_dir . $conf->data->get('slash') . q{include};
mkdir $expected_dir or croak "Unable to make testing directory";
- mkpath($expected_include_dir, 0, 0755)
+ mkpath($expected_include_dir, { mode => 0755 })
or croak "Unable to make second-level testing directory";
($icuheaders, $without) =
$step->_handle_icuheaders($conf, qq{$expected_dir\n}, 0);
Modified: branches/io_rewiring/t/steps/auto_jit-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_jit-01.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/steps/auto_jit-01.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -50,7 +50,7 @@
my $cpuarch = 'bar';
my $osname = 'baz';
my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
- mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
is( $step->_check_jitcapability($corejit, $cpuarch, $osname, 8), 0,
"Got expected value for _check_jitcapability(): no core.jit case");
@@ -65,7 +65,7 @@
my $cpuarch = 'bar';
my $osname = 'baz';
my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
- mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
open my $FH, '>', $corejit
or croak "Unable to open handle to file for testing";
@@ -84,7 +84,7 @@
my $cpuarch = 'bar';
my $osname = 'baz';
my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
- mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
open my $FH, '>', $corejit
or croak "Unable to open handle to file for testing";
@@ -106,7 +106,7 @@
my $cpuarch = 'i386';
my $osname = 'darwin';
my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
- mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
open my $FH, '>', $corejit
or croak "Unable to open handle to file for testing";
@@ -128,7 +128,7 @@
my $cpuarch = 'i386';
my $osname = 'MSWin32';
my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
- mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
open my $FH, '>', $corejit
or croak "Unable to open handle to file for testing";
@@ -152,8 +152,8 @@
my $cpuarch = 'bar';
my $jitarchname = "${cpuarch}-baz";
my $asmdir = File::Spec->catdir( $jitbase, $cpuarch );
- mkpath( $asmdir, 0, 755 ) or croak "Unable to make testing directory";
- mkpath( q{src}, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $asmdir, { mode => 0755 } ) or croak "Unable to make testing directory";
+ mkpath( q{src}, { mode => 0755 } ) or croak "Unable to make testing directory";
ok(auto::jit::_handle_asm( {
conf => $conf,
@@ -175,8 +175,8 @@
my $cpuarch = 'bar';
my $jitarchname = "${cpuarch}-baz";
my $asmdir = File::Spec->catdir( $jitbase, $cpuarch );
- mkpath( $asmdir, 0, 755 ) or croak "Unable to make testing directory";
- mkpath( q{src}, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $asmdir, { mode => 0755 } ) or croak "Unable to make testing directory";
+ mkpath( q{src}, { mode => 0755 } ) or croak "Unable to make testing directory";
my $sjit =
File::Spec->catfile( $jitbase, $cpuarch, qq{${jitarchname}.s} );
@@ -205,8 +205,8 @@
my $cpuarch = 'bar';
my $jitarchname = "${cpuarch}-baz";
my $asmdir = File::Spec->catdir( $jitbase, $cpuarch );
- mkpath( $asmdir, 0, 755 ) or croak "Unable to make testing directory";
- mkpath( q{src}, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $asmdir, { mode => 0755 } ) or croak "Unable to make testing directory";
+ mkpath( q{src}, { mode => 0755 } ) or croak "Unable to make testing directory";
my $asm = File::Spec->catfile( $jitbase, $cpuarch, q{asm.s} );
open my $FH, '>', $asm
or croak "Unable to open handle to file for testing";
@@ -314,7 +314,7 @@
my $cpuarch = 'i386';
my $osname = 'darwin';
my $corejitdir = File::Spec->catdir ( $jitbase, $cpuarch );
- mkpath( $corejitdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $corejitdir, { mode => 0755 } ) or croak "Unable to make testing directory";
my $corejit = File::Spec->catfile( $jitbase, $cpuarch, q{core.jit} );
open my $FH, '>', $corejit
or croak "Unable to open handle to file for testing";
Modified: branches/io_rewiring/t/steps/auto_pmc-01.t
==============================================================================
--- branches/io_rewiring/t/steps/auto_pmc-01.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/steps/auto_pmc-01.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -95,7 +95,7 @@
ok( chdir $tdir, 'changed to temp directory for testing' );
my $pmcdir = qq{$tdir/src/pmc};
- ok(mkpath($pmcdir, 0, 0755), "Able to make directory for testing");
+ ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
my $num = qq{$pmcdir/pmc.num};
open my $IN3, ">", $num or croak "Unable to open file for writing: $!";
print $IN3 "# comment line\n";
@@ -132,7 +132,7 @@
ok( chdir $tdir, 'changed to temp directory for testing' );
my $pmcdir = qq{$tdir/src/pmc};
- ok(mkpath($pmcdir, 0, 0755), "Able to make directory for testing");
+ ok(mkpath($pmcdir, { mode => 0755 }), "Able to make directory for testing");
eval { my $order_ref = auto::pmc::get_pmc_order(); };
like($@,
qr/Can't read src\/pmc\/pmc\.num/, "Got expected 'die' message");
Modified: branches/io_rewiring/t/steps/gen_platform-01.t
==============================================================================
--- branches/io_rewiring/t/steps/gen_platform-01.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/steps/gen_platform-01.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -120,7 +120,7 @@
chdir $tdir or croak "Unable to change to temporary directory";
$conf->data->set( platform_asm => 1 );
my $platform = 'aix';
- mkpath( 'src', 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( 'src', { mode => 0755 } ) or croak "Unable to make testing directory";
my $asmfile = File::Spec->catfile( 'src', 'platform_asm.s' );
open my $FH, '>', $asmfile or croak "Unable to open handle for writing";
print $FH "Hello asm\n";
@@ -140,7 +140,7 @@
$conf->data->set( platform_asm => 1 );
my $platform = 'aix';
- mkpath( 'src', 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( 'src', { mode => 0755 } ) or croak "Unable to make testing directory";
my $asmfile = File::Spec->catfile( 'src', 'platform_asm.s' );
open my $FH, '>', $asmfile or croak "Unable to open handle for writing";
@@ -148,7 +148,7 @@
close $FH or croak "Unable to close handle after writing";
my $path = File::Spec->catdir( 'config', 'gen', 'platform', $platform );
- mkpath( $path, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $path, { mode => 0755 } ) or croak "Unable to make testing directory";
my $configfile = File::Spec->catfile( $path, 'asm.s' );
open my $FH2, '>', $configfile or croak "Unable to open handle for writing";
@@ -172,12 +172,12 @@
my $platform = 'darwin';
my $path = File::Spec->catdir( 'config', 'gen', 'platform', $platform );
- mkpath( $path, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $path, { mode => 0755 } ) or croak "Unable to make testing directory";
copy qq{$cwd/config/gen/platform/$platform/begin.c},
qq{$path/begin.c}
or croak "Unable to copy file for testing";
- mkpath( 'src', 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( 'src', { mode => 0755 } ) or croak "Unable to make testing directory";
my $plat_c = q{src/platform.c};
open my $PLATFORM_C, '>', $plat_c
or croak "Unable to open handle for writing";
Modified: branches/io_rewiring/t/tools/install/02-install_files.t
==============================================================================
--- branches/io_rewiring/t/tools/install/02-install_files.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/install/02-install_files.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -10,7 +10,6 @@
use Carp;
use Cwd;
use File::Copy;
-use File::Path qw( mkpath );
use File::Temp qw( tempdir );
use lib qw( lib );
use Parrot::Install qw(
Modified: branches/io_rewiring/t/tools/install/03-lines_to_files.t
==============================================================================
--- branches/io_rewiring/t/tools/install/03-lines_to_files.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/install/03-lines_to_files.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -10,7 +10,6 @@
use Carp;
use Cwd;
use File::Copy;
-use File::Path qw( mkpath );
use File::Temp qw( tempdir );
use lib qw( lib );
use Parrot::Install qw(
Modified: branches/io_rewiring/t/tools/install/dev_overall.t
==============================================================================
--- branches/io_rewiring/t/tools/install/dev_overall.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/install/dev_overall.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -116,7 +116,8 @@
src/pmc
);
my @created =
- mkpath( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed );
+ mkpath( ( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed ),
+ { mode => 0777} );
print STDERR "dirs created: @created\n" if $DEBUG;
foreach my $f ( keys %testfiles ) {
my $src = File::Spec->catfile( $cwd, $testlibdir, $f );
Modified: branches/io_rewiring/t/tools/install/overall.t
==============================================================================
--- branches/io_rewiring/t/tools/install/overall.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/install/overall.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -101,7 +101,8 @@
compilers/pge
);
my @created =
- mkpath( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed );
+ mkpath( ( map { File::Spec->catdir( $builddir, $_ ) } @dirs_needed ),
+ { mode => 0777 } );
print STDERR "dirs created: @created\n" if $DEBUG;
foreach my $f ( keys %testfiles ) {
my $src = File::Spec->catfile( $cwd, $testlibdir, $f );
Modified: branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t
==============================================================================
--- branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/ops2pm/05-renum_op_map_file.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -32,7 +32,7 @@
my $tdir = tempdir( CLEANUP => 1 );
chdir $tdir or croak "Unable to change to testing directory: $!";
my $opsdir = File::Spec->catdir ( $tdir, 'src', 'ops' );
- mkpath( $opsdir, 0, 755 ) or croak "Unable to make testing directory";
+ mkpath( $opsdir, { mode => 0755 } ) or croak "Unable to make testing directory";
##### Stage 1: Generate ops.num de novo #####
Modified: branches/io_rewiring/t/tools/ops2pm/10-print_module.t
==============================================================================
--- branches/io_rewiring/t/tools/ops2pm/10-print_module.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/ops2pm/10-print_module.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -188,7 +188,7 @@
Directory failure: can it be provoked?
if ( !-d $fulldir ) {
- File::Path::mkpath( $fulldir, 0, 0755 )
+ File::Path::mkpath( $fulldir, { mode => 0755 } )
or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
}
Modified: branches/io_rewiring/t/tools/ops2pm/11-print_h.t
==============================================================================
--- branches/io_rewiring/t/tools/ops2pm/11-print_h.t Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/t/tools/ops2pm/11-print_h.t Sun Jun 7 23:41:42 2009 (r39444)
@@ -120,7 +120,7 @@
Directory failure: can it be provoked?
if ( !-d $fulldir ) {
- File::Path::mkpath( $fulldir, 0, 0755 )
+ File::Path::mkpath( $fulldir, { mode => 0755 } )
or die "$self->{script}: Could not mkdir $fulldir: $!!\n";
}
Modified: branches/io_rewiring/tools/dev/create_language.pl
==============================================================================
--- branches/io_rewiring/tools/dev/create_language.pl Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/dev/create_language.pl Sun Jun 7 23:41:42 2009 (r39444)
@@ -210,7 +210,7 @@
while (<$PARROT_CONFIG>) {
if (/(\w+) => '(.*)'/) { $config{$1} = $2 }
}
- close $PARROT_CONFIG or die $!;
+ close $PARROT_CONFIG;
last if %config;
}
}
@@ -360,11 +360,16 @@
# the default target
all: @lclang@$(EXE)
+installable: installable_ at lclang@$(EXE)
+
## targets for building a standalone executable
@lclang@$(EXE): @lclang at .pbc
$(PBC_TO_EXE) @lclang at .pbc
@win32_libparrot_copy@
+installable_ at lclang@$(EXE): @lclang at .pbc
+ $(PBC_TO_EXE) @lclang at .pbc --install
+
# the compiler .pbc
@lclang at .pbc: Makefile $(PARROT) $(SOURCES) $(BUILTINS_PIR)
$(PARROT) $(PARROT_ARGS) -o @lclang at .pbc @lclang at .pir
Modified: branches/io_rewiring/tools/dev/fetch_languages.pl
==============================================================================
--- branches/io_rewiring/tools/dev/fetch_languages.pl Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/dev/fetch_languages.pl Sun Jun 7 23:41:42 2009 (r39444)
@@ -266,6 +266,12 @@
},
{
+ name => 'steme',
+ scm => 'GIT',
+ repository => 'git://github.com/tene/steme.git'
+ },
+
+ {
name => 'tcl',
scm => 'SVN',
repository => 'http://partcl.googlecode.com/svn/trunk'
Modified: branches/io_rewiring/tools/dev/install_dev_files.pl
==============================================================================
--- branches/io_rewiring/tools/dev/install_dev_files.pl Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/dev/install_dev_files.pl Sun Jun 7 23:41:42 2009 (r39444)
@@ -46,9 +46,9 @@
=back
-=head2 See Also
+=head1 SEE ALSO
-See F<tools/dev/install_files.pl> for a detailed description of the MANIFEST
+See F<lib/Parrot/Manifest.pm> for a detailed description of the MANIFEST
format.
=cut
Modified: branches/io_rewiring/tools/dev/install_files.pl
==============================================================================
--- branches/io_rewiring/tools/dev/install_files.pl Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/dev/install_files.pl Sun Jun 7 23:41:42 2009 (r39444)
@@ -46,64 +46,11 @@
=back
-=head2 MANIFEST Format
-
-The format of the MANIFEST (currently MANIFEST and MANIFEST.generated
-are used) is:
-
- source_path <whitespace> [package]meta1,meta2,...
-
-or you may optionally specify a different destination path:
-
- source_path <whitespace> [package]meta1,meta2,... <whitespace> destination
-
-Additionally, there may be a * in front of the whole line to designate
-a generated file:
-
- source_path <whitespace> *[package]meta1,meta2,... <whitespace> destination
-
-The square brackets around C<package> are literal. C<package> gives
-the name of the RPM that the given file will be installed for, and is
-only used by this script to skip files that are not members of any
-package.
-
-The various meta flags recognized are:
-
-=over 4
-
-=item C<doc>
-
-Tag this file with %doc in the RPM, and omit the leading path (because
-rpm will put it into a directory of its choosing)
-
-=item C<include>
-
-Write this file to the location given by the C<--includedir> option
-
-=item C<lib>
-
-Write this file to the location given by the C<--libdir> option
-
-=item C<bin>
-
-Write this file to the location given by the C<--bindir> option
-
-=back
-
-The optional C<destination> field provides a general way to change
-where a file will be written to. It will be applied before any
-metadata tags.
-
-Example: if this line is in the MANIFEST.generated file
-
- languages/snorkfest/snork-compile [main]bin
-
-and the --bindir=/usr/parroty/bin, then the generated
-parrot-<VERSION>-1.<arch>.rpm file will contain the file
-/usr/parroty/bin/snork-compile.
-
=head1 SEE ALSO
+See F<lib/Parrot/Manifest.pm> for a detailed description of the MANIFEST
+format.
+
F<tools/dev/mk_manifests.pl>
=cut
Modified: branches/io_rewiring/tools/dev/parrot-fuzzer
==============================================================================
--- branches/io_rewiring/tools/dev/parrot-fuzzer Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/dev/parrot-fuzzer Sun Jun 7 23:41:42 2009 (r39444)
@@ -60,10 +60,10 @@
=item C<--runcore=--some-runcore>
-Specify which runcore to use when running Parrot. By default, --slow-core is
-used. This option is passed directly to the parrot exectuable. Other runcores
-include C<--CGP-core>, C<--fast-core>, C<--computed-goto-core>, C<--jit-core>,
-C<--switched-core> and C<--profile>.
+Specify which runcore to use when running Parrot. The default is the C<slow>
+core. This option corresponds directly to Parrot's C<--runcore> option. Other
+runcores include C<fast>, C<jit>, C<cgoto>, C<cgp>, C<cgp-jit>, and C<switch>.
+See Parrot's help for more details.
=item C<--ignore_blacklist>
Modified: branches/io_rewiring/tools/dev/pbc_to_exe.pir
==============================================================================
--- branches/io_rewiring/tools/dev/pbc_to_exe.pir Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/dev/pbc_to_exe.pir Sun Jun 7 23:41:42 2009 (r39444)
@@ -18,8 +18,6 @@
=cut
-.include 'library/config.pir'
-
.sub 'main' :main
.param pmc argv
.local string infile
@@ -31,6 +29,7 @@
.local string gcc
.local int is_gcc
+ load_bytecode 'config.pbc'
$P0 = '_config'()
gcc = $P0['gccversion']
$I0 = length gcc
Modified: branches/io_rewiring/tools/install/smoke_languages.pl
==============================================================================
--- branches/io_rewiring/tools/install/smoke_languages.pl Sun Jun 7 01:55:16 2009 (r39443)
+++ branches/io_rewiring/tools/install/smoke_languages.pl Sun Jun 7 23:41:42 2009 (r39444)
@@ -9,7 +9,7 @@
use Getopt::Long;
use File::Spec::Functions;
-use Test::More tests => 31;
+use Test::More tests => 32;
=head1 NAME
@@ -489,6 +489,19 @@
SKIP:
{
+skip("steme", 1) unless (-d "$langdir/steme");
+$filename = 'test.scm';
+open $FH, '>', $filename
+ or die "Can't open $filename ($!).\n";
+print $FH "( say \"Hello, World!\" )\n";
+close $FH;
+$out = `$parrot $langdir/steme/steme.pbc $filename`;
+ok($out eq "Hello, World!\n", "check steme");
+unlink($filename);
+}
+
+SKIP:
+{
skip("Squaak", 1) unless (-d "$langdir/squaak");
$filename = 'test.squaak';
open $FH, '>', $filename
More information about the parrot-commits
mailing list