Tcl Source Code

Artifact [2db6c1efd5]
Login

Artifact 2db6c1efd51fa3dda934f6a87bbbcfc84b0e64dd:

Attachment "tclBasic.c-patch" to ticket [1530474fff] added by afredd 2006-07-28 23:08:14.
--- tclBasic.c-orig	2006-07-28 16:48:24.093750000 +0100
+++ tclBasic.c	2006-07-28 16:53:45.531250000 +0100
@@ -200,39 +200,40 @@
  */
 
 typedef struct {
-    CONST char* name;		/* Name of the function */
+    CONST char* tail;		/* The tail name of the function. The full
+                                 * name is "::tcl::mathfunc::<tail>". */
     Tcl_ObjCmdProc* objCmdProc;	/* Function that evaluates the function */
     ClientData clientData;	/* Client data for the function */
 } BuiltinFuncDef;
 static BuiltinFuncDef BuiltinFuncTable[] = {
-    { "::tcl::mathfunc::abs",	ExprAbsFunc,	NULL 			},
-    { "::tcl::mathfunc::acos",	ExprUnaryFunc,	(ClientData) acos 	},
-    { "::tcl::mathfunc::asin",	ExprUnaryFunc,	(ClientData) asin 	},
-    { "::tcl::mathfunc::atan",	ExprUnaryFunc,	(ClientData) atan 	},
-    { "::tcl::mathfunc::atan2",	ExprBinaryFunc,	(ClientData) atan2 	},
-    { "::tcl::mathfunc::bool",	ExprBoolFunc,	NULL			},
-    { "::tcl::mathfunc::ceil",	ExprCeilFunc,	NULL		 	},
-    { "::tcl::mathfunc::cos",	ExprUnaryFunc,	(ClientData) cos 	},
-    { "::tcl::mathfunc::cosh",	ExprUnaryFunc,	(ClientData) cosh	},
-    { "::tcl::mathfunc::double",ExprDoubleFunc,	NULL			},
-    { "::tcl::mathfunc::entier",ExprEntierFunc,	NULL			},
-    { "::tcl::mathfunc::exp",	ExprUnaryFunc,	(ClientData) exp	},
-    { "::tcl::mathfunc::floor",	ExprFloorFunc,	NULL		 	},
-    { "::tcl::mathfunc::fmod",	ExprBinaryFunc,	(ClientData) fmod	},
-    { "::tcl::mathfunc::hypot",	ExprBinaryFunc,	(ClientData) hypot 	},
-    { "::tcl::mathfunc::int",	ExprIntFunc,	NULL			},
-    { "::tcl::mathfunc::log",	ExprUnaryFunc,	(ClientData) log 	},
-    { "::tcl::mathfunc::log10",	ExprUnaryFunc,	(ClientData) log10 	},
-    { "::tcl::mathfunc::pow",	ExprBinaryFunc,	(ClientData) pow 	},
-    { "::tcl::mathfunc::rand",	ExprRandFunc,	NULL			},
-    { "::tcl::mathfunc::round",	ExprRoundFunc,	NULL			},
-    { "::tcl::mathfunc::sin",	ExprUnaryFunc,	(ClientData) sin 	},
-    { "::tcl::mathfunc::sinh",	ExprUnaryFunc,	(ClientData) sinh 	},
-    { "::tcl::mathfunc::sqrt",	ExprSqrtFunc,	NULL		 	},
-    { "::tcl::mathfunc::srand",	ExprSrandFunc,	NULL			},
-    { "::tcl::mathfunc::tan",	ExprUnaryFunc,	(ClientData) tan 	},
-    { "::tcl::mathfunc::tanh",	ExprUnaryFunc,	(ClientData) tanh 	},
-    { "::tcl::mathfunc::wide",	ExprWideFunc,	NULL		 	},
+    { "abs",		ExprAbsFunc,	NULL 			},
+    { "acos",		ExprUnaryFunc,	(ClientData) acos 	},
+    { "asin",		ExprUnaryFunc,	(ClientData) asin 	},
+    { "atan",		ExprUnaryFunc,	(ClientData) atan 	},
+    { "atan2",		ExprBinaryFunc,	(ClientData) atan2 	},
+    { "bool",		ExprBoolFunc,	NULL			},
+    { "ceil",		ExprCeilFunc,	NULL		 	},
+    { "cos",		ExprUnaryFunc,	(ClientData) cos 	},
+    { "cosh",		ExprUnaryFunc,	(ClientData) cosh	},
+    { "double",		ExprDoubleFunc,	NULL			},
+    { "entier",		ExprEntierFunc,	NULL			},
+    { "exp",		ExprUnaryFunc,	(ClientData) exp	},
+    { "floor",		ExprFloorFunc,	NULL		 	},
+    { "fmod",		ExprBinaryFunc,	(ClientData) fmod	},
+    { "hypot",		ExprBinaryFunc,	(ClientData) hypot 	},
+    { "int",		ExprIntFunc,	NULL			},
+    { "log",		ExprUnaryFunc,	(ClientData) log 	},
+    { "log10",		ExprUnaryFunc,	(ClientData) log10 	},
+    { "pow",		ExprBinaryFunc,	(ClientData) pow 	},
+    { "rand",		ExprRandFunc,	NULL			},
+    { "round",		ExprRoundFunc,	NULL			},
+    { "sin",		ExprUnaryFunc,	(ClientData) sin 	},
+    { "sinh",		ExprUnaryFunc,	(ClientData) sinh 	},
+    { "sqrt",		ExprSqrtFunc,	NULL		 	},
+    { "srand",		ExprSrandFunc,	NULL			},
+    { "tan",		ExprUnaryFunc,	(ClientData) tan 	},
+    { "tanh",		ExprUnaryFunc,	(ClientData) tanh 	},
+    { "wide",		ExprWideFunc,	NULL		 	},
     { NULL, NULL, NULL }
 };
 
@@ -271,6 +272,8 @@
 #ifdef TCL_COMPILE_STATS
     ByteCodeStats *statsPtr;
 #endif /* TCL_COMPILE_STATS */
+    char mathFuncName[32]; /* holds "::tcl::mathfunc::<tail>" */
+    char *mathFuncTail; /* points to end of "::tcl::mathfunc::" in mathFuncName */
 
     TclInitSubsystems();
 
@@ -502,16 +505,17 @@
 	Tcl_Panic("Can't create math function namespace");
     }
     i = 0;
+    strcpy(mathFuncName, "::tcl::mathfunc::");
+    mathFuncTail = mathFuncName + (sizeof("::tcl::mathfunc::") - 1);
     for (;;) {
-	CONST char* tail;
 	builtinFuncPtr = &(BuiltinFuncTable[i++]);
-	if (builtinFuncPtr->name == NULL) {
+	if (builtinFuncPtr->tail == NULL) {
 	    break;
 	}
-	Tcl_CreateObjCommand(interp, builtinFuncPtr->name,
+	strcpy(mathFuncTail, builtinFuncPtr->tail);
+	Tcl_CreateObjCommand(interp, mathFuncName,
 		builtinFuncPtr->objCmdProc, builtinFuncPtr->clientData, NULL);
-	tail = builtinFuncPtr->name + strlen("::tcl::mathfunc::");
-	Tcl_Export(interp, mathfuncNSPtr, tail, 0);
+	Tcl_Export(interp, mathfuncNSPtr, builtinFuncPtr->tail, 0);
     }
 
     /*