summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-09-19 13:06:06 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-09-19 13:06:06 (GMT)
commit635d8c961aa06ec17403483a0ff3c0a3d524f3d1 (patch)
tree5f3f379cfbda273dc21e1071c0c8e64b82f096c5
parent3abcbb2542b51d5fd6df940805672cba4660c3ec (diff)
downloadtcl-635d8c961aa06ec17403483a0ff3c0a3d524f3d1.zip
tcl-635d8c961aa06ec17403483a0ff3c0a3d524f3d1.tar.gz
tcl-635d8c961aa06ec17403483a0ff3c0a3d524f3d1.tar.bz2
Line numbers wrong in compiled [dict set].
-rw-r--r--generic/tclCompCmds.c8
-rw-r--r--tests/dict.test6
2 files changed, 9 insertions, 5 deletions
diff --git a/generic/tclCompCmds.c b/generic/tclCompCmds.c
index 2013568..260bd28 100644
--- a/generic/tclCompCmds.c
+++ b/generic/tclCompCmds.c
@@ -683,11 +683,10 @@ TclCompileDictSetCmd(
CompileEnv *envPtr) /* Holds resulting instructions. */
{
Tcl_Token *tokenPtr;
- int numWords, i;
Proc *procPtr = envPtr->procPtr;
DefineLineInformation; /* TIP #280 */
Tcl_Token *varTokenPtr;
- int dictVarIndex, nameChars;
+ int i, dictVarIndex, nameChars;
const char *name;
/*
@@ -720,8 +719,7 @@ TclCompileDictSetCmd(
*/
tokenPtr = TokenAfter(varTokenPtr);
- numWords = parsePtr->numWords-1;
- for (i=1 ; i<numWords ; i++) {
+ for (i=2 ; i< parsePtr->numWords ; i++) {
CompileWord(envPtr, tokenPtr, interp, i);
tokenPtr = TokenAfter(tokenPtr);
}
@@ -730,7 +728,7 @@ TclCompileDictSetCmd(
* Now emit the instruction to do the dict manipulation.
*/
- TclEmitInstInt4( INST_DICT_SET, numWords-2, envPtr);
+ TclEmitInstInt4( INST_DICT_SET, parsePtr->numWords-3, envPtr);
TclEmitInt4( dictVarIndex, envPtr);
return TCL_OK;
}
diff --git a/tests/dict.test b/tests/dict.test
index 6271779..83f1ca7 100644
--- a/tests/dict.test
+++ b/tests/dict.test
@@ -1248,6 +1248,12 @@ test dict-23.3 {CompileWord OBOE} {
apply {{} {tcl::dict::lappend foo bar \
[format baz]}}
} {bar baz}
+test dict-23.4 {CompileWord OBOE} {
+ apply {n {
+ dict set foo {*}{
+ } [return [incr n -[linenumber]]] val
+ }} [linenumber]
+} 1
rename linenumber {}