5#ifndef V8_WASM_WASM_SUBTYPING_H_
6#define V8_WASM_WASM_SUBTYPING_H_
8#if !V8_ENABLE_WEBASSEMBLY
9#error This header should only be included if WebAssembly is enabled.
19 ValueType subtype, ValueType supertype,
const WasmModule* sub_module,
22 HeapType sub_heap, HeapType super_heap,
const WasmModule* sub_module,
25 CanonicalValueType subtype, CanonicalValueType supertype);
68 if (subtype == supertype && sub_module == super_module)
return true;
77 if (
V8_LIKELY(subtype == supertype))
return true;
83 if (subtype == supertype)
return true;
90 return !
IsSubtypeOf(type1, type2, module1, module2) &&
97 if (subtype == supertype && sub_module == super_module)
return true;
105 if (
V8_LIKELY(subtype == supertype))
return true;
128 ModuleTypeIndex supertype_index,
135 return type.is_shared();
148 return type == other.type &&
module == other.module;
153 return oss << type.type.name() <<
"@"
154 <<
reinterpret_cast<intptr_t
>(type.module);
ValueType ToNullSentinel(TypeInModule type)
V8_EXPORT_PRIVATE bool IsShared(ValueType type, const WasmModule *module)
bool IsSameTypeHierarchy(HeapType type1, HeapType type2, const WasmModule *module)
V8_NOINLINE V8_EXPORT_PRIVATE bool IsSubtypeOfImpl(HeapType subtype, HeapType supertype, const WasmModule *sub_module, const WasmModule *super_module)
V8_NOINLINE bool EquivalentTypes(ValueType type1, ValueType type2, const WasmModule *module1, const WasmModule *module2)
V8_INLINE bool IsHeapSubtypeOf(HeapType subtype, HeapType supertype, const WasmModule *sub_module, const WasmModule *super_module)
TypeInModule Intersection(ValueType type1, ValueType type2, const WasmModule *module1, const WasmModule *module2)
V8_EXPORT_PRIVATE TypeInModule Union(ValueType type1, ValueType type2, const WasmModule *module1, const WasmModule *module2)
bool ValidSubtypeDefinition(ModuleTypeIndex subtype_index, ModuleTypeIndex supertype_index, const WasmModule *sub_module, const WasmModule *super_module)
V8_INLINE bool IsSubtypeOf(ValueType subtype, ValueType supertype, const WasmModule *sub_module, const WasmModule *super_module)
constexpr IndependentHeapType kWasmBottom
std::ostream & operator<<(std::ostream &os, LiftoffVarState slot)
V8_INLINE bool TypesUnrelated(ValueType type1, ValueType type2, const WasmModule *module1, const WasmModule *module2)
V8_INLINE bool HeapTypesUnrelated(HeapType heap1, HeapType heap2, const WasmModule *module1, const WasmModule *module2)
wasm::WasmModule WasmModule
#define V8_EXPORT_PRIVATE
TypeInModule(ValueType type, const WasmModule *module)
const WasmModule * module
bool operator==(const TypeInModule &other) const
#define V8_LIKELY(condition)