| // Copyright 2020 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. |
| |
| #ifndef V8_WASM_WASM_SUBTYPING_H_ |
| #define V8_WASM_WASM_SUBTYPING_H_ |
| |
| #include "src/wasm/value-type.h" |
| |
| namespace v8 { |
| namespace internal { |
| namespace wasm { |
| |
| struct WasmModule; |
| V8_NOINLINE V8_EXPORT_PRIVATE bool IsSubtypeOfImpl(ValueType subtype, |
| ValueType supertype, |
| const WasmModule* module); |
| |
| // The subtyping between value types is described by the following rules: |
| // - All types are a supertype of bottom. |
| // - All reference types, except funcref, are subtypes of eqref. |
| // - optref(ht1) <: optref(ht2) iff ht1 <: ht2. |
| // - ref(ht1) <: ref/optref(ht2) iff ht1 <: ht2. |
| V8_INLINE bool IsSubtypeOf(ValueType subtype, ValueType supertype, |
| const WasmModule* module) { |
| if (V8_LIKELY(subtype == supertype)) return true; |
| return IsSubtypeOfImpl(subtype, supertype, module); |
| } |
| |
| ValueType CommonSubtype(ValueType a, ValueType b, const WasmModule* module); |
| |
| } // namespace wasm |
| } // namespace internal |
| } // namespace v8 |
| |
| #endif // V8_WASM_WASM_SUBTYPING_H_ |