def cast(self, w_ob): from pypy.module._cffi_backend import ctypeptr space = self.space if (isinstance(w_ob, cdataobj.W_CData) and isinstance(w_ob.ctype, ctypeptr.W_CTypePtrOrArray)): value = rffi.cast(lltype.Signed, w_ob._cdata) value = self._cast_result(value) elif space.isinstance_w(w_ob, space.w_str): value = self.cast_str(w_ob) value = self._cast_result(value) elif space.isinstance_w(w_ob, space.w_unicode): value = self.cast_unicode(w_ob) value = self._cast_result(value) else: value = self._cast_generic(w_ob) w_cdata = cdataobj.W_CDataMem(space, self.size, self) self.write_raw_integer_data(w_cdata, value) return w_cdata
def cast(self, w_ob): space = self.space if isinstance(w_ob, cdataobj.W_CData): if not isinstance(w_ob.ctype, W_CTypePrimitive): raise oefmt(space.w_TypeError, "cannot cast ctype '%s' to ctype '%s'", w_ob.ctype.name, self.name) w_ob = w_ob.convert_to_object() # imag = 0.0 if space.isinstance_w(w_ob, space.w_bytes): real = self.cast_str(w_ob) elif space.isinstance_w(w_ob, space.w_unicode): real = self.cast_unicode(w_ob) else: real, imag = space.unpackcomplex(w_ob) w_cdata = cdataobj.W_CDataMem(space, self) w_cdata.write_raw_complex_data(real, imag) return w_cdata
def cast(self, w_ob): space = self.space if isinstance(w_ob, cdataobj.W_CData): if not isinstance(w_ob.ctype, W_CTypePrimitive): raise oefmt(space.w_TypeError, "cannot cast ctype '%s' to ctype '%s'", w_ob.ctype.name, self.name) w_ob = w_ob.convert_to_object() # if space.isinstance_w(w_ob, space.w_str): value = self.cast_str(w_ob) elif space.isinstance_w(w_ob, space.w_unicode): value = self.cast_unicode(w_ob) else: value = space.float_w(w_ob) w_cdata = cdataobj.W_CDataMem(space, self.size, self) if not isinstance(self, W_CTypePrimitiveLongDouble): w_cdata.write_raw_float_data(value) else: with w_cdata as ptr: self._to_longdouble_and_write(value, ptr) return w_cdata
def convert_to_object(self, cdata): w_cdata = cdataobj.W_CDataMem(self.space, self.size, self) with w_cdata as ptr: self._copy_longdouble(cdata, ptr) return w_cdata
def convert_to_object(self, cdata): w_cdata = cdataobj.W_CDataMem(self.space, self.size, self) self._copy_longdouble(cdata, w_cdata._cdata) keepalive_until_here(w_cdata) return w_cdata