blob: b7f17c19c1e92151e8f6a146f8f4c35f09d905a7 [file] [log] [blame]
/*
* 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 "wasm.h"
namespace wasm {
struct WasmValidator {
enum FlagValues {
Minimal = 0,
Web = 1 << 0,
Globally = 1 << 1,
Quiet = 1 << 2
};
typedef uint32_t Flags;
bool validate(Module& module, Flags flags = Globally);
};
} // namespace wasm
#endif // wasm_wasm_validator_h