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.
# 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