From 4e6be21a445a3356517d45a1268376d3488a6206 Mon Sep 17 00:00:00 2001 From: Hamdi Sahloul Date: Tue, 28 Aug 2018 04:38:26 +0900 Subject: [PATCH] Support enum arguments for Python binding --- modules/python/src2/gen2.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/modules/python/src2/gen2.py b/modules/python/src2/gen2.py index c717ad7..8dcce91 100755 --- a/modules/python/src2/gen2.py +++ b/modules/python/src2/gen2.py @@ -680,7 +680,7 @@ class FuncInfo(object): defval0 = "0" tp1 = tp.replace("*", "_ptr") 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) amapping = simple_argtype_mapping.get(tp, (tp, "O", defval0)) @@ -855,7 +855,7 @@ class PythonWrapperGenerator(object): self.classes = {} self.namespaces = {} self.consts = {} - self.enum_types = [] + self.enumTypes = [] self.code_include = StringIO() self.code_types = StringIO() self.code_funcs = StringIO() @@ -914,8 +914,11 @@ class PythonWrapperGenerator(object): #print(cname + ' => ' + str(py_name) + ' (value=' + value + ')') def add_enum(self, name, decl): - enumname = normalize_class_name(name) - self.enum_types.append(enumname) + enumType = normalize_class_name(name) + if enumType.endswith(""): + enumType = None + else: + self.enumTypes.append(enumType) const_decls = decl[3] for decl in const_decls: @@ -992,10 +995,10 @@ class PythonWrapperGenerator(object): self.code_ns_reg.write('static ConstDef consts_%s[] = {\n'%wname) 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(%s)},\n'%(name, cname)) compat_name = re.sub(r"([a-z])([A-Z])", r"\1_\2", name).upper() if name != compat_name: - self.code_ns_reg.write(' {"%s", %s},\n'%(compat_name, cname)) + self.code_ns_reg.write(' {"%s", static_cast(%s)},\n'%(compat_name, cname)) self.code_ns_reg.write(' {NULL, 0}\n};\n\n') def gen_namespaces_reg(self): @@ -1040,7 +1043,7 @@ class PythonWrapperGenerator(object): self.add_const(name.replace("const ", "").strip(), decl) elif name.startswith("enum"): # enum - self.add_enum(name.replace("enum ", "").strip(), decl) + self.add_enum(name.rsplit(" ", 1)[1], decl) else: # function self.add_func(decl) -- 2.7.4