Dan Sugalski wrote:
3) The embedding wrapper is responsible for setting and resetting the top of stack.

Proof-of-concept:

--- src/embed.c 2 May 2004 10:47:54 -0000       1.113
+++ src/embed.c 3 May 2004 19:08:23 -0000
@@ -666,6 +666,17 @@
 void
 Parrot_runcode(Interp *interpreter, int argc, char *argv[])
 {
+    if(!interpreter->lo_var_ptr) {
+        int top;
+        if(Interp_flags_TEST(interpreter, PARROT_DEBUG_FLAG)) {
+            PIO_eprintf(interpreter,
+                    "*** Parrot VM: Setting stack top. ***\n");
+        }
+        interpreter->lo_var_ptr=⊤
+        Parrot_runcode(interpreter, argc, argv);
+        interpreter->lo_var_ptr=NULL;
+        return;
+    }
     /* Debugging mode nonsense. */
     if (Interp_flags_TEST(interpreter, PARROT_DEBUG_FLAG)) {
         if (Interp_flags_TEST(interpreter, PARROT_BOUNDS_FLAG)) {
--- src/interpreter.c   2 May 2004 10:47:54 -0000       1.306
+++ src/interpreter.c   3 May 2004 19:08:23 -0000
@@ -1726,6 +1726,7 @@
     }
     else {
         SET_NULL(interpreter->parent_interpreter);
+        SET_NULL(interpreter->lo_var_ptr);
     }
     interpreter->resume_flag = RESUME_INITIAL;


-- Brent "Dax" Royal-Gordon <[EMAIL PROTECTED]> Perl and Parrot hacker

Oceania has always been at war with Eastasia.

Reply via email to