diff options
author | Eric Smith <eric@trueblade.com> | 2009-04-16 22:08:31 (GMT) |
---|---|---|
committer | Eric Smith <eric@trueblade.com> | 2009-04-16 22:08:31 (GMT) |
commit | 193125ad192840a9496ba122860f7d0c76fb2afb (patch) | |
tree | e11b9d83b89a32bd0650d50e7cd60a61f999f3e6 /Python/pystrtod.c | |
parent | 35e84728c06918d7ace413d51161b4e3a685c863 (diff) | |
download | cpython-193125ad192840a9496ba122860f7d0c76fb2afb.zip cpython-193125ad192840a9496ba122860f7d0c76fb2afb.tar.gz cpython-193125ad192840a9496ba122860f7d0c76fb2afb.tar.bz2 |
Simplify PyOS_double_to_string.
Diffstat (limited to 'Python/pystrtod.c')
-rw-r--r-- | Python/pystrtod.c | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/Python/pystrtod.c b/Python/pystrtod.c index 217246e..9e00823 100644 --- a/Python/pystrtod.c +++ b/Python/pystrtod.c @@ -895,58 +895,50 @@ format_float_short(double d, char format_code, PyAPI_FUNC(char *) PyOS_double_to_string(double val, - char format_code, - int precision, - int flags, + char format_code, + int precision, + int flags, int *type) { - char lc_format_code = format_code; - char** float_strings = lc_float_strings; - int mode = 0; + char **float_strings = lc_float_strings; + int mode; - /* Validate format_code, and map upper and lower case */ + /* Validate format_code, and map upper and lower case. Compute the + mode and make any adjustments as needed. */ switch (format_code) { - case 'e': /* exponent */ - case 'f': /* fixed */ - case 'g': /* general */ - case 'r': /* repr format */ - case 's': /* str format */ - break; + /* exponent */ case 'E': - lc_format_code = 'e'; - break; - case 'F': - lc_format_code = 'f'; - break; - case 'G': - lc_format_code = 'g'; - break; - default: - PyErr_BadInternalCall(); - return NULL; - } - - if (format_code != lc_format_code) float_strings = uc_float_strings; - - /* From the format code, compute the mode and make any adjustments as - needed. */ - switch (lc_format_code) { + format_code = 'e'; + /* Fall through. */ case 'e': mode = 2; precision++; break; + + /* fixed */ + case 'F': + float_strings = uc_float_strings; + format_code = 'f'; + /* Fall through. */ case 'f': mode = 3; break; + + /* general */ + case 'G': + float_strings = uc_float_strings; + format_code = 'g'; + /* Fall through. */ case 'g': mode = 2; /* precision 0 makes no sense for 'g' format; interpret as 1 */ if (precision == 0) precision = 1; break; + + /* repr format */ case 'r': - /* "repr" pseudo-mode */ mode = 0; /* Supplied precision is unused, must be 0. */ if (precision != 0) { @@ -954,6 +946,8 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val, return NULL; } break; + + /* str format */ case 's': mode = 2; /* Supplied precision is unused, must be 0. */ @@ -963,9 +957,13 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val, } precision = 12; break; + + default: + PyErr_BadInternalCall(); + return NULL; } - return format_float_short(val, lc_format_code, mode, precision, + return format_float_short(val, format_code, mode, precision, flags & Py_DTSF_SIGN, flags & Py_DTSF_ADD_DOT_0, flags & Py_DTSF_ALT, |