From dec469837d646351bd4288fa3390682f96b3e37c Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 15 Jan 2017 00:56:24 +0000 Subject: Bindings: Skip implementations of inline methods while parsing Don't process the same function name twice. --- find-modules/sip_generator.py | 6 ++++++ tests/GenerateSipBindings/cpplib.h | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/find-modules/sip_generator.py b/find-modules/sip_generator.py index 7df9de3d..8845c81e 100644 --- a/find-modules/sip_generator.py +++ b/find-modules/sip_generator.py @@ -434,6 +434,12 @@ class SipGenerator(object): :param level: Recursion level controls indentation. :return: A string. """ + if container.kind == CursorKind.TRANSLATION_UNIT and \ + (function.semantic_parent.kind == CursorKind.CLASS_DECL or + function.semantic_parent.kind == CursorKind.STRUCT_DECL) and \ + function.is_definition(): + # Skip inline methods + return def skippable_attribute(member, text): """ diff --git a/tests/GenerateSipBindings/cpplib.h b/tests/GenerateSipBindings/cpplib.h index 3ae9448a..dd797a9c 100644 --- a/tests/GenerateSipBindings/cpplib.h +++ b/tests/GenerateSipBindings/cpplib.h @@ -21,6 +21,8 @@ class MyObject : public QObject public: MyObject(QObject* parent = nullptr); + inline MyObject(const QString& inlineCtor, QObject* parent = nullptr); + enum LocalEnum { Val1 = 1, Val2 @@ -44,6 +46,8 @@ public: int qtEnumTest(QFlags flags); int localEnumTest(QFlags flags); + inline int inlineMethod(int arg); + int functionParam(std::function fn); int groups(unsigned int maxCount = std::numeric_limits::max()) const; @@ -86,6 +90,17 @@ private Q_SLOTS: void privateSlot2(); }; +inline MyObject::MyObject(const QString& inlineCtor, QObject* parent) + : MyObject(parent) +{ + +} + +inline int MyObject::inlineMethod(int arg) +{ + return arg; +} + class LocalFwdDecl { public: -- cgit v1.2.1