Merge pull request #1349 from stefan991/fix-cimport-pragma-pack

Fix handling of `#pragma pack` in `cimport` lua helper
This commit is contained in:
Justin M. Keyes 2014-10-30 14:32:03 -04:00
commit 4b0f8f2a4d

View File

@ -25,6 +25,10 @@ if imported == nil then
imported = Set:new()
end
if pragma_pack_id == nil then
pragma_pack_id = 1
end
-- some things are just too complex for the LuaJIT C parser to digest. We
-- usually don't need them anyway.
local function filter_complex_blocks(body)
@ -62,7 +66,7 @@ local function cimport(...)
end
local body = nil
for i=1, 3 do
for i=1, 10 do
local stream = Preprocess.preprocess_stream(unpack(paths))
body = stream:read("*a")
stream:close()
@ -81,7 +85,16 @@ local function cimport(...)
-- add the formatted lines to a set
local new_cdefs = Set:new()
for line in body:gmatch("[^\r\n]+") do
new_cdefs:add(trim(line))
line = trim(line)
-- give each #pragma pack an unique id, so that they don't get removed
-- if they are inserted into the set
-- (they are needed in the right order with the struct definitions,
-- otherwise luajit has wrong memory layouts for the sturcts)
if line:match("#pragma%s+pack") then
line = line .. " // " .. pragma_pack_id
pragma_pack_id = pragma_pack_id + 1
end
new_cdefs:add(line)
end
-- subtract the lines we've already imported from the new lines, then add