diff options
-rw-r--r-- | generic/tclCompCmdsGR.c | 6 | ||||
-rw-r--r-- | tests/upvar.test | 22 |
2 files changed, 25 insertions, 3 deletions
diff --git a/generic/tclCompCmdsGR.c b/generic/tclCompCmdsGR.c index ae1b6a1..a61fc85 100644 --- a/generic/tclCompCmdsGR.c +++ b/generic/tclCompCmdsGR.c @@ -1899,13 +1899,13 @@ TclCompileNamespaceUpvarCmd( */ localTokenPtr = tokenPtr; - for (i=3; i<=numWords; i+=2) { + for (i=2; i<numWords; i+=2) { otherTokenPtr = TokenAfter(localTokenPtr); localTokenPtr = TokenAfter(otherTokenPtr); - CompileWord(envPtr, otherTokenPtr, interp, 1); + CompileWord(envPtr, otherTokenPtr, interp, i); PushVarNameWord(interp, localTokenPtr, envPtr, 0, - &localIndex, &isScalar, 1); + &localIndex, &isScalar, i+1); if ((localIndex < 0) || !isScalar) { return TCL_ERROR; diff --git a/tests/upvar.test b/tests/upvar.test index de98486..9cbfd05 100644 --- a/tests/upvar.test +++ b/tests/upvar.test @@ -547,6 +547,28 @@ test upvar-NS-2.2 {TIP 323} -setup { } -cleanup { namespace delete test_ns_1 } -result {} + +test upvar-NS-3.1 {CompileWord OBOE} -setup { + proc linenumber {} {dict get [info frame -1] line} +} -body { + apply {n { + namespace upvar {*}{ + } [return [incr n -[linenumber]]] x y + }} [linenumber] +} -cleanup { + rename linenumber {} +} -result 1 +test upvar-NS-3.2 {CompileWord OBOE} -setup { + proc linenumber {} {dict get [info frame -1] line} +} -body { + apply {n { + namespace upvar :: {*}{ + } [return [incr n -[linenumber]]] x + }} [linenumber] +} -cleanup { + rename linenumber {} +} -result 1 + # cleanup ::tcltest::cleanupTests |