text: /*
   * 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
  