[svn:parrot] r41034 - in branches/kill_parrot_cont: config/inter include/parrot src src/call src/gc src/ops src/pmc

bacek at svn.parrot.org bacek at svn.parrot.org
Sun Sep 6 04:07:04 UTC 2009


Author: bacek
Date: Sun Sep  6 04:06:59 2009
New Revision: 41034
URL: https://trac.parrot.org/parrot/changeset/41034

Log:
Merge trunk into branch.

Conflicts:
	include/parrot/context.h
	include/parrot/register.h
	include/parrot/sub.h
	lib/Parrot/Pmc2c/PCCMETHOD.pm
	src/call/pcc.c
	src/debug.c
	src/gc/alloc_register.c
	src/ops/core.ops
	src/ops/pic.ops
	src/pic.c
	src/pmc/context.pmc
	src/pmc/continuation.pmc
	src/pmc/coroutine.pmc
	src/pmc/exception.pmc
	src/pmc/exceptionhandler.pmc
	src/pmc/retcontinuation.pmc
	src/sub.c

Modified:
   branches/kill_parrot_cont/config/inter/libparrot.pm
   branches/kill_parrot_cont/include/parrot/context.h
   branches/kill_parrot_cont/include/parrot/register.h
   branches/kill_parrot_cont/include/parrot/sub.h
   branches/kill_parrot_cont/src/call/pcc.c
   branches/kill_parrot_cont/src/debug.c
   branches/kill_parrot_cont/src/gc/alloc_register.c
   branches/kill_parrot_cont/src/hll.c
   branches/kill_parrot_cont/src/ops/core.ops
   branches/kill_parrot_cont/src/ops/pic.ops
   branches/kill_parrot_cont/src/pic.c
   branches/kill_parrot_cont/src/pmc/context.pmc
   branches/kill_parrot_cont/src/pmc/exception.pmc
   branches/kill_parrot_cont/src/pmc/exceptionhandler.pmc
   branches/kill_parrot_cont/src/sub.c

Modified: branches/kill_parrot_cont/config/inter/libparrot.pm
==============================================================================
--- branches/kill_parrot_cont/config/inter/libparrot.pm	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/config/inter/libparrot.pm	Sun Sep  6 04:06:59 2009	(r41034)
@@ -56,6 +56,9 @@
     if ($^O eq 'cygwin') {
         @libs = ('libparrot.dll.a');
     }
+    if ($^O eq 'darwin'){
+        @libs = qw/libparrot.dylib libparrot.a/;
+    }
     if (defined $ENV{LD_LIBRARY_PATH}) {
         push @libpaths, (split /:/, $ENV{LD_LIBRARY_PATH});
     }

Modified: branches/kill_parrot_cont/include/parrot/context.h
==============================================================================
--- branches/kill_parrot_cont/include/parrot/context.h	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/include/parrot/context.h	Sun Sep  6 04:06:59 2009	(r41034)
@@ -27,7 +27,7 @@
     Regs_ps  bp_ps;           /* pointers to PMC & STR */
 
     /* end common header */
-    INTVAL   n_regs_used[4];   /* INSP in PBC points to Sub */
+    UINTVAL  n_regs_used[4];   /* INSP in PBC points to Sub */
     PMC      *lex_pad;         /* LexPad PMC */
     PMC      *outer_ctx;       /* outer context, if a closure */
 

Modified: branches/kill_parrot_cont/include/parrot/register.h
==============================================================================
--- branches/kill_parrot_cont/include/parrot/register.h	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/include/parrot/register.h	Sun Sep  6 04:06:59 2009	(r41034)
@@ -80,7 +80,7 @@
 PARROT_CANNOT_RETURN_NULL
 FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP,
     ARGIN(PMC *ctx),
-    INTVAL idx)
+    UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -88,13 +88,13 @@
 PARROT_CANNOT_RETURN_NULL
 INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP,
     ARGIN(PMC *ctx),
-    INTVAL idx)
+    UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
-PMC ** Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+PMC ** Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -111,7 +111,7 @@
         __attribute__nonnull__(2);
 
 PARROT_EXPORT
-int Parrot_pcc_get_regs_used(PARROT_INTERP, ARGIN(PMC *ctx), int type)
+UINTVAL Parrot_pcc_get_regs_used(PARROT_INTERP, ARGIN(PMC *ctx), int type)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
@@ -119,7 +119,7 @@
 PARROT_CANNOT_RETURN_NULL
 STRING ** Parrot_pcc_get_STRING_reg(PARROT_INTERP,
     ARGIN(PMC *ctx),
-    INTVAL idx)
+    UINTVAL idx)
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 

