summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2024-07-14 19:32:28 (GMT)
committersebres <sebres@users.sourceforge.net>2024-07-14 19:32:28 (GMT)
commita9812bfa3d0643ff59ee9b65e24e2218f6504af7 (patch)
tree4c45a00899e6db67e74d2fd28c9ecfc5931d7fa3
parente607a8cb189a461224fecec4fb22308ffec7fd55 (diff)
parent1d1e5f06abceb60ce19cf51db9e100021b934aee (diff)
downloadtcl-a9812bfa3d0643ff59ee9b65e24e2218f6504af7.zip
tcl-a9812bfa3d0643ff59ee9b65e24e2218f6504af7.tar.gz
tcl-a9812bfa3d0643ff59ee9b65e24e2218f6504af7.tar.bz2
fixes [0e4b7fce57]: [info vars] strictly follows TIP #278 and doesn't resolve global vars in non-global NS anymore (without extra global pattern)
-rw-r--r--generic/tclVar.c40
-rw-r--r--tests/info.test11
2 files changed, 6 insertions, 45 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c
index 1643a58..e939797 100644
--- a/generic/tclVar.c
+++ b/generic/tclVar.c
@@ -5998,7 +5998,6 @@ TclInfoVarsCmd(
Tcl_HashSearch search;
Var *varPtr;
Namespace *nsPtr;
- Namespace *globalNsPtr = (Namespace *) Tcl_GetGlobalNamespace(interp);
Namespace *currNsPtr = (Namespace *) Tcl_GetCurrentNamespace(interp);
Tcl_Obj *listPtr, *elemObjPtr, *varNamePtr;
int specificNsInPattern = 0;/* Init. to avoid compiler warning. */
@@ -6079,16 +6078,6 @@ TclInfoVarsCmd(
}
Tcl_ListObjAppendElement(interp, listPtr, elemObjPtr);
}
- } else if ((nsPtr != globalNsPtr) && !specificNsInPattern) {
- varPtr = VarHashFindVar(&globalNsPtr->varTable,
- simplePatternPtr);
- if (varPtr) {
- if (!TclIsVarUndefined(varPtr)
- || TclIsVarNamespaceVar(varPtr)) {
- Tcl_ListObjAppendElement(interp, listPtr,
- VarHashGetKey(varPtr));
- }
- }
}
} else {
/*
@@ -6115,35 +6104,6 @@ TclInfoVarsCmd(
}
varPtr = VarHashNextVar(&search);
}
-
- /*
- * If the effective namespace isn't the global :: namespace, and a
- * specific namespace wasn't requested in the pattern (i.e., the
- * pattern only specifies variable names), then add in all global
- * :: variables that match the simple pattern. Of course, add in
- * only those variables that aren't hidden by a variable in the
- * effective namespace.
- */
-
- if ((nsPtr != globalNsPtr) && !specificNsInPattern) {
- varPtr = VarHashFirstVar(&globalNsPtr->varTable, &search);
- while (varPtr) {
- if (!TclIsVarUndefined(varPtr)
- || TclIsVarNamespaceVar(varPtr)) {
- varNamePtr = VarHashGetKey(varPtr);
- varName = TclGetString(varNamePtr);
- if ((simplePattern == NULL)
- || Tcl_StringMatch(varName, simplePattern)) {
- if (VarHashFindVar(&nsPtr->varTable,
- varNamePtr) == NULL) {
- Tcl_ListObjAppendElement(interp, listPtr,
- varNamePtr);
- }
- }
- }
- varPtr = VarHashNextVar(&search);
- }
- }
}
} else if (iPtr->varFramePtr->procPtr != NULL) {
AppendLocals(interp, listPtr, simplePatternPtr, 1, 0);
diff --git a/tests/info.test b/tests/info.test
index 6ac23cf..a8a6245 100644
--- a/tests/info.test
+++ b/tests/info.test
@@ -2396,6 +2396,7 @@ test info-33.35 {{*}, literal, simple, bytecompiled} -body {
} -result {type source line 2389 file info.test cmd {info frame 0} proc ::foo::bar level 0}
# -------------------------------------------------------------------------
+
namespace eval ::testinfocmdtype {
apply {cmds {
foreach c $cmds {rename $c {}}
@@ -2566,20 +2567,20 @@ namespace delete ::testinfocmdtype
# -------------------------------------------------------------------------
unset -nocomplain res
-test info-19.7 {info vars: before TIP #278 - global vars resolved in namespace} -setup {
+test info-19.7 {info vars: bug [0e4b7fce57], TIP #278 - no global vars resolve} -setup {
catch {namespace delete x}
} -body {
- expr { [llength [namespace eval x {info vars}]] > 0 }
+ namespace eval x {info vars}
} -cleanup {
namespace delete x
-} -result 1
-test info-19.8 {info vars: before TIP #278 - global vars resolved in namespace} -setup {
+} -result {}
+test info-19.8 {info vars: bug [0e4b7fce57], TIP #278 - no global vars resolve} -setup {
catch {namespace delete x}
} -body {
namespace eval x {info vars tcl_platform}
} -cleanup {
namespace delete x
-} -result {tcl_platform}
+} -result {}
test info-19.9 {info vars: global vars resolved by pattern} -setup {
catch {namespace delete x}
} -body {