505
|
1 require "config"
|
|
2
|
|
3 function trim(l) return l:gsub("^%s+",""):gsub("%s+$","") end
|
|
4 function mkcase(id,sig)
|
509
|
5 local rtype = string.sub(sig, -1)
|
513
|
6 local i = 1
|
|
7 local args = { rtype }
|
|
8 while i < #sig do
|
|
9 c = string.sub(sig, i, i)
|
|
10 if(c == ')') then
|
|
11 break
|
|
12 end
|
|
13 if(c == '_') then -- filter out prefixes
|
|
14 i = i + 1
|
|
15 else
|
|
16 args[#args+1] = c
|
|
17 end
|
|
18 i = i + 1
|
505
|
19 end
|
513
|
20 return "F" .. (#args-1) .. "(f" .. id .. "," .. table.concat(args,',') .. ")\n"
|
505
|
21 end
|
|
22
|
513
|
23 -- use shared helpers to generate cases
|
|
24 package.path = '../common/?.lua;' .. package.path
|
|
25 require"mk-cases"
|
505
|
26
|
|
27
|
|
28 function mkall()
|
507
|
29 -- force minargs for ordered mode
|
505
|
30 if mode == "ordered" then
|
|
31 minargs = 0
|
|
32 end
|
|
33
|
|
34 -- case macros
|
|
35 local i
|
|
36 for i = minargs, maxargs do
|
|
37 local line = "#define F" .. i .. "(ID,R"
|
|
38 local argdef = ""
|
|
39 local argset = ""
|
|
40 if i > 0 then
|
|
41 line = line .. ","
|
|
42 local j
|
|
43 for j = 0, i-1 do
|
|
44 if j > 0 then
|
|
45 argdef = argdef .. ","
|
|
46 argset = argset .. ","
|
|
47 end
|
|
48 argdef = argdef .. "M" .. j
|
509
|
49 argset = argset .. "K_##M" .. j .. "[" .. j .. "]"
|
505
|
50 end
|
|
51 end
|
513
|
52 line = line .. argdef .. ") void ID(void* addr) { write_V_##R(" .. i .. ", ((" .. api .. " R(*)(" .. argdef .. "))addr)(" .. argset .. "));}\n"
|
505
|
53 io.write(line)
|
|
54 end
|
|
55
|
|
56 -- cases
|
|
57 local lineno = 0
|
|
58 local sigtab = { }
|
|
59 local cases = ''
|
|
60 for line in io.lines() do
|
|
61 local sig = trim(line)
|
|
62 cases = cases..mkcase(lineno,sig)
|
|
63 sigtab[#sigtab+1] = sig
|
|
64 lineno = lineno + 1
|
|
65 end
|
|
66
|
|
67 io.write(cases)
|
513
|
68 io.write(mkfuntab(lineno, 'f', 'funptr', 'G_funtab', false))
|
|
69 io.write(mksigtab(sigtab, ccprefix, 'G_sigtab'))
|
505
|
70 io.write("int G_maxargs = "..maxargs..";\n")
|
|
71 end
|
|
72
|
|
73 mkall()
|
|
74
|