diff options
author | Stephen Kelly <steveire@gmail.com> | 2017-01-14 21:42:50 +0000 |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2017-01-15 11:18:34 +0000 |
commit | 8c347c61abafa68e247ff4664ae658cfa15af932 (patch) | |
tree | 972eca5ade46d3a0c213d854f6f8acfe1881a3d2 | |
parent | 3c31028dad2f9c53bea6630fd0da127a6da0d610 (diff) | |
download | extra-cmake-modules-8c347c61abafa68e247ff4664ae658cfa15af932.tar.gz extra-cmake-modules-8c347c61abafa68e247ff4664ae658cfa15af932.tar.bz2 |
Bindings: Use lists in function API instead of strings
Custom rules should be able to deal with lists in these cases. This is
already the case for function parameters.
-rwxr-xr-x | find-modules/rules_engine.py | 8 | ||||
-rw-r--r-- | find-modules/sip_generator.py | 11 | ||||
-rw-r--r-- | tests/GenerateSipBindings/cpplib.cpp | 5 | ||||
-rw-r--r-- | tests/GenerateSipBindings/cpplib.h | 7 | ||||
-rw-r--r-- | tests/GenerateSipBindings/rules_SipTest.py | 6 |
5 files changed, 30 insertions, 7 deletions
diff --git a/find-modules/rules_engine.py b/find-modules/rules_engine.py index 64ce1d97..34bd15dc 100755 --- a/find-modules/rules_engine.py +++ b/find-modules/rules_engine.py @@ -224,7 +224,10 @@ class ContainerRuleDb(AbstractCompiledRuleDb): :return: Modifying rule or None (even if a rule matched, it may not modify things). """ parents = _parents(container) - matcher, rule = self._match(parents, sip["name"], sip["template_parameters"], sip["decl"], sip["base_specifiers"]) + matcher, rule = self._match(parents, sip["name"], + ", ".join(sip["template_parameters"]), + sip["decl"], + ", ".join(sip["base_specifiers"])) if matcher: before = deepcopy(sip) rule.fn(container, sip, matcher) @@ -882,6 +885,9 @@ def function_discard_impl(container, function, sip, matcher): def typedef_discard(container, typedef, sip, matcher): sip["name"] = "" +def discard_QSharedData_base(container, sip, matcher): + sip["base_specifiers"].remove("QSharedData") + def rules(project_rules): """ Constructor. diff --git a/find-modules/sip_generator.py b/find-modules/sip_generator.py index a8c164b5..41dd6369 100644 --- a/find-modules/sip_generator.py +++ b/find-modules/sip_generator.py @@ -345,9 +345,9 @@ class SipGenerator(object): # # Flesh out the SIP context for the rules engine. # - sip["template_parameters"] = ", ".join(template_type_parameters) + sip["template_parameters"] = template_type_parameters sip["decl"] = container_type - sip["base_specifiers"] = ", ".join(base_specifiers) + sip["base_specifiers"] = base_specifiers sip["body"] = body modifying_rule = self.rules.container_rules().apply(container, sip) pad = " " * (level * 4) @@ -364,11 +364,11 @@ class SipGenerator(object): body = pad + "// Discarded {} (by {})\n".format(SipGenerator.describe(container), "/External/ handling") else: if sip["base_specifiers"]: - decl += ": " + sip["base_specifiers"] + decl += ": " + ", ".join(sip["base_specifiers"]) if sip["annotations"]: decl += " /" + ",".join(sip["annotations"]) + "/" if sip["template_parameters"]: - decl = pad + "template <" + sip["template_parameters"] + ">\n" + decl + decl = pad + "template <" + ", ".join(sip["template_parameters"]) + ">\n" + decl decl += "\n" + pad + "{\n" decl += "%TypeHeaderCode\n#include <{}>\n%End\n".format(include_filename) body = decl + sip["body"] + pad + "};\n" @@ -511,13 +511,12 @@ class SipGenerator(object): if parameter_modifying_rules: decl += pad - sip["template_parameters"] = ", ".join(sip["template_parameters"]) decl += sip["name"] + "(" + ", ".join(sip["parameters"]) + ")" if sip["fn_result"]: decl = sip["fn_result"] + " " + decl decl = pad + sip["prefix"] + decl + sip["suffix"] if sip["template_parameters"]: - decl = pad + "template <" + sip["template_parameters"] + ">\n" + decl + decl = pad + "template <" + ", ".join(sip["template_parameters"]) + ">\n" + decl decl += ";\n" decl += sip["code"] else: diff --git a/tests/GenerateSipBindings/cpplib.cpp b/tests/GenerateSipBindings/cpplib.cpp index 744914a0..8dc7492b 100644 --- a/tests/GenerateSipBindings/cpplib.cpp +++ b/tests/GenerateSipBindings/cpplib.cpp @@ -173,3 +173,8 @@ void TypedefUser::setTagPattern(const QString &tagName, { } + +Shared::Shared(const Shared& other) +{ + +} diff --git a/tests/GenerateSipBindings/cpplib.h b/tests/GenerateSipBindings/cpplib.h index 34167ad3..9b9adcba 100644 --- a/tests/GenerateSipBindings/cpplib.h +++ b/tests/GenerateSipBindings/cpplib.h @@ -6,6 +6,7 @@ #include <QtCore/QStringList> #include <QtCore/QMap> #include <QtCore/QCoreApplication> +#include <QtCore/QSharedData> #include <functional> @@ -106,6 +107,12 @@ private: HasPrivateDefaultCtor(int param = 0); }; +class Shared : public QSharedData +{ +public: + Shared(const Shared& other); +}; + namespace SomeNS { class NonCopyableInNS diff --git a/tests/GenerateSipBindings/rules_SipTest.py b/tests/GenerateSipBindings/rules_SipTest.py index 73c5451b..ad3fcb64 100644 --- a/tests/GenerateSipBindings/rules_SipTest.py +++ b/tests/GenerateSipBindings/rules_SipTest.py @@ -5,6 +5,11 @@ import rules_engine sys.path.append(os.path.dirname(os.path.dirname(rules_engine.__file__))) import Qt5Ruleset +def local_container_rules(): + return [ + [".*", "Shared", ".*", ".*", ".*", rules_engine.discard_QSharedData_base] + ] + def local_function_rules(): return [ ["MyObject", "fwdDecl", ".*", ".*", ".*", rules_engine.function_discard], @@ -28,6 +33,7 @@ def methodGenerator(function, sip, entry): 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._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({ |