diff options
Diffstat (limited to 'src/library.js')
-rw-r--r-- | src/library.js | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/src/library.js b/src/library.js index bb73c48a..d1ede6bc 100644 --- a/src/library.js +++ b/src/library.js @@ -367,12 +367,13 @@ LibraryManager.library = { return input.cache.shift(); }; } + var utf8 = new Runtime.UTF8Processor(); function simpleOutput(val) { if (val === null || val === '\n'.charCodeAt(0)) { output.printer(output.buffer.join('')); output.buffer = []; } else { - output.buffer.push(String.fromCharCode(val)); + output.buffer.push(utf8.processCChar(val)); } } if (!output) { @@ -2281,6 +2282,14 @@ LibraryManager.library = { var fields = 0; var argIndex = 0; var next; + // remove initial whitespace + while (1) { + next = get(); + if (next == 0) return 0; + if (!(next in __scanString.whiteSpace)) break; + } + unget(next); + next = 1; for (var formatIndex = 0; formatIndex < format.length; formatIndex++) { if (next <= 0) return fields; var next = get(); @@ -2319,11 +2328,10 @@ LibraryManager.library = { } next = get(); } + unget(next); while (buffer.length > last) { - buffer.pop(); - unget(); + unget(buffer.pop().charCodeAt(0)); } - unget(); next = get(); } else { var first = true; @@ -2380,7 +2388,7 @@ LibraryManager.library = { next = get(); if (next <= 0) return fields; // End of input. } - unget(); + unget(next); } else { // Not a specifier. if (format[formatIndex].charCodeAt(0) !== next) { @@ -4519,33 +4527,11 @@ LibraryManager.library = { }, llvm_bswap_i16: function(x) { - x = unSign(x, 32); - var bytes = []; - bytes[0] = x & 255; - x >>= 8; - bytes[1] = x & 255; - x >>= 8; - var ret = 0; - ret <<= 8; - ret += bytes[0]; - ret <<= 8; - ret += bytes[1]; - return ret; + return ((x&0xff)<<8) | ((x>>8)&0xff); }, llvm_bswap_i32: function(x) { - x = unSign(x, 32); - var bytes = []; - for (var i = 0; i < 4; i++) { - bytes[i] = x & 255; - x >>= 8; - } - var ret = 0; - for (i = 0; i < 4; i++) { - ret <<= 8; - ret += bytes[i]; - } - return ret; + return ((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24); }, llvm_ctlz_i32: function(x) { |