Modified: branches/kill_parrot_cont/include/parrot/sub.h
==============================================================================
--- branches/kill_parrot_cont/include/parrot/sub.h	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/include/parrot/sub.h	Sun Sep  6 04:06:59 2009	(r41034)
@@ -241,6 +241,15 @@
 
 PARROT_CAN_RETURN_NULL
 PARROT_WARN_UNUSED_RESULT
+PMC* Parrot_find_dynamic_pad(PARROT_INTERP,
+    ARGIN(STRING *lex_name),
+    ARGIN(PMC *ctx))
+        __attribute__nonnull__(1)
+        __attribute__nonnull__(2)
+        __attribute__nonnull__(3);
+
+PARROT_CAN_RETURN_NULL
+PARROT_WARN_UNUSED_RESULT
 PMC* Parrot_find_pad(PARROT_INTERP,
     ARGIN(STRING *lex_name),
     ARGIN(PMC *ctx))

Modified: branches/kill_parrot_cont/src/call/pcc.c
==============================================================================
--- branches/kill_parrot_cont/src/call/pcc.c	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/call/pcc.c	Sun Sep  6 04:06:59 2009	(r41034)
@@ -1194,22 +1194,28 @@
     for (; key; key = VTABLE_shift_pmc(interp, key)) {
         /* register keys have to be cloned */
         if (PObj_get_FLAGS(key) & KEY_register_FLAG) {
+            INTVAL  n_regs_used[4];
             Regs_ni bp;
             Regs_ps bp_ps;
 
             /* clone sets key values according to refered register items */
             bp    = *Parrot_pcc_get_regs_ni(interp, CURRENT_CONTEXT(interp));
             bp_ps = *Parrot_pcc_get_regs_ps(interp, CURRENT_CONTEXT(interp));
+            memcpy(n_regs_used, CONTEXT(interp)->n_regs_used, 4 * sizeof (INTVAL));
 
             Parrot_pcc_set_regs_ni(interp, CURRENT_CONTEXT(interp),
                     Parrot_pcc_get_regs_ni(interp, st->src.ctx));
             Parrot_pcc_set_regs_ps(interp, CURRENT_CONTEXT(interp),
                     Parrot_pcc_get_regs_ps(interp, st->src.ctx));
+            memcpy(CONTEXT(interp)->n_regs_used,
+                    Parrot_pcc_get_context_struct(interp, st->src.ctx),
+                    4 * sizeof (INTVAL));
 
             UVal_pmc(st->val) = VTABLE_clone(interp, key);
 
             Parrot_pcc_set_regs_ni(interp, CURRENT_CONTEXT(interp), &bp);
             Parrot_pcc_set_regs_ps(interp, CURRENT_CONTEXT(interp), &bp_ps);
+            memcpy(CONTEXT(interp)->n_regs_used, n_regs_used, 4 * sizeof (INTVAL));
 
             return;
         }
@@ -2869,8 +2875,7 @@
     interp->current_object       = pmc;
     interp->current_cont         = NEED_CONTINUATION;
     Parrot_pcc_set_continuation(interp, ctx, ret_cont);
-    PARROT_CONTINUATION(ret_cont)->from_ctx = ctx;
-
+    PMC_cont(ret_cont)->from_ctx = ctx;
     pccinvoke_meth               = VTABLE_find_method(interp, pmc, method_name);
 
     if (PMC_IS_NULL(pccinvoke_meth))
@@ -3011,10 +3016,9 @@
     else {
         interp->current_object       = PMCNULL;
     }
-
     interp->current_cont             = NEED_CONTINUATION;
     Parrot_pcc_set_continuation(interp, ctx, ret_cont);
-    PARROT_CONTINUATION(ret_cont)->from_ctx     = ctx;
+    PMC_cont(ret_cont)->from_ctx     = ctx;
 
     /* Invoke the function */
     dest = VTABLE_invoke(interp, sub_obj, NULL);

Modified: branches/kill_parrot_cont/src/debug.c
==============================================================================
--- branches/kill_parrot_cont/src/debug.c	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/debug.c	Sun Sep  6 04:06:59 2009	(r41034)
@@ -3211,14 +3211,29 @@
 
     switch (reg_type) {
         case 'I':
+                if (register_num >= Parrot_pcc_get_regs_used(interp,
+                                            CURRENT_CONTEXT(interp), REGNO_INT)) {
+                    fprintf(stderr, "I%ld = no such register\n", register_num);
+                    return;
+                }
                 t                  = REGNO_INT;
                 IREG(register_num) = get_ulong(&command, 0);
                 break;
         case 'N':
+                if (register_num >= Parrot_pcc_get_regs_used(interp,
+                                            CURRENT_CONTEXT(interp), REGNO_NUM)) {
+                    fprintf(stderr, "N%ld = no such register\n", register_num);
+                    return;
+                }
                 t                  = REGNO_NUM;
                 NREG(register_num) = atof(command);
                 break;
         case 'S':
+                if (register_num >= Parrot_pcc_get_regs_used(interp,
+                                            CURRENT_CONTEXT(interp), REGNO_NUM)) {
+                    fprintf(stderr, "S%ld = no such register\n", register_num);
+                    return;
+                }
                 t                  = REGNO_STR;
                 SREG(register_num) = Parrot_str_new(interp, command, strlen(command));
                 break;
@@ -3556,11 +3571,11 @@
             break;
 
         /* recursion detection */
-        if (!PMC_IS_NULL(old) && PARROT_CONTINUATION(old) &&
-            Parrot_pcc_get_pc(interp, PARROT_CONTINUATION(old)->to_ctx) ==
-            Parrot_pcc_get_pc(interp, PARROT_CONTINUATION(sub)->to_ctx) &&
-            Parrot_pcc_get_sub(interp, PARROT_CONTINUATION(old)->to_ctx) ==
-            Parrot_pcc_get_sub(interp, PARROT_CONTINUATION(sub)->to_ctx)) {
+        if (!PMC_IS_NULL(old) && PMC_cont(old) &&
+            Parrot_pcc_get_pc(interp, PMC_cont(old)->to_ctx) ==
+            Parrot_pcc_get_pc(interp, PMC_cont(sub)->to_ctx) &&
+            Parrot_pcc_get_sub(interp, PMC_cont(old)->to_ctx) ==
+            Parrot_pcc_get_sub(interp, PMC_cont(sub)->to_ctx)) {
                 ++rec_level;
         }
         else if (rec_level != 0) {
@@ -3634,7 +3649,7 @@
     ASSERT_ARGS(GDB_print_reg)
     char * string;
 
-    if (n >= 0 && n < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), t)) {
+    if (n >= 0 && (UINTVAL)n < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), t)) {
         switch (t) {
             case REGNO_INT:
                 return Parrot_str_from_int(interp, IREG(n))->strstart;

Modified: branches/kill_parrot_cont/src/gc/alloc_register.c
==============================================================================
--- branches/kill_parrot_cont/src/gc/alloc_register.c	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/gc/alloc_register.c	Sun Sep  6 04:06:59 2009	(r41034)
@@ -156,7 +156,7 @@
 clear_regs(PARROT_INTERP, ARGMOD(PMC *pmcctx))
 {
     ASSERT_ARGS(clear_regs)
-    int i;
+    UINTVAL i;
     Parrot_Context *ctx = Parrot_pcc_get_context_struct(interp, pmcctx);
 
     /* NULL out registers - P/S have to be NULL for GC
@@ -210,6 +210,7 @@
     ctx->current_object    = NULL;
     ctx->handlers          = PMCNULL;
     ctx->caller_ctx        = NULL;
+    ctx->pred_offset       = 0;
 
     if (old) {
         /* some items should better be COW copied */
@@ -404,7 +405,7 @@
 Parrot_clear_i(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_i)
-    int i;
+    UINTVAL i;
     for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_INT); ++i)
         REG_INT(interp, i) = 0;
 }
@@ -425,7 +426,7 @@
 Parrot_clear_s(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_s)
-    int i;
+    UINTVAL i;
     for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_STR); ++i)
         REG_STR(interp, i) = NULL;
 }
