import sys from . import model from .error import FFIError COMMON_TYPES = {} try: # fetch "bool" and all simple Windows types from _cffi_backend import _get_common_types _get_common_types(COMMON_TYPES) except ImportError: pass COMMON_TYPES['FILE'] = model.unknown_type('FILE', '_IO_FILE') COMMON_TYPES['bool'] = '_Bool' # in case we got ImportError above for _type in model.PrimitiveType.ALL_PRIMITIVE_TYPES: if _type.endswith('_t'): COMMON_TYPES[_type] = _type del _type _CACHE = {} def resolve_common_type(parser, commontype): try: return _CACHE[commontype] except KeyError: cdecl = COMMON_TYPES.get(commontype, commontype) if not isinstance(cdecl, str): result, quals = cdecl, 0 # cdecl is already a BaseType elif cdecl in model.PrimitiveType.ALL_PRIMITIVE_TYPES: result, quals = model.PrimitiveType(cdecl), 0 elif cdecl == 'set-unicode-needed': raise FFIError("The Windows type %r is only available after " "you call ffi.set_unicode()" % (commontype,)) else: if commontype == cdecl: raise FFIError( "Unsupported type: %r. Please look at " "http://cffi.readthedocs.io/en/latest/cdef.html#ffi-cdef-limitations " "and file an issue if you think this type should really " "be supported." % (commontype,)) result, quals = parser.parse_type_and_quals(cdecl) # recursive assert isinstance(result, model.BaseTypeByIdentity) _CACHE[commontype] = result, quals return result, quals # ____________________________________________________________ # extra types for Windows (most of them are in commontypes.c) def win_common_types(): return { "UNICODE_STRING": model.StructType( "_UNICODE_STRING", ["Length", "MaximumLength", "Buffer"], [model.PrimitiveType("unsigned short"), model.PrimitiveType("unsigned short"), model.PointerType(model.PrimitiveType("wchar_t"))], [-1, -1, -1]), "PUNICODE_STRING": "UNICODE_STRING *", "PCUNICODE_STRING": "const UNICODE_STRING *", "TBYTE": "set-unicode-needed", "TCHAR": "set-unicode-needed", "LPCTSTR": "set-unicode-needed", "PCTSTR": "set-unicode-needed", "LPTSTR": "set-unicode-needed", "PTSTR": "set-unicode-needed", "PTBYTE": "set-unicode-needed", "PTCHAR": "set-unicode-needed", } if sys.platform == 'win32': COMMON_TYPES.update(win_common_types())
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
__init__.py | File | 513 B | 0644 |
|
_cffi_errors.h | File | 3.82 KB | 0644 |
|
_cffi_include.h | File | 14.45 KB | 0644 |
|
_embedding.h | File | 17.27 KB | 0644 |
|
api.py | File | 41.08 KB | 0644 |
|
backend_ctypes.py | File | 41.46 KB | 0644 |
|
cffi_opcode.py | File | 5.59 KB | 0644 |
|
commontypes.py | File | 2.63 KB | 0644 |
|
cparser.py | File | 43.19 KB | 0644 |
|
error.py | File | 877 B | 0644 |
|
ffiplatform.py | File | 3.95 KB | 0644 |
|
lock.py | File | 747 B | 0644 |
|
model.py | File | 21.26 KB | 0644 |
|
parse_c_type.h | File | 5.84 KB | 0644 |
|
pkgconfig.py | File | 4.27 KB | 0644 |
|
recompiler.py | File | 63.08 KB | 0644 |
|
setuptools_ext.py | File | 8.72 KB | 0644 |
|
vengine_cpy.py | File | 42.3 KB | 0644 |
|
vengine_gen.py | File | 26.06 KB | 0644 |
|
verifier.py | File | 10.99 KB | 0644 |
|