diff --git a/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h b/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h index d27f24548952..0bab4898c800 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h +++ b/Userland/Libraries/LibWasm/AbstractMachine/AbstractMachine.h @@ -142,22 +142,16 @@ class Value { template ALWAYS_INLINE T to() const { + static_assert(IsOneOf || IsIntegral, "Unsupported type for Value::to()"); + if constexpr (IsSame) { return m_value; } - if constexpr (IsSame) { - u32 low = m_value.low() & 0xFFFFFFFF; - return low; - } - if constexpr (IsSame) { - u32 low = m_value.low() & 0xFFFFFFFF; - return bit_cast(low); - } - if constexpr (IsSame) { - return bit_cast(m_value.low()); + if constexpr (IsOneOf) { + return bit_cast(m_value.low()); } - if constexpr (IsSame) { - return bit_cast(m_value.low()); + if constexpr (IsIntegral && sizeof(T) < 8) { + return bit_cast(static_cast>(m_value.low() & NumericLimits>::max())); } if constexpr (IsSame) { u32 low = m_value.low() & 0xFFFFFFFF;