diff options
-rw-r--r-- | src/intertyper.js | 12 | ||||
-rwxr-xr-x | tests/runner.py | 2 | ||||
-rw-r--r-- | tests/test_core.py | 9 | ||||
-rw-r--r-- | tools/js-optimizer.js | 2 |
4 files changed, 16 insertions, 9 deletions
diff --git a/src/intertyper.js b/src/intertyper.js index 31e97bd0..5432b1ca 100644 --- a/src/intertyper.js +++ b/src/intertyper.js @@ -712,11 +712,13 @@ function intertyper(data, sidePass, baseLineNums) { 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); - }); + if (tokensLeft[3].item) { // not present in x86 inline asm + 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 f0e61c4e..8747c340 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -254,7 +254,7 @@ process(sys.argv[1]) os.chdir(cwd) out = open(stdout, 'r').read() err = open(stderr, 'r').read() - if engine == SPIDERMONKEY_ENGINE and Settings.ASM_JS: + if engine == SPIDERMONKEY_ENGINE and Settings.ASM_JS == 1: err = self.validate_asmjs(err) if output_nicerizer: ret = output_nicerizer(out, err) diff --git a/tests/test_core.py b/tests/test_core.py index 2238859b..3568efee 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -3742,7 +3742,7 @@ def process(filename): self.do_run(open(path_from_root('tests', 'emscripten_get_now.cpp')).read(), 'Timer resolution is good.') def test_inlinejs(self): - if Settings.ASM_JS: return self.skip('asm does not support random code, TODO: something that works in asm') + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = r''' #include <stdio.h> @@ -3762,7 +3762,7 @@ def process(filename): self.do_run(src, 'Inline JS is very cool\n3.64\n') def test_inlinejs2(self): - if Settings.ASM_JS: return self.skip('asm does not support random code, TODO: something that works in asm') + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = r''' #include <stdio.h> @@ -7613,11 +7613,13 @@ def process(filename): Settings.INCLUDE_FULL_LIBRARY = 0 def test_unistd_access(self): + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = open(path_from_root('tests', 'unistd', 'access.c'), 'r').read() expected = open(path_from_root('tests', 'unistd', 'access.out'), 'r').read() self.do_run(src, expected) def test_unistd_curdir(self): + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = open(path_from_root('tests', 'unistd', 'curdir.c'), 'r').read() expected = open(path_from_root('tests', 'unistd', 'curdir.out'), 'r').read() self.do_run(src, expected) @@ -7647,6 +7649,7 @@ def process(filename): self.do_run(src, expected) def test_unistd_truncate(self): + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = open(path_from_root('tests', 'unistd', 'truncate.c'), 'r').read() expected = open(path_from_root('tests', 'unistd', 'truncate.out'), 'r').read() self.do_run(src, expected) @@ -7675,6 +7678,7 @@ def process(filename): self.do_run(src, 'success', force_c=True) def test_unistd_links(self): + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = open(path_from_root('tests', 'unistd', 'links.c'), 'r').read() expected = open(path_from_root('tests', 'unistd', 'links.out'), 'r').read() self.do_run(src, expected) @@ -7685,6 +7689,7 @@ def process(filename): self.do_run(src, expected) def test_unistd_io(self): + if Settings.ASM_JS: Settings.ASM_JS = 2 # skip validation, asm does not support random code src = open(path_from_root('tests', 'unistd', 'io.c'), 'r').read() expected = open(path_from_root('tests', 'unistd', 'io.out'), 'r').read() self.do_run(src, expected) diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index b42164f9..21b19fd3 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -1588,7 +1588,7 @@ function normalizeAsm(func) { var name = v[0]; var value = v[1]; if (!(name in data.vars)) { - assert(value[0] === 'num' || (value[0] === 'unary-prefix' && value[2][0] === 'num')); // must be valid coercion no-op + if (!(value[0] === 'num' || (value[0] === 'unary-prefix' && value[2][0] === 'num'))) break outer; // must be valid coercion no-op data.vars[name] = detectAsmCoercion(value); v.length = 1; // make an un-assigning var } else { |