# New Ticket Created by  Steve Peters 
# Please include the string:  [perl #42156]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=42156 >


In this next round of cleanups, I switched over the invoke() methods
to return opcode_t* as Andy Dougherty suggested.  Also, I added 
a change to the NEED_CONTINUATION based on Kevin Tewks suggestions.
Finally, I also included a couple of additional changes to back out some
of my changes yesterday that are now irrelevant due to the first two 
changes.

Steve Peters
[EMAIL PROTECTED]

Index: src/ops/object.ops
===================================================================
--- src/ops/object.ops  (revision 17813)
+++ src/ops/object.ops  (working copy)
@@ -60,8 +60,8 @@
         "Method '%Ss' not found", meth);
   }
   interp->current_object = object;
-  interp->current_cont = (PMC *)NEED_CONTINUATION;
-  dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
+  interp->current_cont = NEED_CONTINUATION;
+  dest = VTABLE_invoke(interp, method_pmc, next);
   goto ADDRESS(dest);
 }
 
@@ -76,8 +76,8 @@
 
   next = expr NEXT();
   interp->current_object = object;
-  interp->current_cont = (PMC *)NEED_CONTINUATION;
-  dest = (opcode_t *)VTABLE_invoke(interp, method_pmc, next);
+  interp->current_cont = NEED_CONTINUATION;
+  dest = VTABLE_invoke(interp, method_pmc, next);
   goto ADDRESS(dest);
 }
 
Index: src/pmc/complex.pmc
===================================================================
--- src/pmc/complex.pmc (revision 17813)
+++ src/pmc/complex.pmc (working copy)
@@ -279,7 +279,7 @@
 
 /*
 
-=item C<void* invoke(void* next)>
+=item C<opcode_t* invoke(void* next)>
 
 Pythonic object constructor. SELF is a Complex Class object. Return a new
 C<complex> object according to 2.1. Built-in Functions.
@@ -287,7 +287,7 @@
 =cut
 
 */
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         int argcP = REG_INT(3);
         PMC *res = pmc_new(INTERP, enum_class_Complex);
         if (argcP == 1) {
Index: src/pmc/retcontinuation.pmc
===================================================================
--- src/pmc/retcontinuation.pmc (revision 17813)
+++ src/pmc/retcontinuation.pmc (working copy)
@@ -74,7 +74,7 @@
     }
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Transfers control to the calling context, and frees the current context.
 
@@ -82,7 +82,7 @@
 
 */
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         struct Parrot_cont * cc = PMC_cont(SELF);
         parrot_context_t *from_ctx = cc->from_ctx;
         struct PackFile_ByteCode * const seg = cc->seg;
Index: src/pmc/parrotinterpreter.pmc
===================================================================
--- src/pmc/parrotinterpreter.pmc       (revision 17813)
+++ src/pmc/parrotinterpreter.pmc       (working copy)
@@ -284,7 +284,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Runs the interpreter's byte code.
 
@@ -292,7 +292,7 @@
 
 */
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         Interp * new_interp =
             (Interp *)PMC_data(SELF);
         /*
Index: src/pmc/bound_nci.pmc
===================================================================
--- src/pmc/bound_nci.pmc       (revision 17813)
+++ src/pmc/bound_nci.pmc       (working copy)
@@ -33,7 +33,7 @@
 
 Return the bound object.
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Calls the associated C method, returning C<*next>.
 
@@ -55,7 +55,7 @@
         return PMC_pmc_val(SELF);
     }
 
-    void* invoke(void * next) {
+    opcode_t* invoke(void * next) {
         if (PObj_get_FLAGS(SELF) & PObj_private0_FLAG) {
             /* bound multi sub
              * XXX maybe create separate PMC class
Index: src/pmc/multisub.pmc
===================================================================
--- src/pmc/multisub.pmc        (revision 17813)
+++ src/pmc/multisub.pmc        (working copy)
@@ -57,7 +57,7 @@
                 "attempt to set non Sub PMC");
     }
 
-    void* invoke(void *next) {
+    opcode_t* invoke(void *next) {
         PMC *list = Parrot_mmd_sort_candidate_list(interp, SELF);
         PMC *func = PMCNULL;
         if (!PMC_IS_NULL(list))
Index: src/pmc/coroutine.pmc
===================================================================
--- src/pmc/coroutine.pmc       (revision 17813)
+++ src/pmc/coroutine.pmc       (working copy)
@@ -120,7 +120,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Swaps the "context".
 
@@ -128,7 +128,7 @@
 
 */
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         struct Parrot_coro * co = PMC_coro(SELF);
         parrot_context_t *caller_ctx;
         struct PackFile_ByteCode *wanted_seg;
