summaryrefslogtreecommitdiffstats
path: root/generic/tclObj.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2022-09-18 13:59:26 (GMT)
committerdgp <dgp@users.sourceforge.net>2022-09-18 13:59:26 (GMT)
commit260c5156ed0ec2b944268320a267cee9a57cd547 (patch)
tree773b90fed82fe7a5f5884edf7308c8e725332c0d /generic/tclObj.c
parentd171543388eb0149647f980eb25c80a9bfdadd1e (diff)
downloadtcl-260c5156ed0ec2b944268320a267cee9a57cd547.zip
tcl-260c5156ed0ec2b944268320a267cee9a57cd547.tar.gz
tcl-260c5156ed0ec2b944268320a267cee9a57cd547.tar.bz2
TIP implementation to add/use public routines Tcl_GetNumber(FromObj).
Diffstat (limited to 'generic/tclObj.c')
-rw-r--r--generic/tclObj.c40
1 files changed, 38 insertions, 2 deletions
diff --git a/generic/tclObj.c b/generic/tclObj.c
index 5726596..f9b5bd3 100644
--- a/generic/tclObj.c
+++ b/generic/tclObj.c
@@ -3856,7 +3856,7 @@ TclSetBignumInternalRep(
/*
*----------------------------------------------------------------------
*
- * TclGetNumberFromObj --
+ * Tcl_GetNumberFromObj --
*
* Extracts a number (of any possible numeric type) from an object.
*
@@ -3874,7 +3874,7 @@ TclSetBignumInternalRep(
*/
int
-TclGetNumberFromObj(
+Tcl_GetNumberFromObj(
Tcl_Interp *interp,
Tcl_Obj *objPtr,
ClientData *clientDataPtr,
@@ -3909,6 +3909,42 @@ TclGetNumberFromObj(
TclParseNumber(interp, objPtr, "number", NULL, -1, NULL, 0));
return TCL_ERROR;
}
+
+int
+Tcl_GetNumber(
+ Tcl_Interp *interp,
+ const char *bytes,
+ size_t numBytes,
+ ClientData *clientDataPtr,
+ int *typePtr)
+{
+ static Tcl_ThreadDataKey numberCacheKey;
+ Tcl_Obj *objPtr = (Tcl_Obj *)Tcl_GetThreadData(&numberCacheKey,
+ sizeof(Tcl_Obj));
+
+ Tcl_FreeInternalRep(objPtr);
+
+ if (bytes == NULL) {
+ bytes = &tclEmptyString;
+ numBytes = 0;
+ }
+ if (numBytes == (size_t)TCL_INDEX_NONE) {
+ numBytes = strlen(bytes);
+ }
+ if (numBytes > INT_MAX) {
+ if (interp) {
+ Tcl_SetObjResult(interp, Tcl_ObjPrintf(
+ "max size for a Tcl value (%d bytes) exceeded", INT_MAX));
+ Tcl_SetErrorCode(interp, "TCL", "MEMORY", NULL);
+ }
+ return TCL_ERROR;
+ }
+
+ objPtr->bytes = (char *) bytes;
+ objPtr->length = numBytes;
+
+ return Tcl_GetNumberFromObj(interp, objPtr, clientDataPtr, typePtr);
+}
/*
*----------------------------------------------------------------------