I found the results of an experiment (done in r26933) where I used
the attached patch to disable all stack ops, and then did "make test".
(I had misplaced it, which is why I didn't post it earlier; sorry about
that.) Here are the failing tests:
Failed Test Stat Wstat Total Fail Failed List of Failed
--------------------------------------------------------------------------------
t/doc/pod.t 1 256 1 1 100.00% 1
t/examples/pasm.t 2 512 5 2 40.00% 3-4
t/examples/pir.t 1 256 19 1 5.26% 10
t/op/jit.t 1 256 62 1 1.61% 55
t/op/stacks.t 20 5120 23 20 86.96% 1-20
t/op/trans.t 20 5120 22 20 90.91% 1-20
t/pmc/array.t 2 512 13 2 15.38% 8-9
t/pmc/bigint.t 1 256 44 1 2.27% 3
t/pmc/complex.t 4 1024 53 4 7.55% 12-13 25-26
t/pmc/fixedbooleanarray.t 2 512 11 2 18.18% 7-8
t/pmc/fixedfloatarray.t 3 768 11 3 27.27% 7-9
t/pmc/fixedintegerarray.t 2 512 15 2 13.33% 9-10
t/pmc/fixedpmcarray.t 2 512 15 2 13.33% 8-9
t/pmc/fixedstringarray.t 2 512 13 2 15.38% 7-8
t/pmc/float.t 16 4096 42 16 38.10% 1-5 13-22 26
t/pmc/resizablebooleanarray.t 2 512 20 2 10.00% 6-7
t/pmc/resizablefloatarray.t 7 1792 19 7 36.84% 8-14
t/pmc/resizableintegerarray.t 2 512 15 2 13.33% 6-7
t/pmc/resizablepmcarray.t 2 512 39 2 5.13% 11-12
t/pmc/sarray.t 3 768 30 3 10.00% 13 17 23
t/pmc/string.t 1 256 47 1 2.13% 3
(1 subtest UNEXPECTEDLY SUCCEEDED), 24 tests and 576 subtests skipped.
Failed 21/569 test scripts, 96.31% okay. 96/11165 subtests failed, 99.14%
okay.
So these tests will need to be updated.
-- Bob
* src/ops/stack.ops:
+ Make all stack ops throw exceptions.
Diffs between last version checked in and current workfile(s):
Index: src/ops/stack.ops
===================================================================
--- src/ops/stack.ops (revision 26786)
+++ src/ops/stack.ops (working copy)
@@ -37,7 +37,10 @@
=cut
+/* ' */
+
inline op saveall() :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'saveall' used.\n");
Parrot_push_regs(interp);
/* these 2 opcodes change the register base pointer
* restart NEXT() reloads cached base pointers, and works with
@@ -49,6 +52,7 @@
}
inline op restoreall() :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'restoreall' used.\n");
Parrot_pop_regs(interp);
restart NEXT();
}
@@ -80,6 +84,7 @@
Stack_Entry_t * const entry =
stack_entry(interp, CONTEXT(interp)->user_stack, $2);
+ real_exception(interp, NULL, 1, "Stack op 'entrytype' used.\n");
if (!entry) {
real_exception(interp, NULL, 99, "Stack Depth wrong");
}
@@ -96,6 +101,7 @@
=cut
inline op depth(out INT) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'depth' used.\n");
$1 = stack_height(interp, CONTEXT(interp)->user_stack);
goto NEXT();
}
@@ -120,6 +126,8 @@
op lookback(out INT, in INT) :base_core {
Stack_Entry_t * const entry =
stack_entry(interp, CONTEXT(interp)->user_stack, $2);
+
+ real_exception(interp, NULL, 1, "Stack op 'lookback' used.\n");
if (!entry) {
real_exception(interp, NULL, 99, "Stack depth wrong");
}
@@ -134,6 +142,8 @@
op lookback(out STR, in INT) :base_core {
Stack_Entry_t * const entry =
stack_entry(interp, CONTEXT(interp)->user_stack, $2);
+
+ real_exception(interp, NULL, 1, "Stack op 'lookback' used.\n");
if (!entry) {
real_exception(interp, NULL, 99, "Stack depth wrong");
}
@@ -148,6 +158,8 @@
op lookback(out NUM, in INT) :base_core {
Stack_Entry_t * const entry =
stack_entry(interp, CONTEXT(interp)->user_stack, $2);
+
+ real_exception(interp, NULL, 1, "Stack op 'lookback' used.\n");
if (!entry) {
real_exception(interp, NULL, 99, "Stack depth wrong");
}
@@ -162,6 +174,8 @@
op lookback(out PMC, in INT) :base_core {
Stack_Entry_t * const entry =
stack_entry(interp, CONTEXT(interp)->user_stack, $2);
+
+ real_exception(interp, NULL, 1, "Stack op 'lookback' used.\n");
if (!entry)
real_exception(interp, NULL, 99, "Stack depth wrong");
if (entry->entry_type != STACK_ENTRY_PMC) {
@@ -187,6 +201,7 @@
=cut
inline op save(in INT) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'save' used.\n");
INTVAL i = $1;
stack_push(interp,
&CONTEXT(interp)->user_stack, &i,
@@ -195,18 +210,21 @@
}
inline op save(in NUM) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'save' used.\n");
stack_push(interp, &CONTEXT(interp)->user_stack,
&($1), STACK_ENTRY_FLOAT, STACK_CLEANUP_NULL);
goto NEXT();
}
inline op save(invar PMC) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'save' used.\n");
stack_push(interp, &CONTEXT(interp)->user_stack,
$1, STACK_ENTRY_PMC, STACK_CLEANUP_NULL);
goto NEXT();
}
inline op save(in STR) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'save' used.\n");
stack_push(interp, &CONTEXT(interp)->user_stack,
$1, STACK_ENTRY_STRING, STACK_CLEANUP_NULL);
goto NEXT();
@@ -221,6 +239,7 @@
=cut
inline op savec(in STR) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'savec' used.\n");
stack_push(interp, &CONTEXT(interp)->user_stack,
string_copy(interp, $1),
STACK_ENTRY_STRING, STACK_CLEANUP_NULL);
@@ -242,24 +261,28 @@
=cut
inline op restore(out INT) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'restore' used.\n");
(void)stack_pop(interp, &CONTEXT(interp)->user_stack, &($1),
STACK_ENTRY_INT);
goto NEXT();
}
inline op restore(out NUM) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'restore' used.\n");
(void)stack_pop(interp, &CONTEXT(interp)->user_stack, &($1),
STACK_ENTRY_FLOAT);
goto NEXT();
}
inline op restore(out PMC) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'restore' used.\n");
(void)stack_pop(interp, &CONTEXT(interp)->user_stack, &($1),
STACK_ENTRY_PMC);
goto NEXT();
}
inline op restore(out STR) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'restore' used.\n");
(void)stack_pop(interp, &CONTEXT(interp)->user_stack, &($1),
STACK_ENTRY_STRING);
goto NEXT();
@@ -280,6 +303,7 @@
=cut
inline op rotate_up(in INT) :base_core {
+ real_exception(interp, NULL, 1, "Stack op 'rotate_up' used.\n");
rotate_entries(interp, &CONTEXT(interp)->user_stack, $1);
goto NEXT();
}
End of diffs.