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.