class BoolConverter(ffitypes.typeid(bool), TypeConverter): def convert_argument(self, space, w_obj, address, call_local): x = rffi.cast(rffi.LONGP, address) x[0] = self._unwrap_object(space, w_obj) ba = rffi.cast(rffi.CCHARP, address) ba[capi.c_function_arg_typeoffset(space)] = 'b' def convert_argument_libffi(self, space, w_obj, address, call_local): x = rffi.cast(rffi.LONGP, address) x[0] = self._unwrap_object(space, w_obj) def from_memory(self, space, w_obj, w_pycppclass, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) if address[0] == '\x01': return space.w_True return space.w_False def to_memory(self, space, w_obj, w_value, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) arg = self._unwrap_object(space, w_value) if arg: address[0] = '\x01' else: address[0] = '\x00'
class BasicConverter(ffitypes.typeid(c_type), IntTypeConverterMixin, TypeConverter): _immutable_ = True def __init__(self, space, default): self.default = rffi.cast(self.c_type, capi.c_strtoull(space, default))
class LongDoubleConverter(ffitypes.typeid(rffi.LONGDOUBLE), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default'] def __init__(self, space, default): if default: fval = float(rfloat.rstring_to_float(default)) else: fval = float(0.) self.default = r_longfloat(fval)
class DoubleConverter(ffitypes.typeid(rffi.DOUBLE), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default'] def __init__(self, space, default): if default: self.default = rffi.cast(self.c_type, rfloat.rstring_to_float(default)) else: self.default = rffi.cast(self.c_type, 0.)
class FloatConverter(ffitypes.typeid(rffi.FLOAT), FloatTypeConverterMixin, TypeConverter): _immutable_fields_ = ['default'] def __init__(self, space, default): if default: fval = float(rfloat.rstring_to_float(default)) else: fval = float(0.) self.default = r_singlefloat(fval) def from_memory(self, space, w_obj, w_pycppclass, offset): address = self._get_raw_address(space, w_obj, offset) rffiptr = rffi.cast(self.c_ptrtype, address) return self._wrap_object(space, rffiptr[0])
class CharConverter(ffitypes.typeid(rffi.CHAR), TypeConverter): def convert_argument(self, space, w_obj, address, call_local): x = rffi.cast(rffi.CCHARP, address) x[0] = self._unwrap_object(space, w_obj) def convert_argument_libffi(self, space, w_obj, address, call_local): x = rffi.cast(self.c_ptrtype, address) x[0] = self._unwrap_object(space, w_obj) def from_memory(self, space, w_obj, w_pycppclass, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) return space.wrap(address[0]) def to_memory(self, space, w_obj, w_value, offset): address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset)) address[0] = self._unwrap_object(space, w_value)
class BasicRefExecutor(ffitypes.typeid(c_type), NumericRefExecutorMixin, FunctionExecutor): _immutable_fields_ = ['libffitype'] libffitype = jit_libffi.types.pointer
class BasicExecutor(ffitypes.typeid(c_type), NumericExecutorMixin, FunctionExecutor): _immutable_ = True c_stubcall = staticmethod(stub)
class BasicRefExecutor(ffitypes.typeid(c_type), NumericRefExecutorMixin, FunctionExecutor): def cffi_type(self, space): state = space.fromcache(ffitypes.State) return state.c_voidp