summaryrefslogtreecommitdiffstats
path: root/generic/tclStringObj.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-02-06 09:55:48 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-02-06 09:55:48 (GMT)
commit11cb1fe5f6062bb27f3bc8a3792919d5bb0a4f32 (patch)
tree1488cfac7e5d08e91879ef93dcb12f062fe1f0b1 /generic/tclStringObj.c
parentfb8dc7308f2ec68027c5b169dd91a5012f785eed (diff)
parent07e94bea99230a585a50de7ec548831e13bf79f7 (diff)
downloadtcl-11cb1fe5f6062bb27f3bc8a3792919d5bb0a4f32.zip
tcl-11cb1fe5f6062bb27f3bc8a3792919d5bb0a4f32.tar.gz
tcl-11cb1fe5f6062bb27f3bc8a3792919d5bb0a4f32.tar.bz2
Merge 8.7
Diffstat (limited to 'generic/tclStringObj.c')
-rw-r--r--generic/tclStringObj.c38
1 files changed, 21 insertions, 17 deletions
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index 08f2b40..d77a56b 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -2665,25 +2665,29 @@ Tcl_Format(
*/
static Tcl_Obj *
-NewIntObj(
+NewLongObj(
char c,
- Tcl_WideUInt max,
- Tcl_WideInt value)
+ long value)
{
- if (!((max+1) & (Tcl_WideUInt)value)) {
- /* sign-bit is not set, so handle the positive value */
- return Tcl_NewWideIntObj(value & (Tcl_WideInt)max);
+ if ((value < 0) && strchr("puoxX", c)) {
+ Tcl_Obj *obj;
+ TclNewUIntObj(obj, (unsigned long)value);
+ return obj;
}
+ return Tcl_NewWideIntObj((long)value);
+}
- if (strchr("puoxX", c) && (max == WIDE_MAX)) {
- /* Value > WIDE_MAX, so we need to use bignum */
- mp_int bignumValue;
- if (mp_init_u64(&bignumValue, (uint64_t)value) != MP_OKAY) {
- Tcl_Panic("%s: memory overflow", "AppendPrintfToObjVA");
- }
- return Tcl_NewBignumObj(&bignumValue);
+static Tcl_Obj *
+NewWideIntObj(
+ char c,
+ Tcl_WideInt value)
+{
+ if ((value < 0) && strchr("puoxX", c)) {
+ Tcl_Obj *obj;
+ TclNewUIntObj(obj, (Tcl_WideUInt)value);
+ return obj;
}
- return Tcl_NewWideIntObj(value | ~(Tcl_WideInt)max);
+ return Tcl_NewWideIntObj(value);
}
static void
@@ -2769,15 +2773,15 @@ AppendPrintfToObjVA(
switch (size) {
case -1:
case 0:
- Tcl_ListObjAppendElement(NULL, list, NewIntObj(*p, INT_MAX,
+ Tcl_ListObjAppendElement(NULL, list, Tcl_NewIntObj(
va_arg(argList, int)));
break;
case 1:
- Tcl_ListObjAppendElement(NULL, list, NewIntObj(*p, LONG_MAX,
+ Tcl_ListObjAppendElement(NULL, list, NewLongObj(*p,
va_arg(argList, long)));
break;
case 2:
- Tcl_ListObjAppendElement(NULL, list, NewIntObj(*p, WIDE_MAX,
+ Tcl_ListObjAppendElement(NULL, list, NewWideIntObj(*p,
va_arg(argList, Tcl_WideInt)));
break;
case 3: