diff --git a/src/obj.h b/src/obj.h index 5fa72ccc..8fea9eac 100644 --- a/src/obj.h +++ b/src/obj.h @@ -164,22 +164,14 @@ union __8B { __8B(f64 val) : _float(val) {} }; -// Create a new object with the native type `T` and return a PyVar -template -PyVar object(VM* vm, T&) { UNREACHABLE(); } -template -PyVar object(VM* vm, T&&) { UNREACHABLE(); } -template -PyVar object(VM* vm, T) { UNREACHABLE(); } - // Cast a PyVar to a native type `T` by reference template -T& cast(VM* vm, const PyVar& var) { UNREACHABLE(); } +T& py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); } template -T cast(VM* vm, const PyVar& var) { UNREACHABLE(); } +T py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); } template -T& _cast(VM* vm, const PyVar& var) { UNREACHABLE(); } +T& _py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); } template -T _cast(VM* vm, const PyVar& var) { UNREACHABLE(); } +T _py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); } } // namespace pkpy \ No newline at end of file diff --git a/src/vm.h b/src/vm.h index d7c57106..5bc1bd37 100644 --- a/src/vm.h +++ b/src/vm.h @@ -955,48 +955,48 @@ void CodeObject::optimize(VM* vm){ } } - template<> PyVar object(VM* vm, i64 val){ - if(((val << 2) >> 2) != val){ - vm->_error("OverflowError", std::to_string(val) + " is out of range"); - } - val = (val << 2) | 0b01; - return PyVar(reinterpret_cast(val)); - } - template<> i64 cast(VM* vm, const PyVar& obj){ - vm->check_type(obj, vm->tp_int); - return obj.bits >> 2; - } - template<> i64 _cast(VM* vm, const PyVar& obj){ - return obj.bits >> 2; - } - - template<> PyVar object(VM* vm, f64 val){ - i64 bits = __8B(val)._int; - bits = (bits >> 2) << 2; - bits |= 0b10; - return PyVar(reinterpret_cast(bits)); - } - template<> f64 cast(VM* vm, const PyVar& obj){ - vm->check_type(obj, vm->tp_float); - i64 bits = obj.bits; - bits = (bits >> 2) << 2; - return __8B(bits)._float; - } - template<> f64 _cast(VM* vm, const PyVar& obj){ - i64 bits = obj.bits; - bits = (bits >> 2) << 2; - return __8B(bits)._float; +PyVar py_object(VM* vm, i64 val){ + if(((val << 2) >> 2) != val){ + vm->_error("OverflowError", std::to_string(val) + " is out of range"); } + val = (val << 2) | 0b01; + return PyVar(reinterpret_cast(val)); +} +template<> i64 py_cast(VM* vm, const PyVar& obj){ + vm->check_type(obj, vm->tp_int); + return obj.bits >> 2; +} +template<> i64 _py_cast(VM* vm, const PyVar& obj){ + return obj.bits >> 2; +} - template<> PyVar object(VM* vm, bool val){ - return val ? vm->True : vm->False; - } - template<> bool cast(VM* vm, const PyVar& obj){ - vm->check_type(obj, vm->tp_bool); - return obj == vm->True; - } - template<> bool _cast(VM* vm, const PyVar& obj){ - return obj == vm->True; - } +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(VM* vm, const PyVar& obj){ + vm->check_type(obj, vm->tp_float); + i64 bits = obj.bits; + bits = (bits >> 2) << 2; + return __8B(bits)._float; +} +template<> f64 _py_cast(VM* vm, const PyVar& obj){ + i64 bits = obj.bits; + bits = (bits >> 2) << 2; + return __8B(bits)._float; +} + +PyVar py_object(VM* vm, bool val){ + return val ? vm->True : vm->False; +} +template<> bool py_cast(VM* vm, const PyVar& obj){ + vm->check_type(obj, vm->tp_bool); + return obj == vm->True; +} +template<> bool _py_cast(VM* vm, const PyVar& obj){ + return obj == vm->True; +} } // namespace pkpy \ No newline at end of file