From 54bafc704cf48ffee9929b86352c127bfc9c024d Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 5 Jul 2005 18:15:41 +0000 Subject: * generic/tclUtil.c: Converted TclFormatInt() into a macro. * generic/tclInt.decls: [RFE 1194015] * generic/tclInt.h: * generic/tclIntDecls.h: make genstubs * generic/tclStubInit.c: --- ChangeLog | 7 +++++ generic/tclInt.decls | 9 +++--- generic/tclInt.h | 14 ++++++++- generic/tclIntDecls.h | 15 +++------ generic/tclStubInit.c | 4 +-- generic/tclUtil.c | 87 +-------------------------------------------------- 6 files changed, 32 insertions(+), 104 deletions(-) diff --git a/ChangeLog b/ChangeLog index 83de81c..1d754cb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2005-07-05 Don Porter + * generic/tclUtil.c: Converted TclFormatInt() into a macro. + * generic/tclInt.decls: [RFE 1194015] + * generic/tclInt.h: + + * generic/tclIntDecls.h: make genstubs + * generic/tclStubInit.c: + * generic/tclNamesp.c: Allow for [namespace import] of a command * tests/namespace.test: over a previous [namespace import] of itself without throwing an error. [RFE 1230597] diff --git a/generic/tclInt.decls b/generic/tclInt.decls index f4f29c7..8af2153 100644 --- a/generic/tclInt.decls +++ b/generic/tclInt.decls @@ -12,7 +12,7 @@ # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# RCS: @(#) $Id: tclInt.decls,v 1.89 2005/05/14 20:46:44 das Exp $ +# RCS: @(#) $Id: tclInt.decls,v 1.90 2005/07/05 18:15:55 dgp Exp $ library tcl @@ -114,9 +114,10 @@ declare 22 generic { declare 23 generic { Proc *TclFindProc(Interp *iPtr, CONST char *procName) } -declare 24 generic { - int TclFormatInt(char *buffer, long n) -} +# Replaced with macro (see tclInt.h) in Tcl 8.5 +#declare 24 generic { +# int TclFormatInt(char *buffer, long n) +#} declare 25 generic { void TclFreePackageInfo(Interp *iPtr) } diff --git a/generic/tclInt.h b/generic/tclInt.h index 4219d86..7137443 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclInt.h,v 1.240 2005/06/24 20:07:21 kennykb Exp $ + * RCS: @(#) $Id: tclInt.h,v 1.241 2005/07/05 18:15:56 dgp Exp $ */ #ifndef _TCLINT @@ -2826,6 +2826,18 @@ MODULE_SCOPE void TclBNInitBignumFromLong( mp_int* bignum, long initVal ); /* *---------------------------------------------------------------- + * Macro used by the Tcl core to write the string rep of a long + * integer to a character buffer. + * The ANSI C "prototype" for this macro is: + * + * MODULE_SCOPE int TclFormatInt _ANSI_ARGS_((char *buf, long n)); + *---------------------------------------------------------------- + */ + +#define TclFormatInt(buf, n) sprintf((buf), "%ld", (long)(n)) + +/* + *---------------------------------------------------------------- * Macros used by the Tcl core to set a Tcl_Obj's numeric representation * avoiding the corresponding function calls in time critical parts of the * core. They should only be called on unshared objects. The ANSI C diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h index 3e5827e..b379778 100644 --- a/generic/tclIntDecls.h +++ b/generic/tclIntDecls.h @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIntDecls.h,v 1.80 2005/05/14 20:46:45 das Exp $ + * RCS: @(#) $Id: tclIntDecls.h,v 1.81 2005/07/05 18:15:56 dgp Exp $ */ #ifndef _TCLINTDECLS @@ -170,11 +170,7 @@ EXTERN int TclFindElement _ANSI_ARGS_((Tcl_Interp * interp, EXTERN Proc * TclFindProc _ANSI_ARGS_((Interp * iPtr, CONST char * procName)); #endif -#ifndef TclFormatInt_TCL_DECLARED -#define TclFormatInt_TCL_DECLARED -/* 24 */ -EXTERN int TclFormatInt _ANSI_ARGS_((char * buffer, long n)); -#endif +/* Slot 24 is reserved */ #ifndef TclFreePackageInfo_TCL_DECLARED #define TclFreePackageInfo_TCL_DECLARED /* 25 */ @@ -1200,7 +1196,7 @@ typedef struct TclIntStubs { void *reserved21; int (*tclFindElement) _ANSI_ARGS_((Tcl_Interp * interp, CONST char * listStr, int listLength, CONST char ** elementPtr, CONST char ** nextPtr, int * sizePtr, int * bracePtr)); /* 22 */ Proc * (*tclFindProc) _ANSI_ARGS_((Interp * iPtr, CONST char * procName)); /* 23 */ - int (*tclFormatInt) _ANSI_ARGS_((char * buffer, long n)); /* 24 */ + void *reserved24; void (*tclFreePackageInfo) _ANSI_ARGS_((Interp * iPtr)); /* 25 */ void *reserved26; void *reserved27; @@ -1507,10 +1503,7 @@ extern TclIntStubs *tclIntStubsPtr; #define TclFindProc \ (tclIntStubsPtr->tclFindProc) /* 23 */ #endif -#ifndef TclFormatInt -#define TclFormatInt \ - (tclIntStubsPtr->tclFormatInt) /* 24 */ -#endif +/* Slot 24 is reserved */ #ifndef TclFreePackageInfo #define TclFreePackageInfo \ (tclIntStubsPtr->tclFreePackageInfo) /* 25 */ diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index fa9d4a5..5a9c60b 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -8,7 +8,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStubInit.c,v 1.118 2005/06/07 02:07:27 dgp Exp $ + * RCS: @(#) $Id: tclStubInit.c,v 1.119 2005/07/05 18:15:58 dgp Exp $ */ #include "tclInt.h" @@ -103,7 +103,7 @@ TclIntStubs tclIntStubs = { NULL, /* 21 */ TclFindElement, /* 22 */ TclFindProc, /* 23 */ - TclFormatInt, /* 24 */ + NULL, /* 24 */ TclFreePackageInfo, /* 25 */ NULL, /* 26 */ NULL, /* 27 */ diff --git a/generic/tclUtil.c b/generic/tclUtil.c index 2c787c2..248a38d 100644 --- a/generic/tclUtil.c +++ b/generic/tclUtil.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclUtil.c,v 1.60 2005/05/14 20:46:46 das Exp $ + * RCS: @(#) $Id: tclUtil.c,v 1.61 2005/07/05 18:15:59 dgp Exp $ */ #include "tclInt.h" @@ -2196,91 +2196,6 @@ TclNeedSpace(start, end) /* *---------------------------------------------------------------------- * - * TclFormatInt -- - * - * This procedure formats an integer into a sequence of decimal digit - * characters in a buffer. If the integer is negative, a minus sign is - * inserted at the start of the buffer. A null character is inserted at - * the end of the formatted characters. It is the caller's - * responsibility to ensure that enough storage is available. This - * procedure has the effect of sprintf(buffer, "%d", n) but is faster. - * - * Results: - * An integer representing the number of characters formatted, not - * including the terminating \0. - * - * Side effects: - * The formatted characters are written into the storage pointer to - * by the "buffer" argument. - * - *---------------------------------------------------------------------- - */ - -int -TclFormatInt(buffer, n) - char *buffer; /* Points to the storage into which the - * formatted characters are written. */ - long n; /* The integer to format. */ -{ - long intVal; - int i; - int numFormatted, j; - char *digits = "0123456789"; - - /* - * Check first whether "n" is zero. - */ - - if (n == 0) { - buffer[0] = '0'; - buffer[1] = 0; - return 1; - } - - /* - * Check whether "n" is the maximum negative value. This is - * -2^(m-1) for an m-bit word, and has no positive equivalent; - * negating it produces the same value. - */ - - if (n == -n) { - sprintf(buffer, "%ld", n); - return strlen(buffer); - } - - /* - * Generate the characters of the result backwards in the buffer. - */ - - intVal = (n < 0? -n : n); - i = 0; - buffer[0] = '\0'; - do { - i++; - buffer[i] = digits[intVal % 10]; - intVal = intVal/10; - } while (intVal > 0); - if (n < 0) { - i++; - buffer[i] = '-'; - } - numFormatted = i; - - /* - * Now reverse the characters. - */ - - for (j = 0; j < i; j++, i--) { - char tmp = buffer[i]; - buffer[i] = buffer[j]; - buffer[j] = tmp; - } - return numFormatted; -} - -/* - *---------------------------------------------------------------------- - * * TclLooksLikeInt -- * * This procedure decides whether the leading characters of a -- cgit v0.12