diff --git a/src/c.jl b/src/c.jl index f4bf578..77d5a3f 100644 --- a/src/c.jl +++ b/src/c.jl @@ -97,6 +97,7 @@ const ctypes = Dict{String, String}( "Float64" => "double", "Bool" => "bool", "RawFD" => "int", + "Nothing" => "void", "Cstring" => "char *", "Cwstring" => "wchar_t *", @@ -105,7 +106,6 @@ const ctypes = Dict{String, String}( # distinct Julia types (these are just platform-specific aliases to the types above). "Cchar" => "char", "Cwchar_t" => "wchar_t", - "Cvoid" => "void", "Cint" => "int", "Cshort" => "short", "Clong" => "long", diff --git a/test/bindinginfo_libsimple.json b/test/bindinginfo_libsimple.json index 005e688..d004b16 100644 --- a/test/bindinginfo_libsimple.json +++ b/test/bindinginfo_libsimple.json @@ -1,12 +1,14 @@ { "functions": [ { - "symbol": "tree_size", - "name": "tree_size(tree::CTree{Float64})", + "symbol": "nothing_to_void", + "name": "nothing_to_void(x::Ptr{Nothing}, y::Nothing, z::Ptr{Nothing})", "arguments": [ - { "name": "tree", "type_id": 1 } + { "name": "x", "type_id": 2 }, + { "name": "y", "type_id": 4 }, + { "name": "z", "type_id": 6 } ], - "returns": { "type_id": 6 } + "returns": { "type_id": 3 } }, { "symbol": "copyto_and_sum", @@ -16,64 +18,61 @@ ], "returns": { "type_id": 8 } }, + { + "symbol": "tree_size", + "name": "tree_size(tree::CTree{Float64})", + "arguments": [ + { "name": "tree", "type_id": 11 } + ], + "returns": { "type_id": 5 } + }, { "symbol": "countsame", "name": "countsame(list::Ptr{MyTwoVec}, n::Int32)", "arguments": [ - { "name": "list", "type_id": 11 }, - { "name": "n", "type_id": 4 } + { "name": "list", "type_id": 15 }, + { "name": "n", "type_id": 1 } ], - "returns": { "type_id": 4 } + "returns": { "type_id": 1 } } ], "types": [ { "id": 1, - "kind": "struct", - "name": "CTree{Float64}", - "size": 16, - "alignment": 8, - "fields": [ - { "name": "children", "type_id": 3, "offset": 0, "isptr": false, "isfieldatomic": false } - ] + "kind": "primitive", + "name": "Int32", + "signed": true, + "bits": 32, + "size": 4, + "alignment": 4 }, { "id": 2, + "kind": "pointer", + "name": "Ptr{Nothing}", + "pointee_type_id": 3 + }, + { + "id": 3, "kind": "primitive", - "name": "Float64", + "name": "Nothing", "signed": false, - "bits": 64, - "size": 8, - "alignment": 8 + "bits": 0, + "size": 0, + "alignment": 1 }, { - "id": 3, + "id": 4, "kind": "struct", - "name": "CVector{CTree{Float64}}", - "size": 16, + "name": "Nothing", + "size": 8, "alignment": 8, "fields": [ - { "name": "length", "type_id": 4, "offset": 0, "isptr": false, "isfieldatomic": false }, - { "name": "data", "type_id": 5, "offset": 8, "isptr": false, "isfieldatomic": false } + { "name": "x", "type_id": 5, "offset": 0, "isptr": false, "isfieldatomic": false } ] }, - { - "id": 4, - "kind": "primitive", - "name": "Int32", - "signed": true, - "bits": 32, - "size": 4, - "alignment": 4 - }, { "id": 5, - "kind": "pointer", - "name": "Ptr{CTree{Float64}}", - "pointee_type_id": 1 - }, - { - "id": 6, "kind": "primitive", "name": "Int64", "signed": true, @@ -81,6 +80,12 @@ "size": 8, "alignment": 8 }, + { + "id": 6, + "kind": "pointer", + "name": "Ptr{Nothing}", + "pointee_type_id": 4 + }, { "id": 7, "kind": "struct", @@ -108,7 +113,7 @@ "size": 16, "alignment": 8, "fields": [ - { "name": "length", "type_id": 4, "offset": 0, "isptr": false, "isfieldatomic": false }, + { "name": "length", "type_id": 1, "offset": 0, "isptr": false, "isfieldatomic": false }, { "name": "data", "type_id": 10, "offset": 8, "isptr": false, "isfieldatomic": false } ] }, @@ -120,19 +125,55 @@ }, { "id": 11, + "kind": "struct", + "name": "CTree{Float64}", + "size": 16, + "alignment": 8, + "fields": [ + { "name": "children", "type_id": 13, "offset": 0, "isptr": false, "isfieldatomic": false } + ] + }, + { + "id": 12, + "kind": "primitive", + "name": "Float64", + "signed": false, + "bits": 64, + "size": 8, + "alignment": 8 + }, + { + "id": 13, + "kind": "struct", + "name": "CVector{CTree{Float64}}", + "size": 16, + "alignment": 8, + "fields": [ + { "name": "length", "type_id": 1, "offset": 0, "isptr": false, "isfieldatomic": false }, + { "name": "data", "type_id": 14, "offset": 8, "isptr": false, "isfieldatomic": false } + ] + }, + { + "id": 14, + "kind": "pointer", + "name": "Ptr{CTree{Float64}}", + "pointee_type_id": 11 + }, + { + "id": 15, "kind": "pointer", "name": "Ptr{MyTwoVec}", - "pointee_type_id": 12 + "pointee_type_id": 16 }, { - "id": 12, + "id": 16, "kind": "struct", "name": "MyTwoVec", "size": 8, "alignment": 4, "fields": [ - { "name": "x", "type_id": 4, "offset": 0, "isptr": false, "isfieldatomic": false }, - { "name": "y", "type_id": 4, "offset": 4, "isptr": false, "isfieldatomic": false } + { "name": "x", "type_id": 1, "offset": 0, "isptr": false, "isfieldatomic": false }, + { "name": "y", "type_id": 1, "offset": 4, "isptr": false, "isfieldatomic": false } ] } ] diff --git a/test/runtests.jl b/test/runtests.jl index 32790a6..cb7ba4a 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -180,6 +180,7 @@ end @test occursin("CVector_Float32 to;", content) @test occursin("float copyto_and_sum(CVectorPair_Float32 fromto);", content) @test occursin("int32_t countsame(MyTwoVec* list, int32_t n);", content) + @test occursin("void nothing_to_void(void* x, Nothing y, Nothing* z);", content) end end end