aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-12-31 12:23:09 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-12-31 12:23:09 -0800
commit5edd66f9c9d489c7e78dc6c60751a29848219e08 (patch)
tree9e70a083f1aece7cab38f28744a04a6ccee763b4
parentac9746686208c6d1a00c90830a93cc5a620bc11e (diff)
fix parseInt64
-rw-r--r--src/library.js16
-rw-r--r--src/long.js4
-rw-r--r--src/parseTools.js2
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');
}