Commit 4e6be21a authored by Hamdi Sahloul's avatar Hamdi Sahloul

Support enum arguments for Python binding

parent f89e4e7d
...@@ -680,7 +680,7 @@ class FuncInfo(object): ...@@ -680,7 +680,7 @@ class FuncInfo(object):
defval0 = "0" defval0 = "0"
tp1 = tp.replace("*", "_ptr") tp1 = tp.replace("*", "_ptr")
tp_candidates = [a.tp, normalize_class_name(self.namespace + "." + a.tp)] tp_candidates = [a.tp, normalize_class_name(self.namespace + "." + a.tp)]
if any(tp in codegen.enum_types for tp in tp_candidates): if any(tp in codegen.enumTypes for tp in tp_candidates):
defval0 = "static_cast<%s>(%d)" % (a.tp, 0) defval0 = "static_cast<%s>(%d)" % (a.tp, 0)
amapping = simple_argtype_mapping.get(tp, (tp, "O", defval0)) amapping = simple_argtype_mapping.get(tp, (tp, "O", defval0))
...@@ -855,7 +855,7 @@ class PythonWrapperGenerator(object): ...@@ -855,7 +855,7 @@ class PythonWrapperGenerator(object):
self.classes = {} self.classes = {}
self.namespaces = {} self.namespaces = {}
self.consts = {} self.consts = {}
self.enum_types = [] self.enumTypes = []
self.code_include = StringIO() self.code_include = StringIO()
self.code_types = StringIO() self.code_types = StringIO()
self.code_funcs = StringIO() self.code_funcs = StringIO()
...@@ -914,8 +914,11 @@ class PythonWrapperGenerator(object): ...@@ -914,8 +914,11 @@ class PythonWrapperGenerator(object):
#print(cname + ' => ' + str(py_name) + ' (value=' + value + ')') #print(cname + ' => ' + str(py_name) + ' (value=' + value + ')')
def add_enum(self, name, decl): def add_enum(self, name, decl):
enumname = normalize_class_name(name) enumType = normalize_class_name(name)
self.enum_types.append(enumname) if enumType.endswith("<unnamed>"):
enumType = None
else:
self.enumTypes.append(enumType)
const_decls = decl[3] const_decls = decl[3]
for decl in const_decls: for decl in const_decls:
...@@ -992,10 +995,10 @@ class PythonWrapperGenerator(object): ...@@ -992,10 +995,10 @@ class PythonWrapperGenerator(object):
self.code_ns_reg.write('static ConstDef consts_%s[] = {\n'%wname) self.code_ns_reg.write('static ConstDef consts_%s[] = {\n'%wname)
for name, cname in sorted(ns.consts.items()): for name, cname in sorted(ns.consts.items()):
self.code_ns_reg.write(' {"%s", %s},\n'%(name, cname)) self.code_ns_reg.write(' {"%s", static_cast<long>(%s)},\n'%(name, cname))
compat_name = re.sub(r"([a-z])([A-Z])", r"\1_\2", name).upper() compat_name = re.sub(r"([a-z])([A-Z])", r"\1_\2", name).upper()
if name != compat_name: if name != compat_name:
self.code_ns_reg.write(' {"%s", %s},\n'%(compat_name, cname)) self.code_ns_reg.write(' {"%s", static_cast<long>(%s)},\n'%(compat_name, cname))
self.code_ns_reg.write(' {NULL, 0}\n};\n\n') self.code_ns_reg.write(' {NULL, 0}\n};\n\n')
def gen_namespaces_reg(self): def gen_namespaces_reg(self):
...@@ -1040,7 +1043,7 @@ class PythonWrapperGenerator(object): ...@@ -1040,7 +1043,7 @@ class PythonWrapperGenerator(object):
self.add_const(name.replace("const ", "").strip(), decl) self.add_const(name.replace("const ", "").strip(), decl)
elif name.startswith("enum"): elif name.startswith("enum"):
# enum # enum
self.add_enum(name.replace("enum ", "").strip(), decl) self.add_enum(name.rsplit(" ", 1)[1], decl)
else: else:
# function # function
self.add_func(decl) self.add_func(decl)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment