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