summaryrefslogtreecommitdiffstats
path: root/generic/tclOOInfo.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2024-05-16 08:44:49 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2024-05-16 08:44:49 (GMT)
commitf664ad000ed2e33ba741d52cf059f172d19234ac (patch)
treec2cfad633fa7849b5dcb8a98ef4fa6de84011c81 /generic/tclOOInfo.c
parent1a9b02cd4e995d4b9f1a139420127df5e99d2740 (diff)
downloadtcl-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.c31
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);
+ }
}
}
}