aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xluatablegen.py50
-rwxr-xr-xrun.sh14
-rw-r--r--test/wasm.xml6
3 files changed, 53 insertions, 17 deletions
diff --git a/luatablegen.py b/luatablegen.py
index 4921e5f..1bea2e6 100755
--- a/luatablegen.py
+++ b/luatablegen.py
@@ -88,6 +88,43 @@ LUA_SETMETA_NEW = ["setmetatable(XXX, {__call =\n", "\tfunction(selfAAA)\n",
LUA_TO_GENERIC = "lua_to_YYY(__ls, ZZZ);\n"
LUA_TO_GENERIC_DEF = "YYY lua_to_YYY(lua_State* ls, XXX array, ZZZ) {}\n"
+def simple_type_resovler(type_str):
+ if type_str == "int8":
+ return "int8_t"
+ elif type_str == "uint8":
+ return "uint8_t"
+ elif type_str == "int16":
+ return "int16_t"
+ elif type_str == "uint16":
+ return "uint16_t"
+ elif type_str == "int32":
+ return "int32_t"
+ elif type_str == "uint32":
+ return "uint32_t"
+ elif type_str == "int64":
+ return "int64_t"
+ elif type_str == "uint64":
+ return "uint64_t"
+ elif type_str == "int128":
+ return "int128_t"
+ elif type_str == "uint128":
+ return "uint128_t"
+ elif type_str == "float":
+ return "float"
+ elif type_str == "double":
+ return "double"
+ elif type_str == "bool":
+ return "uint8_t"
+ elif type_str == "uchar":
+ return "uint8_t"
+ elif type_str == "schar":
+ return "int8_t"
+ elif type_str == "string":
+ return "char*"
+ elif type_str == "FT::conditional":
+ return "void*"
+ else: return type_str
+
def type_resolver(elem, elem_list):
if "isaggregate" in elem.attrib:
type_str = elem.attrib["name"]
@@ -342,20 +379,19 @@ class TbgParser(object):
c_source.write(NEW[0].replace("XXX", struct_name))
c_source.write("\tlua_checkstack(__ls, " + repr(len(field_names)) + ");\n")
for lua_type, field_name, field_type in zip(lua_types, field_names, field_types):
- if lua_type == "integer": dummy = "\t"+field_type +" "+field_name+" = "+"luaL_optinteger(__ls,"+repr(rev_counter)+",0);\n"
+ if lua_type == "integer": dummy = "\t"+simple_type_resovler(field_type) +" "+field_name+" = "+"luaL_optinteger(__ls,"+repr(rev_counter)+",0);\n"
elif lua_type == "lightuserdata": dummy = "\t"+field_type +" "+field_name+" = "+"lua_touserdata(__ls,"+repr(rev_counter)+");\n"
elif lua_type == "number": pass
- elif lua_type == "string":dummy = "\t"+field_type +" "+field_name+" = "+"lua_tostring(__ls,"+repr(rev_counter)+");\n"
+ elif lua_type == "string":dummy = "\t"+simple_type_resovler(field_type) +" "+field_name+" = "+"lua_tostring(__ls,"+repr(rev_counter)+");\n"
elif lua_type == "boolean": pass
elif lua_type == "table":
parent = get_def_node(struct_name, self.elems)
child = get_def_node(field_name, self.elems)
- if not child:
- for child in parent:
- if child.attrib["name"] == field_name: child = child
+ for kid in parent:
+ if kid.attrib["name"] == field_name: child = kid
temp = self.gen_lua_table_push_call(child, rev_counter)
temp2 = self.gen_luato_generic(struct_name, field_name, rev_counter)
- dummy = temp[0]+"=" + temp2
+ dummy = temp[0] + "=" + temp2
else:
print("bad lua_type entry in the json file")
sys.exit(1)
@@ -385,7 +421,7 @@ class TbgParser(object):
if not child:
for kid in parent:
if kid.attrib["name"] == field_name: child = kid
- dummy = "\tpushluatable_" + type_resolver(child, self.elems) +"(__ls, _st->"+field_name+");\n"
+ dummy = "\tpushluatable_" + type_resolver(child, self.elems) +"(__ls, dummy->"+field_name+");\n"
else:
print("bad lua_type entry in the json file")
sys.exit(1)
diff --git a/run.sh b/run.sh
index 78ab9ea..3caad5d 100755
--- a/run.sh
+++ b/run.sh
@@ -3,10 +3,10 @@ cd $(dirname $0)
if [[ -d ./out ]]; then :;else mkdir ./out;fi
./luatablegen.py --tbg ./test/wasmtablegen.json --out ./out --luaheader /home/bloodstalker/devi/hell2/bruiser/lua-5.3.4/src --pre ./test/wasmheader.txt --headeraggr ./out/wasm_tables.h --lualibpath ./out/wasm.lua --docpath ./out/wasm.md --xml ./test/wasm.xml --tbldefs ./out/
clang-format ./out/*.c ./out/*.h -i
-#for filename in ./out/*.c; do
-# gcc -c $filename > /dev/null 2>&1
-# if [[ $? != 0 ]]; then
-# echo $filename did not compile.
-# fi
-#done
-#rm *.o
+for filename in ./out/*.c; do
+ gcc -c $filename > /dev/null 2>&1
+ if [[ $? != 0 ]]; then
+ echo $filename did not compile.
+ fi
+done
+rm *.o
diff --git a/test/wasm.xml b/test/wasm.xml
index eb1048c..f0affc8 100644
--- a/test/wasm.xml
+++ b/test/wasm.xml
@@ -12,7 +12,7 @@
<Type_Section_Entry count="self::Count" type="self::Type_Section_Entry" name="entries" luatype="table"/>
</Type_Section>
<Import_Section name="W_Import_Section" count="1" type="" isaggregate="true" unordered="true" luatype="table">
- <ID name="id" type="uint8" encoding="leb128u" issign="true" luatype="table">2</ID>
+ <ID name="id" type="uint8" encoding="leb128u" issign="true" luatype="integer">2</ID>
<PayloadLength name="payloadlength" type="uint32" encoding="leb128u" luatype="integer"/>
<NameLength name="namelength" type="uint32" encoding="leb128u" luatype="integer"/>
<Name name="name" type="string" size="self::NameLength" luatype="string"/>
@@ -76,8 +76,8 @@
</Element_Section>
<Code_Section name="W_Code_Section" count="1" isaggregate="true" unordered="true" luatype="table">
<ID name="id" type="uint8" encoding="leb128u" issign="true" luatype="integer">10</ID>
- <PayloadLength name="payloadlength" type="uint32" encoding="leb128u" luatype="table"/>
- <NameLength name="namelength" type="uint32" encoding="leb128u" luatype="table"/>
+ <PayloadLength name="payloadlength" type="uint32" encoding="leb128u" luatype="integer"/>
+ <NameLength name="namelength" type="uint32" encoding="leb128u" luatype="integer"/>
<Name name="name" type="string" size="self::NameLength" luatype="string"/>
<Count name="count" encoding="leb128u" type="uint32" count="1" luatype="integer"/>
<Bodies name="bodies" type="self::Function_Body" count="self::Count" luatype="table"/>