示例#1
0
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'
示例#2
0
        class BasicConverter(ffitypes.typeid(c_type), IntTypeConverterMixin,
                             TypeConverter):
            _immutable_ = True
            typecode = c_tc

            def __init__(self, space, default):
                self.default = rffi.cast(self.c_type,
                                         capi.c_strtoull(space, default))
示例#3
0
 class BasicConverter(ffitypes.typeid(c_type), CharTypeConverterMixin, TypeConverter):
     _immutable_ = True
     def __init__(self, space, default):
         self.valid_default = False
         try:
             self.default = rffi.cast(self.c_type, capi.c_strtoull(space, default))
             self.valid_default = True
         except Exception:
             self.default = rffi.cast(self.c_type, 0)
示例#4
0
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)
示例#5
0
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.)
示例#6
0
文件: converter.py 项目: xen0n/pypy
class DoubleConverter(ffitypes.typeid(rffi.DOUBLE), FloatTypeConverterMixin, TypeConverter):
    _immutable_fields_ = ['default', 'valid_default']

    def __init__(self, space, default):
        self.valid_default = False
        try:
            self.default = rffi.cast(self.c_type, rfloat.rstring_to_float(default))
            self.valid_default = True
        except Exception:
            self.default = rffi.cast(self.c_type, 0.)
示例#7
0
 class BasicConverter(ffitypes.typeid(c_type), IntTypeConverterMixin, TypeConverter):
     _immutable_ = True
     typecode = c_tc
     def __init__(self, space, default):
         self.valid_default = False
         try:
             self.default = rffi.cast(self.c_type, dfc(space, default))
             self.valid_default = True
         except Exception:
             self.default = rffi.cast(self.c_type, 0)
示例#8
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])
示例#9
0
文件: converter.py 项目: xen0n/pypy
class FloatConverter(ffitypes.typeid(rffi.FLOAT), FloatTypeConverterMixin, TypeConverter):
    _immutable_fields_ = ['default', 'valid_default']

    def __init__(self, space, default):
        self.valid_default = False
        try:
            fval = float(rfloat.rstring_to_float(default))
            self.valid_default = True
        except Exception:
            fval = float(0.)
        self.default = rffi.cast(rffi.FLOAT, r_singlefloat(fval))

    def from_memory(self, space, w_obj, offset):
        address = self._get_raw_address(space, w_obj, offset)
        rffiptr = rffi.cast(self.c_ptrtype, address)
        return self._wrap_object(space, rffiptr[0])
示例#10
0
文件: converter.py 项目: xen0n/pypy
class CharConverter(ffitypes.typeid(rffi.CHAR), TypeConverter):
    def convert_argument(self, space, w_obj, address):
        x = rffi.cast(rffi.CCHARP, 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, scratch):
        x = rffi.cast(self.c_ptrtype, address)
        x[0] = self._unwrap_object(space, w_obj)

    def from_memory(self, space, w_obj, offset):
        address = rffi.cast(rffi.CCHARP, self._get_raw_address(space, w_obj, offset))
        return space.newbytes(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)
示例#11
0
文件: executor.py 项目: zcxowwww/pypy
class LongDoubleRefExecutor(ffitypes.typeid(rffi.LONGDOUBLE),
                            LongDoubleRefExecutorMixin, Executor):
    def cffi_type(self, space):
        state = space.fromcache(ffitypes.State)
        return state.c_voidp
示例#12
0
文件: executor.py 项目: zcxowwww/pypy
class LongDoubleExecutor(ffitypes.typeid(rffi.LONGDOUBLE),
                         LongDoubleExecutorMixin, Executor):
    _immutable_ = True
    c_stubcall = staticmethod(capi.c_call_ld)
示例#13
0
文件: executor.py 项目: lvyitian/pypy
class Char16Executor(ffitypes.typeid(ffitypes.CHAR16_T), CharNExecutor,
                     Executor):
    pass
示例#14
0
文件: converter.py 项目: xen0n/pypy
class UCharConverter(ffitypes.typeid(rffi.UCHAR), CharConverter):
    pass
示例#15
0
文件: executor.py 项目: lvyitian/pypy
class Char32Executor(ffitypes.typeid(ffitypes.CHAR32_T), CharNExecutor,
                     Executor):
    pass
示例#16
0
 class BasicExecutor(ffitypes.typeid(c_type), NumericExecutorMixin,
                     FunctionExecutor):
     _immutable_ = True
     c_stubcall = staticmethod(stub)
示例#17
0
 class BasicRefExecutor(ffitypes.typeid(c_type),
                        NumericRefExecutorMixin, FunctionExecutor):
     def cffi_type(self, space):
         state = space.fromcache(ffitypes.State)
         return state.c_voidp
示例#18
0
文件: executor.py 项目: lvyitian/pypy
class WCharExecutor(ffitypes.typeid(lltype.UniChar), CharNExecutor, Executor):
    pass