diff options
Diffstat (limited to 'generic/tclGet.c')
-rw-r--r-- | generic/tclGet.c | 58 |
1 files changed, 52 insertions, 6 deletions
diff --git a/generic/tclGet.c b/generic/tclGet.c index 97e8c7b..28734d1 100644 --- a/generic/tclGet.c +++ b/generic/tclGet.c @@ -36,7 +36,7 @@ int Tcl_GetInt( Tcl_Interp *interp, /* Interpreter to use for error reporting. */ - const char *src, /* String containing a (possibly signed) + CONST char *src, /* String containing a (possibly signed) * integer in a form acceptable to * Tcl_GetIntFromObj(). */ int *intPtr) /* Place to store converted result. */ @@ -60,6 +60,52 @@ Tcl_GetInt( /* *---------------------------------------------------------------------- * + * TclGetLong -- + * + * Given a string, produce the corresponding long integer value. This + * routine is a version of Tcl_GetInt but returns a "long" instead of an + * "int" (a difference that matters on 64-bit architectures). + * + * Results: + * The return value is normally TCL_OK; in this case *longPtr will be set + * to the long integer value equivalent to src. If src is improperly + * formed then TCL_ERROR is returned and an error message will be left in + * the interp's result if interp is non-NULL. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +int +TclGetLong( + Tcl_Interp *interp, /* Interpreter used for error reporting if not + * NULL. */ + CONST char *src, /* String containing a (possibly signed) long + * integer in a form acceptable to + * Tcl_GetLongFromObj(). */ + long *longPtr) /* Place to store converted long result. */ +{ + Tcl_Obj obj; + int code; + + obj.refCount = 1; + obj.bytes = (char *) src; + obj.length = strlen(src); + obj.typePtr = NULL; + + code = Tcl_GetLongFromObj(interp, &obj, longPtr); + if (obj.refCount > 1) { + Tcl_Panic("invalid sharing of Tcl_Obj on C stack"); + } + TclFreeIntRep(&obj); + return code; +} + +/* + *---------------------------------------------------------------------- + * * Tcl_GetDouble -- * * Given a string, produce the corresponding double-precision @@ -80,8 +126,8 @@ Tcl_GetInt( int Tcl_GetDouble( Tcl_Interp *interp, /* Interpreter used for error reporting. */ - const char *src, /* String containing a floating-point number - * in a form acceptable to + CONST char *src, /* String containing a floating-point number + * in a form acceptable to * Tcl_GetDoubleFromObj(). */ double *doublePtr) /* Place to store converted result. */ { @@ -124,8 +170,8 @@ Tcl_GetDouble( int Tcl_GetBoolean( Tcl_Interp *interp, /* Interpreter used for error reporting. */ - const char *src, /* String containing one of the boolean values - * 1, 0, true, false, yes, no, on, off. */ + CONST char *src, /* String containing one of the boolean values + * 1, 0, true, false, yes, no, on off. */ int *boolPtr) /* Place to store converted result, which will * be 0 or 1. */ { @@ -137,7 +183,7 @@ Tcl_GetBoolean( obj.length = strlen(src); obj.typePtr = NULL; - code = TclSetBooleanFromAny(interp, &obj); + code = Tcl_ConvertToType(interp, &obj, &tclBooleanType); if (obj.refCount > 1) { Tcl_Panic("invalid sharing of Tcl_Obj on C stack"); } |