diff options
author | dgp <dgp@users.sourceforge.net> | 2018-06-05 17:26:37 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2018-06-05 17:26:37 (GMT) |
commit | f206e0fb4b6f73e30c7c0a8cb1560b548bae04ad (patch) | |
tree | 3112b680dfff3ea941ff1d624dd968ee881123b0 /generic/tclVar.c | |
parent | 1545e3155786a2643bbabc7e7e5ef8b1a1d47d4a (diff) | |
parent | 3b14a4b0ed16f753791f2c6046b761c4fcd5be05 (diff) | |
download | tcl-f206e0fb4b6f73e30c7c0a8cb1560b548bae04ad.zip tcl-f206e0fb4b6f73e30c7c0a8cb1560b548bae04ad.tar.gz tcl-f206e0fb4b6f73e30c7c0a8cb1560b548bae04ad.tar.bz2 |
merge 8.7
Diffstat (limited to 'generic/tclVar.c')
-rw-r--r-- | generic/tclVar.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c index d5e0fa1..7a4d4e9 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -6323,25 +6323,50 @@ AppendLocals( } if (iPtr->varFramePtr->isProcCallFrame & FRAME_IS_METHOD) { - CallContext *contextPtr = iPtr->varFramePtr->clientData; - Method *mPtr = contextPtr->callPtr->chain[contextPtr->index].mPtr; + Method *mPtr = (Method *) + Tcl_ObjectContextMethod(iPtr->varFramePtr->clientData); + PrivateVariableMapping *privatePtr; if (mPtr->declaringObjectPtr) { - FOREACH(objNamePtr, mPtr->declaringObjectPtr->variables) { + Object *oPtr = mPtr->declaringObjectPtr; + + FOREACH(objNamePtr, oPtr->variables) { Tcl_CreateHashEntry(&addedTable, objNamePtr, &added); if (added && (!pattern || Tcl_StringMatch(TclGetString(objNamePtr), pattern))) { Tcl_ListObjAppendElement(interp, listPtr, objNamePtr); } } + FOREACH_STRUCT(privatePtr, oPtr->privateVariables) { + Tcl_CreateHashEntry(&addedTable, privatePtr->variableObj, + &added); + if (added && (!pattern || + Tcl_StringMatch(TclGetString(privatePtr->variableObj), + pattern))) { + Tcl_ListObjAppendElement(interp, listPtr, + privatePtr->variableObj); + } + } } else { - FOREACH(objNamePtr, mPtr->declaringClassPtr->variables) { + Class *clsPtr = mPtr->declaringClassPtr; + + FOREACH(objNamePtr, clsPtr->variables) { Tcl_CreateHashEntry(&addedTable, objNamePtr, &added); if (added && (!pattern || Tcl_StringMatch(TclGetString(objNamePtr), pattern))) { Tcl_ListObjAppendElement(interp, listPtr, objNamePtr); } } + FOREACH_STRUCT(privatePtr, clsPtr->privateVariables) { + Tcl_CreateHashEntry(&addedTable, privatePtr->variableObj, + &added); + if (added && (!pattern || + Tcl_StringMatch(TclGetString(privatePtr->variableObj), + pattern))) { + Tcl_ListObjAppendElement(interp, listPtr, + privatePtr->variableObj); + } + } } } Tcl_DeleteHashTable(&addedTable); |