diff options
| author | Ganesh Viswanathan <dev@genotrance.com> | 2020-04-01 21:47:15 -0500 |
|---|---|---|
| committer | Ganesh Viswanathan <dev@genotrance.com> | 2020-04-01 21:47:15 -0500 |
| commit | ad8557d70e5c8ff3220582b7f78a2822f87d2476 (patch) | |
| tree | 05010be16f2e2864fe87a9ad94a63ff5110697f7 /tests | |
| parent | 54854a356adfacdedb85054df7dd5fc3d4eb02da (diff) | |
| download | nimterop-ad8557d70e5c8ff3220582b7f78a2822f87d2476.tar.gz nimterop-ad8557d70e5c8ff3220582b7f78a2822f87d2476.zip | |
ast2 proc pragmas, fix typedef struct X importc, convention selection, ast2 bitfield support
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/include/tast2.h | 10 | ||||
| -rw-r--r-- | tests/tast2.nim | 46 | ||||
| -rw-r--r-- | tests/tnimterop_c.nim | 14 |
3 files changed, 39 insertions, 31 deletions
diff --git a/tests/include/tast2.h b/tests/include/tast2.h index db539c7..1518a85 100644 --- a/tests/include/tast2.h +++ b/tests/include/tast2.h @@ -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
\ No newline at end of file diff --git a/tests/tast2.nim b/tests/tast2.nim index d77ae39..d98907f 100644 --- a/tests/tast2.nim +++ b/tests/tast2.nim @@ -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] diff --git a/tests/tnimterop_c.nim b/tests/tnimterop_c.nim index 732efbf..afd73e2 100644 --- a/tests/tnimterop_c.nim +++ b/tests/tnimterop_c.nim @@ -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 |
