ast2 proc pragmas, fix typedef struct X importc, convention selection, ast2 bitfield support
This commit is contained in:
parent
54854a356a
commit
ad8557d70e
8 changed files with 183 additions and 77 deletions
|
|
@ -1,3 +1,7 @@
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define A 1
|
||||
#define B 1.0
|
||||
#define C 0x10
|
||||
|
|
@ -26,7 +30,7 @@ struct A4 {
|
|||
typedef char *A9p[3]; //, A9[4];
|
||||
typedef char *A10[3][6];
|
||||
typedef char *(*A11)[3];
|
||||
typedef struct A1 *A111[12];
|
||||
typedef struct A0 *A111[12];
|
||||
|
||||
typedef int **(*A12)(int, int b, int *c, int *, int *count[4], int (*func)(int, int));
|
||||
typedef int A13(int, int, void (*func)(void));
|
||||
|
|
@ -212,4 +216,8 @@ typedef enum VSPresetFormat {
|
|||
|
||||
//struct A2 test_proc1(struct A0 a);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
@ -11,7 +11,7 @@ const
|
|||
when defined(HEADER):
|
||||
cDefine("HEADER")
|
||||
const
|
||||
flags = " -H -d"
|
||||
flags = " -H"
|
||||
pHeader = @["header:" & path.replace("\\", "/")]
|
||||
pHeaderImp = @["importc"] & pHeader
|
||||
else:
|
||||
|
|
@ -183,21 +183,15 @@ a11 = addr a9p
|
|||
assert A111 is array[12, ptr A1]
|
||||
checkPragmas(A111, pHeaderImp)
|
||||
var a111: A111
|
||||
a111[11] = addr a1
|
||||
a111[11] = addr a0
|
||||
|
||||
assert A12 is proc(a1: cint, b: cint, c: ptr cint, a4: ptr cint, count: array[4, ptr cint], `func`: proc(a1: cint, a2: cint): cint): ptr ptr cint
|
||||
checkPragmas(A12, pHeaderImp)
|
||||
when not defined(HEADER):
|
||||
# Unclear why this fails
|
||||
# request for member ‘ClE_0’ in something not a structure or union
|
||||
var a12: A12
|
||||
assert A12 is proc(a1: cint, b: cint, c: ptr cint, a4: ptr cint, count: array[4, ptr cint], `func`: proc(a1: cint, a2: cint): cint {.cdecl.}): ptr ptr cint {.cdecl.}
|
||||
checkPragmas(A12, pHeaderImp & "cdecl")
|
||||
var a12: A12
|
||||
|
||||
assert A13 is proc(a1: cint, a2: cint, `func`: proc()): cint
|
||||
checkPragmas(A13, pHeaderImp)
|
||||
when not defined(HEADER):
|
||||
# Unclear why this fails
|
||||
# request for member ‘ClE_0’ in something not a structure or union
|
||||
var a13: A13
|
||||
assert A13 is proc(a1: cint, a2: cint, `func`: proc() {.cdecl.}): cint {.cdecl.}
|
||||
checkPragmas(A13, pHeaderImp & "cdecl")
|
||||
var a13: A13
|
||||
|
||||
assert A14 is object
|
||||
testFields(A14, "a1:cchar")
|
||||
|
|
@ -216,20 +210,16 @@ a15.a2[0] = addr a15i
|
|||
|
||||
assert A16 is object
|
||||
testFields(A16, "f1:cchar")
|
||||
checkPragmas(A16, pHeaderImpBy)
|
||||
when not defined(HEADER):
|
||||
# Similar to A2
|
||||
var a16: A16
|
||||
a16.f1 = 's'
|
||||
checkPragmas(A16, pHeaderBy, istype = false)
|
||||
var a16: A16
|
||||
a16.f1 = 's'
|
||||
|
||||
assert A17 is object
|
||||
testFields(A17, "a1|a2:cstring|array[1, ptr cint]")
|
||||
checkPragmas(A17, pHeaderImpBy)
|
||||
when not defined(HEADER):
|
||||
# Similar to A2
|
||||
var a17: A17
|
||||
a17.a1 = "hello".cstring
|
||||
a17.a2[0] = addr a15i
|
||||
checkPragmas(A17, pHeaderBy, istype = false)
|
||||
var a17: A17
|
||||
a17.a1 = "hello".cstring
|
||||
a17.a2[0] = addr a15i
|
||||
|
||||
assert A18 is A17
|
||||
checkPragmas(A18, pHeaderImp)
|
||||
|
|
@ -254,7 +244,7 @@ a19p = addr a19
|
|||
|
||||
assert A20 is object
|
||||
testFields(A20, "a1:cchar")
|
||||
checkPragmas(A20, pHeaderImpBy)
|
||||
checkPragmas(A20, pHeaderBy, istype = false)
|
||||
var a20: A20
|
||||
a20.a1 = 'a'
|
||||
|
||||
|
|
@ -270,7 +260,7 @@ a21p = addr a20
|
|||
|
||||
assert A22 is object
|
||||
testFields(A22, "f1|f2:ptr ptr cint|array[123 + 132, ptr cint]")
|
||||
checkPragmas(A22, pHeaderImpBy)
|
||||
checkPragmas(A22, pHeaderBy, istype = false)
|
||||
var a22: A22
|
||||
a22.f1 = addr a15.a2[0]
|
||||
|
||||
|
|
@ -282,7 +272,7 @@ u1.f1 = 5
|
|||
|
||||
assert U2 is object
|
||||
assert sizeof(U2) == 256 * sizeof(cint)
|
||||
checkPragmas(U2, pHeaderImpBy & @["union"])
|
||||
checkPragmas(U2, pHeaderBy & @["union"], istype = false)
|
||||
var u2: U2
|
||||
u2.f1 = addr a15.a2[0]
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,17 @@ cOverride:
|
|||
proc weirdfunc(apple: ptr ptr ptr cchar): int {.importc.}
|
||||
proc weirdfunc2(mango: ptr ptr cchar): int {.importc.}
|
||||
|
||||
cImport(cSearchPath("test.h"))
|
||||
# includeHeader
|
||||
const header =
|
||||
when defined(HEADER): " -H"
|
||||
else: ""
|
||||
|
||||
# Test AST2
|
||||
const mode =
|
||||
when defined(AST2): " -f:ast2"
|
||||
else: ""
|
||||
|
||||
cImport(cSearchPath("test.h"), flags = header & mode)
|
||||
|
||||
check TEST_INT == 512
|
||||
check TEST_FLOAT == 5.12
|
||||
|
|
@ -65,7 +75,7 @@ var
|
|||
ct: CUSTTYPE
|
||||
cct: CCUSTTYPE
|
||||
|
||||
s0: STRUCT0
|
||||
s0: ptr STRUCT0
|
||||
s1: STRUCT1
|
||||
s2: STRUCT2
|
||||
s3: STRUCT3
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue