diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-11-28 23:16:31 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-11-28 23:16:31 (GMT) |
| commit | 71b0ad990caaf6a297049da2c63821a4e29c57ac (patch) | |
| tree | f27faff96ed68e42d4c00da3a522f9eef06a2528 /generic/tclEnsemble.c | |
| parent | da196c33450ded41b2370bf956f7d3cd7b081069 (diff) | |
| download | tcl-71b0ad990caaf6a297049da2c63821a4e29c57ac.zip tcl-71b0ad990caaf6a297049da2c63821a4e29c57ac.tar.gz tcl-71b0ad990caaf6a297049da2c63821a4e29c57ac.tar.bz2 | |
Reduce shimmering: If a conclusion can be drawn about the number of list elements, don't get the elements before the list length is checked
Diffstat (limited to 'generic/tclEnsemble.c')
| -rw-r--r-- | generic/tclEnsemble.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/generic/tclEnsemble.c b/generic/tclEnsemble.c index 88b611f..963f1d8 100644 --- a/generic/tclEnsemble.c +++ b/generic/tclEnsemble.c @@ -562,8 +562,8 @@ TclNamespaceEnsembleCmd( continue; } do { - if (TclListObjGetElementsM(interp, listObj, &len, - &listv) != TCL_OK) { + if (TclListObjLengthM(interp, listObj, &len + ) != TCL_OK) { Tcl_DictObjDone(&search); if (patchedDict) { Tcl_DecrRefCount(patchedDict); @@ -582,6 +582,14 @@ TclNamespaceEnsembleCmd( } goto freeMapAndError; } + if (TclListObjGetElementsM(interp, listObj, &len, + &listv) != TCL_OK) { + Tcl_DictObjDone(&search); + if (patchedDict) { + Tcl_DecrRefCount(patchedDict); + } + goto freeMapAndError; + } cmd = TclGetString(listv[0]); if (!(cmd[0] == ':' && cmd[1] == ':')) { Tcl_Obj *newList = Tcl_DuplicateObj(listObj); |
