annotate test/callback_suite/mk-cases.lua @ 507:5a3c07a0f376

cleanups
author Tassilo Philipp
date Sat, 09 Apr 2022 14:00:59 +0200
parents 049e04af13c8
children f3d44195dbdf
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)
507
5a3c07a0f376 cleanups
Tassilo Philipp
parents: 505
diff changeset
5 local nargs = string.len(sig) - 2
505
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 function mkfuntab(n)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
17 local s = { "funptr G_funtab[] = {\n"}
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
18 for i = 0, n-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
19 s[#s+1] = "\t&f"..i..",\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
20 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
21 s[#s+1] = "};\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
22 return table.concat(s,"")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
23 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
24
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
25 function mksigtab(sigs)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
26 local s = { "const char * G_sigtab[] = {\n"}
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
27 for k,v in pairs(sigs) do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
28 s[#s+1] = '\t"'..v..'",\n'
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
29 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
30 s[#s+1] = "};\n"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
31 return table.concat(s,"")
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 function mkall()
507
5a3c07a0f376 cleanups
Tassilo Philipp
parents: 505
diff changeset
35 -- force minargs for ordered mode
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
36 if mode == "ordered" then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
37 minargs = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
38 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
39
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
40 -- case macros
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
41 local i
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
42 for i = minargs, maxargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
43 local line = "#define F" .. i .. "(ID,R"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
44 local argdef = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
45 local argset = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
46 if i > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
47 line = line .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
48 local j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
49 for j = 0, i-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
50 if j > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
51 argdef = argdef .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
52 argset = argset .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
53 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
54 argdef = argdef .. "M" .. j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
55 argset = argset .. "M[" .. j .. "].M" .. j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
56 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
57 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
58 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
59 io.write(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
60 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
61
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
62 -- cases
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
63 local lineno = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
64 local sigtab = { }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
65 local cases = ''
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
66 for line in io.lines() do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
67 local sig = trim(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
68 cases = cases..mkcase(lineno,sig)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
69 sigtab[#sigtab+1] = sig
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
70 lineno = lineno + 1
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 io.write(cases)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
74 io.write(mkfuntab(lineno))
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
75 io.write(mksigtab(sigtab))
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
76 io.write("int G_maxargs = "..maxargs..";\n")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
77 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
78
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
79 mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
80