annotate test/callback_suite/mk-cases.lua @ 505:049e04af13c8

test/callback_suite: - greatly simplified - refactored to look more like other test cases (especially call_suite{,_aggrs} for consistency/maintainablity/future code sharing
author Tassilo Philipp
date Sat, 09 Apr 2022 13:53:58 +0200
parents
children 5a3c07a0f376
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)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
5 local nargs = string.len(sig) - 2 -- @@@STRUCT wrong, b/c ignores callconv prefixes
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
6 local rtype = string.sub(sig, nargs + 2, nargs + 2)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
7 local s = "F" .. nargs .. "(f" .. id .. "," .. rtype
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
8 for i = 1, nargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
9 local type = string.sub(sig, i, i)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
10 s = s .. "," .. type
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
11 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
12 s = s .. ")\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
13 return s
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
14 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
15
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
16 -- @@@STRUCT same as in call_suite{,_aggrs}, share?
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
17 function mkfuntab(n)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
18 local s = { "funptr G_funtab[] = {\n"}
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
19 for i = 0, n-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
20 s[#s+1] = "\t&f"..i..",\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
21 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
22 s[#s+1] = "};\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
23 return table.concat(s,"")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
24 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
25
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
26 -- @@@STRUCT same as in call_suite{,_aggrs}, share?
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
27 function mksigtab(sigs)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
28 local s = { "const char * G_sigtab[] = {\n"}
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
29 for k,v in pairs(sigs) do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
30 s[#s+1] = '\t"'..v..'",\n'
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
31 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
32 s[#s+1] = "};\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
33 return table.concat(s,"")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
34 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
35
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
36 function mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
37 -- force minargs for ordered mode @@@STRUCT why?
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
38 if mode == "ordered" then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
39 minargs = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
40 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
41
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
42 -- case macros
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
43 local i
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
44 for i = minargs, maxargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
45 local line = "#define F" .. i .. "(ID,R"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
46 local argdef = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
47 local argset = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
48 if i > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
49 line = line .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
50 local j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
51 for j = 0, i-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
52 if j > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
53 argdef = argdef .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
54 argset = argset .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
55 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
56 argdef = argdef .. "M" .. j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
57 argset = argset .. "M[" .. j .. "].M" .. j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
58 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
59 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
60 line = line .. argdef .. ") void ID(void* addr) { Result.R = ((CONFIG_API R(*)(" .. argdef .. "))addr)(" .. argset .. ");}\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
61 io.write(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
62 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
63
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
64 -- cases
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
65 local lineno = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
66 local sigtab = { }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
67 local cases = ''
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
68 for line in io.lines() do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
69 local sig = trim(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
70 cases = cases..mkcase(lineno,sig)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
71 sigtab[#sigtab+1] = sig
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
72 lineno = lineno + 1
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
73 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
74
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
75 io.write(cases)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
76 io.write(mkfuntab(lineno))
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
77 io.write(mksigtab(sigtab))
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
78 io.write("int G_maxargs = "..maxargs..";\n")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
79 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
80
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
81 mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
82