diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-03-08 10:38:36 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2022-03-08 10:38:36 (GMT) |
commit | 559954ccb37cf5d1bde6ed4bb37cde477b76a154 (patch) | |
tree | 668890065166e0432af29f6b93446c286630429e | |
parent | 49964ff7d5474d8fe78359f799a26e02672e6868 (diff) | |
download | tcl-559954ccb37cf5d1bde6ed4bb37cde477b76a154.zip tcl-559954ccb37cf5d1bde6ed4bb37cde477b76a154.tar.gz tcl-559954ccb37cf5d1bde6ed4bb37cde477b76a154.tar.bz2 |
Provide somewhat more space in Tcl_CallFrame
-rw-r--r-- | generic/tcl.h | 9 | ||||
-rw-r--r-- | generic/tclEnsemble.c | 4 | ||||
-rw-r--r-- | generic/tclInt.h | 21 | ||||
-rw-r--r-- | generic/tclNamesp.c | 2 | ||||
-rw-r--r-- | generic/tclProc.c | 2 | ||||
-rw-r--r-- | generic/tclVar.c | 8 |
6 files changed, 28 insertions, 18 deletions
diff --git a/generic/tcl.h b/generic/tcl.h index b609feb..9025c50 100644 --- a/generic/tcl.h +++ b/generic/tcl.h @@ -718,14 +718,19 @@ typedef struct Tcl_Namespace { typedef struct Tcl_CallFrame { Tcl_Namespace *nsPtr; int dummy1; - int dummy2; +#if TCL_MAJOR_VERSION > 8 + int dummy6; +#endif + size_t dummy2; void *dummy3; void *dummy4; void *dummy5; +#if TCL_MAJOR_VERSION < 9 int dummy6; +#endif void *dummy7; void *dummy8; - int dummy9; + size_t dummy9; void *dummy10; void *dummy11; void *dummy12; diff --git a/generic/tclEnsemble.c b/generic/tclEnsemble.c index c0846f8..56dc3c1 100644 --- a/generic/tclEnsemble.c +++ b/generic/tclEnsemble.c @@ -2231,8 +2231,8 @@ Tcl_Obj *const * TclFetchEnsembleRoot( Tcl_Interp *interp, Tcl_Obj *const *objv, - int objc, - int *objcPtr) + size_t objc, + size_t *objcPtr) { Tcl_Obj *const *sourceObjs; Interp *iPtr = (Interp *) interp; diff --git a/generic/tclInt.h b/generic/tclInt.h index 66d9245..c9a82b8 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -1110,7 +1110,13 @@ typedef struct CallFrame { * If FRAME_IS_PROC is set, the frame was * pushed to execute a Tcl procedure and may * have local vars. */ - int objc; /* This and objv below describe the arguments +#if TCL_MAJOR_VERSION > 8 + int level; /* Level of this procedure, for "uplevel" + * purposes (i.e. corresponds to nesting of + * callerVarPtr's, not callerPtr's). 1 for + * outermost procedure, 0 for top-level. */ +#endif + size_t objc; /* This and objv below describe the arguments * for this procedure call. */ Tcl_Obj *const *objv; /* Array of argument objects. */ struct CallFrame *callerPtr; @@ -1124,10 +1130,9 @@ typedef struct CallFrame { * callerPtr unless an "uplevel" command or * something equivalent was active in the * caller). */ - int level; /* Level of this procedure, for "uplevel" - * purposes (i.e. corresponds to nesting of - * callerVarPtr's, not callerPtr's). 1 for - * outermost procedure, 0 for top-level. */ +#if TCL_MAJOR_VERSION < 9 + int level; +#endif Proc *procPtr; /* Points to the structure defining the called * procedure. Used to get information such as * the number of compiled local variables @@ -1138,8 +1143,8 @@ typedef struct CallFrame { * recognized by the compiler, or created at * execution time through, e.g., upvar. * Initially NULL and created if needed. */ - int numCompiledLocals; /* Count of local variables recognized by the - * compiler including arguments. */ + size_t numCompiledLocals; /* Count of local variables recognized + * by the compiler including arguments. */ Var *compiledLocals; /* Points to the array of local variables * recognized by the compiler. The compiler * emits code that refers to these variables @@ -2922,7 +2927,7 @@ MODULE_SCOPE char * TclDStringAppendDString(Tcl_DString *dsPtr, Tcl_DString *toAppendPtr); MODULE_SCOPE Tcl_Obj * TclDStringToObj(Tcl_DString *dsPtr); MODULE_SCOPE Tcl_Obj *const *TclFetchEnsembleRoot(Tcl_Interp *interp, - Tcl_Obj *const *objv, int objc, int *objcPtr); + Tcl_Obj *const *objv, size_t objc, size_t *objcPtr); MODULE_SCOPE Tcl_Obj *const *TclEnsembleGetRewriteValues(Tcl_Interp *interp); MODULE_SCOPE Tcl_Namespace *TclEnsureNamespace(Tcl_Interp *interp, Tcl_Namespace *namespacePtr); diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c index 4ce88ff..e1e298f 100644 --- a/generic/tclNamesp.c +++ b/generic/tclNamesp.c @@ -394,7 +394,7 @@ Tcl_PopCallFrame( Tcl_Free(framePtr->varTablePtr); framePtr->varTablePtr = NULL; } - if (framePtr->numCompiledLocals > 0) { + if (framePtr->numCompiledLocals + 1 > 1) { TclDeleteCompiledLocalVars(iPtr, framePtr); if (framePtr->localCachePtr->refCount-- <= 1) { TclFreeLocalCache(interp, framePtr->localCachePtr); diff --git a/generic/tclProc.c b/generic/tclProc.c index c4c6de1..55c109e 100644 --- a/generic/tclProc.c +++ b/generic/tclProc.c @@ -1675,7 +1675,7 @@ TclNRInterpProcCore( #if defined(TCL_COMPILE_DEBUG) if (tclTraceExec >= 1) { CallFrame *framePtr = iPtr->varFramePtr; - int i; + size_t i; if (framePtr->isProcCallFrame & FRAME_IS_LAMBDA) { fprintf(stdout, "Calling lambda "); diff --git a/generic/tclVar.c b/generic/tclVar.c index 8820fcd..2a9f8b7 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -619,7 +619,7 @@ TclObjLookupVarEx( if (localIndex >= 0) { if (HasLocalVars(varFramePtr) && !(flags & (TCL_GLOBAL_ONLY | TCL_NAMESPACE_ONLY)) - && (localIndex < varFramePtr->numCompiledLocals)) { + && (localIndex < (int)varFramePtr->numCompiledLocals)) { /* * Use the cached index if the names coincide. */ @@ -4763,9 +4763,9 @@ Tcl_GetVariableFullName( Tcl_AppendObjToObj(objPtr, namePtr); } } else if (iPtr->varFramePtr->procPtr) { - int index = varPtr - iPtr->varFramePtr->compiledLocals; + size_t index = varPtr - iPtr->varFramePtr->compiledLocals; - if (index >= 0 && index < iPtr->varFramePtr->numCompiledLocals) { + if (index < iPtr->varFramePtr->numCompiledLocals) { namePtr = localName(iPtr->varFramePtr, index); Tcl_AppendObjToObj(objPtr, namePtr); } @@ -5389,7 +5389,7 @@ TclDeleteCompiledLocalVars( * assigned local variables to delete. */ { Var *varPtr; - int numLocals, i; + size_t numLocals, i; Tcl_Obj **namePtrPtr; numLocals = framePtr->numCompiledLocals; |