Mercurial > pub > dyncall > dyncall
annotate test/callback_suite/mk-cases.lua @ 634:e3441521ad6b
"
author | Tassilo Philipp |
---|---|
date | Sun, 20 Nov 2022 19:46:01 +0100 |
parents | a0ff5dff090b |
children |
rev | line source |
---|---|
505 | 1 require "config" |
2 | |
514 | 3 -- use shared helpers to generate cases |
4 package.path = '../common/?.lua;' .. package.path | |
5 require"mk-cases" | |
6 | |
7 | |
505 | 8 function mkcase(id,sig) |
514 | 9 local sig = trim(sig) |
509 | 10 local rtype = string.sub(sig, -1) |
513 | 11 local i = 1 |
12 local args = { rtype } | |
13 while i < #sig do | |
14 c = string.sub(sig, i, i) | |
15 if(c == ')') then | |
16 break | |
17 end | |
18 if(c == '_') then -- filter out prefixes | |
19 i = i + 1 | |
20 else | |
518
a0ff5dff090b
- callback_suite: generator simplification and removal of pointless lua local var declarations
Tassilo Philipp
parents:
516
diff
changeset
|
21 args[#args+1] = c |
513 | 22 end |
23 i = i + 1 | |
505 | 24 end |
513 | 25 return "F" .. (#args-1) .. "(f" .. id .. "," .. table.concat(args,',') .. ")\n" |
505 | 26 end |
27 | |
28 function mkall() | |
29 -- case macros | |
30 for i = minargs, maxargs do | |
31 local line = "#define F" .. i .. "(ID,R" | |
518
a0ff5dff090b
- callback_suite: generator simplification and removal of pointless lua local var declarations
Tassilo Philipp
parents:
516
diff
changeset
|
32 local argdef = { } |
a0ff5dff090b
- callback_suite: generator simplification and removal of pointless lua local var declarations
Tassilo Philipp
parents:
516
diff
changeset
|
33 local argset = { } |
505 | 34 if i > 0 then |
35 line = line .. "," | |
36 for j = 0, i-1 do | |
518
a0ff5dff090b
- callback_suite: generator simplification and removal of pointless lua local var declarations
Tassilo Philipp
parents:
516
diff
changeset
|
37 argdef[#argdef+1] = "M" .. j |
a0ff5dff090b
- callback_suite: generator simplification and removal of pointless lua local var declarations
Tassilo Philipp
parents:
516
diff
changeset
|
38 argset[#argset+1] = "K_##M" .. j .. "[" .. j .. "]" |
505 | 39 end |
40 end | |
518
a0ff5dff090b
- callback_suite: generator simplification and removal of pointless lua local var declarations
Tassilo Philipp
parents:
516
diff
changeset
|
41 line = line .. table.concat(argdef,",") .. ") void ID(void* addr) { write_V_##R(" .. i .. ", ((" .. api .. " R(*)(" .. table.concat(argdef,",") .. "))addr)(" .. table.concat(argset,",") .. "));}\n" |
505 | 42 io.write(line) |
43 end | |
44 | |
45 -- cases | |
46 local lineno = 0 | |
47 local sigtab = { } | |
48 local cases = '' | |
49 for line in io.lines() do | |
50 local sig = trim(line) | |
51 cases = cases..mkcase(lineno,sig) | |
52 sigtab[#sigtab+1] = sig | |
53 lineno = lineno + 1 | |
54 end | |
55 | |
56 io.write(cases) | |
513 | 57 io.write(mkfuntab(lineno, 'f', 'funptr', 'G_funtab', false)) |
58 io.write(mksigtab(sigtab, ccprefix, 'G_sigtab')) | |
505 | 59 io.write("int G_maxargs = "..maxargs..";\n") |
60 end | |
61 | |
62 mkall() | |
63 |