#2240 panic when compiling [catch]

obsolete: 8.4b1
closed-fixed
miguel sofer
8
2003-03-19
2003-03-18
Don Porter
No

Assigned to Group 8.4b1 because that's where this
first appeared. This bug is still present in 8.4.2 and
the HEAD. I suspect the broken commit was:

2002-07-03 Miguel Sofer <msofer@users.sourceforge.net>

* generic/tclCompCmds.c (TclCompileCatchCmd):
return
TCL_OUT_LINE_COMPILE instead of TCL_ERROR:
let the failure
happen at runtime so that it can be caught
[Bug 577015].

Here's a sample session to demo the problem:

% proc foo {} {catch {if 1 {set a [b]; if {a} {}}}}
% foo
GetCmdLocEncodingSize: bad code length
Abort

Key elements:

1) a [proc] so that we get the bytecode compiler involved.
2) a [catch] as the first command in the proc.
3) within the first command in the [catch],...
4) first there is a [command substitution],....
5) then there is a parsing syntax error

Seems that the partial compiles don't get properly
cleaned up, when the compile of [catch] gets
abandoned due to the syntax error, leading to
the panic.

Another example:

% proc foo {} {catch {if {[a]} {if b {}}}}
% foo
GetCmdLocEncodingSize: bad code length
Abort

Discussion

  • miguel sofer
    miguel sofer
    2003-03-19

    Logged In: YES
    user_id=148712

    envPtr->numCommands was not being restored to its correct
    value after encountering the compilation error. Fixed.

     
  • miguel sofer
    miguel sofer
    2003-03-19

    • status: open --> closed-fixed