// Copyright 2022 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #if !V8_ENABLE_WEBASSEMBLY #error This header should only be included if WebAssembly is enabled. #endif // !V8_ENABLE_WEBASSEMBLY #ifndef V8_WASM_CANONICAL_TYPES_H_ #define V8_WASM_CANONICAL_TYPES_H_ #include <unordered_map> #include "src/base/functional.h" #include "src/wasm/wasm-module.h" namespace v8::internal::wasm { // A singleton class, responsible for isorecursive canonicalization of wasm // types. // A recursive group is a subsequence of types explicitly marked in the type // section of a wasm module. Identical recursive groups have to be canonicalized // to a single canonical group. Respective types in two identical groups are // considered identical for all purposes. // Two groups are considered identical if they have the same shape, and all // type indices referenced in the same position in both groups reference: // - identical types, if those do not belong to the rec. group, // - types in the same relative position in the group, if those belong to the // rec. group. class TypeCanonicalizer { … }; // Returns a reference to the TypeCanonicalizer shared by the entire process. V8_EXPORT_PRIVATE TypeCanonicalizer* GetTypeCanonicalizer(); } // namespace v8::internal::wasm #endif // V8_WASM_CANONICAL_TYPES_H_