summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2016-06-16 17:15:00 (GMT)
committerdgp <dgp@users.sourceforge.net>2016-06-16 17:15:00 (GMT)
commit8824470ed0704024b804da2d301cf0d05a63ee04 (patch)
tree5b7d1692fbf13a53ff7e3643a870a74d2acd2be6
parent89399770a712e3ea5de6cbae35b5c85ae9fbe810 (diff)
parentfe25eaf4025ec9453fb1e239471b9a5a950f6cf6 (diff)
downloadtcl-8824470ed0704024b804da2d301cf0d05a63ee04.zip
tcl-8824470ed0704024b804da2d301cf0d05a63ee04.tar.gz
tcl-8824470ed0704024b804da2d301cf0d05a63ee04.tar.bz2
[4b61afd660] Allow [info frame] to record line info for substituted command names.
-rw-r--r--generic/tclCompile.c4
-rw-r--r--tests/info.test17
2 files changed, 20 insertions, 1 deletions
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index c0b5dcc..c0203dd 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -3239,8 +3239,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/tests/info.test b/tests/info.test
index 3057dd2..e0fddb3 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