diff options
author | alon@honor <none@none> | 2010-09-04 18:05:18 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-09-04 18:05:18 -0700 |
commit | 1715e6c9b2819fa2ca9b8a0031ae2c93781af20f (patch) | |
tree | ea3634b45dd1094357b14f7685866721e9181db6 /src/parser.js | |
parent | 4344835f29a8812a2ae0ab45fffbaef1add0b08d (diff) |
finish varargs work
Diffstat (limited to 'src/parser.js')
-rw-r--r-- | src/parser.js | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/parser.js b/src/parser.js index 214e5cb5..0b6b3dad 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1938,8 +1938,19 @@ function JSify(data) { processItem: function(item) { switch(item.ident) { case '_vsnprintf': { - item.JS = 'function ' + item.ident + '(dst, num, src, args) {\n' + - ' _printf;\n'; + item.JS = + 'function _vsnprintf(dst, num, src, ptr) {\n' + + ' var args = [];\n' + + ' while (HEAP[ptr] != 0) {\n' + + ' args.push(HEAP[ptr]);\n' + + ' ptr ++;\n' + + ' }\n' + + ' var text = __formatString.apply(null, [src].concat(args));\n' + + ' for (var i = 0; i < num; i++) {\n' + + ' HEAP[dst+i] = HEAP[text+i];\n' + + ' if (HEAP[dst+i] == 0) break;\n' + + ' }\n' + + '}\n'; break; } default: { @@ -2376,7 +2387,7 @@ function JSify(data) { // Special cases if (ident == '_llvm_va_start') { - return params[0].ident + ' = Pointer_make(Array.prototype.slice.call(arguments, 1), 0)'; // XXX 1 + return 'HEAP[' + params[0].ident + '] = Pointer_make(Array.prototype.slice.call(arguments, 1).concat([0]), 0)'; // XXX 1 } else if (ident == '_llvm_va_end') { return ';' } |