diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-12-31 12:23:09 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-12-31 12:23:09 -0800 |
commit | 5edd66f9c9d489c7e78dc6c60751a29848219e08 (patch) | |
tree | 9e70a083f1aece7cab38f28744a04a6ccee763b4 | |
parent | ac9746686208c6d1a00c90830a93cc5a620bc11e (diff) |
fix parseInt64
-rw-r--r-- | src/library.js | 16 | ||||
-rw-r--r-- | src/long.js | 4 | ||||
-rw-r--r-- | src/parseTools.js | 2 |
3 files changed, 10 insertions, 12 deletions
diff --git a/src/library.js b/src/library.js index 7438b0ad..61665920 100644 --- a/src/library.js +++ b/src/library.js @@ -3885,13 +3885,7 @@ LibraryManager.library = { } if (!ok) { ___setErrNo(ERRNO_CODES.EINVAL); - return [0, 0]; - } - - try { - i64Math.fromString(Pointer_stringify(start, str - start), finalBase, min, max, unsign); - } catch(e) { - ___setErrNo(ERRNO_CODES.ERANGE); // not quite correct + {{{ makeStructuralReturn(['0', '0']) }}}; } // Set end pointer. @@ -3899,9 +3893,13 @@ LibraryManager.library = { {{{ makeSetValue('endptr', 0, 'str', '*') }}} } - var ret = i64Math.result.slice(0); + try { + i64Math.fromString(Pointer_stringify(start, str - start), finalBase, min, max, unsign); + } catch(e) { + ___setErrNo(ERRNO_CODES.ERANGE); // not quite correct + } - return ret; + {{{ makeStructuralReturn([makeGetTempDouble(0), makeGetTempDouble(1)]) }}}; }, #endif strtoll__deps: ['_parseInt64'], diff --git a/src/long.js b/src/long.js index a5367b2c..c3b0e605 100644 --- a/src/long.js +++ b/src/long.js @@ -1649,8 +1649,8 @@ var i64Math = (function() { // Emscripten wrapper error = true; } var ret = goog.math.Long.fromString(bignum.toString()); // min-max checks should have clamped this to a range goog.math.Long can handle well - Wrapper.result[0] = ret.low_; - Wrapper.result[1] = ret.high_; + HEAP32[tempDoublePtr>>2] = ret.low_; + HEAP32[tempDoublePtr+4>>2] = ret.high_; if (error) throw 'range error'; } }; diff --git a/src/parseTools.js b/src/parseTools.js index 1ef09f49..7b29d35e 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -1011,7 +1011,7 @@ function asmCoercion(value, type) { } } -function makeGetTempDouble(i) { +function makeGetTempDouble(i) { // TODO: Support other than i32 return makeGetValue('tempDoublePtr', Runtime.getNativeTypeSize('i32')*i, 'i32'); } |