summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-s-parser.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2017-05-09 09:36:45 -0700
committerGitHub <noreply@github.com>2017-05-09 09:36:45 -0700
commit64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974 (patch)
tree26f3608bb1944b63712a8d1a161e61b41956276d /src/wasm/wasm-s-parser.cpp
parentb856925f6c25df22a0901d8f9e24e4247b4acc18 (diff)
downloadbinaryen-64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974.tar.gz
binaryen-64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974.tar.bz2
binaryen-64aa81e0e9655cf16e3af65e1bbe98e7fc6cf974.zip
Unreachable typing fixes (#1004)
* fix type of drop, set_local, set_global, load, etc: when operand is unreachable, so is the node itself * support binary tests properly in test/passes * fix unreachable typing of blocks with no name and an unreachable child * fix continue emitting in asm2wasm * properly handle emitting of unreachable load
Diffstat (limited to 'src/wasm/wasm-s-parser.cpp')
-rw-r--r--src/wasm/wasm-s-parser.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/wasm/wasm-s-parser.cpp b/src/wasm/wasm-s-parser.cpp
index 69509afec..f9e3912f7 100644
--- a/src/wasm/wasm-s-parser.cpp
+++ b/src/wasm/wasm-s-parser.cpp
@@ -928,6 +928,7 @@ Expression* SExpressionWasmBuilder::makeTeeLocal(Element& s) {
ret->index = getLocalIndex(*s[1]);
ret->value = parseExpression(s[2]);
ret->setTee(true);
+ ret->finalize();
return ret;
}
@@ -936,6 +937,7 @@ Expression* SExpressionWasmBuilder::makeSetLocal(Element& s) {
ret->index = getLocalIndex(*s[1]);
ret->value = parseExpression(s[2]);
ret->setTee(false);
+ ret->finalize();
return ret;
}
@@ -960,6 +962,7 @@ Expression* SExpressionWasmBuilder::makeSetGlobal(Element& s) {
ret->name = getGlobalName(*s[1]);
if (wasm.getGlobalOrNull(ret->name) && !wasm.getGlobalOrNull(ret->name)->mutable_) throw ParseException("set_global of immutable", s.line, s.col);
ret->value = parseExpression(s[2]);
+ ret->finalize();
return ret;
}
@@ -1084,6 +1087,7 @@ Expression* SExpressionWasmBuilder::makeLoad(Element& s, WasmType type) {
i++;
}
ret->ptr = parseExpression(s[i]);
+ ret->finalize();
return ret;
}
@@ -1210,6 +1214,7 @@ Expression* SExpressionWasmBuilder::makeCall(Element& s) {
ret->target = target;
ret->type = functionTypes[ret->target];
parseCallOperands(s, 2, s.size(), ret);
+ ret->finalize();
return ret;
}
@@ -1219,6 +1224,7 @@ Expression* SExpressionWasmBuilder::makeCallImport(Element& s) {
Import* import = wasm.getImport(ret->target);
ret->type = wasm.getFunctionType(import->functionType)->result;
parseCallOperands(s, 2, s.size(), ret);
+ ret->finalize();
return ret;
}
@@ -1232,6 +1238,7 @@ Expression* SExpressionWasmBuilder::makeCallIndirect(Element& s) {
ret->type = fullType->result;
parseCallOperands(s, 2, s.size() - 1, ret);
ret->target = parseExpression(s[s.size() - 1]);
+ ret->finalize();
return ret;
}