blueloveTH 3 лет назад
Родитель
Сommit
2d26f836ae
2 измененных файлов с 45 добавлено и 53 удалено
  1. 4 12
      src/obj.h
  2. 41 41
      src/vm.h

+ 4 - 12
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<typename T>
-PyVar object(VM* vm, T&) { UNREACHABLE(); }
-template<typename T>
-PyVar object(VM* vm, T&&) { UNREACHABLE(); }
-template<typename T>
-PyVar object(VM* vm, T) { UNREACHABLE(); }
-
 // Cast a PyVar to a native type `T` by reference
 template<typename T>
-T& cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
+T& py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
 template<typename T>
-T cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
+T py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
 template<typename T>
-T& _cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
+T& _py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
 template<typename T>
-T _cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
+T _py_cast(VM* vm, const PyVar& var) { UNREACHABLE(); }
 
 }   // namespace pkpy

+ 41 - 41
src/vm.h

@@ -955,48 +955,48 @@ void CodeObject::optimize(VM* vm){
     }
 }
 
-    template<> PyVar object<i64>(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<int*>(val));
-    }
-    template<> i64 cast<i64>(VM* vm, const PyVar& obj){
-        vm->check_type(obj, vm->tp_int);
-        return obj.bits >> 2;
-    }
-    template<> i64 _cast<i64>(VM* vm, const PyVar& obj){
-        return obj.bits >> 2;
-    }
-    
-    template<> PyVar object<f64>(VM* vm, f64 val){
-        i64 bits = __8B(val)._int;
-        bits = (bits >> 2) << 2;
-        bits |= 0b10;
-        return PyVar(reinterpret_cast<int*>(bits));
-    }
-    template<> f64 cast<f64>(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<f64>(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<int*>(val));
+}
+template<> i64 py_cast<i64>(VM* vm, const PyVar& obj){
+    vm->check_type(obj, vm->tp_int);
+    return obj.bits >> 2;
+}
+template<> i64 _py_cast<i64>(VM* vm, const PyVar& obj){
+    return obj.bits >> 2;
+}
 
-    template<> PyVar object<bool>(VM* vm, bool val){
-        return val ? vm->True : vm->False;
-    }
-    template<> bool cast<bool>(VM* vm, const PyVar& obj){
-        vm->check_type(obj, vm->tp_bool);
-        return obj == vm->True;
-    }
-    template<> bool _cast<bool>(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<int*>(bits));
+}
+template<> f64 py_cast<f64>(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<f64>(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<bool>(VM* vm, const PyVar& obj){
+    vm->check_type(obj, vm->tp_bool);
+    return obj == vm->True;
+}
+template<> bool _py_cast<bool>(VM* vm, const PyVar& obj){
+    return obj == vm->True;
+}
 
 }   // namespace pkpy