aboutsummaryrefslogtreecommitdiffstats
path: root/extra-tools/luatablegen.py
diff options
context:
space:
mode:
Diffstat (limited to 'extra-tools/luatablegen.py')
-rwxr-xr-xextra-tools/luatablegen.py35
1 files changed, 24 insertions, 11 deletions
diff --git a/extra-tools/luatablegen.py b/extra-tools/luatablegen.py
index c66b94c..dbf7435 100755
--- a/extra-tools/luatablegen.py
+++ b/extra-tools/luatablegen.py
@@ -14,7 +14,7 @@ EXTERN_C = ['#ifdef __cplusplus\nextern "C" {\n#endif\n', '#ifdef __cplusplus\n}
BEGIN_NOTE = "//Generated Automatically by luatablegen."
HEADER_LIST = ['#include "HHHlua.h"\n', '#include "HHHlauxlib.h"\n',
'#include "HHHlualib.h"\n', '#include <inttypes.h>\n',
- '#include <stdbool.h>']
+ '#include <stdbool.h>\n']
CONVERT = ['static XXX* convert_XXX (lua_State* __ls, int index) {\n',
'\tXXX* dummy = (XXX*)lua_touserdata(__ls, index);\n',
'\tif (dummy == NULL) printf("XXX:bad user data type.\\n");\n',
@@ -90,6 +90,7 @@ class Argparser(object):
parser.add_argument("--outfile", type=str, help="name of the output file if signlefile is set, ignored otherwise")
parser.add_argument("--headeraggr", type=str, help="header aggregate file name")
parser.add_argument("--lualibpath", type=str, help="where the lua module file will be placed")
+ parser.add_argument("--docpath", type=str, help="where the doc file will be placed")
self.args = parser.parse_args()
class TbgParser(object):
@@ -105,8 +106,8 @@ class TbgParser(object):
c_source.write(header.replace("HHH", self.argparser.args.luaheader+"/"))
else:
c_source.write(header.replace("HHH", ""))
- c_source.write(HEADER_GUARD[0].replace("XXX", struct_name))
- c_source.write(EXTERN_C[0])
+ if not is_source: c_source.write(HEADER_GUARD[0].replace("XXX", struct_name))
+ if not is_source: c_source.write(EXTERN_C[0])
if is_source: c_source.write("#include " + '"./' +h_filename+ '"\n')
c_source.write("\n")
if self.argparser.args.pre:
@@ -241,7 +242,7 @@ class TbgParser(object):
for line in TABLE_REGISTER:
c_source.write(line.replace("XXX", struct_name))
- def end(self, c_source):
+ def end(self, c_source, is_source):
if self.argparser.args.post:
c_source.write("\n")
post_file = open(self.argparser.args.post)
@@ -249,10 +250,20 @@ class TbgParser(object):
c_source.write(line)
post_file.clsoe()
c_source.write("\n")
- c_source.write(EXTERN_C[1])
- c_source.write(HEADER_GUARD[1])
+ if not is_source: c_source.write(EXTERN_C[1])
+ if not is_source: c_source.write(HEADER_GUARD[1])
c_source.write("\n")
+ def docgen_md(self, d_source, struct_name, field_names, field_types, lua_types):
+ d_source.write("## wasm tables method list:\n")
+ for field_name,lua_type in zip(field_names, lua_types):
+ d_source.write(struct_name + ":" + field_name + "()" + " -- ")
+ d_source.write(lua_type + "<br/>" + "\n")
+ for field_name,lua_type in zip(field_names, lua_types):
+ d_source.write("set_" + struct_name + ":" + field_name + "()" + " -- ")
+ d_source.write(lua_type + "<br/>" + "\n")
+ d_source.write("\n")
+
def luagen(self):
l_source = open(self.argparser.args.lualibpath, "w")
l_source.write("-- automatically generated by luatablegen\n")
@@ -280,6 +291,8 @@ class TbgParser(object):
table_reg_list = []
if self.argparser.args.singlefile:
c_source = open(self.argparser.args.outfile, "w")
+ if self.argparser.args.docpath:
+ d_source = open(self.argparser.args.docpath, "w")
for k, v in self.tbg_file.items():
struct_name = k
field_names = v['field_name']
@@ -298,10 +311,7 @@ class TbgParser(object):
header_aggr_list.append("./" + h_filename)
h_source = open(self.argparser.args.out + "/" + h_filename, "w")
# source file
- # TODO - the c source file is getting a header guard and cpp
- # inclusion macros
self.begin(c_source, struct_name, h_filename, True)
- #self.struct(c_source, field_names, field_types, struct_name)
self.convert(c_source, struct_name)
self.check(c_source, struct_name)
self.push_self(c_source, struct_name)
@@ -312,7 +322,7 @@ class TbgParser(object):
self.register_table_methods(c_source, struct_name, field_names)
self.register_table_meta(c_source, struct_name)
self.register_table(c_source, struct_name)
- self.end(c_source)
+ self.end(c_source, True)
if not self.argparser.args.singlefile: c_source.close()
# header file
self.begin(h_source, struct_name, h_filename, False)
@@ -327,7 +337,10 @@ class TbgParser(object):
h_source.write(SETTER_GEN[0].replace("XXX", struct_name).replace("YYY", field_name).replace(" {\n", ";\n"))
table_reg_list.append(struct_name + "_register(__ls);\n")
h_source.write(TABLE_REGISTER[0].replace("XXX", struct_name).replace(" {\n", ";\n"))
- self.end(h_source)
+ self.end(h_source, False)
+ # docs
+ if self.argparser.args.docpath:
+ self.docgen_md(d_source, struct_name, field_names, field_types, lua_types)
# header aggregate
if self.argparser.args.headeraggr:
name = self.argparser.args.headeraggr