diff options
author | dgp <dgp@users.sourceforge.net> | 2013-05-29 17:20:29 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2013-05-29 17:20:29 (GMT) |
commit | e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec (patch) | |
tree | b9cef2c0bd1c8227af75edbd58ce327f0edd853b | |
parent | c929650e2f079e196a96f2984cd24820bcc56d3e (diff) | |
download | tcl-e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec.zip tcl-e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec.tar.gz tcl-e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec.tar.bz2 |
3614102 - Reset stack housekeeping when compileProc fails.
-rw-r--r-- | generic/tclCompile.c | 8 | ||||
-rw-r--r-- | tests/compile.test | 6 |
2 files changed, 12 insertions, 2 deletions
diff --git a/generic/tclCompile.c b/generic/tclCompile.c index dd179ea..039a694 100644 --- a/generic/tclCompile.c +++ b/generic/tclCompile.c @@ -2069,9 +2069,7 @@ TclCompileScript( unsigned savedCodeNext = envPtr->codeNext - envPtr->codeStart; int update = 0; -#ifdef TCL_COMPILE_DEBUG int startStackDepth = envPtr->currStackDepth; -#endif /* * Mark the start of the command; the proper bytecode @@ -2164,6 +2162,12 @@ TclCompileScript( envPtr->numCommands = savedNumCmds; envPtr->codeNext = envPtr->codeStart + savedCodeNext; + + /* + * And the stack depth too!! [Bug 3614102]. + */ + + envPtr->currStackDepth = startStackDepth; } /* diff --git a/tests/compile.test b/tests/compile.test index 4d91940..51db0a2 100644 --- a/tests/compile.test +++ b/tests/compile.test @@ -707,6 +707,12 @@ test compile-18.19 {disassembler - basics} -setup { } -cleanup { foo destroy } -match glob -result * + +test compile-19.0 {Bug 3614102: reset stack housekeeping} -body { + # This will panic in a --enable-symbols=compile build, unless bug is fixed. + apply {{} {list [if 1]}} +} -returnCodes error -match glob -result * + # TODO sometime - check that bytecode from tbcload is *not* disassembled. # cleanup |