Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | 3614102 - Reset stack housekeeping when compileProc fails. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
83e8b2e1532b05afd1e2416d94c1cf39 |
User & Date: | dgp 2013-05-29 17:20:29 |
Context
2013-05-29
| ||
20:36 | Simplifications and tidying up of stack management issues. Work in progress. check-in: 94c169dbe0 user: dgp tags: trunk | |
17:28 | merge trunk check-in: b6d8bbff1b user: dgp tags: dgp-refactor | |
17:20 | 3614102 - Reset stack housekeeping when compileProc fails. check-in: 83e8b2e153 user: dgp tags: trunk | |
14:37 | Stop emitting the instructions INST_*_SCALAR_STK*. They are identical to their INST_*_STK* counterp... check-in: 134b3c0bfc user: dgp tags: trunk | |
Changes
Changes to generic/tclCompile.c.
︙ | ︙ | |||
2065 2066 2067 2068 2069 2070 2071 | if ((wordIdx == 0) && !expand) { cmdPtr = FindCompiledCommandFromToken(interp, tokenPtr); if (cmdPtr) { int savedNumCmds = envPtr->numCommands; unsigned savedCodeNext = envPtr->codeNext - envPtr->codeStart; int update = 0; | < < | 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 | if ((wordIdx == 0) && !expand) { cmdPtr = FindCompiledCommandFromToken(interp, tokenPtr); if (cmdPtr) { int savedNumCmds = envPtr->numCommands; unsigned savedCodeNext = envPtr->codeNext - envPtr->codeStart; int update = 0; int startStackDepth = envPtr->currStackDepth; /* * Mark the start of the command; the proper bytecode * length will be updated later. There is no need to * do this for the first bytecode in the compile env, * as the check is done before calling * TclNRExecuteByteCode(). Do emit an INST_START_CMD |
︙ | ︙ | |||
2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 | * values, removing any commands compiled before the * failure to produce bytecode got reported. [Bugs * 705406 and 735055] */ envPtr->numCommands = savedNumCmds; envPtr->codeNext = envPtr->codeStart + savedCodeNext; } /* * No compile procedure so push the word. If the command * was found, push a CmdName object to reduce runtime * lookups. Mark this as a command name literal to reduce * shimmering. | > > > > > > | 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 | * values, removing any commands compiled before the * failure to produce bytecode got reported. [Bugs * 705406 and 735055] */ envPtr->numCommands = savedNumCmds; envPtr->codeNext = envPtr->codeStart + savedCodeNext; /* * And the stack depth too!! [Bug 3614102]. */ envPtr->currStackDepth = startStackDepth; } /* * No compile procedure so push the word. If the command * was found, push a CmdName object to reduce runtime * lookups. Mark this as a command name literal to reduce * shimmering. |
︙ | ︙ |
Changes to tests/compile.test.
︙ | ︙ | |||
703 704 705 706 707 708 709 710 711 712 713 714 715 716 | oo::objdefine foo {method bar {} {}} } -body { # Allow any string: the result format is not defined anywhere! tcl::unsupported::disassemble objmethod foo bar } -cleanup { foo destroy } -match glob -result * # TODO sometime - check that bytecode from tbcload is *not* disassembled. # cleanup catch {rename p ""} catch {namespace delete test_ns_compile} catch {unset x} catch {unset y} | > > > > > > | 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 | oo::objdefine foo {method bar {} {}} } -body { # Allow any string: the result format is not defined anywhere! tcl::unsupported::disassemble objmethod foo bar } -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 catch {rename p ""} catch {namespace delete test_ns_compile} catch {unset x} catch {unset y} |
︙ | ︙ |