| /* | |
| * Copyright 2015 WebAssembly Community Group participants | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| // | |
| // Simple WebAssembly module validator. | |
| // | |
| // There are some options regarding how to validate: | |
| // | |
| // * validateWeb: The Web platform doesn't have i64 values, so it is illegal | |
| // to import or export such a value. When this option is set, | |
| // such imports/exports are validation errors. | |
| // | |
| // * validateGlobally: Binaryen supports building modules in parallel, which | |
| // means you can add and optimize a function before the | |
| // module is complete, for example, you can add function A | |
| // with a call to function B before function B exists. | |
| // When validateGlobally is disabled, we don't look at | |
| // global correctness, and instead only check inside | |
| // each function (so in the example above we wouldn't care | |
| // about function B not existing yet, but we would care | |
| // if e.g. inside function A an i32.add receives an i64). | |
| // | |
| // * quiet: Whether to log errors verbosely. | |
| // | |
| #ifndef wasm_wasm_validator_h | |
| #define wasm_wasm_validator_h | |
| #include <set> | |
| #include <sstream> | |
| #include <unordered_set> | |
| #include "pass.h" | |
| #include "wasm.h" | |
| namespace wasm { | |
| struct WasmValidator { | |
| enum FlagValues { | |
| Minimal = 0, | |
| Web = 1 << 0, | |
| Globally = 1 << 1, | |
| Quiet = 1 << 2, | |
| ClosedWorld = 1 << 3, | |
| }; | |
| using Flags = uint32_t; | |
| // Validate an entire module. | |
| bool validate(Module& module, Flags flags = Globally); | |
| bool validate(Module& module, const PassOptions& options); | |
| // Validate a specific function. | |
| bool validate(Function* func, Module& module, Flags flags = Globally); | |
| }; | |
| } // namespace wasm | |
| #endif // wasm_wasm_validator_h |