annotate test/callback_suite/mk-cases.lua @ 517:f8856e29b512

- tests: made "ordered" signature generation code shareable, and added possibility to specify return types, separately (mainly to include 'void')
author Tassilo Philipp
date Mon, 11 Apr 2022 14:50:35 +0200
parents 1a813b706de4
children a0ff5dff090b
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
514
01f928eb9584 - more test code generator code sharing
Tassilo Philipp
parents: 513
diff changeset
3 -- use shared helpers to generate cases
01f928eb9584 - more test code generator code sharing
Tassilo Philipp
parents: 513
diff changeset
4 package.path = '../common/?.lua;' .. package.path
01f928eb9584 - more test code generator code sharing
Tassilo Philipp
parents: 513
diff changeset
5 require"mk-cases"
01f928eb9584 - more test code generator code sharing
Tassilo Philipp
parents: 513
diff changeset
6
01f928eb9584 - more test code generator code sharing
Tassilo Philipp
parents: 513
diff changeset
7
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
8 function mkcase(id,sig)
514
01f928eb9584 - more test code generator code sharing
Tassilo Philipp
parents: 513
diff changeset
9 local sig = trim(sig)
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
10 local rtype = string.sub(sig, -1)
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
11 local i = 1
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
12 local args = { rtype }
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
13 while i < #sig do
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
14 c = string.sub(sig, i, i)
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
15 if(c == ')') then
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
16 break
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 if(c == '_') then -- filter out prefixes
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
19 i = i + 1
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
20 else
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
21 args[#args+1] = c
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
22 end
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
23 i = i + 1
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
24 end
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
25 return "F" .. (#args-1) .. "(f" .. id .. "," .. table.concat(args,',') .. ")\n"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
26 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
27
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
28 function mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
29 -- case macros
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
30 local i
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
31 for i = minargs, maxargs do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
32 local line = "#define F" .. i .. "(ID,R"
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
33 local argdef = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
34 local argset = ""
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
35 if i > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
36 line = line .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
37 local j
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
38 for j = 0, i-1 do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
39 if j > 0 then
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
40 argdef = argdef .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
41 argset = argset .. ","
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
42 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
43 argdef = argdef .. "M" .. j
509
f3d44195dbdf callback_suite:
Tassilo Philipp
parents: 507
diff changeset
44 argset = argset .. "K_##M" .. j .. "[" .. j .. "]"
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
45 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
46 end
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
47 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
48 io.write(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
49 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
50
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
51 -- cases
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
52 local lineno = 0
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
53 local sigtab = { }
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
54 local cases = ''
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
55 for line in io.lines() do
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
56 local sig = trim(line)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
57 cases = cases..mkcase(lineno,sig)
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
58 sigtab[#sigtab+1] = sig
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
59 lineno = lineno + 1
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 io.write(cases)
513
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
63 io.write(mkfuntab(lineno, 'f', 'funptr', 'G_funtab', false))
95f6f43178ed test/callback_suite simplifications:
Tassilo Philipp
parents: 509
diff changeset
64 io.write(mksigtab(sigtab, ccprefix, 'G_sigtab'))
505
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
65 io.write("int G_maxargs = "..maxargs..";\n")
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
66 end
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
67
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
68 mkall()
049e04af13c8 test/callback_suite:
Tassilo Philipp
parents:
diff changeset
69