summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-06-16 18:28:10 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-06-16 18:28:10 (GMT)
commit19e87e6620b7ea3cafe504d680cb8883934b9e81 (patch)
tree5a64a32f48057df8c1a247da1cfac1789f505b1c
parentc55587d3dbf0ad1d617bccd57624bee35d0ad763 (diff)
parent248348175af7704dabfbd15c9f1b9cb0645db450 (diff)
downloadtcl-19e87e6620b7ea3cafe504d680cb8883934b9e81.zip
tcl-19e87e6620b7ea3cafe504d680cb8883934b9e81.tar.gz
tcl-19e87e6620b7ea3cafe504d680cb8883934b9e81.tar.bz2
merge trunk
-rw-r--r--generic/tclCompile.c4
-rw-r--r--generic/tclEvent.c2
-rw-r--r--tests/event.test28
-rw-r--r--tests/info.test17
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