From 5b235b69d517aa8db6f124990b7eb3bd0e37f4be Mon Sep 17 00:00:00 2001 From: dkf Date: Fri, 30 Nov 2012 07:55:59 +0000 Subject: Improve behavior when exception ranges need retraction. --- generic/tclAssembly.c | 4 ++-- generic/tclCompile.c | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/generic/tclAssembly.c b/generic/tclAssembly.c index 5f5207c..31690e0 100644 --- a/generic/tclAssembly.c +++ b/generic/tclAssembly.c @@ -839,7 +839,7 @@ CompileAssembleObj( for (i = 0; i < compEnv.auxDataArrayNext; i++) { auxDataPtr = compEnv.auxDataArrayPtr + i; if (auxDataPtr->type->freeProc != NULL) { - (auxDataPtr->type->freeProc)(auxDataPtr->clientData); + auxDataPtr->type->freeProc(auxDataPtr->clientData); } } @@ -3101,7 +3101,7 @@ CheckNonThrowingBlock( * Determine whether an instruction is nonthrowing. */ - opcode = (envPtr->codeStart)[offset]; + opcode = envPtr->codeStart[offset]; if (BytecodeMightThrow(opcode)) { /* * Report an error for a throw in the wrong context. diff --git a/generic/tclCompile.c b/generic/tclCompile.c index 7dddaa3..fc05ec6 100644 --- a/generic/tclCompile.c +++ b/generic/tclCompile.c @@ -1740,6 +1740,7 @@ TclCompileScript( int code, savedNumCmds = envPtr->numCommands; unsigned savedCodeNext = envPtr->codeNext - envPtr->codeStart; + int savedExceptArrayNext = envPtr->exceptArrayNext; int update = 0; #ifdef TCL_COMPILE_DEBUG int startStackDepth = envPtr->currStackDepth; @@ -1844,6 +1845,14 @@ TclCompileScript( envPtr->numCommands = savedNumCmds; envPtr->codeNext = envPtr->codeStart + savedCodeNext; + + /* + * Must also restore the number of exception ranges; + * cannot guarantee that none were issued before the + * failure. + */ + + envPtr->exceptArrayNext = savedExceptArrayNext; } /* -- cgit v0.12