Index: src/pmc/delegate.pmc
===================================================================
--- src/pmc/delegate.pmc        (revision 17813)
+++ src/pmc/delegate.pmc        (working copy)
@@ -199,7 +199,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Invokes a subroutine.
 
@@ -207,7 +207,7 @@
 
 */
 
-    void* invoke(void *next) {
+    opcode_t* invoke(void *next) {
         STRING *meth = CONST_STRING(interp, "__invoke");
         STRING *meth_v = CONST_STRING(interp, "invoke");
         PMC *sub = Parrot_find_vtable_meth(interp, pmc, meth_v);
Index: src/pmc/continuation.pmc
===================================================================
--- src/pmc/continuation.pmc    (revision 17813)
+++ src/pmc/continuation.pmc    (working copy)
@@ -217,7 +217,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Restores the "context" of the interpreter and returns the branch
 destination to continue execution.
@@ -226,7 +226,7 @@
 
 */
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         struct Parrot_cont * cc = PMC_cont(SELF);
         Stack_Chunk_t *stack_target = cc->dynamic_state;
         Stack_Chunk_t *corresponding_target;
Index: src/pmc/compiler.pmc
===================================================================
--- src/pmc/compiler.pmc        (revision 17813)
+++ src/pmc/compiler.pmc        (working copy)
@@ -25,7 +25,7 @@
 
 /*
 
-=item C<void *invoke(void *code_ptr)>
+=item C<opcode_t *invoke(void *code_ptr)>
 
 Compiles the source code starting at C<code_ptr> and returns a new
 C<Eval> PMC with a new PackFile attached.
@@ -34,7 +34,7 @@
 
 */
 
-    void* invoke(void * code_ptr) {
+    opcode_t* invoke(void * code_ptr) {
         return SUPER(code_ptr);
     }
 }
Index: src/pmc/closure.pmc
===================================================================
--- src/pmc/closure.pmc (revision 17813)
+++ src/pmc/closure.pmc (working copy)
@@ -84,7 +84,7 @@
         sub->start_offs = addr -  sub->seg->base.data;
     }
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         struct Parrot_sub * sub = PMC_sub(SELF);
         PMC *cont, *outer_sub;
 
Index: src/pmc/timer.pmc
===================================================================
--- src/pmc/timer.pmc   (revision 17813)
+++ src/pmc/timer.pmc   (working copy)
@@ -311,7 +311,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Adds the timer to the event queue.
 
@@ -319,7 +319,7 @@
 
 */
 
-    void* invoke(void *next) {
+    opcode_t* invoke(void *next) {
         add_timer(INTERP, SELF);
         return next;
     }
Index: src/pmc/exception_handler.pmc
===================================================================
--- src/pmc/exception_handler.pmc       (revision 17813)
+++ src/pmc/exception_handler.pmc       (working copy)
@@ -82,7 +82,7 @@
         return result;
     }
 
-    void* invoke(void* ex) {
+    opcode_t* invoke(void* ex) {
         struct Parrot_cont * cc = PMC_cont(SELF);
         PMC *exception = ex;
         parrot_context_t *ex_ctx;
Index: src/pmc/nci.pmc
===================================================================
--- src/pmc/nci.pmc     (revision 17813)
+++ src/pmc/nci.pmc     (working copy)
@@ -140,7 +140,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Calls the associated C function, returning C<*next>. If
 the invocant is a class, the PMC arguments are
@@ -150,7 +150,7 @@
 
 */
 
-    void* invoke(void * next) {
+    opcode_t* invoke(void * next) {
         typedef INTVAL(*nci_sub_t)(Interp * , PMC * );
         nci_sub_t func = PObj_flag_TEST(private2, SELF)
             ? (nci_sub_t) PMC_struct_val(SELF)
Index: src/pmc/eval.pmc
===================================================================
--- src/pmc/eval.pmc    (revision 17813)
+++ src/pmc/eval.pmc    (working copy)
@@ -124,7 +124,7 @@
     }
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Invokes the first subroutine in the eval code.
 
@@ -132,7 +132,7 @@
 
 */
 
-    void* invoke(void *next) {
+    opcode_t* invoke(void *next) {
         PMC *sub = SELF.get_pmc_keyed_int(0);
         return VTABLE_invoke(INTERP, sub, next);
     }
Index: src/pmc/iterator.pmc
===================================================================
--- src/pmc/iterator.pmc        (revision 17813)
+++ src/pmc/iterator.pmc        (working copy)
@@ -407,7 +407,7 @@
 
 /*
 
-=item C<void* invoke(void* next)>
+=item C<opcode_t* invoke(void* next)>
 
 Return the next element of the aggregate. The return type may depend on
 the aggregate. If there are no more items in the aggregate, I1 .. I4 are
@@ -418,7 +418,7 @@
 =cut
 
 */
-    void* invoke(void *next) {
+    opcode_t* invoke(void *next) {
         PMC *agg, *key, *res;
         INTVAL ires;
 
Index: src/pmc/sub.pmc
===================================================================
--- src/pmc/sub.pmc     (revision 17813)
+++ src/pmc/sub.pmc     (working copy)
@@ -202,7 +202,7 @@
 
 /*
 
-=item C<void *invoke(void *next)>
+=item C<opcode_t *invoke(void *next)>
 
 Invokes the subroutine.
 
@@ -210,7 +210,7 @@
 
 */
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         struct Parrot_sub * sub = PMC_sub(SELF);
         parrot_context_t *caller_ctx;
         struct Parrot_Context *context;
Index: src/dynpmc/subproxy.pmc
===================================================================
--- src/dynpmc/subproxy.pmc     (revision 17813)
+++ src/dynpmc/subproxy.pmc     (working copy)
@@ -22,7 +22,7 @@
         PMC_data(SELF) = key;
     }
 
-    void* invoke(void* next) {
+    opcode_t* invoke(void* next) {
         if (PObj_get_FLAGS(SELF) & PObj_private0_FLAG) {
             PMC* key = PMC_data(SELF);
             STRING* file;
Index: vtable.tbl
===================================================================
--- vtable.tbl  (revision 17813)
+++ vtable.tbl  (working copy)
@@ -333,7 +333,7 @@
 PMC* nextkey_keyed_str(STRING* key, INTVAL what)
 PMC* get_iter()
 
-void* invoke(void* next)
+opcode_t* invoke(void* next)
 
 INTVAL can(STRING* method)
 
Index: lib/Parrot/Vtable.pm
===================================================================
--- lib/Parrot/Vtable.pm        (revision 17813)
+++ lib/Parrot/Vtable.pm        (working copy)
@@ -386,6 +386,7 @@
         'void'     => 'void',
         'UINTVAL'  => 'Parrot_Int',
         'size_t'   => 'size_t',
+        'opcode_t*'  => 'Parrot_Opcode*',
     );
 
     die "Unknown type $type\n" unless exists $typemap{$type};
Index: include/parrot/sub.h
===================================================================
--- include/parrot/sub.h        (revision 17813)
+++ include/parrot/sub.h        (working copy)
@@ -109,7 +109,7 @@
  * a flag to signal a Sub that a new RetContinuation should be created
  */
 
-#define NEED_CONTINUATION ((void*)1)
+#define NEED_CONTINUATION ((PMC *)1)
 
 /*
  * Sub and Closure share a Parrot_sub structure.

Reply via email to