aboutsummaryrefslogtreecommitdiff
path: root/tests/GenerateSipBindings/rules_SipTest.py
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2017-01-14 22:13:49 +0000
committerStephen Kelly <steveire@gmail.com>2017-01-15 11:18:50 +0000
commit636d6acc7adf8bf7169d38833340161dc42d3484 (patch)
tree2ff1bbefa5808aec21e902b10c9547e359067604 /tests/GenerateSipBindings/rules_SipTest.py
parent8c347c61abafa68e247ff4664ae658cfa15af932 (diff)
downloadextra-cmake-modules-636d6acc7adf8bf7169d38833340161dc42d3484.tar.gz
extra-cmake-modules-636d6acc7adf8bf7169d38833340161dc42d3484.tar.bz2
Bindings: Fix handling of forward declarations
It is not appropriate to decorate each forward declaration with the SIP attribute /External/. That is only needed for forward declarations of types which are defined in a different module. Local forward declarations can be omitted from the sip code. In sip code, a forward declaration followed later by a full class definition is an error. Omit forward declarations unless they are decorated with the external attribute. Introduce a rules database for consumers to decorate them with the attribute as required.
Diffstat (limited to 'tests/GenerateSipBindings/rules_SipTest.py')
-rw-r--r--tests/GenerateSipBindings/rules_SipTest.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/tests/GenerateSipBindings/rules_SipTest.py b/tests/GenerateSipBindings/rules_SipTest.py
index ad3fcb64..c570a039 100644
--- a/tests/GenerateSipBindings/rules_SipTest.py
+++ b/tests/GenerateSipBindings/rules_SipTest.py
@@ -10,10 +10,13 @@ def local_container_rules():
[".*", "Shared", ".*", ".*", ".*", rules_engine.discard_QSharedData_base]
]
+def local_forward_declaration_rules():
+ return [
+ [".*", "ExternalFwdDecl", ".*", rules_engine.mark_forward_declaration_external]
+ ]
+
def local_function_rules():
return [
- ["MyObject", "fwdDecl", ".*", ".*", ".*", rules_engine.function_discard],
- ["MyObject", "fwdDeclRef", ".*", ".*", ".*", rules_engine.function_discard],
["TypedefUser", "setTagPattern", ".*", ".*", ".*", rules_engine.function_discard],
]
@@ -34,6 +37,7 @@ class RuleSet(Qt5Ruleset.RuleSet):
def __init__(self):
Qt5Ruleset.RuleSet.__init__(self)
self._container_db = rules_engine.ContainerRuleDb(lambda: local_container_rules() + Qt5Ruleset.container_rules())
+ self._forward_declaration_db = rules_engine.ForwardDeclarationRuleDb(lambda: local_forward_declaration_rules() + Qt5Ruleset.forward_declaration_rules())
self._fn_db = rules_engine.FunctionRuleDb(lambda: local_function_rules() + Qt5Ruleset.function_rules())
self._typedef_db = rules_engine.TypedefRuleDb(lambda: local_typedef_rules() + Qt5Ruleset.typedef_rules())
self._modulecode = rules_engine.ModuleCodeDb({