From 741cb5be083fd6349ab1102c25474ad731e7dda8 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sun, 26 Oct 2014 11:20:19 +0100 Subject: unittest: fix handling of pragma pack in `cimport` --- test/unit/helpers.lua | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/unit/helpers.lua b/test/unit/helpers.lua index 3f1984f6de..84ce67da4e 100644 --- a/test/unit/helpers.lua +++ b/test/unit/helpers.lua @@ -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) @@ -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 -- cgit