@@ -446,7 +447,7 @@
 Parrot_clear_p(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_p)
-    int i;
+    UINTVAL i;
     for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_PMC); ++i)
         REG_PMC(interp, i) = PMCNULL;
 }
@@ -467,14 +468,15 @@
 Parrot_clear_n(PARROT_INTERP)
 {
     ASSERT_ARGS(Parrot_clear_n)
-    int i;
+    UINTVAL i;
     for (i = 0; i < Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_NUM); ++i)
         REG_NUM(interp, i) = 0.0;
 }
 
 /*
 
-=item C<INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, PMC *ctx, INTVAL idx)>
+=item C<INTVAL * Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, PMC *ctx, UINTVAL
+idx)>
 
 Get pointer to INTVAL register.
 
@@ -485,15 +487,16 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 INTVAL *
-Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+Parrot_pcc_get_INTVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_pcc_get_INTVAL_reg)
+    PARROT_ASSERT(Parrot_pcc_get_regs_used(interp, ctx, REGNO_INT) > idx);
     return &(Parrot_pcc_get_context_struct(interp, ctx)->bp.regs_i[idx]);
 }
 
 /*
 
-=item C<FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, PMC *ctx, INTVAL
+=item C<FLOATVAL * Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, PMC *ctx, UINTVAL
 idx)>
 
 Get pointer to FLOATVAL register.
@@ -505,15 +508,16 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 FLOATVAL *
-Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+Parrot_pcc_get_FLOATVAL_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_pcc_get_FLOATVAL_reg)
+    PARROT_ASSERT(Parrot_pcc_get_regs_used(interp, ctx, REGNO_NUM) > idx);
     return &(Parrot_pcc_get_context_struct(interp, ctx)->bp.regs_n[-1L - idx]);
 }
 
 /*
 
-=item C<STRING ** Parrot_pcc_get_STRING_reg(PARROT_INTERP, PMC *ctx, INTVAL
+=item C<STRING ** Parrot_pcc_get_STRING_reg(PARROT_INTERP, PMC *ctx, UINTVAL
 idx)>
 
 Get pointer to STRING register.
@@ -525,15 +529,16 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 STRING **
-Parrot_pcc_get_STRING_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+Parrot_pcc_get_STRING_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_pcc_get_STRING_reg)
+    PARROT_ASSERT(Parrot_pcc_get_regs_used(interp, ctx, REGNO_STR) > idx);
     return &(Parrot_pcc_get_context_struct(interp, ctx)->bp_ps.regs_s[idx]);
 }
 
 /*
 
-=item C<PMC ** Parrot_pcc_get_PMC_reg(PARROT_INTERP, PMC *ctx, INTVAL idx)>
+=item C<PMC ** Parrot_pcc_get_PMC_reg(PARROT_INTERP, PMC *ctx, UINTVAL idx)>
 
 Get pointer to PMC register.
 
@@ -544,15 +549,16 @@
 PARROT_EXPORT
 PARROT_CANNOT_RETURN_NULL
 PMC **
-Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), INTVAL idx)
+Parrot_pcc_get_PMC_reg(PARROT_INTERP, ARGIN(PMC *ctx), UINTVAL idx)
 {
     ASSERT_ARGS(Parrot_pcc_get_PMC_reg)
+    PARROT_ASSERT(Parrot_pcc_get_regs_used(interp, ctx, REGNO_PMC) > idx);
     return &(Parrot_pcc_get_context_struct(interp, ctx)->bp_ps.regs_p[-1L - idx]);
 }
 
 /*
 
-=item C<int Parrot_pcc_get_regs_used(PARROT_INTERP, PMC *ctx, int type)>
+=item C<UINTVAL Parrot_pcc_get_regs_used(PARROT_INTERP, PMC *ctx, int type)>
 
 Return number of used registers of particular type.
 
@@ -560,7 +566,7 @@
 
 */
 PARROT_EXPORT
