From: Bob Rogers <[EMAIL PROTECTED]>
   Date: Sat, 23 Sep 2006 17:43:28 -0400

      From: "Matt Diephouse" <[EMAIL PROTECTED]>
      Date: Sat, 23 Sep 2006 16:56:44 -0400

      Unfortunately, this patch breaks Tcl. There seems to be some bug with
      exceptions.

      Here's the Tcl used for this example:

          proc test {} {uplevel #0 {append}}
          test

   Hmm.  I seem to have broken rethrow . . . or maybe not.

Try the attached patch.  If it works, then we have a problem, because
here's the original comment (which I deleted) that went with this line
of code:

            /*
             * During interpreter creation there is an initial context
             * and the context of :main, created by runops_fromc_args
             * Therefore, it seems, we have the main context twice
             * and an exception handler in main can catch the same
             * exception twich e.g. after rethrow
             *
             * The same problem can arise after a tailcall.
             *
             * So invalidate entry_type.
             */

But I can't see that either of these conditions could possibly apply
here.  So we have a mystery.  Possibly this was hiding some other bug,
which it would be better to identify and fix instead.

   Leo?

                                        -- Bob


Index: src/exceptions.c
===================================================================
--- src/exceptions.c    (revision 14695)
+++ src/exceptions.c    (working copy)
@@ -242,6 +242,8 @@
             handler = UVal_pmc(e->entry);
             if (handler && handler->vtable->base_type ==
                     enum_class_Exception_Handler) {
+                /* [kludge.  -- rgr, 23-Sep-06.] */
+                e->entry_type = NO_STACK_ENTRY_TYPE;
                 return handler;
             }
         }

Reply via email to