diff options
-rwxr-xr-x | check.py | 2 | ||||
-rw-r--r-- | src/wasm.h | 49 |
2 files changed, 29 insertions, 22 deletions
@@ -84,7 +84,7 @@ if len(requested) == 0: # 'address' : filed issue, test looks invalid # 'exports', 'int_literals' : has a "return" https://github.com/WebAssembly/spec/issues/164 # 'switch': todo once stable - spec_tests = [os.path.join('spec', t + '.wast') for t in ['conversions', 'endianness', 'f32_cmp', 'f32', 'f64_cmp', 'f64', 'float_exprs', 'forward', 'func_ptrs', 'functions', 'has_feature', 'i32', 'i64', 'imports', 'int_exprs', 'left-to-right', 'memory_redundancy', 'memory_trap', 'names', 'resizing', 'runaway-recursion', 'select']] + spec_tests = [os.path.join('spec', t + '.wast') for t in ['conversions', 'endianness', 'f32_cmp', 'f32', 'f64_cmp', 'f64', 'float_exprs', 'forward', 'func_ptrs', 'functions', 'has_feature', 'i32', 'i64', 'imports', 'int_exprs', 'left-to-right', 'memory_redundancy', 'memory_trap', 'names', 'resizing', 'runaway-recursion', 'select', 'store_retval']] else: spec_tests = requested[:] 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; } |