diff options
| -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({  | 
