diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2005-07-29 14:57:25 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2005-07-29 14:57:25 (GMT) |
commit | 34c1b26fda7971d730ebcf6498ef36793dc84609 (patch) | |
tree | 062cd7e13a1afaeefc61eebd4c57c117336664b6 | |
parent | cfb0529d87cadc7480b14d0b3379ecf7ed5802c9 (diff) | |
download | tcl-34c1b26fda7971d730ebcf6498ef36793dc84609.zip tcl-34c1b26fda7971d730ebcf6498ef36793dc84609.tar.gz tcl-34c1b26fda7971d730ebcf6498ef36793dc84609.tar.bz2 |
Take care with globals that have an entry in the var table but "don't exist"
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | generic/tclCmdIL.c | 9 | ||||
-rw-r--r-- | tests/info.test | 17 |
3 files changed, 26 insertions, 5 deletions
@@ -1,3 +1,8 @@ +2005-07-29 Donal K. Fellows <dkf@users.sf.net> + + * generic/tclCmdIL.c (InfoGlobalsCmd): Even in high-speed mode, + still have to take care with non-existant variables. [Bug 1247135] + 2005-07-28 Mo DeJong <mdejong@users.sourceforge.net> * win/README: Update link to msys_mingw8.zip. diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index 283d842..ab5c876 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -15,7 +15,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCmdIL.c,v 1.47.2.5 2004/11/24 19:28:12 dgp Exp $ + * RCS: @(#) $Id: tclCmdIL.c,v 1.47.2.6 2005/07/29 14:57:26 dkf Exp $ */ #include "tclInt.h" @@ -1105,8 +1105,11 @@ InfoGlobalsCmd(dummy, interp, objc, objv) if (pattern != NULL && TclMatchIsTrivial(pattern)) { entryPtr = Tcl_FindHashEntry(&globalNsPtr->varTable, pattern); if (entryPtr != NULL) { - Tcl_ListObjAppendElement(interp, listPtr, - Tcl_NewStringObj(pattern, -1)); + varPtr = (Var *) Tcl_GetHashValue(entryPtr); + if (!TclIsVarUndefined(varPtr)) { + Tcl_ListObjAppendElement(interp, listPtr, + Tcl_NewStringObj(pattern, -1)); + } } } else { for (entryPtr = Tcl_FirstHashEntry(&globalNsPtr->varTable, &search); diff --git a/tests/info.test b/tests/info.test index 0f65324..7a31b27 100644 --- a/tests/info.test +++ b/tests/info.test @@ -11,10 +11,10 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: info.test,v 1.24.2.3 2004/11/24 19:28:13 dgp Exp $ +# RCS: @(#) $Id: info.test,v 1.24.2.4 2005/07/29 14:57:28 dkf Exp $ if {[lsearch [namespace children] ::tcltest] == -1} { - package require tcltest + package require tcltest 2 namespace import -force ::tcltest::* } @@ -295,6 +295,19 @@ test info-8.4 {info globals option: may have leading namespace qualifiers} { set x 0 list [info globals x] [info globals :x] [info globals ::x] [info globals :::x] [info globals ::::x] } {x {} x x x} +test info-8.5 {info globals option: only return existing global variables} { + -setup { + catch {unset ::NO_SUCH_VAR} + proc evalInProc script {eval $script} + } + -body { + evalInProc {global NO_SUCH_VAR; info globals NO_SUCH_VAR} + } + -cleanup { + rename evalInProc {} + } + -result {} +} test info-9.1 {info level option} { info level |