bindings(py): fix handling of 'isalgorithm'

pull/10152/head
Alexander Alekhin 8 years ago committed by Alexander Alekhin
parent f071a48ec7
commit cbf2b51e40
  1. 20
      modules/python/src2/gen2.py

@ -1027,10 +1027,28 @@ class PythonWrapperGenerator(object):
print("Generator error: unable to resolve base %s for %s" print("Generator error: unable to resolve base %s for %s"
% (classinfo.base, classinfo.name)) % (classinfo.base, classinfo.name))
sys.exit(-1) sys.exit(-1)
base_instance = self.classes[base]
classinfo.base = base classinfo.base = base
classinfo.isalgorithm |= self.classes[base].isalgorithm classinfo.isalgorithm |= base_instance.isalgorithm # wrong processing of 'isalgorithm' flag:
# doesn't work for trees(graphs) with depth > 2
self.classes[name] = classinfo self.classes[name] = classinfo
# tree-based propagation of 'isalgorithm'
processed = dict()
def process_isalgorithm(classinfo):
if classinfo.isalgorithm or classinfo in processed:
return classinfo.isalgorithm
res = False
if classinfo.base:
res = process_isalgorithm(self.classes[classinfo.base])
#assert not (res == True or classinfo.isalgorithm is False), "Internal error: " + classinfo.name + " => " + classinfo.base
classinfo.isalgorithm |= res
res = classinfo.isalgorithm
processed[classinfo] = True
return res
for name, classinfo in self.classes.items():
process_isalgorithm(classinfo)
# step 2: generate code for the classes and their methods # step 2: generate code for the classes and their methods
classlist = list(self.classes.items()) classlist = list(self.classes.items())
classlist.sort() classlist.sort()

Loading…
Cancel
Save