forked from qt-creator/qt-creator
CppEditor: Remove extra CPlusPlus::Class member
Amends 0fab5956ea.
We want to avoid carrying these eight bytes ber Class instance around.
Instead, we now just replace the (anonymous) struct name with the
typedef'ed one.
Note that in C (but not C++), this is possible:
struct S {};
typedef struct {} S;
struct S s1;
S s2;
However, our code model has never respected the extra struct namespace,
so it can already not distinguish between occurrences of "S" and "struct
S".
Change-Id: I55feafea7d3a4a5848e10f7011f633a2ce0f626e
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
2
src/libs/3rdparty/cplusplus/Bind.cpp
vendored
2
src/libs/3rdparty/cplusplus/Bind.cpp
vendored
@@ -2024,7 +2024,7 @@ bool Bind::visit(SimpleDeclarationAST *ast)
|
|||||||
Declaration *decl = control()->newDeclaration(sourceLocation, nameAndLoc.first);
|
Declaration *decl = control()->newDeclaration(sourceLocation, nameAndLoc.first);
|
||||||
if (const Type * const t = declTy.type(); t && declTy.isTypedef() && t->asClassType()
|
if (const Type * const t = declTy.type(); t && declTy.isTypedef() && t->asClassType()
|
||||||
&& t->asClassType()->name() && t->asClassType()->name()->asAnonymousNameId()) {
|
&& t->asClassType()->name() && t->asClassType()->name()->asAnonymousNameId()) {
|
||||||
declTy.type()->asClassType()->setCanonicalTypedefName(decl->name());
|
declTy.type()->asClassType()->setName(decl->name());
|
||||||
}
|
}
|
||||||
decl->setType(declTy);
|
decl->setType(declTy);
|
||||||
setDeclSpecifiers(decl, type);
|
setDeclSpecifiers(decl, type);
|
||||||
|
|||||||
5
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
5
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
@@ -635,11 +635,6 @@ void Class::addBaseClass(BaseClass *baseClass)
|
|||||||
FullySpecifiedType Class::type() const
|
FullySpecifiedType Class::type() const
|
||||||
{ return FullySpecifiedType(const_cast<Class *>(this)); }
|
{ return FullySpecifiedType(const_cast<Class *>(this)); }
|
||||||
|
|
||||||
const Name *Class::prettyName() const
|
|
||||||
{
|
|
||||||
return _canonicalTypedefName ? _canonicalTypedefName : name();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Class::visitSymbol0(SymbolVisitor *visitor)
|
void Class::visitSymbol0(SymbolVisitor *visitor)
|
||||||
{
|
{
|
||||||
if (visitor->visit(this)) {
|
if (visitor->visit(this)) {
|
||||||
|
|||||||
4
src/libs/3rdparty/cplusplus/Symbols.h
vendored
4
src/libs/3rdparty/cplusplus/Symbols.h
vendored
@@ -495,9 +495,6 @@ public:
|
|||||||
const Class *asClassType() const override { return this; }
|
const Class *asClassType() const override { return this; }
|
||||||
Class *asClassType() override { return this; }
|
Class *asClassType() override { return this; }
|
||||||
|
|
||||||
void setCanonicalTypedefName(const Name *n) { _canonicalTypedefName = n; }
|
|
||||||
const Name *prettyName() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void visitSymbol0(SymbolVisitor *visitor) override;
|
void visitSymbol0(SymbolVisitor *visitor) override;
|
||||||
void accept0(TypeVisitor *visitor) override;
|
void accept0(TypeVisitor *visitor) override;
|
||||||
@@ -506,7 +503,6 @@ protected:
|
|||||||
private:
|
private:
|
||||||
Key _key;
|
Key _key;
|
||||||
std::vector<BaseClass *> _baseClasses;
|
std::vector<BaseClass *> _baseClasses;
|
||||||
const Name *_canonicalTypedefName = nullptr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPLUSPLUS_EXPORT QtPropertyDeclaration final : public Symbol
|
class CPLUSPLUS_EXPORT QtPropertyDeclaration final : public Symbol
|
||||||
|
|||||||
@@ -53,9 +53,6 @@ static void path_helper(Symbol *symbol,
|
|||||||
if (ns && ns->isInline())
|
if (ns && ns->isInline())
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (symbol->asClass())
|
|
||||||
addNames(symbol->asClass()->prettyName(), names);
|
|
||||||
else
|
|
||||||
addNames(symbol->name(), names);
|
addNames(symbol->name(), names);
|
||||||
|
|
||||||
} else if (symbol->asObjCClass() || symbol->asObjCBaseClass() || symbol->asObjCProtocol()
|
} else if (symbol->asObjCClass() || symbol->asObjCBaseClass() || symbol->asObjCProtocol()
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ void TypePrettyPrinter::visit(Template *type)
|
|||||||
|
|
||||||
void TypePrettyPrinter::visit(Class *classTy)
|
void TypePrettyPrinter::visit(Class *classTy)
|
||||||
{
|
{
|
||||||
_text.prepend(overview()->prettyName(classTy->prettyName()));
|
_text.prepend(overview()->prettyName(classTy->name()));
|
||||||
prependCv(_fullySpecifiedType);
|
prependCv(_fullySpecifiedType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user