diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-08 14:16:31 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-08 14:16:31 -0700 |
commit | f75c7e0d0bb31871a5b1be45a35c5083508e7e83 (patch) | |
tree | 733ba9b509a2794f574969f72149e660f1e22806 | |
parent | 5888dfe3d8a84921baff02e4967348a58317526d (diff) |
support input and output vars in inline js
-rw-r--r-- | src/intertyper.js | 6 | ||||
-rwxr-xr-x | tests/runner.py | 12 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/intertyper.js b/src/intertyper.js index abfbdacb..dd6e5522 100644 --- a/src/intertyper.js +++ b/src/intertyper.js @@ -700,6 +700,12 @@ function intertyper(data, sidePass, baseLineNums) { item.intertype = 'value'; if (tokensLeft[0].text == 'sideeffect') tokensLeft.splice(0, 1); item.ident = tokensLeft[0].text.substr(1, tokensLeft[0].text.length-2) || ';'; // use ; for empty inline assembly + var i = 0; + splitTokenList(tokensLeft[3].item.tokens).map(function(element) { + var ident = toNiceIdent(element[1].text); + var type = element[0].text; + item.ident = item.ident.replace(new RegExp('\\$' + i++, 'g'), ident); + }); return { forward: null, ret: [item], item: item }; } if (item.ident.substr(-2) == '()') { diff --git a/tests/runner.py b/tests/runner.py index 14de2db0..75b1f348 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -4083,17 +4083,11 @@ def process(filename): self.do_run(src, 'Inline JS is very cool\n3.64') - def zzztest_inlinejs2(self): + def test_inlinejs2(self): if Settings.ASM_JS: return self.skip('asm does not support random code, TODO: something that works in asm') src = r''' #include <stdio.h> - double get() { - double ret = 0; - __asm __volatile__("Math.abs(-12/3.3)":"=r"(ret)); // write to a variable - return ret; - } - int mix(int x, int y) { int ret; asm("Math.pow(2, %0+%1+1)" : "=r"(ret) : "r"(x), "r"(y)); // read and write @@ -4106,15 +4100,13 @@ def process(filename): } int main(int argc, char **argv) { - asm("Module.print('Inline JS is very cool')"); - printf("%.2f\n", get()); printf("%d\n", mix(argc, argc/2)); mult(); return 0; } ''' - self.do_run(src, 'Inline JS is very cool\n3.64\nwaka\nzakai\n') + self.do_run(src, '4\n200\n') def test_memorygrowth(self): if Settings.USE_TYPED_ARRAYS == 0: return self.skip('memory growth is only supported with typed arrays') |