From 386df457a9dd76663eb66c01fcf6faaa6f56d6f1 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Sun, 27 Mar 2022 12:48:49 +0000 Subject: [PATCH] python: ensure publishing of subclasses before derived types --- modules/python/src2/gen2.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/python/src2/gen2.py b/modules/python/src2/gen2.py index 79853648c5..1a9239c07f 100755 --- a/modules/python/src2/gen2.py +++ b/modules/python/src2/gen2.py @@ -1178,10 +1178,25 @@ class PythonWrapperGenerator(object): classlist1 = [(classinfo.decl_idx, name, classinfo) for name, classinfo in classlist] classlist1.sort() + published_types = set() # ensure toposort with base classes for decl_idx, name, classinfo in classlist1: if classinfo.ismap: continue - self.code_type_publish.write(classinfo.gen_def(self)) + def _registerType(classinfo): + if classinfo.decl_idx in published_types: + #print(classinfo.decl_idx, classinfo.name, ' - already published') + return + published_types.add(classinfo.decl_idx) + + if classinfo.base and classinfo.base in self.classes: + base_classinfo = self.classes[classinfo.base] + #print(classinfo.decl_idx, classinfo.name, ' - request publishing of base type ', base_classinfo.decl_idx, base_classinfo.name) + _registerType(base_classinfo) + + #print(classinfo.decl_idx, classinfo.name, ' - published!') + self.code_type_publish.write(classinfo.gen_def(self)) + + _registerType(classinfo) # step 3: generate the code for all the global functions