Re: [patch] runops

2004-12-15 Thread Leopold Toetsch
Sam Ruby [EMAIL PROTECTED] wrote:

 Below is a rather straightforward patch, but as it represents an
 interface change (albeit a fully backwards compatible one), I thought I
 would post it for discussion.

[ ... ]

 This patch brings Parrot_runops_fromc to parity by providing access to
 those registers.

Sounds very reasonable,

Thanks, applied.
leo



[patch] runops

2004-12-14 Thread Sam Ruby
Below is a rather straightforward patch, but as it represents an 
interface change (albeit a fully backwards compatible one), I thought I 
would post it for discussion.

Background on the proposed change: there apparently are two sets of 
runops functions, I'd characterize Parrot_runops_fromc as a do it 
yourself function in which you are responsible for all registers, and a 
set of convenience functions which take care of marshalling arguments.

At the moment, there is one important way in which the convenience 
functions are more functional: set_retval has access to the register set 
which were active when the Sub was invoked.

This patch brings Parrot_runops_fromc to parity by providing access to 
those registers.

- Sam Ruby
Index: include/parrot/interpreter.h
===
RCS file: /cvs/public/parrot/include/parrot/interpreter.h,v
retrieving revision 1.164
diff -u -r1.164 interpreter.h
--- include/parrot/interpreter.h24 Nov 2004 05:56:55 -  1.164
+++ include/parrot/interpreter.h15 Dec 2004 03:12:20 -
@@ -400,7 +400,7 @@
 
 void runops(Interp *, size_t offset);
 void runops_int(Interp *, size_t offset);
-void Parrot_runops_fromc(Interp *, PMC *sub);
+struct parrot_regs_t* Parrot_runops_fromc(Interp *, PMC *sub);
 void* Parrot_runops_fromc_args(Interp *, PMC *sub, const char *sig, ...);
 INTVAL Parrot_runops_fromc_args_reti(Interp *, PMC *, const char *, ...);
 FLOATVAL Parrot_runops_fromc_args_retf(Interp *, PMC *, const char *, ...);
Index: src/inter_run.c
===
RCS file: /cvs/public/parrot/src/inter_run.c,v
retrieving revision 1.24
diff -u -r1.24 inter_run.c
--- src/inter_run.c 13 Dec 2004 21:51:00 -  1.24
+++ src/inter_run.c 15 Dec 2004 03:12:20 -
@@ -102,7 +102,7 @@
 
 /*
 
-=item Cvoid
+=item Cstruct parrot_regs_t *
 Parrot_runops_fromc(Parrot_Interp interpreter, PMC *sub)
 
 Runs the Parrot ops, called from C code. The function arguments are
@@ -113,11 +113,12 @@
 
 */
 
-void
+struct parrot_regs_t *
 Parrot_runops_fromc(Parrot_Interp interpreter, PMC *sub)
 {
 PMC *ret_c, *p1;
 opcode_t offset, *dest;
+struct parrot_regs_t *bp;
 
 /* we need one return continuation with a NULL offset */
 p1 = REG_PMC(1);
@@ -130,11 +131,13 @@
  * Passing a dummy true destination copies registers
  */
 dest = VTABLE_invoke(interpreter, sub, (void*) 1);
+bp = interpreter-ctx.bp;
 if (dest) {
 offset = dest - interpreter-code-byte_code;
 runops(interpreter, offset);
 }
 REG_PMC(1) = p1;
+return bp;
 }
 
 /*