aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-12-10 13:10:35 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-12-10 13:10:35 -0800
commitd9e1837c619bc70f9424489787ca80766c998789 (patch)
treeee32d6815351d7e51811fc3bd890734394857050
parent4101e15f9edb7a8f14f96dbc813281ff8d601760 (diff)
simplify varargs to always have an explicit last parameter called varrp
-rw-r--r--src/jsifier.js5
-rw-r--r--src/library.js5
-rw-r--r--src/parseTools.js4
-rwxr-xr-xtests/runner.py1
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>