diff options
| author | dkf <donal.k.fellows@manchester.ac.uk> | 2024-08-06 11:12:47 (GMT) |
|---|---|---|
| committer | dkf <donal.k.fellows@manchester.ac.uk> | 2024-08-06 11:12:47 (GMT) |
| commit | 6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d (patch) | |
| tree | 10b477c4f96989d84a5453310c9715aaef2b3413 /generic/tclCmdIL.c | |
| parent | 351ab9f3bf86ea2d971416a759964c836e91c1b9 (diff) | |
| parent | e92ac699c1a4fc8683a61f855f5250c72d12b1c1 (diff) | |
| download | tcl-6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d.zip tcl-6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d.tar.gz tcl-6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d.tar.bz2 | |
merge 8.6
Diffstat (limited to 'generic/tclCmdIL.c')
| -rw-r--r-- | generic/tclCmdIL.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c index aef0399..b4f821f 100644 --- a/generic/tclCmdIL.c +++ b/generic/tclCmdIL.c @@ -1160,9 +1160,9 @@ InfoFrameCmd( } corPtr = corPtr->callerEEPtr->corPtr; } - topLevel += (*cmdFramePtrPtr)->level; + topLevel += *cmdFramePtrPtr ? (*cmdFramePtrPtr)->level : 1; - if (topLevel != iPtr->cmdFramePtr->level) { + if (iPtr->cmdFramePtr && topLevel != iPtr->cmdFramePtr->level) { framePtr = iPtr->cmdFramePtr; while (framePtr) { framePtr->level = topLevel--; @@ -1279,9 +1279,14 @@ TclInfoFrame( static const char *const typeString[TCL_LOCATION_LAST] = { "eval", "eval", "eval", "precompiled", "source", "proc" }; - Proc *procPtr = framePtr->framePtr ? framePtr->framePtr->procPtr : NULL; + Proc *procPtr = NULL; int needsFree = -1; + if (!framePtr) { + goto precompiled; + } + procPtr = framePtr->framePtr ? framePtr->framePtr->procPtr : NULL; + /* * Pull the information and construct the dictionary to return, as list. * Regarding use of the CmdFrame fields see tclInt.h, and its definition. @@ -1309,11 +1314,11 @@ TclInfoFrame( break; case TCL_LOCATION_PREBC: + precompiled: /* * Precompiled. Result contains the type as signal, nothing else. */ - - ADD_PAIR("type", Tcl_NewStringObj(typeString[framePtr->type], -1)); + ADD_PAIR("type", Tcl_NewStringObj(typeString[TCL_LOCATION_PREBC], -1)); break; case TCL_LOCATION_BC: { @@ -1428,7 +1433,7 @@ TclInfoFrame( * _visible_ CallFrame. */ - if ((framePtr->framePtr != NULL) && (iPtr->varFramePtr != NULL)) { + if (framePtr && (framePtr->framePtr != NULL) && (iPtr->varFramePtr != NULL)) { CallFrame *current = framePtr->framePtr; CallFrame *top = iPtr->varFramePtr; CallFrame *idx; |
