input system rework
This commit is contained in:
@@ -116,7 +116,6 @@ for procedure, procedure_desc in api["procedures"].items():
|
||||
elif procedure_desc["return"] == "char *":
|
||||
binding += " lua_pushstring(L, %s(%s));\n" % (procedure, ", ".join(param["name"] for param in procedure_desc["params"]))
|
||||
elif type(procedure_desc["return"]) is dict or procedure_desc["return"] in api["types"]:
|
||||
# TODO: handle enums
|
||||
type_desc = procedure_desc["return"] if type(procedure_desc["return"]) is dict else api["types"][procedure_desc["return"]]
|
||||
binding += " %s result = %s(%s);\n" % (type_desc["c_type"], procedure, ", ".join(param["name"] for param in procedure_desc["params"]))
|
||||
binding += to_table(type_desc, "result", 4)
|
||||
@@ -150,21 +149,6 @@ for typename, typedesc in used_converters.items():
|
||||
raise BaseException("Unhandled converter field type '%s'" % (field["type"]))
|
||||
converter += " lua_pop(L, %i);\n" % len(typedesc["fields"]);
|
||||
|
||||
# TODO: wild idea: use compile time built hash table
|
||||
elif "enums" in typedesc:
|
||||
storages += ["struct %sHashItem { char *key; %s value; };\nstatic struct %sHashItem *%s_map = NULL;\n" % (typename, typename, typename, typename.lower())]
|
||||
|
||||
# TODO: use arena
|
||||
for enum in typedesc["enums"]:
|
||||
initializer = " shput(%s_map, \"%s\", %s);" % (typename.lower(), enum, typedesc["enums"][enum])
|
||||
initializers += [initializer]
|
||||
|
||||
deinitializers += [" shfree(%s_map);" % typename.lower()]
|
||||
|
||||
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";
|
||||
|
||||
converter += " return %s;\n}\n" % (typename.lower())
|
||||
converters += [converter]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user