diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2024-08-15 15:09:39 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2024-08-15 15:09:39 (GMT) |
commit | cc07fc14a8e04fe082c8a1a30484e6f85d74dcbd (patch) | |
tree | d607cc1152ce91568a6269c9289ede6b08421f3d /generic | |
parent | 6871783264c56b6393cafb1c62951045bf1b4728 (diff) | |
download | tcl-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.c | 330 |
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; } } |