annotate test/call_suite/mk-cases.lua @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children 8e22b70d3ee4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 require"math"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 local max = math.max
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 local maxargs = 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 function trim(l) return l:gsub("^%s+",""):gsub("%s+$","") end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 function mkcase(id,sig)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 local sig = trim(sig)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 local h = { "/* ",id,":",sig," */ ",sig:sub(1,1), " f", id,"(",""}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 local t = { "fid=",id,";" }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 local pos = 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 maxargs = max(maxargs, #sig-1)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 for i = 2, #sig do
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 pos = tostring(i-1)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 local name = "a"..pos
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 local ch = sig:sub(i,i)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 h[#h+1] = ch
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 h[#h+1] = " "
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 h[#h+1] = name
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 h[#h+1] = ","
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 t[#t+1] = "V_"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 t[#t+1] = ch
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24 t[#t+1] = "["
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 t[#t+1] = pos
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 t[#t+1] = "]"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 t[#t+1] = "="
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 t[#t+1] = name
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 t[#t+1] = ";"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 h[#h] = "){"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 t[#t+1] = "ret_"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 t[#t+1] = sig:sub(1,1)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 t[#t+1] = "("
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 t[#t+1] = pos
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 t[#t+1] = ")"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 t[#t+1] = "}\n"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 return table.concat(h,"")..table.concat(t,"")
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 function mkfuntab(n)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 local s = { "funptr G_funtab[] = {\n"}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 for i = 1, n do
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 s[#s+1] = "\t(funptr)&f"..i..",\n"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 s[#s+1] = "};\n"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 return table.concat(s,"")
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 function mksigtab(sigs)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 local s = { "char const * G_sigtab[] = {\n"}
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 for k,v in pairs(sigs) do
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 s[#s+1] = '\t"'
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 s[#s+1] = v
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 s[#s+1] = '",\n'
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 s[#s+1] = "};\n"
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 return table.concat(s,"")
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 function mkall()
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 local lineno = 1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 local sigtab = { }
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 for line in io.lines() do
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 local sig = trim(line)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 io.write(mkcase(lineno,sig))
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 sigtab[#sigtab+1] = sig
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 lineno = lineno + 1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 io.write(mkfuntab(lineno-1))
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 io.write(mksigtab(sigtab))
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 io.write("int G_maxargs = "..maxargs..";\n")
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 end
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 mkall()
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 -- print(mkcase(1,"vififififi"))
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77