diff options
Diffstat (limited to 'generic/tclScan.c')
| -rw-r--r-- | generic/tclScan.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/generic/tclScan.c b/generic/tclScan.c index cccdd7a..e4511bf 100644 --- a/generic/tclScan.c +++ b/generic/tclScan.c @@ -379,6 +379,17 @@ ValidateFormat( */ switch (ch) { + case 'z': + case 't': + if (sizeof(void *) > sizeof(int)) { + flags |= SCAN_LONGER; + } + format += TclUtfToUniChar(format, &ch); + break; + case 'L': + flags |= SCAN_BIG; + format += TclUtfToUniChar(format, &ch); + break; case 'l': if (*format == 'l') { flags |= SCAN_BIG; @@ -387,7 +398,8 @@ ValidateFormat( break; } /* FALLTHRU */ - case 'L': + case 'j': + case 'q': flags |= SCAN_LONGER; /* FALLTHRU */ case 'h': @@ -593,7 +605,7 @@ Tcl_ScanObjCmd( const char *format; int numVars, nconversions, totalVars = -1; int objIndex, offset, i, result, code; - long value; + int value; const char *string, *end, *baseString; char op = 0; int underflow = 0; @@ -986,27 +998,15 @@ Tcl_ScanObjCmd( } } } else { - if (TclGetLongFromObj(NULL, objPtr, &value) != TCL_OK) { + if (TclGetIntFromObj(NULL, objPtr, &value) != TCL_OK) { if (TclGetString(objPtr)[0] == '-') { - value = LONG_MIN; + value = INT_MIN; } else { - value = LONG_MAX; + value = INT_MAX; } } if ((flags & SCAN_UNSIGNED) && (value < 0)) { -#ifdef TCL_WIDE_INT_IS_LONG - mp_int big; - if (mp_init_u64(&big, (unsigned long)value) != MP_OKAY) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "insufficient memory to create bignum", -1)); - Tcl_SetErrorCode(interp, "TCL", "MEMORY", (char *)NULL); - return TCL_ERROR; - } else { - Tcl_SetBignumObj(objPtr, &big); - } -#else - Tcl_SetWideIntObj(objPtr, (unsigned long)value); -#endif + Tcl_SetWideIntObj(objPtr, (unsigned int)value); } else { TclSetIntObj(objPtr, value); } |
