コード例 #1
0
ファイル: ctypeprim.py プロジェクト: zielmicha/pypy
 def convert_to_object(self, cdata):
     if self.value_fits_ulong:
         value = misc.read_raw_ulong_data(cdata, self.size)
         if self.value_fits_long:
             return self.space.wrap(intmask(value))
         else:
             return self.space.wrap(value)    # r_uint => 'long' object
     else:
         return self._convert_to_object_longlong(cdata)
コード例 #2
0
ファイル: ctypeprim.py プロジェクト: pointworld/pypy
 def cast_to_int(self, cdata):
     if self.is_signed_wchar:
         value = misc.read_raw_long_data(cdata, self.size)
         return self.space.newint(value)
     else:
         value = misc.read_raw_ulong_data(cdata, self.size)
         if self.size < rffi.sizeof(lltype.Signed):
             return self.space.newint(intmask(value))
         else:
             return self.space.newint(value)  # r_uint => 'long' object
コード例 #3
0
ファイル: ctypeprim.py プロジェクト: pointworld/pypy
 def convert_to_object(self, cdata):
     value = misc.read_raw_ulong_data(cdata, self.size)  # r_uint
     try:
         utf8 = rutf8.unichr_as_utf8(value, allow_surrogates=True)
     except rutf8.OutOfRange:
         if self.is_signed_wchar:
             s = hex(intmask(value))
         else:
             s = hex(value)
         raise oefmt(self.space.w_ValueError,
                     "%s out of range for conversion to unicode: %s",
                     self.name, s)
     return self.space.newutf8(utf8, 1)
コード例 #4
0
ファイル: ctypeprim.py プロジェクト: stjordanis/pypy
 def convert_to_object(self, cdata):
     if self.is_signed_wchar:
         unichardata = rffi.cast(rffi.CWCHARP, cdata)
         return self.space.newunicode(unichardata[0])
     else:
         value = misc.read_raw_ulong_data(cdata, self.size)  # r_uint
         try:
             u = wchar_helper.ordinal_to_unicode(value)
         except wchar_helper.OutOfRange as e:
             raise oefmt(
                 self.space.w_ValueError, "char32_t out of range for "
                 "conversion to unicode: %s", hex(e.ordinal))
         return self.space.newunicode(u)
コード例 #5
0
ファイル: ctypeprim.py プロジェクト: pointworld/pypy
 def _convert_to_charN_t(self, w_ob):
     # returns a r_uint.  If self.size == 2, it is smaller than 0x10000
     space = self.space
     if space.isinstance_w(w_ob, space.w_unicode):
         w_u = space.convert_arg_to_w_unicode(w_ob)
         if w_u._len() != 1:
             raise self._convert_error("single character", w_ob)
         ordinal = rutf8.codepoint_at_pos(w_u._utf8, 0)
         if self.size == 2 and ordinal > 0xFFFF:
             raise self._convert_error("single character <= 0xFFFF", w_ob)
         return r_uint(ordinal)
     elif (isinstance(w_ob, cdataobj.W_CData)
           and isinstance(w_ob.ctype, W_CTypePrimitiveUniChar)
           and w_ob.ctype.size == self.size):
         with w_ob as ptr:
             return misc.read_raw_ulong_data(ptr, self.size)
     raise self._convert_error("unicode string of length 1", w_ob)
