diff options
-rw-r--r-- | src/library.js | 16 | ||||
-rwxr-xr-x | tests/runner.py | 8 |
2 files changed, 17 insertions, 7 deletions
diff --git a/src/library.js b/src/library.js index 1cb4dd2a..fe6ae0fb 100644 --- a/src/library.js +++ b/src/library.js @@ -3473,35 +3473,37 @@ LibraryManager.library = { var chr; var ret = 0; - var legit = false; // Get whole part. + var whole = false; while(1) { chr = {{{ makeGetValue('str', 0, 'i8') }}}; if (!_isdigit(chr)) break; - legit = true; + whole = true; ret = ret*10 + chr - '0'.charCodeAt(0); str++; } - if (!legit) { - {{{ makeSetValue('endptr', 0, 'origin', '*') }}} - return 0; - } - // Get fractional part. + var fraction = false; if ({{{ makeGetValue('str', 0, 'i8') }}} == '.'.charCodeAt(0)) { str++; var mul = 1/10; while(1) { chr = {{{ makeGetValue('str', 0, 'i8') }}}; if (!_isdigit(chr)) break; + fraction = true; ret += mul*(chr - '0'.charCodeAt(0)); mul /= 10; str++; } } + if (!whole && !fraction) { + {{{ makeSetValue('endptr', 0, 'origin', '*') }}} + return 0; + } + // Get exponent part. chr = {{{ makeGetValue('str', 0, 'i8') }}}; if (chr == 'e'.charCodeAt(0) || chr == 'E'.charCodeAt(0)) { diff --git a/tests/runner.py b/tests/runner.py index dcb3632f..58ae3208 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -3708,6 +3708,10 @@ def process(filename): printf("%g\n", strtod("1", &endptr)); printf("%g\n", strtod("1.", &endptr)); printf("%g\n", strtod("1.0", &endptr)); + printf("%g\n", strtod("z1.0", &endptr)); + printf("%g\n", strtod("0.5", &endptr)); + printf("%g\n", strtod(".5", &endptr)); + printf("%g\n", strtod(".a5", &endptr)); printf("%g\n", strtod("123", &endptr)); printf("%g\n", strtod("123.456", &endptr)); printf("%g\n", strtod("-123.456", &endptr)); @@ -3733,6 +3737,10 @@ def process(filename): 1 1 1 + 0 + 0.5 + 0.5 + 0 123 123.456 -123.456 |