def convert_to_object(self, cdata): if self.value_fits_long: value = misc.read_raw_long_data(cdata, self.size) return self.space.wrap(value) else: value = misc.read_raw_signed_data(cdata, self.size) return self.space.wrap(value) # r_longlong => on 32-bit, 'long'
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
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
def convert_to_object(self, cdata): if self.value_fits_long: value = misc.read_raw_long_data(cdata, self.size) return self.space.wrap(value) else: return self._convert_to_object_longlong(cdata)
def _get_value(self, cdata): # returns a signed long assert self.value_fits_long return misc.read_raw_long_data(cdata, self.size)
def nonzero(self, cdata): if self.size <= rffi.sizeof(lltype.Signed): value = misc.read_raw_long_data(cdata, self.size) return value != 0 else: return self._nonzero_longlong(cdata)