コード例 #1
0
 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
コード例 #2
0
ファイル: ctypeprim.py プロジェクト: pointworld/pypy
 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
コード例 #3
0
ファイル: ctypeprim.py プロジェクト: zielmicha/pypy
 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
コード例 #4
0
ファイル: ctypeprim.py プロジェクト: zielmicha/pypy
 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
コード例 #5
0
 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