diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-12-10 13:10:35 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-12-10 13:10:35 -0800 |
commit | d9e1837c619bc70f9424489787ca80766c998789 (patch) | |
tree | ee32d6815351d7e51811fc3bd890734394857050 | |
parent | 4101e15f9edb7a8f14f96dbc813281ff8d601760 (diff) |
simplify varargs to always have an explicit last parameter called varrp
-rw-r--r-- | src/jsifier.js | 5 | ||||
-rw-r--r-- | src/library.js | 5 | ||||
-rw-r--r-- | src/parseTools.js | 4 | ||||
-rwxr-xr-x | tests/runner.py | 1 |
4 files changed, 8 insertions, 7 deletions
diff --git a/src/jsifier.js b/src/jsifier.js index b9b4a329..5e159ccf 100644 --- a/src/jsifier.js +++ b/src/jsifier.js @@ -524,8 +524,8 @@ function JSify(data, functionsOnly, givenFunctions) { func.JS = '\n'; var paramIdents = func.params.map(function(param) { - return (param.intertype == 'varargs') ? null : toNiceIdent(param.ident); - }).filter(function(param) { return param != null; }) + return toNiceIdent(param.ident); + }); if (CLOSURE_ANNOTATIONS) { func.JS += '/**\n'; @@ -546,7 +546,6 @@ function JSify(data, functionsOnly, givenFunctions) { if (ASM_JS) { // spell out argument types func.params.forEach(function(param) { - if (param.intertype == 'varargs') return; func.JS += ' ' + param.ident + ' = ' + asmCoercion(param.ident, param.type) + ';\n'; }); diff --git a/src/library.js b/src/library.js index 5834797f..c01b2d70 100644 --- a/src/library.js +++ b/src/library.js @@ -4721,9 +4721,8 @@ LibraryManager.library = { // ========================================================================== llvm_va_start__inline: function(ptr) { - // varargs - we received a pointer to the varargs as a final 'extra' parameter - var data = 'arguments[' + Framework.currItem.funcData.ident + '.length]'; - return makeSetValue(ptr, 0, data, 'void*'); + // varargs - we received a pointer to the varargs as a final 'extra' parameter called 'varrp' + return makeSetValue(ptr, 0, 'varrp', 'void*'); }, llvm_va_end: function() {}, diff --git a/src/parseTools.js b/src/parseTools.js index 06d4494f..36d62204 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -345,7 +345,9 @@ function parseParamTokens(params) { if (segment.length == 1) { if (segment[0].text == '...') { ret.push({ - intertype: 'varargs' + intertype: 'varargs', + type: 'i8*', + ident: 'varrp' // the conventional name we have for this }); } else { // Clang sometimes has a parameter with just a type, diff --git a/tests/runner.py b/tests/runner.py index 1e9814f9..f6383edd 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -3274,6 +3274,7 @@ def process(filename): def test_varargs(self): if Settings.QUANTUM_SIZE == 1: return self.skip('FIXME: Add support for this') + if Settings.ASM_JS: return self.skip('varargs by function pointer not yet supported') src = ''' #include <stdio.h> |