diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-06-14 07:54:51 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-06-14 07:54:51 (GMT) |
commit | b7a1ba3ba40ba71b65cefedc057bbccf0323f4a5 (patch) | |
tree | fd3f725641f7ff06608e6e77394d4bcefb5ef3ec /generic | |
parent | f019737860823b97cfde68d64a5175fa21c3a967 (diff) | |
parent | 78e17f7f0cce0233cc1009b3f7c3aa2ea32763d7 (diff) | |
download | tcl-b7a1ba3ba40ba71b65cefedc057bbccf0323f4a5.zip tcl-b7a1ba3ba40ba71b65cefedc057bbccf0323f4a5.tar.gz tcl-b7a1ba3ba40ba71b65cefedc057bbccf0323f4a5.tar.bz2 |
Rebase to core-8-6-branch (who told that fossil doesn't know how to rebase ....)
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclLink.c | 4 | ||||
-rw-r--r-- | generic/tclStrToD.c | 16 | ||||
-rw-r--r-- | generic/tclStringObj.c | 4 |
3 files changed, 21 insertions, 3 deletions
diff --git a/generic/tclLink.c b/generic/tclLink.c index 7d1e3a8..70fe7d1 100644 --- a/generic/tclLink.c +++ b/generic/tclLink.c @@ -677,7 +677,7 @@ SetInvalidRealFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr) { /* * This function checks for integer representations, which are valid * when linking with C variables, but which are invalid in other - * contexts in Tcl. Handled are "+", "-", "", "0x", "0b" and "0o" + * contexts in Tcl. Handled are "+", "-", "", "0x", "0b", "0d" and "0o" * (upperand lowercase). See bug [39f6304c2e]. */ int @@ -687,7 +687,7 @@ GetInvalidIntFromObj(Tcl_Obj *objPtr, const char *str = TclGetString(objPtr); if ((objPtr->length == 0) || - ((objPtr->length == 2) && (str[0] == '0') && strchr("xXbBoO", str[1]))) { + ((objPtr->length == 2) && (str[0] == '0') && strchr("xXbBoOdD", str[1]))) { *intPtr = 0; return TCL_OK; } else if ((objPtr->length == 1) && strchr("+-", str[0])) { diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c index 67b6482..4377832 100644 --- a/generic/tclStrToD.c +++ b/generic/tclStrToD.c @@ -489,7 +489,7 @@ TclParseNumber( { enum State { INITIAL, SIGNUM, ZERO, ZERO_X, - ZERO_O, ZERO_B, BINARY, + ZERO_O, ZERO_B, ZERO_D, BINARY, HEXADECIMAL, OCTAL, BAD_OCTAL, DECIMAL, LEADING_RADIX_POINT, FRACTION, EXPONENT_START, EXPONENT_SIGNUM, EXPONENT, @@ -657,6 +657,10 @@ TclParseNumber( state = ZERO_O; break; } + if (c == 'd' || c == 'D') { + state = ZERO_D; + break; + } #ifdef KILL_OCTAL goto decimal; #endif @@ -873,6 +877,16 @@ TclParseNumber( state = BINARY; break; + case ZERO_D: + if (c == '0') { + numTrailZeros++; + } else if ( ! isdigit(UCHAR(c))) { + goto endgame; + } + state = DECIMAL; + flags |= TCL_PARSE_INTEGER_ONLY; + /* FALLTHROUGH */ + case DECIMAL: /* * Scanned an optional + or - followed by a string of decimal diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index 4a3b6f1..b84470b 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -2036,6 +2036,10 @@ Tcl_AppendFormatToObj( Tcl_AppendToObj(segment, "0b", 2); segmentLimit -= 2; break; + case 'd': + Tcl_AppendToObj(segment, "0d", 2); + segmentLimit -= 2; + break; } } |