aboutsummaryrefslogtreecommitdiff
path: root/src/library.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/library.js')
-rw-r--r--src/library.js44
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) {