summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-07-11 03:48:40 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-07-11 03:48:40 (GMT)
commitf3a1a26516d79b15224325941f72deb7dfda25f6 (patch)
tree81df4267b7d4a79d9f79ca92e4680932ba229f25
parentfe3f5136f96353b1b0d77700e4c4ef6256eb1e55 (diff)
downloadtcl-f3a1a26516d79b15224325941f72deb7dfda25f6.zip
tcl-f3a1a26516d79b15224325941f72deb7dfda25f6.tar.gz
tcl-f3a1a26516d79b15224325941f72deb7dfda25f6.tar.bz2
Add tests for the SetLineInformation() calls in tclEnsemble.c, and fix
the bugs around those calls exposed by the tests.
-rw-r--r--generic/tclEnsemble.c9
-rw-r--r--tests/info.test25
2 files changed, 28 insertions, 6 deletions
diff --git a/generic/tclEnsemble.c b/generic/tclEnsemble.c
index d654bbf..794a059 100644
--- a/generic/tclEnsemble.c
+++ b/generic/tclEnsemble.c
@@ -3168,6 +3168,7 @@ CompileToInvokedCommand(
bytes = Tcl_GetStringFromObj(words[i-1], &length);
PushLiteral(envPtr, bytes, length);
} else if (tokPtr->type == TCL_TOKEN_SIMPLE_WORD) {
+ /* TODO: Check about registering Cmd Literals here */
int literal = TclRegisterNewLiteral(envPtr,
tokPtr[1].start, tokPtr[1].size);
@@ -3179,9 +3180,7 @@ CompileToInvokedCommand(
}
TclEmitPush(literal, envPtr);
} else {
- if (envPtr->clNext) {
- SetLineInformation(i);
- }
+ LineInformation(i);
CompileTokens(envPtr, tokPtr, interp);
}
tokPtr = TokenAfter(tokPtr);
@@ -3255,12 +3254,10 @@ CompileBasicNArgCommand(
tokenPtr = TokenAfter(parsePtr->tokenPtr);
for (i=1 ; i<parsePtr->numWords ; i++) {
- if (envPtr->clNext) {
- SetLineInformation(i);
- }
if (tokenPtr->type == TCL_TOKEN_SIMPLE_WORD) {
PushLiteral(envPtr, tokenPtr[1].start, tokenPtr[1].size);
} else {
+ LineInformation(i);
CompileTokens(envPtr, tokenPtr, interp);
}
tokenPtr = TokenAfter(tokenPtr);
diff --git a/tests/info.test b/tests/info.test
index a68fb43..afdaaee 100644
--- a/tests/info.test
+++ b/tests/info.test
@@ -2346,6 +2346,31 @@ test info-33.31 {{*}, literal, simple, bytecompiled} -body {
} -result {type source line 2339 file info.test cmd {info frame 0} proc ::foo::bar level 0}
# -------------------------------------------------------------------------
+namespace eval foo {}
+proc foo::bar {} {
+ binary format {*}{
+ } [return [info frame 0]]
+}
+test info-33.32 {{*}, literal, simple, bytecompiled} -body {
+ reduce [foo::bar]
+} -cleanup {
+ namespace delete foo
+} -result {type source line 2352 file info.test cmd {info frame 0} proc ::foo::bar level 0}
+
+# -------------------------------------------------------------------------
+namespace eval foo {}
+proc foo::bar {} {
+ set format format
+ binary $format {*}{
+ } [return [info frame 0]]
+}
+test info-33.33 {{*}, literal, simple, bytecompiled} -body {
+ reduce [foo::bar]
+} -cleanup {
+ namespace delete foo
+} -result {type source line 2365 file info.test cmd {info frame 0} proc ::foo::bar level 0}
+
+# -------------------------------------------------------------------------
unset -nocomplain res
# cleanup