diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2007-05-05 23:33:11 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2007-05-05 23:33:11 (GMT) |
commit | 29cf1d7bf639866e48ef946d326a229a9514f492 (patch) | |
tree | 1d78768bab303fef7c4c0ad56f5d8d65f3841216 /generic/tclCmdIL.c | |
parent | e3a939a3c254481c00ee564e3e5bb4306ddeb7bf (diff) | |
download | tcl-29cf1d7bf639866e48ef946d326a229a9514f492.zip tcl-29cf1d7bf639866e48ef946d326a229a9514f492.tar.gz tcl-29cf1d7bf639866e48ef946d326a229a9514f492.tar.bz2 |
Changes to allow the tip257 code to work as an extension properly post-tip280
Diffstat (limited to 'generic/tclCmdIL.c')
-rw-r--r-- | generic/tclCmdIL.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index 08a96db..cdda071 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -16,7 +16,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclCmdIL.c,v 1.114 2007/04/20 05:51:09 kennykb Exp $ + * RCS: @(#) $Id: tclCmdIL.c,v 1.115 2007/05/05 23:33:13 dkf Exp $ */ #include "tclInt.h" @@ -1274,15 +1274,24 @@ InfoFrameCmd( Tcl_AppendToObj(lv[lc-1], "::", -1); } Tcl_AppendToObj(lv[lc-1], procName, -1); - } else { + } else if (procPtr->cmdPtr->clientData) { + ExtraFrameInfo *efiPtr = procPtr->cmdPtr->clientData; + int i; + /* - * Lambda execution. The lambda in question is stored in the - * clientData of the cmdPtr. See the #280 HACK in - * Tcl_ApplyObjCmd. There is no separate namespace to - * consider, if any is used it is part of the lambda term. + * This is a non-standard command. Luckily, it's told us how + * to render extra information about its frame. */ - ADD_PAIR("lambda", (Tcl_Obj *) procPtr->cmdPtr->clientData); + for (i=0 ; i<efiPtr->length ; i++) { + lv[lc++] = Tcl_NewStringObj(efiPtr->fields[i].name, -1); + if (efiPtr->fields[i].proc) { + lv[lc++] = efiPtr->fields[i].proc( + efiPtr->fields[i].clientData); + } else { + lv[lc++] = efiPtr->fields[i].clientData; + } + } } } break; |