diff options
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/library.js b/src/library.js index 8d68251f..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)) { @@ -4759,6 +4761,15 @@ LibraryManager.library = { // type_info for void*. _ZTIPv: [0], + llvm_uadd_with_overflow_i16: function(x, y) { + x = (x>>>0) & 0xffff; + y = (y>>>0) & 0xffff; + return { + f0: (x+y) & 0xffff, + f1: x+y > 65535 + }; + }, + llvm_uadd_with_overflow_i32: function(x, y) { x = x>>>0; y = y>>>0; |