summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-08 10:38:36 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2022-03-08 10:38:36 (GMT)
commit559954ccb37cf5d1bde6ed4bb37cde477b76a154 (patch)
tree668890065166e0432af29f6b93446c286630429e
parent49964ff7d5474d8fe78359f799a26e02672e6868 (diff)
downloadtcl-559954ccb37cf5d1bde6ed4bb37cde477b76a154.zip
tcl-559954ccb37cf5d1bde6ed4bb37cde477b76a154.tar.gz
tcl-559954ccb37cf5d1bde6ed4bb37cde477b76a154.tar.bz2
Provide somewhat more space in Tcl_CallFrame
-rw-r--r--generic/tcl.h9
-rw-r--r--generic/tclEnsemble.c4
-rw-r--r--generic/tclInt.h21
-rw-r--r--generic/tclNamesp.c2
-rw-r--r--generic/tclProc.c2
-rw-r--r--generic/tclVar.c8
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;