summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdIL.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclCmdIL.c')
-rw-r--r--generic/tclCmdIL.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index aef0399..3198cc9 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -1160,8 +1160,31 @@ InfoFrameCmd(
}
corPtr = corPtr->callerEEPtr->corPtr;
}
- topLevel += (*cmdFramePtrPtr)->level;
+ if (iPtr->cmdFramePtr == NULL || *cmdFramePtrPtr == NULL) {
+ if (objc == 1) {
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(1));
+ } else {
+ if (TclGetIntFromObj(interp, objv[1], &level) != TCL_OK) {
+ code = TCL_ERROR;
+ } else {
+ Tcl_Obj *objs[2];
+ /*
+ * TODO - "precompiled" is a lie. Chosen only because as documented
+ * no other fields in the dictionary need be returned. Should
+ * add a new type like "unknown" meaning no further information
+ * available.
+ * TODO - should we check that "level" is 1 ?
+ */
+ TclNewLiteralStringObj(objs[0], "type");
+ TclNewLiteralStringObj(objs[1], "precompiled");
+ Tcl_SetObjResult(interp, Tcl_NewListObj(2, objs));
+ }
+ }
+ return code;
+ }
+
+ topLevel += (*cmdFramePtrPtr)->level;
if (topLevel != iPtr->cmdFramePtr->level) {
framePtr = iPtr->cmdFramePtr;
while (framePtr) {