aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGanesh Viswanathan <dev@genotrance.com>2020-04-01 21:47:15 -0500
committerGanesh Viswanathan <dev@genotrance.com>2020-04-01 21:47:15 -0500
commitad8557d70e5c8ff3220582b7f78a2822f87d2476 (patch)
tree05010be16f2e2864fe87a9ad94a63ff5110697f7 /tests
parent54854a356adfacdedb85054df7dd5fc3d4eb02da (diff)
downloadnimterop-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.h10
-rw-r--r--tests/tast2.nim46
-rw-r--r--tests/tnimterop_c.nim14
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