Author: pmichaud
Date: Mon Nov 24 14:42:40 2008
New Revision: 33160

Modified:
   branches/lex5/src/sub.c

Log:
(1) Don't carp about capture_lex from non-outer scope.  
(2) Don't mark caller - we'll let the continuations do that.


Modified: branches/lex5/src/sub.c
==============================================================================
--- branches/lex5/src/sub.c     (original)
+++ branches/lex5/src/sub.c     Mon Nov 24 14:42:40 2008
@@ -62,8 +62,10 @@
     if (obj && !PObj_live_TEST(obj))
         pobject_lives(interp, obj);
 
-    if (ctx->caller_ctx)
-        mark_context(interp, ctx->caller_ctx);
+    /* if (ctx->caller_ctx)
+     *   mark_context(interp, ctx->caller_ctx); */
+    if (ctx->outer_ctx)
+        mark_context(interp, ctx->outer_ctx);
 
     obj = (PObj *)ctx->current_namespace;
     if (obj)
@@ -555,11 +557,16 @@
     if (PMC_IS_NULL(sub->outer_sub))
         return;
 
+#if 0
     /* verify that the current sub is sub_pmc's :outer */
     if (0 != string_equal(interp, current_sub->subid,
-                          PMC_sub(sub->outer_sub)->subid))
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION,
-            "'%Ss' isn't the :outer of '%Ss'", current_sub->name, sub->name);
+                         PMC_sub(sub->outer_sub)->subid)) {
+        Parrot_ex_throw_from_c_args(interp, NULL, 
+            EXCEPTION_INVALID_OPERATION, "'%Ss' isn't the :outer of '%Ss'", 
+            current_sub->name, sub->name);
+        return;
+    }
+#endif
 
     /* set the sub's outer context to the current context */
     old = sub->outer_ctx;

Reply via email to