diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/call_suite/mk-cases.lua	Thu Mar 19 22:24:28 2015 +0100
@@ -0,0 +1,77 @@
+require"math"
+local max = math.max
+local maxargs = 0
+
+function trim(l) return l:gsub("^%s+",""):gsub("%s+$","") end
+function mkcase(id,sig)
+  local sig = trim(sig)
+  local h = { "/* ",id,":",sig," */ ",sig:sub(1,1), " f", id,"(",""}
+  local t = { "fid=",id,";" }
+  local pos = 0
+  maxargs = max(maxargs, #sig-1)
+  for i = 2, #sig do 
+    pos = tostring(i-1)
+    local name = "a"..pos
+    local ch   = sig:sub(i,i)
+    
+    h[#h+1] = ch
+    h[#h+1] = " "
+    h[#h+1] = name
+    h[#h+1] = ","
+
+    t[#t+1] = "V_"
+    t[#t+1] = ch
+    t[#t+1] = "["
+    t[#t+1] = pos
+    t[#t+1] = "]"
+    t[#t+1] = "="
+    t[#t+1] = name
+    t[#t+1] = ";"
+  end
+  h[#h] = "){"
+  t[#t+1] = "ret_"
+  t[#t+1] = sig:sub(1,1)
+  t[#t+1] = "("
+  t[#t+1] = pos
+  t[#t+1] = ")"
+  t[#t+1] = "}\n"
+  return table.concat(h,"")..table.concat(t,"")
+end
+
+function mkfuntab(n)
+  local s = { "funptr G_funtab[] = {\n"}
+  for i = 1, n do
+    s[#s+1] = "\t(funptr)&f"..i..",\n"
+  end
+  s[#s+1] = "};\n"
+  return table.concat(s,"")
+end
+
+function mksigtab(sigs)
+  local s = { "char const * G_sigtab[] = {\n"}
+  for k,v in pairs(sigs) do
+    s[#s+1] = '\t"'
+    s[#s+1] = v
+    s[#s+1] = '",\n'
+  end
+  s[#s+1] = "};\n"
+  return table.concat(s,"")
+end
+
+function mkall()
+  local lineno = 1
+  local sigtab = { }
+  for line in io.lines() do
+    local sig = trim(line)
+    io.write(mkcase(lineno,sig))
+    sigtab[#sigtab+1] = sig
+    lineno = lineno + 1
+  end
+  io.write(mkfuntab(lineno-1))
+  io.write(mksigtab(sigtab))
+  io.write("int G_maxargs = "..maxargs..";\n")
+end
+
+mkall()
+-- print(mkcase(1,"vififififi"))
+