summaryrefslogtreecommitdiffstats
path: root/generic/tclCmdIL.c
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2024-08-06 11:12:47 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2024-08-06 11:12:47 (GMT)
commit6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d (patch)
tree10b477c4f96989d84a5453310c9715aaef2b3413 /generic/tclCmdIL.c
parent351ab9f3bf86ea2d971416a759964c836e91c1b9 (diff)
parente92ac699c1a4fc8683a61f855f5250c72d12b1c1 (diff)
downloadtcl-6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d.zip
tcl-6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d.tar.gz
tcl-6c41478f2cdcbefeae9c340e1ba2bc9d8d51d47d.tar.bz2
merge 8.6
Diffstat (limited to 'generic/tclCmdIL.c')
-rw-r--r--generic/tclCmdIL.c17
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;