@@ -24,34 +24,32 @@ proc fun() =
24
24
doAssert c_exp(x2) == c_exp(x)
25
25
26
26
block : # c_printf
27
- c_printf(" foo\n " )
28
- c_printf(" foo:%d\n " , 100 )
29
- c_printf(" foo:%d\n " , 101 .cint )
30
- c_printf(" foo:%d:%d\n " , 102 .cint , 103 .cint )
27
+ c_printf(" foo0\n " )
28
+ c_printf(" foo1:%d\n " , 101 .cint )
29
+ c_printf(" foo2:%d:%d\n " , 102 .cint , 103 .cint )
31
30
let temp = 104 .cint
32
- c_printf(" foo :%d:%d:%d\n " , 102 .cint , 103 .cint , temp)
31
+ c_printf(" foo3 :%d:%d:%d\n " , 102 .cint , 103 .cint , temp)
33
32
var temp2 = 105 .cint
34
- c_printf(" foo :%g:%s:%d:%d\n " , 0.03 , " asdf" , 103 .cint , temp2)
33
+ c_printf(" foo4 :%g:%s:%d:%d\n " , 0.03 , " asdf" , 103 .cint , temp2)
35
34
36
35
block : # c_snprintf, c_malloc, c_free
37
36
let n: uint = 50
38
37
var buffer2: pointer = c_malloc(n)
39
38
var s: cstring = " foobar"
40
39
var age: cint = 25
41
40
discard c_snprintf(buffer2, n, " s1:%s s2:%s age:%d pi:%g" , s, s, age, 3.14 )
42
- c_printf(" ret= {%s}\n " , buffer2)
41
+ c_printf(" foo5: {%s}\n " , buffer2)
43
42
c_free(buffer2) # not sure it has an effect
44
43
45
- block : # c_printf bug
46
- var a = 123
44
+ block : # c_printf bug with `var` {.varargs.} params
45
+ var a = 123 . cint
47
46
var a2 = a.addr
48
- #[
49
- bug: different behavior between CT RT in this case:
50
- at CT, shows foo2:a=123
51
- at RT, shows foo2:a=<address as int>
52
- ]#
53
- if false :
54
- c_printf(" foo2:a=%d\n " , a2)
47
+ when false :
48
+ # BUG: CT FFI currently does not handle this edge case correctly,
49
+ # passing `a2` as `cint` instead of as `ptr cint` for a {.varargs.} param:
50
+ # at CT, shows foo6:a2=0x7b
51
+ # at RT, shows foo2:a2=<address>
52
+ c_printf(" foo6:a2=%p\n " , a2)
55
53
56
54
57
55
static :
0 commit comments