summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-09-19 16:41:04 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-09-19 16:41:04 (GMT)
commitd35d4b2c53b9f938c70be1660b60c3aec73dc1c3 (patch)
treed4c31e2e16495e07b1372e8a4d4fe71c7a17bac8
parentb4a00d3ac52eaa4ec6e9ab0f512670916ba0e24a (diff)
parentc91c7b7cf1a5d17289e85b2ca29782437b967039 (diff)
downloadtcl-d35d4b2c53b9f938c70be1660b60c3aec73dc1c3.zip
tcl-d35d4b2c53b9f938c70be1660b60c3aec73dc1c3.tar.gz
tcl-d35d4b2c53b9f938c70be1660b60c3aec73dc1c3.tar.bz2
Line numbers wrong in compiled [global] and [variable].
-rw-r--r--generic/tclCompCmdsGR.c10
-rw-r--r--tests/upvar.test10
2 files changed, 18 insertions, 2 deletions
diff --git a/generic/tclCompCmdsGR.c b/generic/tclCompCmdsGR.c
index a61fc85..4e4a3af 100644
--- a/generic/tclCompCmdsGR.c
+++ b/generic/tclCompCmdsGR.c
@@ -85,14 +85,17 @@ TclCompileGlobalCmd(
*/
varTokenPtr = TokenAfter(parsePtr->tokenPtr);
- for (i=2; i<=numWords; varTokenPtr = TokenAfter(varTokenPtr),i++) {
+ for (i=1; i<numWords; varTokenPtr = TokenAfter(varTokenPtr),i++) {
localIndex = IndexTailVarIfKnown(interp, varTokenPtr, envPtr);
if (localIndex < 0) {
return TCL_ERROR;
}
- CompileWord(envPtr, varTokenPtr, interp, 1);
+ /* TODO: Consider what value can pass throug the
+ * IndexTailVarIfKnown() screen. Full CompileWord()
+ * likely does not apply here. Push known value instead. */
+ CompileWord(envPtr, varTokenPtr, interp, i);
TclEmitInstInt4( INST_NSUPVAR, localIndex, envPtr);
}
@@ -2706,6 +2709,9 @@ TclCompileVariableCmd(
return TCL_ERROR;
}
+ /* TODO: Consider what value can pass throug the
+ * IndexTailVarIfKnown() screen. Full CompileWord()
+ * likely does not apply here. Push known value instead. */
CompileWord(envPtr, varTokenPtr, interp, i);
TclEmitInstInt4( INST_VARIABLE, localIndex, envPtr);
diff --git a/tests/upvar.test b/tests/upvar.test
index 9cbfd05..e93f58a 100644
--- a/tests/upvar.test
+++ b/tests/upvar.test
@@ -568,6 +568,16 @@ test upvar-NS-3.2 {CompileWord OBOE} -setup {
} -cleanup {
rename linenumber {}
} -result 1
+test upvar-NS-3.3 {CompileWord OBOE} -setup {
+ proc linenumber {} {dict get [info frame -1] line}
+} -body {
+ apply {n {
+ variable x {*}{
+ } [return [incr n -[linenumber]]]
+ }} [linenumber]
+} -cleanup {
+ rename linenumber {}
+} -result 1
# cleanup