From: Allison Randal (via RT) <[EMAIL PROTECTED]>
   Date: Tue, 04 Apr 2006 16:52:49 -0700

   # New Ticket Created by  Allison Randal 
   # Please include the string:  [perl #38850]
   # in the subject line of all future correspondence about this issue. 
   # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=38850 >

   When you pass a non-existent option to the "get_options" method in  
   Getopt::Obj, it tries to clear a non-existent exception handler at  
   the end of the method and dies. (I discovered this by accident, when  
   I mistyped the "output" option as "outfile". )

   $ parrot tgc.pir --outfile=dummy.pir ../../examples/tge/branch/branch.g
   No exception to pop.
   current instr.: 'Getopt::Obj :: get_options' pc 759 (/Volumes/ 
   lilalUFS/projects/svk/parrot/runtime/parrot/library/Getopt/Obj.pir: 
   344)called from Sub 'main' pc 45 (tgc.pir:51)

   Looks like more exceptions are being thrown than the author expects,  
   but I don't have time to look into it further at the moment.

   Allison

I'll bet that this is because of the "Restrict clear_eh to handlers in
the current context" patch that Leo committed at my suggestion (see
r11444).  As a result, one can no longer pop a handler that does not
exist, either because it wasn't pushed, isn't at the top of the control
stack, or wasn't pushed in the current context.

   In the case of runtime/parrot/library/Getopt/Obj.pir, it may be that
the handler was already thrown to.  If that is true, then the following
patch should be sufficient to correct the problem.  But I can't
reproduce the error (can't find tgc.pir; is it attached to the RT item
somewhere?), so I can't test it.

   HTH,

                                        -- Bob Rogers
                                           http://rgrjr.dyndns.org/

------------------------------------------------------------------------
Index: runtime/parrot/library/Getopt/Obj.pir
===================================================================
--- runtime/parrot/library/Getopt/Obj.pir       (revision 11792)
+++ runtime/parrot/library/Getopt/Obj.pir       (working copy)
@@ -334,7 +334,7 @@
     rethrow $P0
 endif_6:
     $I0 = self."notOptStop"()
-    if $I0 goto finish
+    if $I0 goto eh_finish
     # This seems necessary...don't know why
     push_eh handler
     inc i
@@ -342,6 +342,7 @@
 
 finish:
     clear_eh
+eh_finish:
     .return(return)
 .end
 

Reply via email to