コード例 #6
0
ファイル: ctypestruct.py プロジェクト: Qointum/pypy
 def convert_bitfield_to_object(self, cdata):
     ctype = self.ctype
     space = ctype.space
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveSigned):
         if ctype.value_fits_long:
             value = r_uint(misc.read_raw_long_data(cdata, ctype.size))
             valuemask = (r_uint(1) << self.bitsize) - 1
             shiftforsign = r_uint(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = intmask(value) - intmask(shiftforsign)
             return space.wrap(result)
         else:
             value = misc.read_raw_unsigned_data(cdata, ctype.size)
             valuemask = (r_ulonglong(1) << self.bitsize) - 1
             shiftforsign = r_ulonglong(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = r_longlong(value) - r_longlong(shiftforsign)
             return space.wrap(result)
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveUnsigned):
         value_fits_long = ctype.value_fits_long
         value_fits_ulong = ctype.value_fits_ulong
     elif isinstance(ctype, ctypeprim.W_CTypePrimitiveCharOrUniChar):
         value_fits_long = True
         value_fits_ulong = True
     else:
         raise NotImplementedError
     #
     if value_fits_ulong:
         value = misc.read_raw_ulong_data(cdata, ctype.size)
         valuemask = (r_uint(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         if value_fits_long:
             return space.wrap(intmask(value))
         else:
             return space.wrap(value)  # uint => wrapped long object
     else:
         value = misc.read_raw_unsigned_data(cdata, ctype.size)
         valuemask = (r_ulonglong(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         return space.wrap(value)  # ulonglong => wrapped long object
コード例 #7
0
ファイル: ctypestruct.py プロジェクト: bukzor/pypy
 def convert_bitfield_to_object(self, cdata):
     ctype = self.ctype
     space = ctype.space
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveSigned):
         if ctype.value_fits_long:
             value = r_uint(misc.read_raw_long_data(cdata, ctype.size))
             valuemask = (r_uint(1) << self.bitsize) - 1
             shiftforsign = r_uint(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = intmask(value) - intmask(shiftforsign)
             return space.wrap(result)
         else:
             value = misc.read_raw_unsigned_data(cdata, ctype.size)
             valuemask = (r_ulonglong(1) << self.bitsize) - 1
             shiftforsign = r_ulonglong(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = r_longlong(value) - r_longlong(shiftforsign)
             return space.wrap(result)
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveUnsigned):
         value_fits_long = ctype.value_fits_long
         value_fits_ulong = ctype.value_fits_ulong
     elif isinstance(ctype, ctypeprim.W_CTypePrimitiveCharOrUniChar):
         value_fits_long = True
         value_fits_ulong = True
     else:
         raise NotImplementedError
     #
     if value_fits_ulong:
         value = misc.read_raw_ulong_data(cdata, ctype.size)
         valuemask = (r_uint(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         if value_fits_long:
             return space.wrap(intmask(value))
         else:
             return space.wrap(value)    # uint => wrapped long object
     else:
         value = misc.read_raw_unsigned_data(cdata, ctype.size)
         valuemask = (r_ulonglong(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         return space.wrap(value)      # ulonglong => wrapped long object
コード例 #8
0
ファイル: ctypeprim.py プロジェクト: stjordanis/pypy
 def _convert_to_charN_t(self, w_ob):
     # returns a r_uint.  If self.size == 2, it is smaller than 0x10000
     space = self.space
     if space.isinstance_w(w_ob, space.w_unicode):
         u = space.unicode_w(w_ob)
         try:
             ordinal = wchar_helper.unicode_to_ordinal(u)
         except ValueError:
             pass
         else:
             if self.size == 2 and ordinal > 0xffff:
                 raise self._convert_error("single character <= 0xFFFF",
                                           w_ob)
             return ordinal
     elif (isinstance(w_ob, cdataobj.W_CData)
           and isinstance(w_ob.ctype, W_CTypePrimitiveUniChar)
           and w_ob.ctype.size == self.size):
         with w_ob as ptr:
             return misc.read_raw_ulong_data(ptr, self.size)
     raise self._convert_error("unicode string of length 1", w_ob)
コード例 #9
0
 def _get_value(self, cdata):
     # returns an unsigned long
     assert self.value_fits_ulong
     return misc.read_raw_ulong_data(cdata, self.size)
コード例 #10
0
ファイル: ctypeenum.py プロジェクト: bukzor/pypy
 def _get_value(self, cdata):
     # returns an unsigned long
     assert self.value_fits_ulong
     return misc.read_raw_ulong_data(cdata, self.size)