1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
# mode: error
cimport cython
ctypedef int USERTYPE
# Functions
@cython.callspec("")
cdef void h1(): pass
@cython.callspec("__cdecl")
cdef void __cdecl h2(): pass
@cython.callspec("__stdcall")
cdef void __stdcall h3(): pass
@cython.callspec("__fastcall")
cdef void __fastcall h4(): pass
cdef USERTYPE h5(): return 0
cdef USERTYPE __cdecl h6(): return 0
cdef USERTYPE __stdcall h7(): return 0
cdef USERTYPE __fastcall h8(): return 0
@cython.callspec("__cdecl")
cdef void __stdcall herr1(): pass # fail
@cython.callspec("__cdecl")
cdef void __fastcall herr2(): pass # fail
# Pointer typedefs
ctypedef void (*PT1)()
ctypedef void (__cdecl *PT2)()
ctypedef void (__stdcall *PT3)()
ctypedef void (__fastcall *PT4)()
ctypedef USERTYPE (*PT5)()
ctypedef USERTYPE (__cdecl *PT6)()
ctypedef USERTYPE (__stdcall *PT7)()
ctypedef USERTYPE (__fastcall *PT8)()
# Pointers
cdef void (*p1)()
cdef void (__cdecl *p2)()
cdef void (__stdcall *p3)()
cdef void (__fastcall *p4)()
cdef USERTYPE (*p5)()
cdef USERTYPE (__cdecl *p6)()
cdef USERTYPE (__stdcall *p7)()
cdef USERTYPE (__fastcall *p8)()
cdef PT1 pt1
cdef PT2 pt2
cdef PT3 pt3
cdef PT4 pt4
cdef PT5 pt5
cdef PT6 pt6
cdef PT7 pt7
cdef PT8 pt8
# Assignments
p1 = pt1 = p2 = pt2 = h1
p1 = pt1 = p2 = pt2 = h2
p3 = pt3 = h3
p4 = pt4 = h4
p5 = pt5 = p6 = pt6 = h5
p5 = pt5 = p6 = pt6 = h6
p7 = pt7 = h7
p8 = pt8 = h8
#p1 = h2 # fail
#p1 = h3 # fail
#p1 = h4 # fail
#p2 = h1 # fail
#p2 = h3 # fail
#p2 = h4 # fail
_ERRORS = u"""
30:25: cannot have both '__stdcall' and '__cdecl' calling conventions
33:26: cannot have both '__fastcall' and '__cdecl' calling conventions
"""
#31:14: Cannot assign type 'void (__cdecl )(void)' to 'void (*)(void)'
#32:14: Cannot assign type 'void (__stdcall )(void)' to 'void (*)(void)'
#33:14: Cannot assign type 'void (__fastcall )(void)' to 'void (*)(void)'
#35:14: Cannot assign type 'void (void)' to 'void (__cdecl *)(void)'
#36:14: Cannot assign type 'void (__stdcall )(void)' to 'void (__cdecl *)(void)'
#37:14: Cannot assign type 'void (__fastcall )(void)' to 'void (__cdecl *)(void)'
|