From 6d19d2d819a2c9b10999a5c7d05d97e529613ab7 Mon Sep 17 00:00:00 2001 From: veclavtalica Date: Tue, 14 Jan 2025 00:06:55 +0300 Subject: [PATCH] /apps/twnlua: make no warnings --- apps/twnlua/bindgen.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/twnlua/bindgen.py b/apps/twnlua/bindgen.py index dd93c0d..6197329 100755 --- a/apps/twnlua/bindgen.py +++ b/apps/twnlua/bindgen.py @@ -64,9 +64,9 @@ for procedure, procedure_desc in api["procedures"].items(): for parameter in procedure_desc["params"]: basetype = parameter["type"].rsplit(' *', 1)[0] - if parameter["type"].endswith("*"): + if parameter["type"].endswith("*") and not parameter["type"] == "char *": binding += " %s %s_value;\n" % (basetype, parameter["name"]) - binding += " %s %s;\n" % (parameter["type"], parameter["name"]) + binding += " %s %s;\n" % (parameter["type"] if not parameter["type"].endswith("*") else 'const ' + parameter["type"], parameter["name"]) binding += " lua_getfield(L, 1, \"%s\");\n" % parameter["name"] if "default" in parameter and parameter["type"] != "float": @@ -88,9 +88,9 @@ for procedure, procedure_desc in api["procedures"].items(): elif basetype in api["types"]: used_converters[basetype] = api["types"][basetype] if parameter["type"].endswith(" *"): - binding += " { %s_value = to_%s(L, -1); %s = &%s_value; }\n" % (parameter["name"], basetype.lower(), parameter["name"], parameter["name"]); + binding += " { %s_value = to_%s(L); %s = &%s_value; }\n" % (parameter["name"], basetype.lower(), parameter["name"], parameter["name"]); else: - binding += " %s = to_%s(L, -1);\n" % (parameter["name"], basetype.lower()); + binding += " %s = to_%s(L);\n" % (parameter["name"], basetype.lower()); else: raise BaseException("Unhandled parameter type '%s'" % (parameter["type"])) @@ -124,12 +124,12 @@ for typename, typedesc in used_converters.items(): if "no_convert" in typedesc and typedesc["no_convert"]: continue - converter = "static %s to_%s(lua_State *L, int idx) {\n" % (typename, typename.lower()) + converter = "static %s to_%s(lua_State *L) {\n" % (typename, typename.lower()) converter += " %s %s;\n" % (typename, typename.lower()); if "fields" in typedesc: for field in typedesc["fields"]: - converter += " lua_getfield(L, idx, \"%s\");\n" % (field["name"]); + converter += " lua_getfield(L, -1, \"%s\");\n" % (field["name"]); if field["type"] == "float": converter += " %s.%s = (float)lua_tonumber(L, -1);\n" % (typename.lower(), field["name"]); elif field["type"] == "uint8_t": @@ -149,7 +149,7 @@ for typename, typedesc in used_converters.items(): deinitializers += [" shfree(%s_map);" % typename.lower()] - converter += " char *value = lua_tostring(L, -1);\n"; + converter += " char const *value = lua_tostring(L, -1);\n"; converter += " %s = shget(%s_map, value);\n" % (typename.lower(), typename.lower()) converter += " lua_pop(L, 1);\n"; @@ -158,12 +158,14 @@ for typename, typedesc in used_converters.items(): print('\n'.join(storages)) +print("extern void bindgen_init(void);\n") print("void bindgen_init(void) {\n" + '\n'.join(initializers) + "\n}\n") print('\n'.join(converters)) print('\n'.join(bindings)) -loader = "void bindgen_load_%s(lua_State *L) {\n" % api["name"] +loader = "extern void bindgen_load_%s(lua_State *L);\n" % api["name"] +loader += "void bindgen_load_%s(lua_State *L) {\n" % api["name"] loader += " bindgen_init();\n" for procedure, procedure_desc in api["procedures"].items(): loader += " lua_pushcfunction(L, binding_%s);\n" % procedure @@ -173,7 +175,8 @@ loader += "}\n" print(loader) -unloader = "void bindgen_unload_%s(lua_State *L) {\n" % api["name"] +unloader = "extern void bindgen_unload_%s(lua_State *L);\n" % api["name"] +unloader += "void bindgen_unload_%s(lua_State *L) {\n(void)L;\n" % api["name"] unloader += '\n'.join(deinitializers) unloader += "}\n" print(unloader) @@ -182,7 +185,8 @@ print(unloader) # exceptions for the base townengine api # TODO: is there a way to generalize it? or rather, is there any need to do so? if api["name"] == "twn": - contexter = "void bindgen_build_context(lua_State *L) {\n" + contexter = "extern void bindgen_build_context(lua_State *L);\n" + contexter += "void bindgen_build_context(lua_State *L) {\n" contexter += to_table(api["types"]["Context"], "ctx", 4) contexter += "}" print(contexter)