diff --git a/src/cffi.h b/src/cffi.h index d1f3918b..5f154dbc 100644 --- a/src/cffi.h +++ b/src/cffi.h @@ -45,7 +45,7 @@ constexpr CType kCTypes[] = { const int kCTypeCount = sizeof(kCTypes) / sizeof(CType); -constexpr int ctype(const char name[]){ +constexpr int C_TYPE(const char name[]){ for(int k=0; kbind_method<0>(type, "__repr__", [](VM* vm, pkpy::Args& args) { Pointer& self = vm->py_cast(args[0]); StrStream ss; - ss << "<" << self._ctype.name << "* at " << (i64)self.ptr << ">"; + ss << "<" << self.ctype.name << "* at " << (i64)self.ptr << ">"; return vm->PyStr(ss.str()); }); @@ -147,21 +147,21 @@ struct Pointer{ } PyVar get(VM* vm){ - switch(_ctype.index){ - case ctype("char_"): return vm->PyInt(ref()); - case ctype("int_"): return vm->PyInt(ref()); - case ctype("float_"): return vm->PyFloat(ref()); - case ctype("double_"): return vm->PyFloat(ref()); - case ctype("bool_"): return vm->PyBool(ref()); - case ctype("void_"): vm->ValueError("cannot get void*"); break; - case ctype("int8_"): return vm->PyInt(ref()); - case ctype("int16_"): return vm->PyInt(ref()); - case ctype("int32_"): return vm->PyInt(ref()); - case ctype("int64_"): return vm->PyInt(ref()); - case ctype("uint8_"): return vm->PyInt(ref()); - case ctype("uint16_"): return vm->PyInt(ref()); - case ctype("uint32_"): return vm->PyInt(ref()); - case ctype("uint64_"): return vm->PyInt(ref()); + switch(ctype.index){ + case C_TYPE("char_"): return vm->PyInt(ref()); + case C_TYPE("int_"): return vm->PyInt(ref()); + case C_TYPE("float_"): return vm->PyFloat(ref()); + case C_TYPE("double_"): return vm->PyFloat(ref()); + case C_TYPE("bool_"): return vm->PyBool(ref()); + case C_TYPE("void_"): vm->ValueError("cannot get void*"); break; + case C_TYPE("int8_"): return vm->PyInt(ref()); + case C_TYPE("int16_"): return vm->PyInt(ref()); + case C_TYPE("int32_"): return vm->PyInt(ref()); + case C_TYPE("int64_"): return vm->PyInt(ref()); + case C_TYPE("uint8_"): return vm->PyInt(ref()); + case C_TYPE("uint16_"): return vm->PyInt(ref()); + case C_TYPE("uint32_"): return vm->PyInt(ref()); + case C_TYPE("uint64_"): return vm->PyInt(ref()); // use macro here to do extension default: UNREACHABLE(); } @@ -169,21 +169,21 @@ struct Pointer{ } void set(VM* vm, const PyVar& val){ - switch(_ctype.index){ - case ctype("char_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("int_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("float_"): ref() = vm->PyFloat_AS_C(val); break; - case ctype("double_"): ref() = vm->PyFloat_AS_C(val); break; - case ctype("bool_"): ref() = vm->PyBool_AS_C(val); break; - case ctype("void_"): vm->ValueError("cannot set void*"); break; - case ctype("int8_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("int16_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("int32_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("int64_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("uint8_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("uint16_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("uint32_"): ref() = vm->PyInt_AS_C(val); break; - case ctype("uint64_"): ref() = vm->PyInt_AS_C(val); break; + switch(ctype.index){ + case C_TYPE("char_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("int_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("float_"): ref() = vm->PyFloat_AS_C(val); break; + case C_TYPE("double_"): ref() = vm->PyFloat_AS_C(val); break; + case C_TYPE("bool_"): ref() = vm->PyBool_AS_C(val); break; + case C_TYPE("void_"): vm->ValueError("cannot set void*"); break; + case C_TYPE("int8_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("int16_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("int32_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("int64_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("uint8_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("uint16_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("uint32_"): ref() = vm->PyInt_AS_C(val); break; + case C_TYPE("uint64_"): ref() = vm->PyInt_AS_C(val); break; // use macro here to do extension default: UNREACHABLE(); } @@ -260,11 +260,11 @@ void add_module_c(VM* vm){ for(int i=0; isetattr(mod, kCTypes[i].name, vm->new_object(kCTypes[i])); } - vm->setattr(mod, "nullptr", vm->new_object(nullptr, ctype_t("void_"))); + vm->setattr(mod, "nullptr", vm->new_object(nullptr, C_TYPE_T("void_"))); vm->bind_func<1>(mod, "malloc", [](VM* vm, pkpy::Args& args) { i64 size = vm->PyInt_AS_C(args[0]); - return vm->new_object(malloc(size), ctype_t("void_")); + return vm->new_object(malloc(size), C_TYPE_T("void_")); }); vm->bind_func<1>(mod, "free", [](VM* vm, pkpy::Args& args) { @@ -297,10 +297,10 @@ void add_module_c(VM* vm){ vm->bind_func<1>(mod, "strdup", [ptr_t](VM* vm, pkpy::Args& args) { if(is_type(args[0], vm->tp_str)){ const Str& s = vm->PyStr_AS_C(args[0]); - return vm->new_object(strdup(s.c_str()), ctype_t("char_")); + return vm->new_object(strdup(s.c_str()), C_TYPE_T("char_")); }else if(is_type(args[0], OBJ_GET(Type, ptr_t))){ Pointer& p = vm->py_cast(args[0]); - return vm->new_object(strdup(p.cast()), ctype_t("char_")); + return vm->new_object(strdup(p.cast()), C_TYPE_T("char_")); }else{ vm->TypeError("strdup() argument must be 'str' or 'char*'"); return vm->None;