summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2024-08-15 15:09:39 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2024-08-15 15:09:39 (GMT)
commitcc07fc14a8e04fe082c8a1a30484e6f85d74dcbd (patch)
treed607cc1152ce91568a6269c9289ede6b08421f3d /generic
parent6871783264c56b6393cafb1c62951045bf1b4728 (diff)
downloadtcl-cc07fc14a8e04fe082c8a1a30484e6f85d74dcbd.zip
tcl-cc07fc14a8e04fe082c8a1a30484e6f85d74dcbd.tar.gz
tcl-cc07fc14a8e04fe082c8a1a30484e6f85d74dcbd.tar.bz2
Minor optimisation in the [interp create] implementation
Diffstat (limited to 'generic')
-rw-r--r--generic/tclInterp.c330
1 files changed, 174 insertions, 156 deletions
diff --git a/generic/tclInterp.c b/generic/tclInterp.c
index 0abbebd..6cc897e 100644
--- a/generic/tclInterp.c
+++ b/generic/tclInterp.c
@@ -137,6 +137,10 @@ typedef struct {
* is used to remove dangling pointers from
* the child (or sibling) interpreters when
* this interpreter is deleted. */
+ Tcl_Size idIssuer; /* Used to issue a sequence of names for
+ * "unnamed" child interpreters. We keep a
+ * count here to avoid having to scan over IDs
+ * for interpreters that we've already used. */
} Parent;
/*
@@ -196,16 +200,22 @@ struct LimitHandler {
/*
* Values for the LimitHandler flags field.
- * LIMIT_HANDLER_ACTIVE - Whether the handler is currently being
- * processed; handlers are never to be reentered.
- * LIMIT_HANDLER_DELETED - Whether the handler has been deleted. This
- * should not normally be observed because when a handler is
- * deleted it is also spliced out of the list of handlers, but
- * even so we will be careful.
*/
+enum LimitHandlerFlags {
+ LIMIT_HANDLER_ACTIVE = 1, /* The handler is currently being processed;
+ * handlers are never to be reentered. */
+ LIMIT_HANDLER_DELETED = 2 /* The handler has been deleted. This should
+ * not normally be observed because when a
+ * handler is deleted it is also spliced out of
+ * the list of handlers, but even so we will be
+ * careful.*/
+};
-#define LIMIT_HANDLER_ACTIVE 0x01
-#define LIMIT_HANDLER_DELETED 0x02
+/*
+ * Macro to make looking up child and parent info more convenient.
+ */
+#define INTERP_INFO(interp) \
+ ((InterpInfo *) ((Interp *) (interp))->interpInfo)
/*
* Prototypes for local static functions:
@@ -220,12 +230,12 @@ static int AliasDelete(Tcl_Interp *interp,
static int AliasDescribe(Tcl_Interp *interp,
Tcl_Interp *childInterp, Tcl_Obj *objPtr);
static int AliasList(Tcl_Interp *interp, Tcl_Interp *childInterp);
-static Tcl_ObjCmdProc AliasNRCmd;
-static Tcl_CmdDeleteProc AliasObjCmdDeleteProc;
+static Tcl_ObjCmdProc AliasNRCmd;
+static Tcl_CmdDeleteProc AliasObjCmdDeleteProc;
static Tcl_Interp * GetInterp(Tcl_Interp *interp, Tcl_Obj *pathPtr);
static Tcl_Interp * GetInterp2(Tcl_Interp *interp, Tcl_Size objc,
Tcl_Obj *const objv[]);
-static Tcl_InterpDeleteProc InterpInfoDeleteProc;
+static Tcl_InterpDeleteProc InterpInfoDeleteProc;
static int ChildBgerror(Tcl_Interp *interp,
Tcl_Interp *childInterp, Tcl_Size objc,
Tcl_Obj *const objv[]);
@@ -321,23 +331,31 @@ Tcl_SetPreInitScript(
*----------------------------------------------------------------------
*/
-typedef struct PkgName {
- struct PkgName *nextPtr; /* Next in list of package names being initialized. */
- char name[4];
-} PkgName;
-
int
Tcl_Init(
Tcl_Interp *interp) /* Interpreter to initialize. */
{
+ /*
+ * Splice for putting the "tcl" package in the list of packages while the
+ * pre-init and init scripts are running. The real version of this struct
+ * is in tclPkg.c.
+ */
+ typedef struct PkgName {
+ struct PkgName *nextPtr;/* Next in list of package names being
+ * initialized. */
+ char name[4]; /* Enough space for "tcl". The *real* version
+ * of this structure uses a flex array. */
+ } PkgName;
+
PkgName pkgName = {NULL, "tcl"};
- PkgName **names = (PkgName **)TclInitPkgFiles(interp);
+ PkgName **names = (PkgName **) TclInitPkgFiles(interp);
int result = TCL_ERROR;
pkgName.nextPtr = *names;
*names = &pkgName;
if (tclPreInitScript != NULL) {
- if (Tcl_EvalEx(interp, tclPreInitScript, TCL_INDEX_NONE, 0) == TCL_ERROR) {
+ if (Tcl_EvalEx(interp, tclPreInitScript, TCL_INDEX_NONE,
+ 0 /*flags*/) == TCL_ERROR) {
goto end;
}
}
@@ -480,12 +498,13 @@ TclInterpInit(
Parent *parentPtr;
Child *childPtr;
- interpInfoPtr = (InterpInfo *)Tcl_Alloc(sizeof(InterpInfo));
+ interpInfoPtr = (InterpInfo *) Tcl_Alloc(sizeof(InterpInfo));
((Interp *) interp)->interpInfo = interpInfoPtr;
parentPtr = &interpInfoPtr->parent;
Tcl_InitHashTable(&parentPtr->childTable, TCL_STRING_KEYS);
parentPtr->targetsPtr = NULL;
+ parentPtr->idIssuer = 0;
childPtr = &interpInfoPtr->child;
childPtr->parentInterp = NULL;
@@ -524,13 +543,11 @@ InterpInfoDeleteProc(
Tcl_Interp *interp) /* Interp being deleted. All commands for
* child interps should already be deleted. */
{
- InterpInfo *interpInfoPtr;
+ InterpInfo *interpInfoPtr = INTERP_INFO(interp);
Child *childPtr;
Parent *parentPtr;
Target *targetPtr;
- interpInfoPtr = (InterpInfo *) ((Interp *) interp)->interpInfo;
-
/*
* There shouldn't be any commands left.
*/
@@ -549,6 +566,7 @@ InterpInfoDeleteProc(
for (targetPtr = parentPtr->targetsPtr; targetPtr != NULL; ) {
Target *tmpPtr = targetPtr->nextPtr;
+
Tcl_DeleteCommandFromToken(targetPtr->childInterp,
targetPtr->childCmd);
targetPtr = tmpPtr;
@@ -600,9 +618,9 @@ InterpInfoDeleteProc(
int
Tcl_InterpObjCmd(
void *clientData,
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
+ Tcl_Interp *interp, /* Current interpreter. */
+ int objc, /* Number of arguments. */
+ Tcl_Obj *const objv[]) /* Argument objects. */
{
return Tcl_NRCallObjProc(interp, NRInterpCmd, clientData, objc, objv);
}
@@ -610,9 +628,9 @@ Tcl_InterpObjCmd(
static int
NRInterpCmd(
TCL_UNUSED(void *),
- Tcl_Interp *interp, /* Current interpreter. */
- int objc, /* Number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
+ Tcl_Interp *interp, /* Current interpreter. */
+ int objc, /* Number of arguments. */
+ Tcl_Obj *const objv[]) /* Argument objects. */
{
Tcl_Interp *childInterp;
static const char *const options[] = {
@@ -647,13 +665,14 @@ NRInterpCmd(
#endif
OPT_TARGET, OPT_TRANSFER
} index;
+ Tcl_Size i;
if (objc < 2) {
Tcl_WrongNumArgs(interp, 1, objv, "cmd ?arg ...?");
return TCL_ERROR;
}
- if (Tcl_GetIndexFromObj(NULL, objv[1], options,
- "option", 0, &index) != TCL_OK) {
+ if (Tcl_GetIndexFromObj(NULL, objv[1], options, NULL, 0,
+ &index) != TCL_OK) {
/* Don't report the "slaves" option as possibility */
Tcl_GetIndexFromObj(interp, objv[1], optionsNoSlaves,
"option", 0, &index);
@@ -664,10 +683,7 @@ NRInterpCmd(
Tcl_Interp *parentInterp;
if (objc < 4) {
- aliasArgs:
- Tcl_WrongNumArgs(interp, 2, objv,
- "childPath childCmd ?parentPath parentCmd? ?arg ...?");
- return TCL_ERROR;
+ goto aliasArgs;
}
childInterp = GetInterp(interp, objv[2]);
if (childInterp == NULL) {
@@ -688,7 +704,11 @@ NRInterpCmd(
return AliasCreate(interp, childInterp, parentInterp, objv[3],
objv[5], objc - 6, objv + 6);
}
- goto aliasArgs;
+
+ aliasArgs:
+ Tcl_WrongNumArgs(interp, 2, objv,
+ "childPath childCmd ?parentPath parentCmd? ?arg ...?");
+ return TCL_ERROR;
}
case OPT_ALIASES:
childInterp = GetInterp2(interp, objc, objv);
@@ -707,8 +727,7 @@ NRInterpCmd(
}
return ChildBgerror(interp, childInterp, objc - 3, objv + 3);
case OPT_CANCEL: {
- Tcl_Size i;
- int flags;
+ int flags = 0;
Tcl_Obj *resultObjPtr;
static const char *const cancelOptions[] = {
"-unwind", "--", NULL
@@ -717,8 +736,6 @@ NRInterpCmd(
OPT_UNWIND, OPT_LAST
} idx;
- flags = 0;
-
for (i = 2; i < objc; i++) {
if (TclGetString(objv[i])[0] != '-') {
break;
@@ -781,7 +798,6 @@ NRInterpCmd(
}
case OPT_CREATE: {
int last, safe;
- Tcl_Size i;
Tcl_Obj *childPtr;
char buf[16 + TCL_INTEGER_SPACE];
static const char *const createOptions[] = {
@@ -822,6 +838,9 @@ NRInterpCmd(
}
buf[0] = '\0';
if (childPtr == NULL) {
+ Parent *parentInfo = &INTERP_INFO(interp)->parent;
+ Tcl_CmdInfo cmdInfo;
+
/*
* Create an anonymous interpreter -- we choose its name and the
* name of the command. We check that the command name that we use
@@ -829,20 +848,14 @@ NRInterpCmd(
* in the parent interpreter.
*/
- for (i = 0; ; i++) {
- Tcl_CmdInfo cmdInfo;
-
- snprintf(buf, sizeof(buf), "interp%" TCL_SIZE_MODIFIER "d", i);
- if (Tcl_GetCommandInfo(interp, buf, &cmdInfo) == 0) {
- break;
- }
- }
+ do {
+ snprintf(buf, sizeof(buf), "interp%" TCL_SIZE_MODIFIER "d",
+ parentInfo->idIssuer++);
+ } while (Tcl_GetCommandInfo(interp, buf, &cmdInfo));
childPtr = Tcl_NewStringObj(buf, -1);
}
if (ChildCreate(interp, childPtr, safe) == NULL) {
- if (buf[0] != '\0') {
- Tcl_DecrRefCount(childPtr);
- }
+ Tcl_BounceRefCount(childPtr);
return TCL_ERROR;
}
Tcl_SetObjResult(interp, childPtr);
@@ -863,7 +876,6 @@ NRInterpCmd(
}
return ChildDebugCmd(interp, childInterp, objc - 3, objv + 3);
case OPT_DELETE: {
- Tcl_Size i;
InterpInfo *iiPtr;
for (i = 2; i < objc; i++) {
@@ -877,7 +889,7 @@ NRInterpCmd(
"DELETESELF", (char *)NULL);
return TCL_ERROR;
}
- iiPtr = (InterpInfo *) ((Interp *) childInterp)->interpInfo;
+ iiPtr = INTERP_INFO(childInterp);
Tcl_DeleteCommandFromToken(iiPtr->child.parentInterp,
iiPtr->child.interpCmd);
}
@@ -941,7 +953,6 @@ NRInterpCmd(
Tcl_SetObjResult(interp, Tcl_NewBooleanObj(Tcl_IsSafe(childInterp)));
return TCL_OK;
case OPT_INVOKEHID: {
- Tcl_Size i;
const char *namespaceName;
static const char *const hiddenOptions[] = {
"-global", "-namespace", "--", NULL
@@ -1010,9 +1021,11 @@ NRInterpCmd(
return ChildCommandLimitCmd(interp, childInterp, 4, objc,objv);
case LIMIT_TYPE_TIME:
return ChildTimeLimitCmd(interp, childInterp, 4, objc, objv);
+ default:
+ Tcl_Panic("unreachable");
+ return TCL_ERROR;
}
}
- break;
case OPT_MARKTRUSTED:
if (objc != 3) {
Tcl_WrongNumArgs(interp, 2, objv, "path");
@@ -1047,11 +1060,11 @@ NRInterpCmd(
if (childInterp == NULL) {
return TCL_ERROR;
}
- iiPtr = (InterpInfo *) ((Interp *) childInterp)->interpInfo;
+ iiPtr = INTERP_INFO(childInterp);
TclNewObj(resultPtr);
hPtr = Tcl_FirstHashEntry(&iiPtr->parent.childTable, &hashSearch);
for ( ; hPtr != NULL; hPtr = Tcl_NextHashEntry(&hashSearch)) {
- string = (char *)Tcl_GetHashKey(&iiPtr->parent.childTable, hPtr);
+ string = (char *) Tcl_GetHashKey(&iiPtr->parent.childTable, hPtr);
Tcl_ListObjAppendElement(NULL, resultPtr,
Tcl_NewStringObj(string, -1));
}
@@ -1112,7 +1125,7 @@ NRInterpCmd(
aliasName = TclGetString(objv[3]);
- iiPtr = (InterpInfo *) ((Interp *) childInterp)->interpInfo;
+ iiPtr = INTERP_INFO(childInterp);
hPtr = Tcl_FindHashEntry(&iiPtr->child.aliasTable, aliasName);
if (hPtr == NULL) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
@@ -1122,7 +1135,7 @@ NRInterpCmd(
(char *)NULL);
return TCL_ERROR;
}
- aliasPtr = (Alias *)Tcl_GetHashValue(hPtr);
+ aliasPtr = (Alias *) Tcl_GetHashValue(hPtr);
if (Tcl_GetInterpPath(interp, aliasPtr->targetInterp) != TCL_OK) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"target interpreter for alias \"%s\" in path \"%s\" is "
@@ -1133,8 +1146,10 @@ NRInterpCmd(
}
return TCL_OK;
}
+ default:
+ Tcl_Panic("unreachable");
+ return TCL_ERROR;
}
- return TCL_OK;
}
/*
@@ -1162,7 +1177,7 @@ static Tcl_Interp *
GetInterp2(
Tcl_Interp *interp, /* Default interp if no interp was specified
* on the command line. */
- Tcl_Size objc, /* Number of arguments. */
+ Tcl_Size objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
if (objc == 2) {
@@ -1197,7 +1212,7 @@ Tcl_CreateAlias(
const char *childCmd, /* Command to install in child. */
Tcl_Interp *targetInterp, /* Interpreter for target command. */
const char *targetCmd, /* Name of target command. */
- Tcl_Size argc, /* How many additional arguments? */
+ Tcl_Size argc, /* How many additional arguments? */
const char *const *argv) /* These are the additional args. */
{
Tcl_Obj *childObjPtr, *targetObjPtr;
@@ -1205,7 +1220,7 @@ Tcl_CreateAlias(
Tcl_Size i;
int result;
- objv = (Tcl_Obj **)TclStackAlloc(childInterp, sizeof(Tcl_Obj *) * argc);
+ objv = (Tcl_Obj **) TclStackAlloc(childInterp, sizeof(Tcl_Obj *) * argc);
for (i = 0; i < argc; i++) {
objv[i] = Tcl_NewStringObj(argv[i], -1);
Tcl_IncrRefCount(objv[i]);
@@ -1252,7 +1267,7 @@ Tcl_CreateAliasObj(
const char *childCmd, /* Command to install in child. */
Tcl_Interp *targetInterp, /* Interpreter for target command. */
const char *targetCmd, /* Name of target command. */
- Tcl_Size objc, /* How many additional arguments? */
+ Tcl_Size objc, /* How many additional arguments? */
Tcl_Obj *const objv[]) /* Argument vector. */
{
Tcl_Obj *childObjPtr, *targetObjPtr;
@@ -1298,7 +1313,7 @@ Tcl_GetAliasObj(
Tcl_Size *objcPtr, /* (Return) count of addnl args. */
Tcl_Obj ***objvPtr) /* (Return) additional args. */
{
- InterpInfo *iiPtr = (InterpInfo *) ((Interp *) interp)->interpInfo;
+ InterpInfo *iiPtr = INTERP_INFO(interp);
Tcl_HashEntry *hPtr;
Alias *aliasPtr;
Tcl_Size objc;
@@ -1308,10 +1323,11 @@ Tcl_GetAliasObj(
if (hPtr == NULL) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"alias \"%s\" not found", aliasName));
- Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "ALIAS", aliasName, (char *)NULL);
+ Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "ALIAS", aliasName,
+ (char *)NULL);
return TCL_ERROR;
}
- aliasPtr = (Alias *)Tcl_GetHashValue(hPtr);
+ aliasPtr = (Alias *) Tcl_GetHashValue(hPtr);
objc = aliasPtr->objc;
objv = &aliasPtr->objPtr;
@@ -1380,7 +1396,7 @@ TclPreventAliasLoop(
* chain then we have a loop.
*/
- aliasPtr = (Alias *)cmdPtr->objClientData;
+ aliasPtr = (Alias *) cmdPtr->objClientData;
nextAliasPtr = aliasPtr;
while (1) {
Tcl_Obj *cmdNamePtr;
@@ -1429,7 +1445,7 @@ TclPreventAliasLoop(
&& aliasCmdPtr->objProc != TclLocalAliasObjCmd) {
return TCL_OK;
}
- nextAliasPtr = (Alias *)aliasCmdPtr->objClientData;
+ nextAliasPtr = (Alias *) aliasCmdPtr->objClientData;
}
}
@@ -1459,7 +1475,7 @@ AliasCreate(
* invoked. */
Tcl_Obj *namePtr, /* Name of alias cmd. */
Tcl_Obj *targetCmdPtr, /* Name of target cmd. */
- Tcl_Size objc, /* Additional arguments to store */
+ Tcl_Size objc, /* Additional arguments to store */
Tcl_Obj *const objv[]) /* with alias. */
{
Alias *aliasPtr;
@@ -1471,7 +1487,7 @@ AliasCreate(
int isNew;
Tcl_Size i;
- aliasPtr = (Alias *)Tcl_Alloc(sizeof(Alias) + objc * sizeof(Tcl_Obj *));
+ aliasPtr = (Alias *) Tcl_Alloc(sizeof(Alias) + objc * sizeof(Tcl_Obj *));
aliasPtr->token = namePtr;
Tcl_IncrRefCount(aliasPtr->token);
aliasPtr->targetInterp = parentInterp;
@@ -1537,7 +1553,7 @@ AliasCreate(
* Make an entry in the alias table. If it already exists, retry.
*/
- childPtr = &((InterpInfo *) ((Interp *) childInterp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(childInterp)->child;
while (1) {
Tcl_Obj *newToken;
const char *string;
@@ -1579,11 +1595,11 @@ AliasCreate(
* interp alias {} foo {} zop # Now recreate "foo"...
*/
- targetPtr = (Target *)Tcl_Alloc(sizeof(Target));
+ targetPtr = (Target *) Tcl_Alloc(sizeof(Target));
targetPtr->childCmd = aliasPtr->childCmd;
targetPtr->childInterp = childInterp;
- parentPtr = &((InterpInfo*) ((Interp*) parentInterp)->interpInfo)->parent;
+ parentPtr = &INTERP_INFO(parentInterp)->parent;
targetPtr->nextPtr = parentPtr->targetsPtr;
targetPtr->prevPtr = NULL;
if (parentPtr->targetsPtr != NULL) {
@@ -1631,7 +1647,7 @@ AliasDelete(
* delete it.
*/
- childPtr = &((InterpInfo *) ((Interp *) childInterp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(childInterp)->child;
hPtr = Tcl_FindHashEntry(&childPtr->aliasTable, TclGetString(namePtr));
if (hPtr == NULL) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
@@ -1640,7 +1656,7 @@ AliasDelete(
TclGetString(namePtr), (char *)NULL);
return TCL_ERROR;
}
- aliasPtr = (Alias *)Tcl_GetHashValue(hPtr);
+ aliasPtr = (Alias *) Tcl_GetHashValue(hPtr);
Tcl_DeleteCommandFromToken(childInterp, aliasPtr->childCmd);
return TCL_OK;
}
@@ -1680,12 +1696,12 @@ AliasDescribe(
* describe it.
*/
- childPtr = &((InterpInfo *) ((Interp *) childInterp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(childInterp)->child;
hPtr = Tcl_FindHashEntry(&childPtr->aliasTable, TclGetString(namePtr));
if (hPtr == NULL) {
return TCL_OK;
}
- aliasPtr = (Alias *)Tcl_GetHashValue(hPtr);
+ aliasPtr = (Alias *) Tcl_GetHashValue(hPtr);
prefixPtr = Tcl_NewListObj(aliasPtr->objc, &aliasPtr->objPtr);
Tcl_SetObjResult(interp, prefixPtr);
return TCL_OK;
@@ -1719,11 +1735,11 @@ AliasList(
Child *childPtr;
TclNewObj(resultPtr);
- childPtr = &((InterpInfo *) ((Interp *) childInterp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(childInterp)->child;
entryPtr = Tcl_FirstHashEntry(&childPtr->aliasTable, &hashSearch);
for ( ; entryPtr != NULL; entryPtr = Tcl_NextHashEntry(&hashSearch)) {
- aliasPtr = (Alias *)Tcl_GetHashValue(entryPtr);
+ aliasPtr = (Alias *) Tcl_GetHashValue(entryPtr);
Tcl_ListObjAppendElement(NULL, resultPtr, aliasPtr->token);
}
Tcl_SetObjResult(interp, resultPtr);
@@ -1759,12 +1775,12 @@ AliasList(
static int
AliasNRCmd(
- void *clientData, /* Alias record. */
+ void *clientData, /* Alias record. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument vector. */
{
- Alias *aliasPtr = (Alias *)clientData;
+ Alias *aliasPtr = (Alias *) clientData;
Tcl_Size prefc, cmdc, i;
Tcl_Obj **prefv, **cmdv;
Tcl_Obj *listPtr;
@@ -1812,19 +1828,18 @@ AliasNRCmd(
int
TclAliasObjCmd(
- void *clientData, /* Alias record. */
+ void *clientData, /* Alias record. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument vector. */
{
#define ALIAS_CMDV_PREALLOC 10
- Alias *aliasPtr = (Alias *)clientData;
+ Alias *aliasPtr = (Alias *) clientData;
Tcl_Interp *targetInterp = aliasPtr->targetInterp;
int result;
Tcl_Size prefc, cmdc, i;
Tcl_Obj **prefv, **cmdv;
Tcl_Obj *cmdArr[ALIAS_CMDV_PREALLOC];
- Interp *tPtr = (Interp *) targetInterp;
int isRootEnsemble;
/*
@@ -1838,7 +1853,7 @@ TclAliasObjCmd(
if (cmdc <= ALIAS_CMDV_PREALLOC) {
cmdv = cmdArr;
} else {
- cmdv = (Tcl_Obj **)TclStackAlloc(interp, cmdc * sizeof(Tcl_Obj *));
+ cmdv = (Tcl_Obj **) TclStackAlloc(interp, cmdc * sizeof(Tcl_Obj *));
}
memcpy(cmdv, prefv, prefc * sizeof(Tcl_Obj *));
@@ -1855,7 +1870,7 @@ TclAliasObjCmd(
* only the source command should show, not the full target prefix.
*/
- isRootEnsemble = TclInitRewriteEnsemble((Tcl_Interp *)tPtr, 1, prefc, objv);
+ isRootEnsemble = TclInitRewriteEnsemble(targetInterp, 1, prefc, objv);
/*
* Protect the target interpreter if it isn't the same as the source
@@ -1878,7 +1893,7 @@ TclAliasObjCmd(
*/
if (isRootEnsemble) {
- TclResetRewriteEnsemble((Tcl_Interp *)tPtr, 1);
+ TclResetRewriteEnsemble(targetInterp, 1);
}
/*
@@ -1904,18 +1919,17 @@ TclAliasObjCmd(
int
TclLocalAliasObjCmd(
- void *clientData, /* Alias record. */
+ void *clientData, /* Alias record. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument vector. */
{
#define ALIAS_CMDV_PREALLOC 10
- Alias *aliasPtr = (Alias *)clientData;
+ Alias *aliasPtr = (Alias *) clientData;
int result;
Tcl_Size prefc, cmdc, i;
Tcl_Obj **prefv, **cmdv;
Tcl_Obj *cmdArr[ALIAS_CMDV_PREALLOC];
- Interp *iPtr = (Interp *) interp;
int isRootEnsemble;
/*
@@ -1929,7 +1943,7 @@ TclLocalAliasObjCmd(
if (cmdc <= ALIAS_CMDV_PREALLOC) {
cmdv = cmdArr;
} else {
- cmdv = (Tcl_Obj **)TclStackAlloc(interp, cmdc * sizeof(Tcl_Obj *));
+ cmdv = (Tcl_Obj **) TclStackAlloc(interp, cmdc * sizeof(Tcl_Obj *));
}
memcpy(cmdv, prefv, prefc * sizeof(Tcl_Obj *));
@@ -1944,7 +1958,7 @@ TclLocalAliasObjCmd(
* only the source command should show, not the full target prefix.
*/
- isRootEnsemble = TclInitRewriteEnsemble((Tcl_Interp *)iPtr, 1, prefc, objv);
+ isRootEnsemble = TclInitRewriteEnsemble(interp, 1, prefc, objv);
/*
* Execute the target command in the target interpreter.
@@ -1957,7 +1971,7 @@ TclLocalAliasObjCmd(
*/
if (isRootEnsemble) {
- TclResetRewriteEnsemble((Tcl_Interp *)iPtr, 1);
+ TclResetRewriteEnsemble(interp, 1);
}
for (i=0; i<cmdc; i++) {
@@ -1990,9 +2004,9 @@ TclLocalAliasObjCmd(
static void
AliasObjCmdDeleteProc(
- void *clientData) /* The alias record for this alias. */
+ void *clientData) /* The alias record for this alias. */
{
- Alias *aliasPtr = (Alias *)clientData;
+ Alias *aliasPtr = (Alias *) clientData;
Target *targetPtr;
Tcl_Size i;
Tcl_Obj **objv;
@@ -2012,8 +2026,7 @@ AliasObjCmdDeleteProc(
if (targetPtr->prevPtr != NULL) {
targetPtr->prevPtr->nextPtr = targetPtr->nextPtr;
} else {
- Parent *parentPtr = &((InterpInfo *) ((Interp *)
- aliasPtr->targetInterp)->interpInfo)->parent;
+ Parent *parentPtr = &INTERP_INFO(aliasPtr->targetInterp)->parent;
parentPtr->targetsPtr = targetPtr->nextPtr;
}
@@ -2120,7 +2133,7 @@ Tcl_GetParent(
if (interp == NULL) {
return NULL;
}
- childPtr = &((InterpInfo *) ((Interp *) interp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(interp)->child;
return childPtr->parentInterp;
}
@@ -2164,11 +2177,11 @@ TclSetChildCancelFlags(
flags &= (CANCELED | TCL_CANCEL_UNWIND);
- parentPtr = &((InterpInfo *) ((Interp *) interp)->interpInfo)->parent;
+ parentPtr = &INTERP_INFO(interp)->parent;
hPtr = Tcl_FirstHashEntry(&parentPtr->childTable, &hashSearch);
for ( ; hPtr != NULL; hPtr = Tcl_NextHashEntry(&hashSearch)) {
- childPtr = (Child *)Tcl_GetHashValue(hPtr);
+ childPtr = (Child *) Tcl_GetHashValue(hPtr);
iPtr = (Interp *) childPtr->childInterp;
if (iPtr == NULL) {
@@ -2216,7 +2229,7 @@ TclSetChildCancelFlags(
int
Tcl_GetInterpPath(
- Tcl_Interp *interp, /* Interpreter to start search from. */
+ Tcl_Interp *interp, /* Interpreter to start search from. */
Tcl_Interp *targetInterp) /* Interpreter to find. */
{
InterpInfo *iiPtr;
@@ -2228,13 +2241,14 @@ Tcl_GetInterpPath(
if (targetInterp == NULL) {
return TCL_ERROR;
}
- iiPtr = (InterpInfo *) ((Interp *) targetInterp)->interpInfo;
- if (Tcl_GetInterpPath(interp, iiPtr->child.parentInterp) != TCL_OK){
+ iiPtr = INTERP_INFO(targetInterp);
+ if (Tcl_GetInterpPath(interp, iiPtr->child.parentInterp) != TCL_OK) {
return TCL_ERROR;
}
Tcl_ListObjAppendElement(NULL, Tcl_GetObjResult(interp),
- Tcl_NewStringObj((const char *)Tcl_GetHashKey(&iiPtr->parent.childTable,
- iiPtr->child.childEntryPtr), -1));
+ Tcl_NewStringObj((const char *)
+ Tcl_GetHashKey(&iiPtr->parent.childTable,
+ iiPtr->child.childEntryPtr), -1));
return TCL_OK;
}
@@ -2274,14 +2288,14 @@ GetInterp(
searchInterp = interp;
for (i = 0; i < objc; i++) {
- parentInfoPtr = (InterpInfo *) ((Interp *) searchInterp)->interpInfo;
+ parentInfoPtr = INTERP_INFO(searchInterp);
hPtr = Tcl_FindHashEntry(&parentInfoPtr->parent.childTable,
TclGetString(objv[i]));
if (hPtr == NULL) {
searchInterp = NULL;
break;
}
- childPtr = (Child *)Tcl_GetHashValue(hPtr);
+ childPtr = (Child *) Tcl_GetHashValue(hPtr);
searchInterp = childPtr->childInterp;
if (searchInterp == NULL) {
break;
@@ -2318,7 +2332,7 @@ static int
ChildBgerror(
Tcl_Interp *interp, /* Interp for error return. */
Tcl_Interp *childInterp, /* Interp in which limit is set/queried. */
- Tcl_Size objc, /* Set or Query. */
+ Tcl_Size objc, /* Set or Query. */
Tcl_Obj *const objv[]) /* Argument strings. */
{
if (objc) {
@@ -2393,7 +2407,7 @@ ChildCreate(
safe = Tcl_IsSafe(parentInterp);
}
- parentInfoPtr = (InterpInfo *) ((Interp *) parentInterp)->interpInfo;
+ parentInfoPtr = INTERP_INFO(parentInterp);
hPtr = Tcl_CreateHashEntry(&parentInfoPtr->parent.childTable, path,
&isNew);
if (isNew == 0) {
@@ -2404,7 +2418,7 @@ ChildCreate(
}
childInterp = Tcl_CreateInterp();
- childPtr = &((InterpInfo *) ((Interp *) childInterp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(childInterp)->child;
childPtr->parentInterp = parentInterp;
childPtr->childEntryPtr = hPtr;
childPtr->childInterp = childInterp;
@@ -2491,7 +2505,7 @@ ChildCreate(
int
TclChildObjCmd(
- void *clientData, /* Child interpreter. */
+ void *clientData, /* Child interpreter. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
@@ -2501,12 +2515,12 @@ TclChildObjCmd(
static int
NRChildCmd(
- void *clientData, /* Child interpreter. */
+ void *clientData, /* Child interpreter. */
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
- Tcl_Interp *childInterp = (Tcl_Interp *)clientData;
+ Tcl_Interp *childInterp = (Tcl_Interp *) clientData;
static const char *const options[] = {
"alias", "aliases", "bgerror", "debug",
"eval", "expose", "hide", "hidden",
@@ -2627,9 +2641,8 @@ NRChildCmd(
} else if (idx == OPT_NAMESPACE) {
if (++i == objc) { /* There must be more arguments. */
break;
- } else {
- namespaceName = TclGetString(objv[i]);
}
+ namespaceName = TclGetString(objv[i]);
} else {
i++;
break;
@@ -2705,13 +2718,13 @@ NRChildCmd(
static void
ChildObjCmdDeleteProc(
- void *clientData) /* The ChildRecord for the command. */
+ void *clientData) /* The ChildRecord for the command. */
{
Child *childPtr; /* Interim storage for Child record. */
- Tcl_Interp *childInterp = (Tcl_Interp *)clientData;
+ Tcl_Interp *childInterp = (Tcl_Interp *) clientData;
/* And for a child interp. */
- childPtr = &((InterpInfo *) ((Interp *) childInterp)->interpInfo)->child;
+ childPtr = &INTERP_INFO(childInterp)->child;
/*
* Unlink the child from its parent interpreter.
@@ -2753,7 +2766,7 @@ ChildDebugCmd(
Tcl_Interp *interp, /* Interp for error return. */
Tcl_Interp *childInterp, /* The child interpreter in which command
* will be evaluated. */
- Tcl_Size objc, /* Number of arguments. */
+ Tcl_Size objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
static const char *const debugTypes[] = {
@@ -2824,7 +2837,7 @@ ChildEval(
Tcl_Interp *interp, /* Interp for error return. */
Tcl_Interp *childInterp, /* The child interpreter in which command
* will be evaluated. */
- Tcl_Size objc, /* Number of arguments. */
+ Tcl_Size objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
int result;
@@ -2887,7 +2900,7 @@ static int
ChildExpose(
Tcl_Interp *interp, /* Interp for error return. */
Tcl_Interp *childInterp, /* Interp in which command will be exposed. */
- Tcl_Size objc, /* Number of arguments. */
+ Tcl_Size objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument strings. */
{
const char *name;
@@ -2931,7 +2944,7 @@ static int
ChildRecursionLimit(
Tcl_Interp *interp, /* Interp for error return. */
Tcl_Interp *childInterp, /* Interp in which limit is set/queried. */
- Tcl_Size objc, /* Set or Query. */
+ Tcl_Size objc, /* Set or Query. */
Tcl_Obj *const objv[]) /* Argument strings. */
{
Interp *iPtr;
@@ -2993,7 +3006,7 @@ static int
ChildHide(
Tcl_Interp *interp, /* Interp for error return. */
Tcl_Interp *childInterp, /* Interp in which command will be exposed. */
- Tcl_Size objc, /* Number of arguments. */
+ Tcl_Size objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument strings. */
{
const char *name;
@@ -3037,10 +3050,10 @@ ChildHidden(
Tcl_Interp *interp, /* Interp for data return. */
Tcl_Interp *childInterp) /* Interp whose hidden commands to query. */
{
- Tcl_Obj *listObjPtr; /* Local object pointer. */
- Tcl_HashTable *hTblPtr; /* For local searches. */
- Tcl_HashEntry *hPtr; /* For local searches. */
- Tcl_HashSearch hSearch; /* For local searches. */
+ Tcl_Obj *listObjPtr; /* Local object pointer. */
+ Tcl_HashTable *hTblPtr; /* For local searches. */
+ Tcl_HashEntry *hPtr; /* For local searches. */
+ Tcl_HashSearch hSearch; /* For local searches. */
TclNewObj(listObjPtr);
hTblPtr = ((Interp *) childInterp)->hiddenCmdTablePtr;
@@ -3049,7 +3062,8 @@ ChildHidden(
hPtr != NULL;
hPtr = Tcl_NextHashEntry(&hSearch)) {
Tcl_ListObjAppendElement(NULL, listObjPtr,
- Tcl_NewStringObj((const char *)Tcl_GetHashKey(hTblPtr, hPtr), -1));
+ Tcl_NewStringObj((const char *)
+ Tcl_GetHashKey(hTblPtr, hPtr), -1));
}
}
Tcl_SetObjResult(interp, listObjPtr);
@@ -3078,7 +3092,7 @@ ChildInvokeHidden(
Tcl_Interp *childInterp, /* The child interpreter in which command will
* be invoked. */
const char *namespaceName, /* The namespace to use, if any. */
- Tcl_Size objc, /* Number of arguments. */
+ Tcl_Size objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
int result;
@@ -3126,8 +3140,8 @@ NRPostInvokeHidden(
Tcl_Interp *interp,
int result)
{
- Tcl_Interp *childInterp = (Tcl_Interp *)data[0];
- NRE_callback *rootPtr = (NRE_callback *)data[1];
+ Tcl_Interp *childInterp = (Tcl_Interp *) data[0];
+ NRE_callback *rootPtr = (NRE_callback *) data[1];
if (interp != childInterp) {
result = TclNRRunCallbacks(childInterp, result, rootPtr);
@@ -3225,7 +3239,7 @@ MakeSafe(
{
Tcl_Channel chan; /* Channel to remove from safe interpreter. */
Interp *iPtr = (Interp *) interp;
- Tcl_Interp *parent = ((InterpInfo*) iPtr->interpInfo)->child.parentInterp;
+ Tcl_Interp *parent = INTERP_INFO(iPtr)->child.parentInterp;
TclHideUnsafeCommands(interp);
@@ -3238,7 +3252,8 @@ MakeSafe(
*/
(void) Tcl_EvalEx(interp,
- "namespace eval ::tcl {namespace eval mathfunc {}}", TCL_INDEX_NONE, 0);
+ "namespace eval ::tcl {namespace eval mathfunc {}}",
+ TCL_INDEX_NONE, 0);
}
iPtr->flags |= SAFE_INTERP;
@@ -3563,7 +3578,7 @@ Tcl_LimitAddHandler(
* Allocate a handler record.
*/
- handlerPtr = (LimitHandler *)Tcl_Alloc(sizeof(LimitHandler));
+ handlerPtr = (LimitHandler *) Tcl_Alloc(sizeof(LimitHandler));
handlerPtr->flags = 0;
handlerPtr->handlerProc = handlerProc;
handlerPtr->clientData = clientData;
@@ -4020,8 +4035,8 @@ static void
TimeLimitCallback(
void *clientData)
{
- Tcl_Interp *interp = (Tcl_Interp *)clientData;
- Interp *iPtr = (Interp *)clientData;
+ Tcl_Interp *interp = (Tcl_Interp *) clientData;
+ Interp *iPtr = (Interp *) clientData;
int code;
Tcl_Preserve(interp);
@@ -4164,7 +4179,7 @@ static void
DeleteScriptLimitCallback(
void *clientData)
{
- ScriptLimitCallback *limitCBPtr = (ScriptLimitCallback *)clientData;
+ ScriptLimitCallback *limitCBPtr = (ScriptLimitCallback *) clientData;
Tcl_DecrRefCount(limitCBPtr->scriptObj);
if (limitCBPtr->entryPtr != NULL) {
@@ -4196,7 +4211,7 @@ CallScriptLimitCallback(
void *clientData,
TCL_UNUSED(Tcl_Interp *))
{
- ScriptLimitCallback *limitCBPtr = (ScriptLimitCallback *)clientData;
+ ScriptLimitCallback *limitCBPtr = (ScriptLimitCallback *) clientData;
int code;
if (Tcl_InterpDeleted(limitCBPtr->interp)) {
@@ -4264,13 +4279,14 @@ SetScriptLimitCallback(
hashPtr = Tcl_CreateHashEntry(&iPtr->limit.callbacks, &key,
&isNew);
if (!isNew) {
- limitCBPtr = (ScriptLimitCallback *)Tcl_GetHashValue(hashPtr);
+ limitCBPtr = (ScriptLimitCallback *) Tcl_GetHashValue(hashPtr);
limitCBPtr->entryPtr = NULL;
Tcl_LimitRemoveHandler(targetInterp, type, CallScriptLimitCallback,
limitCBPtr);
}
- limitCBPtr = (ScriptLimitCallback *)Tcl_Alloc(sizeof(ScriptLimitCallback));
+ limitCBPtr = (ScriptLimitCallback *)
+ Tcl_Alloc(sizeof(ScriptLimitCallback));
limitCBPtr->interp = interp;
limitCBPtr->scriptObj = scriptObj;
limitCBPtr->entryPtr = hashPtr;
@@ -4355,7 +4371,7 @@ TclInitLimitSupport(
iPtr->limit.timeEvent = NULL;
iPtr->limit.timeGranularity = 10;
Tcl_InitHashTable(&iPtr->limit.callbacks,
- sizeof(ScriptLimitCallbackKey)/sizeof(int));
+ sizeof(ScriptLimitCallbackKey) / sizeof(int));
}
/*
@@ -4421,8 +4437,8 @@ static int
ChildCommandLimitCmd(
Tcl_Interp *interp, /* Current interpreter. */
Tcl_Interp *childInterp, /* Interpreter being adjusted. */
- Tcl_Size consumedObjc, /* Number of args already parsed. */
- Tcl_Size objc, /* Total number of arguments. */
+ Tcl_Size consumedObjc, /* Number of args already parsed. */
+ Tcl_Size objc, /* Total number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
static const char *const options[] = {
@@ -4446,7 +4462,8 @@ ChildCommandLimitCmd(
if (interp == childInterp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"limits on current interpreter inaccessible", -1));
- Tcl_SetErrorCode(interp, "TCL", "OPERATION", "INTERP", "SELF", (char *)NULL);
+ Tcl_SetErrorCode(interp, "TCL", "OPERATION", "INTERP", "SELF",
+ (char *)NULL);
return TCL_ERROR;
}
@@ -4458,7 +4475,7 @@ ChildCommandLimitCmd(
key.type = TCL_LIMIT_COMMANDS;
hPtr = Tcl_FindHashEntry(&iPtr->limit.callbacks, &key);
if (hPtr != NULL) {
- limitCBPtr = (ScriptLimitCallback *)Tcl_GetHashValue(hPtr);
+ limitCBPtr = (ScriptLimitCallback *) Tcl_GetHashValue(hPtr);
if (limitCBPtr != NULL && limitCBPtr->scriptObj != NULL) {
TclDictPut(NULL, dictPtr, options[0], limitCBPtr->scriptObj);
} else {
@@ -4496,7 +4513,7 @@ ChildCommandLimitCmd(
key.type = TCL_LIMIT_COMMANDS;
hPtr = Tcl_FindHashEntry(&iPtr->limit.callbacks, &key);
if (hPtr != NULL) {
- limitCBPtr = (ScriptLimitCallback *)Tcl_GetHashValue(hPtr);
+ limitCBPtr = (ScriptLimitCallback *) Tcl_GetHashValue(hPtr);
if (limitCBPtr != NULL && limitCBPtr->scriptObj != NULL) {
Tcl_SetObjResult(interp, limitCBPtr->scriptObj);
}
@@ -4602,11 +4619,11 @@ ChildCommandLimitCmd(
static int
ChildTimeLimitCmd(
- Tcl_Interp *interp, /* Current interpreter. */
- Tcl_Interp *childInterp, /* Interpreter being adjusted. */
- Tcl_Size consumedObjc, /* Number of args already parsed. */
- Tcl_Size objc, /* Total number of arguments. */
- Tcl_Obj *const objv[]) /* Argument objects. */
+ Tcl_Interp *interp, /* Current interpreter. */
+ Tcl_Interp *childInterp, /* Interpreter being adjusted. */
+ Tcl_Size consumedObjc, /* Number of args already parsed. */
+ Tcl_Size objc, /* Total number of arguments. */
+ Tcl_Obj *const objv[]) /* Argument objects. */
{
static const char *const options[] = {
"-command", "-granularity", "-milliseconds", "-seconds", NULL
@@ -4629,7 +4646,8 @@ ChildTimeLimitCmd(
if (interp == childInterp) {
Tcl_SetObjResult(interp, Tcl_NewStringObj(
"limits on current interpreter inaccessible", -1));
- Tcl_SetErrorCode(interp, "TCL", "OPERATION", "INTERP", "SELF", (char *)NULL);
+ Tcl_SetErrorCode(interp, "TCL", "OPERATION", "INTERP", "SELF",
+ (char *)NULL);
return TCL_ERROR;
}
@@ -4641,7 +4659,7 @@ ChildTimeLimitCmd(
key.type = TCL_LIMIT_TIME;
hPtr = Tcl_FindHashEntry(&iPtr->limit.callbacks, &key);
if (hPtr != NULL) {
- limitCBPtr = (ScriptLimitCallback *)Tcl_GetHashValue(hPtr);
+ limitCBPtr = (ScriptLimitCallback *) Tcl_GetHashValue(hPtr);
if (limitCBPtr != NULL && limitCBPtr->scriptObj != NULL) {
TclDictPut(NULL, dictPtr, options[0], limitCBPtr->scriptObj);
} else {
@@ -4684,7 +4702,7 @@ ChildTimeLimitCmd(
key.type = TCL_LIMIT_TIME;
hPtr = Tcl_FindHashEntry(&iPtr->limit.callbacks, &key);
if (hPtr != NULL) {
- limitCBPtr = (ScriptLimitCallback *)Tcl_GetHashValue(hPtr);
+ limitCBPtr = (ScriptLimitCallback *) Tcl_GetHashValue(hPtr);
if (limitCBPtr != NULL && limitCBPtr->scriptObj != NULL) {
Tcl_SetObjResult(interp, limitCBPtr->scriptObj);
}
@@ -4782,7 +4800,7 @@ ChildTimeLimitCmd(
"BADVALUE", (char *)NULL);
return TCL_ERROR;
}
- limitMoment.sec = (long long)tmp;
+ limitMoment.sec = (long long) tmp;
break;
}
}