aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/intertyper.js12
-rwxr-xr-xtests/runner.py2
-rw-r--r--tests/test_core.py9
-rw-r--r--tools/js-optimizer.js2
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 {