-int
+UINTVAL
 Parrot_pcc_get_regs_used(PARROT_INTERP, ARGIN(PMC *ctx), int type)
 {
     ASSERT_ARGS(Parrot_pcc_get_regs_used)

Modified: branches/kill_parrot_cont/src/hll.c
==============================================================================
--- branches/kill_parrot_cont/src/hll.c	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/hll.c	Sun Sep  6 04:06:59 2009	(r41034)
@@ -554,6 +554,7 @@
 
 =cut
 
+
 */
 
 /*

Modified: branches/kill_parrot_cont/src/ops/core.ops
==============================================================================
--- branches/kill_parrot_cont/src/ops/core.ops	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/ops/core.ops	Sun Sep  6 04:06:59 2009	(r41034)
@@ -579,7 +579,7 @@
 
     if (PARROT_CONTINUATION(ccont)->address) {
         /* Call is from runops_fromc */
-        caller_ctx = PARROT_CONTINUATION(ccont)->to_ctx;
+        caller_ctx = PMC_cont(ccont)->to_ctx;
         if (PMC_IS_NULL(caller_ctx)) {
             /* there is no point calling Parrot_ex_throw_..., because
                PDB_backtrace can't deal with a missing to_ctx either. */
@@ -618,7 +618,7 @@
     PMC *sig = NULL;
     if (cc && PARROT_CONTINUATION(cc)->to_ctx) {
         /* caller context has results */
-        opcode_t * const results = Parrot_pcc_get_results(interp, PARROT_CONTINUATION(cc)->to_ctx);
+        opcode_t * const results = Parrot_pcc_get_results(interp, PMC_cont(cc)->to_ctx);
         if (results) {
             /* get results PMC index and get PMC. */
             sig = PF_CONST(PARROT_CONTINUATION(cc)->seg, results[1])->u.key;

Modified: branches/kill_parrot_cont/src/ops/pic.ops
==============================================================================
--- branches/kill_parrot_cont/src/ops/pic.ops	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/ops/pic.ops	Sun Sep  6 04:06:59 2009	(r41034)
@@ -190,8 +190,7 @@
     ctx     = CURRENT_CONTEXT(interp);
     mic     = (Parrot_MIC *) cur_opcode[1];
     ccont   = Parrot_pcc_get_continuation(interp, ctx);
-    cc = PARROT_CONTINUATION(ccont);
-
+    cc      = PMC_cont(ccont);
     if (!cc->address) {
         interp->current_returns = CUR_OPCODE;
         n = VTABLE_get_integer(interp, mic->m.sig);

Modified: branches/kill_parrot_cont/src/pic.c
==============================================================================
--- branches/kill_parrot_cont/src/pic.c	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/pic.c	Sun Sep  6 04:06:59 2009	(r41034)
@@ -705,9 +705,9 @@
 
     if (op == PARROT_OP_set_returns_pc) {
         PMC * const ccont = Parrot_pcc_get_continuation(interp, ctx);
-        if (!PARROT_CONTINUATION(ccont)->address)
+        if (!PMC_cont(ccont)->address)
             return 0;
-        caller_ctx = PARROT_CONTINUATION(ccont)->to_ctx;
+        caller_ctx = PMC_cont(ccont)->to_ctx;
         args       = Parrot_pcc_get_results(interp, caller_ctx);
     }
     else {

Modified: branches/kill_parrot_cont/src/pmc/context.pmc
==============================================================================
--- branches/kill_parrot_cont/src/pmc/context.pmc	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/pmc/context.pmc	Sun Sep  6 04:06:59 2009	(r41034)
@@ -53,8 +53,8 @@
     VTABLE void mark()
     {
         Parrot_Context * const ctx = PMC_data_typed(SELF, Parrot_Context*);
-        PObj *obj;
-        int   i;
+        PObj   *obj;
+        UINTVAL i;
 
         /* If Context wasn't initialised just return */
         if (!ctx)

Modified: branches/kill_parrot_cont/src/pmc/exception.pmc
==============================================================================
--- branches/kill_parrot_cont/src/pmc/exception.pmc	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/pmc/exception.pmc	Sun Sep  6 04:06:59 2009	(r41034)
@@ -641,10 +641,11 @@
             SET_ATTR_handler_iter(interp, SELF, value);
         }
         else if (Parrot_str_equal(INTERP, name, CONST_STRING(INTERP, "thrower"))) {
-            /* Ensure it's a ret cont, and extract the from_ctx. */
+            /* Ensure it's a ret cont, and extract the from_ctx.
+             * XXX TT#596 - when we have Context PMCs, just take and set that. */
             if (!PMC_IS_NULL(value) && VTABLE_isa(interp, value, CONST_STRING(interp, "Continuation"))) {
-                PMC *ctx = PARROT_CONTINUATION(value)->from_ctx;
-                if (!PMC_IS_NULL(ctx))
+                PMC *ctx = PMC_cont(value)->from_ctx;
+                if (!PMC_IS_NULL(ctx)) {
                     SET_ATTR_thrower(interp, SELF, ctx);
             }
         }

Modified: branches/kill_parrot_cont/src/pmc/exceptionhandler.pmc
==============================================================================
--- branches/kill_parrot_cont/src/pmc/exceptionhandler.pmc	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/pmc/exceptionhandler.pmc	Sun Sep  6 04:06:59 2009	(r41034)
@@ -53,7 +53,6 @@
          * of an "earlier" context, which is contained in the interpreter's
          * context - the stacks can only be deeper in the interpreter - so no
          * mark of context is needed */
-        PObj_custom_mark_SET(SELF);
         PObj_custom_mark_destroy_SETALL(SELF);
     }
 /*

Modified: branches/kill_parrot_cont/src/sub.c
==============================================================================
--- branches/kill_parrot_cont/src/sub.c	Sun Sep  6 02:49:32 2009	(r41033)
+++ branches/kill_parrot_cont/src/sub.c	Sun Sep  6 04:06:59 2009	(r41034)
@@ -47,8 +47,6 @@
 }
 
 
-/*
-
 
 /*
 


More information about the parrot-commits mailing list