summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdIL.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2007-05-05 23:33:11 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2007-05-05 23:33:11 (GMT)
commit29cf1d7bf639866e48ef946d326a229a9514f492 (patch)
tree1d78768bab303fef7c4c0ad56f5d8d65f3841216 /generic/tclCmdIL.c
parente3a939a3c254481c00ee564e3e5bb4306ddeb7bf (diff)
downloadtcl-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.c23
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;