diff options
| author | Stephen Kelly <steveire@gmail.com> | 2017-01-10 08:44:21 +0000 | 
|---|---|---|
| committer | Stephen Kelly <steveire@gmail.com> | 2017-01-10 08:44:21 +0000 | 
| commit | 51b7b494213643c9808efecf6a7372d3b63c6f50 (patch) | |
| tree | 2142c7029e8964b677febca1a7bc61e2ed5dfbaf | |
| parent | b5a18440f45d8218dbdd76d76f7fd1e54d352712 (diff) | |
| download | extra-cmake-modules-51b7b494213643c9808efecf6a7372d3b63c6f50.tar.gz extra-cmake-modules-51b7b494213643c9808efecf6a7372d3b63c6f50.tar.bz2 | |
Bindings: Correctly handle access specifiers within macros
The Q_DECLARE_TR_FUNCTIONS macro contains a `public:` access specifier,
but the sip_generator just pastes the entire macro name.  Adjust the
generator to extract the correct access specifier.
| -rw-r--r-- | find-modules/sip_generator.py | 16 | ||||
| -rw-r--r-- | tests/GenerateSipBindings/cpplib.h | 4 | 
2 files changed, 17 insertions, 3 deletions
| diff --git a/find-modules/sip_generator.py b/find-modules/sip_generator.py index a67263ff..acdec86e 100644 --- a/find-modules/sip_generator.py +++ b/find-modules/sip_generator.py @@ -335,10 +335,22 @@ class SipGenerator(object):          """          Skip access specifiers embedded in the Q_OBJECT macro.          """ -        access_specifier = self._read_source(member.extent) -        if access_specifier == "Q_OBJECT": +        access_specifier_text = self._read_source(member.extent) +        if access_specifier_text == "Q_OBJECT":              return ""          pad = " " * ((level - 1) * 4) +        access_specifier = "" +        if (access_specifier_text in ("Q_SIGNALS:", "signals:", +                                      "public Q_SLOTS:", "public slots:", +                                      "protected Q_SLOTS:", "protected slots:")): +            access_specifier = access_specifier_text +        elif member.access_specifier == AccessSpecifier.PRIVATE: +            access_specifier = "private:" +        elif member.access_specifier == AccessSpecifier.PROTECTED: +            access_specifier = "protected:" +        elif member.access_specifier == AccessSpecifier.PUBLIC: +            access_specifier = "public:" +          decl = pad + access_specifier + "\n"          return decl diff --git a/tests/GenerateSipBindings/cpplib.h b/tests/GenerateSipBindings/cpplib.h index ba8e9f27..81ad2038 100644 --- a/tests/GenerateSipBindings/cpplib.h +++ b/tests/GenerateSipBindings/cpplib.h @@ -5,6 +5,7 @@  #include <QtCore/QString>  #include <QtCore/QStringList>  #include <QtCore/QMap> +#include <QtCore/QCoreApplication>  #include <functional> @@ -85,12 +86,13 @@ private:    int* const mNum;  }; -  class NonCopyableByMacro  {  public:    NonCopyableByMacro(); +  Q_DECLARE_TR_FUNCTIONS(NonCopyableByMacro) +  private:    Q_DISABLE_COPY(NonCopyableByMacro)  }; | 
