summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-06 14:22:55 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-06 14:22:55 -0800
commitce6e00f2b32c63fb6f2a74f67b4d8c574d7143c6 (patch)
tree2c2e3f1ac20e6b4d9392283355a8c0d7b6c470ba /src
parentb99d42ef849a5e655be40d6514d24bafe5febf79 (diff)
downloadbinaryen-ce6e00f2b32c63fb6f2a74f67b4d8c574d7143c6.tar.gz
binaryen-ce6e00f2b32c63fb6f2a74f67b4d8c574d7143c6.tar.bz2
binaryen-ce6e00f2b32c63fb6f2a74f67b4d8c574d7143c6.zip
validate setlocal result
Diffstat (limited to 'src')
-rw-r--r--src/wasm.h49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/wasm.h b/src/wasm.h
index c2d8a1faf..62a263ae9 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -1139,27 +1139,27 @@ struct WasmWalker : public WasmVisitor<void> {
}
// By default, do nothing
- void visitBlock(Block *curr) override {};
- void visitIf(If *curr) override {};
- void visitLoop(Loop *curr) override {};
- void visitLabel(Label *curr) override {};
- void visitBreak(Break *curr) override {};
- void visitSwitch(Switch *curr) override {};
- void visitCall(Call *curr) override {};
- void visitCallImport(CallImport *curr) override {};
- void visitCallIndirect(CallIndirect *curr) override {};
- void visitGetLocal(GetLocal *curr) override {};
- void visitSetLocal(SetLocal *curr) override {};
- void visitLoad(Load *curr) override {};
- void visitStore(Store *curr) override {};
- void visitConst(Const *curr) override {};
- void visitUnary(Unary *curr) override {};
- void visitBinary(Binary *curr) override {};
- void visitCompare(Compare *curr) override {};
- void visitConvert(Convert *curr) override {};
- void visitSelect(Select *curr) override {};
- void visitHost(Host *curr) override {};
- void visitNop(Nop *curr) override {};
+ void visitBlock(Block *curr) override {}
+ void visitIf(If *curr) override {}
+ void visitLoop(Loop *curr) override {}
+ void visitLabel(Label *curr) override {}
+ void visitBreak(Break *curr) override {}
+ void visitSwitch(Switch *curr) override {}
+ void visitCall(Call *curr) override {}
+ void visitCallImport(CallImport *curr) override {}
+ void visitCallIndirect(CallIndirect *curr) override {}
+ void visitGetLocal(GetLocal *curr) override {}
+ void visitSetLocal(SetLocal *curr) override {}
+ void visitLoad(Load *curr) override {}
+ void visitStore(Store *curr) override {}
+ void visitConst(Const *curr) override {}
+ void visitUnary(Unary *curr) override {}
+ void visitBinary(Binary *curr) override {}
+ void visitCompare(Compare *curr) override {}
+ void visitConvert(Convert *curr) override {}
+ void visitSelect(Select *curr) override {}
+ void visitHost(Host *curr) override {}
+ void visitNop(Nop *curr) override {}
// children-first
void walk(Expression*& curr) {
@@ -1272,6 +1272,13 @@ bool Module::validateFunction(Function *func) {
struct Validator : public WasmWalker {
bool valid = true;
+ void should(bool result) {
+ if (!result) valid = false;
+ }
+
+ void visitSetLocal(SetLocal *curr) override {
+ should(curr->type == curr->value->type);
+ }
void visitLoad(Load *curr) override {
if (!validateAlignment(curr->align)) valid = false;
}