From a4dabf466f3fe747d7e95518ab4956730f26359a Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Mon, 27 Feb 2023 23:57:41 +0800 Subject: [PATCH] Update vm.h --- src/vm.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/vm.h b/src/vm.h index 5aba9055..2c68b84f 100644 --- a/src/vm.h +++ b/src/vm.h @@ -391,7 +391,7 @@ DEF_NATIVE_2(Exception, tp_exception) DEF_NATIVE_2(StarWrapper, tp_star_wrapper) template -std::enable_if_t && !std::is_same_v, PyVar> py_object(VM* vm, T _val){ +std::enable_if_t && !std::is_same_v, PyVar> py_object(VM* vm, T _val){ i64 val = static_cast(_val); if(((val << 2) >> 2) != val){ vm->_error("OverflowError", std::to_string(val) + " is out of range"); @@ -407,12 +407,6 @@ template<> i64 _py_cast_v(VM* vm, const PyVar& obj){ return obj.bits >> 2; } -PyVar py_object(VM* vm, f64 val){ - i64 bits = __8B(val)._int; - bits = (bits >> 2) << 2; - bits |= 0b10; - return PyVar(reinterpret_cast(bits)); -} template<> f64 py_cast_v(VM* vm, const PyVar& obj){ vm->check_type(obj, vm->tp_float); i64 bits = obj.bits; @@ -425,9 +419,19 @@ template<> f64 _py_cast_v(VM* vm, const PyVar& obj){ return __8B(bits)._float; } +template +std::enable_if_t, PyVar> py_object(VM* vm, T _val){ + f64 val = static_cast(_val); + i64 bits = __8B(val)._int; + bits = (bits >> 2) << 2; + bits |= 0b10; + return PyVar(reinterpret_cast(bits)); +} + const PyVar& py_object(VM* vm, bool val){ return val ? vm->True : vm->False; } + template<> bool py_cast_v(VM* vm, const PyVar& obj){ vm->check_type(obj, vm->tp_bool); return obj == vm->True;