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.

Reply via email to