diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2024-05-16 08:44:49 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2024-05-16 08:44:49 (GMT) |
commit | f664ad000ed2e33ba741d52cf059f172d19234ac (patch) | |
tree | c2cfad633fa7849b5dcb8a98ef4fa6de84011c81 /generic/tclOOInfo.c | |
parent | 1a9b02cd4e995d4b9f1a139420127df5e99d2740 (diff) | |
download | tcl-f664ad000ed2e33ba741d52cf059f172d19234ac.zip tcl-f664ad000ed2e33ba741d52cf059f172d19234ac.tar.gz tcl-f664ad000ed2e33ba741d52cf059f172d19234ac.tar.bz2 |
Fix the bug; [info class methods -private] regression with TIP 500
Diffstat (limited to 'generic/tclOOInfo.c')
-rw-r--r-- | generic/tclOOInfo.c | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/generic/tclOOInfo.c b/generic/tclOOInfo.c index 0b9099e..5d27ac9 100644 --- a/generic/tclOOInfo.c +++ b/generic/tclOOInfo.c @@ -621,9 +621,18 @@ InfoObjectMethodsCmd( Tcl_Free((void *)names); } } else if (oPtr->methodsPtr) { - FOREACH_HASH(namePtr, mPtr, oPtr->methodsPtr) { - if (mPtr->typePtr && (mPtr->flags & SCOPE_FLAGS) == flag) { - Tcl_ListObjAppendElement(NULL, resultObj, namePtr); + if (scope == -1) { + int scopeFilter = flag | TRUE_PRIVATE_METHOD; + FOREACH_HASH(namePtr, mPtr, oPtr->methodsPtr) { + if (mPtr->typePtr && (mPtr->flags & scopeFilter) == flag) { + Tcl_ListObjAppendElement(NULL, resultObj, namePtr); + } + } + } else { + FOREACH_HASH(namePtr, mPtr, oPtr->methodsPtr) { + if (mPtr->typePtr && (mPtr->flags & SCOPE_FLAGS) == flag) { + Tcl_ListObjAppendElement(NULL, resultObj, namePtr); + } } } } @@ -1378,9 +1387,19 @@ InfoClassMethodsCmd( } else { FOREACH_HASH_DECLS; - FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { - if (mPtr->typePtr && (mPtr->flags & SCOPE_FLAGS) == flag) { - Tcl_ListObjAppendElement(NULL, resultObj, namePtr); + if (scope == -1) { + int scopeFilter = flag | TRUE_PRIVATE_METHOD; + + FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { + if (mPtr->typePtr && (mPtr->flags & scopeFilter) == flag) { + Tcl_ListObjAppendElement(NULL, resultObj, namePtr); + } + } + } else { + FOREACH_HASH(namePtr, mPtr, &clsPtr->classMethods) { + if (mPtr->typePtr && (mPtr->flags & SCOPE_FLAGS) == flag) { + Tcl_ListObjAppendElement(NULL, resultObj, namePtr); + } } } } |