aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2020-06-10 18:59:14 +1000
committerSteve Bennett <steveb@workware.net.au>2020-06-10 19:01:42 +1000
commit1ac0a1c4f5b3327eb5f415f5f54488c2b800e887 (patch)
treeb60e7077ecf7b346ee1cb65e16de8893a90a477e
parenta3323602c9b803ed69c6f2970ebee8a9cc7fb257 (diff)
downloadjimtcl-1ac0a1c4f5b3327eb5f415f5f54488c2b800e887.zip
jimtcl-1ac0a1c4f5b3327eb5f415f5f54488c2b800e887.tar.gz
jimtcl-1ac0a1c4f5b3327eb5f415f5f54488c2b800e887.tar.bz2
core: fix regtest TEST 35
The changes in cdfa4637afe broke TEST 35 because the cmd pointer is dereferenced before checking the procEpoch instead of afterwards. Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--jim.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/jim.c b/jim.c
index 72b6c3f..f1ed05a 100644
--- a/jim.c
+++ b/jim.c
@@ -4318,23 +4318,21 @@ static const Jim_ObjType commandObjType = {
*/
Jim_Cmd *Jim_GetCommand(Jim_Interp *interp, Jim_Obj *objPtr, int flags)
{
- Jim_Cmd *cmd = NULL;
+ Jim_Cmd *cmd;
/* In order to be valid, the proc epoch must match and
* the lookup must have occurred in the same namespace
*/
- if (objPtr->typePtr == &commandObjType) {
- cmd = objPtr->internalRep.cmdValue.cmdPtr;
- if (cmd->inUse == 0 || objPtr->internalRep.cmdValue.procEpoch != interp->procEpoch
+ if (objPtr->typePtr == &commandObjType
+ && objPtr->internalRep.cmdValue.procEpoch == interp->procEpoch
#ifdef jim_ext_namespace
- || !Jim_StringEqObj(objPtr->internalRep.cmdValue.nsObj, interp->framePtr->nsObj)
+ && Jim_StringEqObj(objPtr->internalRep.cmdValue.nsObj, interp->framePtr->nsObj)
#endif
- ) {
- /* Cache is invalid */
- cmd = NULL;
- }
+ && objPtr->internalRep.cmdValue.cmdPtr->inUse) {
+ /* Cached value is valid */
+ cmd = objPtr->internalRep.cmdValue.cmdPtr;
}
- if (!cmd) {
+ else {
Jim_Obj *qualifiedNameObj = JimQualifyName(interp, objPtr);
Jim_HashEntry *he = Jim_FindHashEntry(&interp->commands, qualifiedNameObj);
#ifdef jim_ext_namespace