diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | generic/tclBasic.c | 339 |
2 files changed, 117 insertions, 228 deletions
@@ -1,3 +1,9 @@ +2004-09-08 Don Porter <dgp@users.sourceforge.net> + + * generic/tclBasic.c (Tcl_CreateInterp): Removed obsolete + field for storing the string-based command procedure of built-in + commands. We no longer have any string-based built-in commands! + 2004-09-08 Kevin B. Kenny <kennykb@acm.org> * doc/clock.n: Corrected a buglet in the header information. diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 63b709a..83bc4a6 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclBasic.c,v 1.112 2004/08/18 19:58:58 kennykb Exp $ + * RCS: @(#) $Id: tclBasic.c,v 1.113 2004/09/08 17:04:01 dgp Exp $ */ #include "tclInt.h" @@ -38,7 +38,6 @@ extern TclStubs tclStubs; typedef struct { char *name; /* Name of object-based command. */ - Tcl_CmdProc *proc; /* String-based procedure for command. */ Tcl_ObjCmdProc *objProc; /* Object-based procedure for command. */ CompileProc *compileProc; /* Procedure called to compile command. */ int isSafe; /* If non-zero, command will be present @@ -52,207 +51,99 @@ typedef struct { static CmdInfo builtInCmds[] = { /* - * Commands in the generic core. Note that at least one of the proc or - * objProc members should be non-NULL. This avoids infinitely recursive - * calls between TclInvokeObjectCommand and TclInvokeStringCommand if a - * command name is computed at runtime and results in the name of a - * compiled command. + * Commands in the generic core. */ - {"append", (Tcl_CmdProc *) NULL, Tcl_AppendObjCmd, - TclCompileAppendCmd, 1}, - {"array", (Tcl_CmdProc *) NULL, Tcl_ArrayObjCmd, - (CompileProc *) NULL, 1}, - {"binary", (Tcl_CmdProc *) NULL, Tcl_BinaryObjCmd, - (CompileProc *) NULL, 1}, - {"break", (Tcl_CmdProc *) NULL, Tcl_BreakObjCmd, - TclCompileBreakCmd, 1}, - {"case", (Tcl_CmdProc *) NULL, Tcl_CaseObjCmd, - (CompileProc *) NULL, 1}, - {"catch", (Tcl_CmdProc *) NULL, Tcl_CatchObjCmd, - TclCompileCatchCmd, 1}, - {"concat", (Tcl_CmdProc *) NULL, Tcl_ConcatObjCmd, - (CompileProc *) NULL, 1}, - {"continue", (Tcl_CmdProc *) NULL, Tcl_ContinueObjCmd, - TclCompileContinueCmd, 1}, - {"dict", (Tcl_CmdProc *) NULL, Tcl_DictObjCmd, - (CompileProc *) NULL, 1}, - {"encoding", (Tcl_CmdProc *) NULL, Tcl_EncodingObjCmd, - (CompileProc *) NULL, 0}, - {"error", (Tcl_CmdProc *) NULL, Tcl_ErrorObjCmd, - (CompileProc *) NULL, 1}, - {"eval", (Tcl_CmdProc *) NULL, Tcl_EvalObjCmd, - (CompileProc *) NULL, 1}, - {"exit", (Tcl_CmdProc *) NULL, Tcl_ExitObjCmd, - (CompileProc *) NULL, 0}, - {"expr", (Tcl_CmdProc *) NULL, Tcl_ExprObjCmd, - TclCompileExprCmd, 1}, - {"fcopy", (Tcl_CmdProc *) NULL, Tcl_FcopyObjCmd, - (CompileProc *) NULL, 1}, - {"fileevent", (Tcl_CmdProc *) NULL, Tcl_FileEventObjCmd, - (CompileProc *) NULL, 1}, - {"for", (Tcl_CmdProc *) NULL, Tcl_ForObjCmd, - TclCompileForCmd, 1}, - {"foreach", (Tcl_CmdProc *) NULL, Tcl_ForeachObjCmd, - TclCompileForeachCmd, 1}, - {"format", (Tcl_CmdProc *) NULL, Tcl_FormatObjCmd, - (CompileProc *) NULL, 1}, - {"global", (Tcl_CmdProc *) NULL, Tcl_GlobalObjCmd, - (CompileProc *) NULL, 1}, - {"if", (Tcl_CmdProc *) NULL, Tcl_IfObjCmd, - TclCompileIfCmd, 1}, - {"incr", (Tcl_CmdProc *) NULL, Tcl_IncrObjCmd, - TclCompileIncrCmd, 1}, - {"info", (Tcl_CmdProc *) NULL, Tcl_InfoObjCmd, - (CompileProc *) NULL, 1}, - {"join", (Tcl_CmdProc *) NULL, Tcl_JoinObjCmd, - (CompileProc *) NULL, 1}, - {"lappend", (Tcl_CmdProc *) NULL, Tcl_LappendObjCmd, - TclCompileLappendCmd, 1}, - {"lassign", (Tcl_CmdProc *) NULL, Tcl_LassignObjCmd, - TclCompileLassignCmd, 1}, - {"lindex", (Tcl_CmdProc *) NULL, Tcl_LindexObjCmd, - TclCompileLindexCmd, 1}, - {"linsert", (Tcl_CmdProc *) NULL, Tcl_LinsertObjCmd, - (CompileProc *) NULL, 1}, - {"list", (Tcl_CmdProc *) NULL, Tcl_ListObjCmd, - TclCompileListCmd, 1}, - {"llength", (Tcl_CmdProc *) NULL, Tcl_LlengthObjCmd, - TclCompileLlengthCmd, 1}, - {"load", (Tcl_CmdProc *) NULL, Tcl_LoadObjCmd, - (CompileProc *) NULL, 0}, - {"lrange", (Tcl_CmdProc *) NULL, Tcl_LrangeObjCmd, - (CompileProc *) NULL, 1}, - {"lrepeat", (Tcl_CmdProc *) NULL, Tcl_LrepeatObjCmd, - (CompileProc *) NULL, 1}, - {"lreplace", (Tcl_CmdProc *) NULL, Tcl_LreplaceObjCmd, - (CompileProc *) NULL, 1}, - {"lsearch", (Tcl_CmdProc *) NULL, Tcl_LsearchObjCmd, - (CompileProc *) NULL, 1}, - {"lset", (Tcl_CmdProc *) NULL, Tcl_LsetObjCmd, - TclCompileLsetCmd, 1}, - {"lsort", (Tcl_CmdProc *) NULL, Tcl_LsortObjCmd, - (CompileProc *) NULL, 1}, - {"namespace", (Tcl_CmdProc *) NULL, Tcl_NamespaceObjCmd, - (CompileProc *) NULL, 1}, - {"package", (Tcl_CmdProc *) NULL, Tcl_PackageObjCmd, - (CompileProc *) NULL, 1}, - {"proc", (Tcl_CmdProc *) NULL, Tcl_ProcObjCmd, - (CompileProc *) NULL, 1}, - {"regexp", (Tcl_CmdProc *) NULL, Tcl_RegexpObjCmd, - TclCompileRegexpCmd, 1}, - {"regsub", (Tcl_CmdProc *) NULL, Tcl_RegsubObjCmd, - (CompileProc *) NULL, 1}, - {"rename", (Tcl_CmdProc *) NULL, Tcl_RenameObjCmd, - (CompileProc *) NULL, 1}, - {"return", (Tcl_CmdProc *) NULL, Tcl_ReturnObjCmd, - TclCompileReturnCmd, 1}, - {"scan", (Tcl_CmdProc *) NULL, Tcl_ScanObjCmd, - (CompileProc *) NULL, 1}, - {"set", (Tcl_CmdProc *) NULL, Tcl_SetObjCmd, - TclCompileSetCmd, 1}, - {"split", (Tcl_CmdProc *) NULL, Tcl_SplitObjCmd, - (CompileProc *) NULL, 1}, - {"string", (Tcl_CmdProc *) NULL, Tcl_StringObjCmd, - TclCompileStringCmd, 1}, - {"subst", (Tcl_CmdProc *) NULL, Tcl_SubstObjCmd, - (CompileProc *) NULL, 1}, - {"switch", (Tcl_CmdProc *) NULL, Tcl_SwitchObjCmd, - TclCompileSwitchCmd, 1}, - {"trace", (Tcl_CmdProc *) NULL, Tcl_TraceObjCmd, - (CompileProc *) NULL, 1}, - {"unload", (Tcl_CmdProc *) NULL, Tcl_UnloadObjCmd, - (CompileProc *) NULL, 1}, - {"unset", (Tcl_CmdProc *) NULL, Tcl_UnsetObjCmd, - (CompileProc *) NULL, 1}, - {"uplevel", (Tcl_CmdProc *) NULL, Tcl_UplevelObjCmd, - (CompileProc *) NULL, 1}, - {"upvar", (Tcl_CmdProc *) NULL, Tcl_UpvarObjCmd, - (CompileProc *) NULL, 1}, - {"variable", (Tcl_CmdProc *) NULL, Tcl_VariableObjCmd, - (CompileProc *) NULL, 1}, - {"while", (Tcl_CmdProc *) NULL, Tcl_WhileObjCmd, - TclCompileWhileCmd, 1}, + {"append", Tcl_AppendObjCmd, TclCompileAppendCmd, 1}, + {"array", Tcl_ArrayObjCmd, (CompileProc *) NULL, 1}, + {"binary", Tcl_BinaryObjCmd, (CompileProc *) NULL, 1}, + {"break", Tcl_BreakObjCmd, TclCompileBreakCmd, 1}, + {"case", Tcl_CaseObjCmd, (CompileProc *) NULL, 1}, + {"catch", Tcl_CatchObjCmd, TclCompileCatchCmd, 1}, + {"concat", Tcl_ConcatObjCmd, (CompileProc *) NULL, 1}, + {"continue", Tcl_ContinueObjCmd, TclCompileContinueCmd, 1}, + {"dict", Tcl_DictObjCmd, (CompileProc *) NULL, 1}, + {"encoding", Tcl_EncodingObjCmd, (CompileProc *) NULL, 0}, + {"error", Tcl_ErrorObjCmd, (CompileProc *) NULL, 1}, + {"eval", Tcl_EvalObjCmd, (CompileProc *) NULL, 1}, + {"exit", Tcl_ExitObjCmd, (CompileProc *) NULL, 0}, + {"expr", Tcl_ExprObjCmd, TclCompileExprCmd, 1}, + {"fcopy", Tcl_FcopyObjCmd, (CompileProc *) NULL, 1}, + {"fileevent", Tcl_FileEventObjCmd, (CompileProc *) NULL, 1}, + {"for", Tcl_ForObjCmd, TclCompileForCmd, 1}, + {"foreach", Tcl_ForeachObjCmd, TclCompileForeachCmd, 1}, + {"format", Tcl_FormatObjCmd, (CompileProc *) NULL, 1}, + {"global", Tcl_GlobalObjCmd, (CompileProc *) NULL, 1}, + {"if", Tcl_IfObjCmd, TclCompileIfCmd, 1}, + {"incr", Tcl_IncrObjCmd, TclCompileIncrCmd, 1}, + {"info", Tcl_InfoObjCmd, (CompileProc *) NULL, 1}, + {"join", Tcl_JoinObjCmd, (CompileProc *) NULL, 1}, + {"lappend", Tcl_LappendObjCmd, TclCompileLappendCmd, 1}, + {"lassign", Tcl_LassignObjCmd, TclCompileLassignCmd, 1}, + {"lindex", Tcl_LindexObjCmd, TclCompileLindexCmd, 1}, + {"linsert", Tcl_LinsertObjCmd, (CompileProc *) NULL, 1}, + {"list", Tcl_ListObjCmd, TclCompileListCmd, 1}, + {"llength", Tcl_LlengthObjCmd, TclCompileLlengthCmd, 1}, + {"load", Tcl_LoadObjCmd, (CompileProc *) NULL, 0}, + {"lrange", Tcl_LrangeObjCmd, (CompileProc *) NULL, 1}, + {"lrepeat", Tcl_LrepeatObjCmd, (CompileProc *) NULL, 1}, + {"lreplace", Tcl_LreplaceObjCmd, (CompileProc *) NULL, 1}, + {"lsearch", Tcl_LsearchObjCmd, (CompileProc *) NULL, 1}, + {"lset", Tcl_LsetObjCmd, TclCompileLsetCmd, 1}, + {"lsort", Tcl_LsortObjCmd, (CompileProc *) NULL, 1}, + {"namespace", Tcl_NamespaceObjCmd, (CompileProc *) NULL, 1}, + {"package", Tcl_PackageObjCmd, (CompileProc *) NULL, 1}, + {"proc", Tcl_ProcObjCmd, (CompileProc *) NULL, 1}, + {"regexp", Tcl_RegexpObjCmd, TclCompileRegexpCmd, 1}, + {"regsub", Tcl_RegsubObjCmd, (CompileProc *) NULL, 1}, + {"rename", Tcl_RenameObjCmd, (CompileProc *) NULL, 1}, + {"return", Tcl_ReturnObjCmd, TclCompileReturnCmd, 1}, + {"scan", Tcl_ScanObjCmd, (CompileProc *) NULL, 1}, + {"set", Tcl_SetObjCmd, TclCompileSetCmd, 1}, + {"split", Tcl_SplitObjCmd, (CompileProc *) NULL, 1}, + {"string", Tcl_StringObjCmd, TclCompileStringCmd, 1}, + {"subst", Tcl_SubstObjCmd, (CompileProc *) NULL, 1}, + {"switch", Tcl_SwitchObjCmd, TclCompileSwitchCmd, 1}, + {"trace", Tcl_TraceObjCmd, (CompileProc *) NULL, 1}, + {"unload", Tcl_UnloadObjCmd, (CompileProc *) NULL, 1}, + {"unset", Tcl_UnsetObjCmd, (CompileProc *) NULL, 1}, + {"uplevel", Tcl_UplevelObjCmd, (CompileProc *) NULL, 1}, + {"upvar", Tcl_UpvarObjCmd, (CompileProc *) NULL, 1}, + {"variable", Tcl_VariableObjCmd, (CompileProc *) NULL, 1}, + {"while", Tcl_WhileObjCmd, TclCompileWhileCmd, 1}, /* * Commands in the UNIX core: */ #ifndef TCL_GENERIC_ONLY - {"after", (Tcl_CmdProc *) NULL, Tcl_AfterObjCmd, - (CompileProc *) NULL, 1}, - {"cd", (Tcl_CmdProc *) NULL, Tcl_CdObjCmd, - (CompileProc *) NULL, 0}, - {"close", (Tcl_CmdProc *) NULL, Tcl_CloseObjCmd, - (CompileProc *) NULL, 1}, - {"eof", (Tcl_CmdProc *) NULL, Tcl_EofObjCmd, - (CompileProc *) NULL, 1}, - {"fblocked", (Tcl_CmdProc *) NULL, Tcl_FblockedObjCmd, - (CompileProc *) NULL, 1}, - {"fconfigure", (Tcl_CmdProc *) NULL, Tcl_FconfigureObjCmd, - (CompileProc *) NULL, 0}, - {"file", (Tcl_CmdProc *) NULL, Tcl_FileObjCmd, - (CompileProc *) NULL, 0}, - {"flush", (Tcl_CmdProc *) NULL, Tcl_FlushObjCmd, - (CompileProc *) NULL, 1}, - {"gets", (Tcl_CmdProc *) NULL, Tcl_GetsObjCmd, - (CompileProc *) NULL, 1}, - {"glob", (Tcl_CmdProc *) NULL, Tcl_GlobObjCmd, - (CompileProc *) NULL, 0}, - {"open", (Tcl_CmdProc *) NULL, Tcl_OpenObjCmd, - (CompileProc *) NULL, 0}, - {"pid", (Tcl_CmdProc *) NULL, Tcl_PidObjCmd, - (CompileProc *) NULL, 1}, - {"puts", (Tcl_CmdProc *) NULL, Tcl_PutsObjCmd, - (CompileProc *) NULL, 1}, - {"pwd", (Tcl_CmdProc *) NULL, Tcl_PwdObjCmd, - (CompileProc *) NULL, 0}, - {"read", (Tcl_CmdProc *) NULL, Tcl_ReadObjCmd, - (CompileProc *) NULL, 1}, - {"seek", (Tcl_CmdProc *) NULL, Tcl_SeekObjCmd, - (CompileProc *) NULL, 1}, - {"socket", (Tcl_CmdProc *) NULL, Tcl_SocketObjCmd, - (CompileProc *) NULL, 0}, - {"tell", (Tcl_CmdProc *) NULL, Tcl_TellObjCmd, - (CompileProc *) NULL, 1}, - {"time", (Tcl_CmdProc *) NULL, Tcl_TimeObjCmd, - (CompileProc *) NULL, 1}, - {"update", (Tcl_CmdProc *) NULL, Tcl_UpdateObjCmd, - (CompileProc *) NULL, 1}, - {"vwait", (Tcl_CmdProc *) NULL, Tcl_VwaitObjCmd, - (CompileProc *) NULL, 1}, - {"exec", (Tcl_CmdProc *) NULL, Tcl_ExecObjCmd, - (CompileProc *) NULL, 0}, - {"source", (Tcl_CmdProc *) NULL, Tcl_SourceObjCmd, - (CompileProc *) NULL, 0}, + {"after", Tcl_AfterObjCmd, (CompileProc *) NULL, 1}, + {"cd", Tcl_CdObjCmd, (CompileProc *) NULL, 0}, + {"close", Tcl_CloseObjCmd, (CompileProc *) NULL, 1}, + {"eof", Tcl_EofObjCmd, (CompileProc *) NULL, 1}, + {"fblocked", Tcl_FblockedObjCmd, (CompileProc *) NULL, 1}, + {"fconfigure", Tcl_FconfigureObjCmd, (CompileProc *) NULL, 0}, + {"file", Tcl_FileObjCmd, (CompileProc *) NULL, 0}, + {"flush", Tcl_FlushObjCmd, (CompileProc *) NULL, 1}, + {"gets", Tcl_GetsObjCmd, (CompileProc *) NULL, 1}, + {"glob", Tcl_GlobObjCmd, (CompileProc *) NULL, 0}, + {"open", Tcl_OpenObjCmd, (CompileProc *) NULL, 0}, + {"pid", Tcl_PidObjCmd, (CompileProc *) NULL, 1}, + {"puts", Tcl_PutsObjCmd, (CompileProc *) NULL, 1}, + {"pwd", Tcl_PwdObjCmd, (CompileProc *) NULL, 0}, + {"read", Tcl_ReadObjCmd, (CompileProc *) NULL, 1}, + {"seek", Tcl_SeekObjCmd, (CompileProc *) NULL, 1}, + {"socket", Tcl_SocketObjCmd, (CompileProc *) NULL, 0}, + {"tell", Tcl_TellObjCmd, (CompileProc *) NULL, 1}, + {"time", Tcl_TimeObjCmd, (CompileProc *) NULL, 1}, + {"update", Tcl_UpdateObjCmd, (CompileProc *) NULL, 1}, + {"vwait", Tcl_VwaitObjCmd, (CompileProc *) NULL, 1}, + {"exec", Tcl_ExecObjCmd, (CompileProc *) NULL, 0}, + {"source", Tcl_SourceObjCmd, (CompileProc *) NULL, 0}, #endif /* TCL_GENERIC_ONLY */ - {NULL, (Tcl_CmdProc *) NULL, (Tcl_ObjCmdProc *) NULL, - (CompileProc *) NULL, 0} + {NULL, (Tcl_ObjCmdProc *) NULL, (CompileProc *) NULL, 0} }; -static const CmdInfo clockCmds [] = { - /* - * Commands in the '::tcl::clock' namespace that support the - * 'clock' ensemble - */ - - { "::tcl::clock::clicks", (Tcl_CmdProc*) NULL, - TclClockClicksObjCmd, (CompileProc*) NULL, 0 }, - { "::tcl::clock::microseconds", (Tcl_CmdProc*) NULL, - TclClockMicrosecondsObjCmd, (CompileProc*) NULL, 0 }, - { "::tcl::clock::milliseconds", (Tcl_CmdProc*) NULL, - TclClockMillisecondsObjCmd, (CompileProc*) NULL, 0 }, - { "::tcl::clock::seconds", (Tcl_CmdProc*) NULL, - TclClockSecondsObjCmd, (CompileProc*) NULL, 0 }, - { "::tcl::clock::Localtime", (Tcl_CmdProc*) NULL, - TclClockLocaltimeObjCmd, (CompileProc*) NULL, 0 }, - { "::tcl::clock::Mktime", (Tcl_CmdProc*) NULL, - TclClockMktimeObjCmd, (CompileProc*) NULL, 0 }, - { "::tcl::clock::Oldscan", (Tcl_CmdProc*) NULL, - TclClockOldscanObjCmd, (CompileProc*) NULL, 0 }, - { NULL, (Tcl_CmdProc *) NULL, - (Tcl_ObjCmdProc *) NULL, (CompileProc *) NULL, 0 } -}; /* *---------------------------------------------------------------------- @@ -450,15 +341,13 @@ Tcl_CreateInterp() * but no Tcl_CmdProc, set the Tcl_CmdProc to TclInvokeObjectCommand. */ - for (cmdInfoPtr = builtInCmds; cmdInfoPtr->name != NULL; - cmdInfoPtr++) { + for (cmdInfoPtr = builtInCmds; cmdInfoPtr->name != NULL; cmdInfoPtr++) { int new; Tcl_HashEntry *hPtr; - if ((cmdInfoPtr->proc == (Tcl_CmdProc *) NULL) - && (cmdInfoPtr->objProc == (Tcl_ObjCmdProc *) NULL) + if ((cmdInfoPtr->objProc == (Tcl_ObjCmdProc *) NULL) && (cmdInfoPtr->compileProc == (CompileProc *) NULL)) { - Tcl_Panic("Tcl_CreateInterp: builtin command with NULL string and object command procs and a NULL compile proc\n"); + Tcl_Panic("Tcl_CreateInterp: builtin command with NULL object command proc and a NULL compile proc\n"); } hPtr = Tcl_CreateHashEntry(&iPtr->globalNsPtr->cmdTable, @@ -470,20 +359,10 @@ Tcl_CreateInterp() cmdPtr->refCount = 1; cmdPtr->cmdEpoch = 0; cmdPtr->compileProc = cmdInfoPtr->compileProc; - if (cmdInfoPtr->proc == (Tcl_CmdProc *) NULL) { - cmdPtr->proc = TclInvokeObjectCommand; - cmdPtr->clientData = (ClientData) cmdPtr; - } else { - cmdPtr->proc = cmdInfoPtr->proc; - cmdPtr->clientData = (ClientData) NULL; - } - if (cmdInfoPtr->objProc == (Tcl_ObjCmdProc *) NULL) { - cmdPtr->objProc = TclInvokeStringCommand; - cmdPtr->objClientData = (ClientData) cmdPtr; - } else { - cmdPtr->objProc = cmdInfoPtr->objProc; - cmdPtr->objClientData = (ClientData) NULL; - } + cmdPtr->proc = TclInvokeObjectCommand; + cmdPtr->clientData = (ClientData) cmdPtr; + cmdPtr->objProc = cmdInfoPtr->objProc; + cmdPtr->objClientData = (ClientData) NULL; cmdPtr->deleteProc = NULL; cmdPtr->deleteData = (ClientData) NULL; cmdPtr->flags = 0; @@ -498,18 +377,27 @@ Tcl_CreateInterp() * Tcl_CreateObjCommand, since they aren't in the global namespace. */ - for ( cmdInfoPtr = clockCmds; cmdInfoPtr->name != NULL; cmdInfoPtr++) { - if ( cmdInfoPtr->objProc == NULL ) { - Tcl_CreateCommand( interp, cmdInfoPtr->name, - cmdInfoPtr->proc, (ClientData) NULL, - (Tcl_CmdDeleteProc*) NULL ); - } else { - Tcl_CreateObjCommand( interp, cmdInfoPtr->name, - cmdInfoPtr->objProc, (ClientData) NULL, - (Tcl_CmdDeleteProc*) NULL ); - } - } - + Tcl_CreateObjCommand( interp, "::tcl::clock::clicks", + TclClockClicksObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); + Tcl_CreateObjCommand( interp, "::tcl::clock::microseconds", + TclClockMicrosecondsObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); + Tcl_CreateObjCommand( interp, "::tcl::clock::milliseconds", + TclClockMillisecondsObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); + Tcl_CreateObjCommand( interp, "::tcl::clock::seconds", + TclClockSecondsObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); + Tcl_CreateObjCommand( interp, "::tcl::clock::Localtime", + TclClockLocaltimeObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); + Tcl_CreateObjCommand( interp, "::tcl::clock::Mktime", + TclClockMktimeObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); + Tcl_CreateObjCommand( interp, "::tcl::clock::Oldscan", + TclClockOldscanObjCmd, (ClientData) NULL, + (Tcl_CmdDeleteProc*) NULL ); /* * Register the builtin math functions. @@ -655,11 +543,6 @@ TclHideUnsafeCommands(interp) Tcl_HideCommand(interp, cmdInfoPtr->name, cmdInfoPtr->name); } } - for (cmdInfoPtr = clockCmds; cmdInfoPtr->name != NULL; cmdInfoPtr++) { - if (!cmdInfoPtr->isSafe) { - Tcl_HideCommand(interp, cmdInfoPtr->name, cmdInfoPtr->name); - } - } return TCL_OK; } |