annotate test/callback_suite/mk-cases.lua @ 513:95f6f43178ed

test/callback_suite simplifications: - more generator code sharing - changing how explicit callconv is specified - fix to handle signatures with calling convention prefixes, correctly
author Tassilo Philipp
date Sun, 10 Apr 2022 16:10:10 +0200
parents f3d44195dbdf
children 01f928eb9584
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
1 require "config"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
2
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
3 function trim(l) return l:gsub("^%s+",""):gsub("%s+$","") end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
4 function mkcase(id,sig)
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
5 local rtype = string.sub(sig, -1)
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
6 local i = 1
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
7 local args = { rtype }
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
8 while i < #sig do
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
9 c = string.sub(sig, i, i)
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
10 if(c == ')') then
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
11 break
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
12 end
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
13 if(c == '_') then -- filter out prefixes
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
14 i = i + 1
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
15 else
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
16 args[#args+1] = c
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
17 end
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
18 i = i + 1
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
19 end
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
20 return "F" .. (#args-1) .. "(f" .. id .. "," .. table.concat(args,',') .. ")\n"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
21 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
22
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
23 -- use shared helpers to generate cases
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
24 package.path = '../common/?.lua;' .. package.path
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
25 require"mk-cases"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
26
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
27
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
28 function mkall()
507
5a3c07a0f376 cleanups
Tassilo Philipp
parents: 505
diff changeset
29 -- force minargs for ordered mode
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
30 if mode == "ordered" then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
31 minargs = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
32 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
33
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
34 -- case macros
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
35 local i
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
36 for i = minargs, maxargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
37 local line = "#define F" .. i .. "(ID,R"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
38 local argdef = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
39 local argset = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
40 if i > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
41 line = line .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
42 local j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
43 for j = 0, i-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
44 if j > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
45 argdef = argdef .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
46 argset = argset .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
47 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
48 argdef = argdef .. "M" .. j
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
49 argset = argset .. "K_##M" .. j .. "[" .. j .. "]"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
50 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
51 end
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
52 line = line .. argdef .. ") void ID(void* addr) { write_V_##R(" .. i .. ", ((" .. api .. " R(*)(" .. argdef .. "))addr)(" .. argset .. "));}\n"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
53 io.write(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
54 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
55
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
56 -- cases
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
57 local lineno = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
58 local sigtab = { }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
59 local cases = ''
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
60 for line in io.lines() do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
61 local sig = trim(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
62 cases = cases..mkcase(lineno,sig)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
63 sigtab[#sigtab+1] = sig
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
64 lineno = lineno + 1
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
65 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
66
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
67 io.write(cases)
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
68 io.write(mkfuntab(lineno, 'f', 'funptr', 'G_funtab', false))
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
69 io.write(mksigtab(sigtab, ccprefix, 'G_sigtab'))
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
70 io.write("int G_maxargs = "..maxargs..";\n")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
71 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
72
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
73 mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
74