forked from qt-creator/qt-creator
CPlusPlus: Provide information about the "static" specifier
... to the function type. This fixes the issue for function *definitions*. For function *declarations*, we need to amend the parser. Task-number: QTCREATORBUG-24894 Change-Id: I02043d8b974c2c64dcd739c7e05ce44fd277b5d3 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
@@ -135,6 +135,8 @@ void Bind::setDeclSpecifiers(Symbol *symbol, const FullySpecifiedType &declSpeci
|
|||||||
if (Function *funTy = symbol->asFunction()) {
|
if (Function *funTy = symbol->asFunction()) {
|
||||||
if (declSpecifiers.isVirtual())
|
if (declSpecifiers.isVirtual())
|
||||||
funTy->setVirtual(true);
|
funTy->setVirtual(true);
|
||||||
|
if (declSpecifiers.isStatic())
|
||||||
|
funTy->setStatic(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (declSpecifiers.isDeprecated())
|
if (declSpecifiers.isDeprecated())
|
||||||
|
|||||||
1
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
1
src/libs/3rdparty/cplusplus/Symbols.cpp
vendored
@@ -405,6 +405,7 @@ FullySpecifiedType Function::type() const
|
|||||||
FullySpecifiedType ty(const_cast<Function *>(this));
|
FullySpecifiedType ty(const_cast<Function *>(this));
|
||||||
ty.setConst(isConst());
|
ty.setConst(isConst());
|
||||||
ty.setVolatile(isVolatile());
|
ty.setVolatile(isVolatile());
|
||||||
|
ty.setStatic(isStatic());
|
||||||
return ty;
|
return ty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
src/libs/3rdparty/cplusplus/Symbols.h
vendored
4
src/libs/3rdparty/cplusplus/Symbols.h
vendored
@@ -352,6 +352,9 @@ public:
|
|||||||
bool isConst() const;
|
bool isConst() const;
|
||||||
void setConst(bool isConst);
|
void setConst(bool isConst);
|
||||||
|
|
||||||
|
bool isStatic() const { return f._isStatic; }
|
||||||
|
void setStatic(bool isStatic) { f._isStatic = isStatic; }
|
||||||
|
|
||||||
bool isVolatile() const;
|
bool isVolatile() const;
|
||||||
void setVolatile(bool isVolatile);
|
void setVolatile(bool isVolatile);
|
||||||
|
|
||||||
@@ -399,6 +402,7 @@ private:
|
|||||||
unsigned _isVirtual: 1;
|
unsigned _isVirtual: 1;
|
||||||
unsigned _isOverride: 1;
|
unsigned _isOverride: 1;
|
||||||
unsigned _isFinal: 1;
|
unsigned _isFinal: 1;
|
||||||
|
unsigned _isStatic: 1;
|
||||||
unsigned _isVariadic: 1;
|
unsigned _isVariadic: 1;
|
||||||
unsigned _isVariadicTemplate: 1;
|
unsigned _isVariadicTemplate: 1;
|
||||||
unsigned _isPureVirtual: 1;
|
unsigned _isPureVirtual: 1;
|
||||||
|
|||||||
@@ -2221,7 +2221,6 @@ int main()
|
|||||||
QCOMPARE(find.usages().at(27).type, Usage::Type::WritableRef);
|
QCOMPARE(find.usages().at(27).type, Usage::Type::WritableRef);
|
||||||
QCOMPARE(find.usages().at(28).type, Usage::Type::Read);
|
QCOMPARE(find.usages().at(28).type, Usage::Type::Read);
|
||||||
QCOMPARE(find.usages().at(29).type, Usage::Type::Read);
|
QCOMPARE(find.usages().at(29).type, Usage::Type::Read);
|
||||||
QEXPECT_FAIL(nullptr, "parser does not expose static specifier", Continue);
|
|
||||||
QCOMPARE(find.usages().at(31).type, Usage::Type::Other);
|
QCOMPARE(find.usages().at(31).type, Usage::Type::Other);
|
||||||
QEXPECT_FAIL(nullptr, "parser does not expose static specifier", Continue);
|
QEXPECT_FAIL(nullptr, "parser does not expose static specifier", Continue);
|
||||||
QCOMPARE(find.usages().at(32).type, Usage::Type::Other);
|
QCOMPARE(find.usages().at(32).type, Usage::Type::Other);
|
||||||
|
|||||||
Reference in New Issue
Block a user