diff options
author | dgp <dgp@users.sourceforge.net> | 2016-06-16 18:28:10 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2016-06-16 18:28:10 (GMT) |
commit | 19e87e6620b7ea3cafe504d680cb8883934b9e81 (patch) | |
tree | 5a64a32f48057df8c1a247da1cfac1789f505b1c | |
parent | c55587d3dbf0ad1d617bccd57624bee35d0ad763 (diff) | |
parent | 248348175af7704dabfbd15c9f1b9cb0645db450 (diff) | |
download | tcl-19e87e6620b7ea3cafe504d680cb8883934b9e81.zip tcl-19e87e6620b7ea3cafe504d680cb8883934b9e81.tar.gz tcl-19e87e6620b7ea3cafe504d680cb8883934b9e81.tar.bz2 |
merge trunk
-rw-r--r-- | generic/tclCompile.c | 4 | ||||
-rw-r--r-- | generic/tclEvent.c | 2 | ||||
-rw-r--r-- | tests/event.test | 28 | ||||
-rw-r--r-- | tests/info.test | 17 |
4 files changed, 50 insertions, 1 deletions
diff --git a/generic/tclCompile.c b/generic/tclCompile.c index 317ebaf..bf27b93 100644 --- a/generic/tclCompile.c +++ b/generic/tclCompile.c @@ -3276,8 +3276,10 @@ EnterCmdWordData( TclAdvanceLines(&wordLine, last, tokenPtr->start); TclAdvanceContinuations(&wordLine, &wordNext, tokenPtr->start - envPtr->source); + /* See Ticket 4b61afd660 */ wwlines[wordIdx] = - (TclWordKnownAtCompileTime(tokenPtr, NULL) ? wordLine : -1); + ((wordIdx == 0) || TclWordKnownAtCompileTime(tokenPtr, NULL)) + ? wordLine : -1; ePtr->line[wordIdx] = wordLine; ePtr->next[wordIdx] = wordNext; last = tokenPtr->start; diff --git a/generic/tclEvent.c b/generic/tclEvent.c index 602ef02..6d94786 100644 --- a/generic/tclEvent.c +++ b/generic/tclEvent.c @@ -1465,6 +1465,8 @@ VwaitVarProc( int *donePtr = clientData; *donePtr = 1; + Tcl_UntraceVar(interp, name1, TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + VwaitVarProc, clientData); return NULL; } diff --git a/tests/event.test b/tests/event.test index 0d1b06c..207c799 100644 --- a/tests/event.test +++ b/tests/event.test @@ -583,6 +583,34 @@ test event-11.6 {Tcl_VwaitCmd procedure: round robin scheduling, same source} { removeFile $test2file list $x $y $z } {3 3 done} +test event-11.7 {Bug 16828b3744} { + after idle { + set ::t::v 1 + namespace delete ::t + } + namespace eval ::t { + vwait ::t::v + } +} {} +test event-11.8 {Bug 16828b3744} -setup { + oo::class create A { + variable continue + + method start {} { + after idle [self] destroy + + set continue 0 + vwait [namespace current]::continue + } + destructor { + set continue 1 + } + } +} -body { + [A new] start +} -cleanup { + A destroy +} -result {} test event-12.1 {Tcl_UpdateCmd procedure} -returnCodes error -body { update a b diff --git a/tests/info.test b/tests/info.test index 60b9e66..a6a5919 100644 --- a/tests/info.test +++ b/tests/info.test @@ -2398,6 +2398,23 @@ test info-33.35 {{*}, literal, simple, bytecompiled} -body { # ------------------------------------------------------------------------- unset -nocomplain res +test info-39.0 {Bug 4b61afd660} -setup { + proc probe {} { + return [dict get [info frame -1] line] + } + set body { + set cmd probe + $cmd + } + proc demo {} $body +} -body { + demo +} -cleanup { + unset -nocomplain body + rename demo {} + rename probe {} +} -result 3 + # cleanup catch {namespace delete test_ns_info1 test_ns_info2} ::tcltest::cleanupTests |