aboutsummaryrefslogtreecommitdiffstats
path: root/sources
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-10-29 09:08:34 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-11-04 22:49:15 +0000
commitd143ffd75c2d2c10b32abe92b5e1390f47f25ed7 (patch)
treeae8f006df15959295a815042b1689a9306654f3a /sources
parentf41b9d4c87af3a7bc7d30dee39797af12c30a3fa (diff)
shiboken6: Store pointer enclosing scope in code model items
Store a flat pointer to the enclosing class in _ScopeModelItem. This is needed for implementing enum resolution in the code model directly. Task-number: PYSIDE-1691 Change-Id: Ic44edb5f121503990044faa4bc6db65220d81c51 Reviewed-by: Christian Tismer <tismer@stackless.com> (cherry picked from commit 559162e3c8126457b4d36f4b4a67e73971a06b8e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'sources')
-rw-r--r--sources/shiboken6/ApiExtractor/parser/codemodel.cpp17
-rw-r--r--sources/shiboken6/ApiExtractor/parser/codemodel.h5
2 files changed, 22 insertions, 0 deletions
diff --git a/sources/shiboken6/ApiExtractor/parser/codemodel.cpp b/sources/shiboken6/ApiExtractor/parser/codemodel.cpp
index 7d3b9aa83..d1f3e552b 100644
--- a/sources/shiboken6/ApiExtractor/parser/codemodel.cpp
+++ b/sources/shiboken6/ApiExtractor/parser/codemodel.cpp
@@ -256,6 +256,16 @@ SourceLocation _CodeModelItem::sourceLocation() const
return SourceLocation(m_fileName, m_startLine);
}
+const _ScopeModelItem *_CodeModelItem::enclosingScope() const
+{
+ return m_enclosingScope;
+}
+
+void _CodeModelItem::setEnclosingScope(const _ScopeModelItem *s)
+{
+ m_enclosingScope = s;
+}
+
#ifndef QT_NO_DEBUG_STREAM
template <class It>
void formatSequence(QDebug &d, It i1, It i2, const char *separator=", ")
@@ -484,26 +494,31 @@ void _ScopeModelItem::addEnumsDeclaration(const QString &enumsDeclaration)
void _ScopeModelItem::addClass(const ClassModelItem &item)
{
m_classes.append(item);
+ item->setEnclosingScope(this);
}
void _ScopeModelItem::addFunction(const FunctionModelItem &item)
{
m_functions.append(item);
+ item->setEnclosingScope(this);
}
void _ScopeModelItem::addVariable(const VariableModelItem &item)
{
m_variables.append(item);
+ item->setEnclosingScope(this);
}
void _ScopeModelItem::addTypeDef(const TypeDefModelItem &item)
{
m_typeDefs.append(item);
+ item->setEnclosingScope(this);
}
void _ScopeModelItem::addTemplateTypeAlias(const TemplateTypeAliasModelItem &item)
{
m_templateTypeAliases.append(item);
+ item->setEnclosingScope(this);
}
qsizetype _ScopeModelItem::indexOfEnum(const QString &name) const
@@ -517,6 +532,7 @@ qsizetype _ScopeModelItem::indexOfEnum(const QString &name) const
void _ScopeModelItem::addEnum(const EnumModelItem &item)
{
+ item->setEnclosingScope(this);
// A forward declaration of an enum ("enum class Foo;") is undistinguishable
// from an enum without values ("enum class QCborTag {}"), so, add all
// enums and replace existing ones without values by ones with values.
@@ -701,6 +717,7 @@ _NamespaceModelItem::~_NamespaceModelItem()
void _NamespaceModelItem::addNamespace(NamespaceModelItem item)
{
+ item->setEnclosingScope(this);
m_namespaces.append(item);
}
diff --git a/sources/shiboken6/ApiExtractor/parser/codemodel.h b/sources/shiboken6/ApiExtractor/parser/codemodel.h
index 6527ab7bb..db3675d17 100644
--- a/sources/shiboken6/ApiExtractor/parser/codemodel.h
+++ b/sources/shiboken6/ApiExtractor/parser/codemodel.h
@@ -42,6 +42,7 @@
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QList>
+#include <QtCore/QWeakPointer>
#include <optional>
@@ -167,6 +168,9 @@ public:
inline CodeModel *model() const { return m_model; }
+ const _ScopeModelItem *enclosingScope() const;
+ void setEnclosingScope(const _ScopeModelItem *s);
+
#ifndef QT_NO_DEBUG_STREAM
static void formatKind(QDebug &d, int k);
virtual void formatDebug(QDebug &d) const;
@@ -178,6 +182,7 @@ protected:
private:
CodeModel *m_model;
+ const _ScopeModelItem *m_enclosingScope = nullptr;
int m_kind;
int m_startLine;
int m_startColumn;