summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/CPlusPlusForwardDeclarations.h2
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp2
-rw-r--r--src/shared/cplusplus/FullySpecifiedType.cpp19
-rw-r--r--src/shared/cplusplus/FullySpecifiedType.h2
4 files changed, 25 insertions, 0 deletions
diff --git a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
index 9e570d2c1a..9616f51780 100644
--- a/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
+++ b/src/shared/cplusplus/CPlusPlusForwardDeclarations.h
@@ -54,6 +54,8 @@
# if defined(CPLUSPLUS_BUILD_LIB)
# define CPLUSPLUS_EXPORT Q_DECL_EXPORT
+# elif defined(CPLUSPLUS_BUILD_STATIC_LIB)
+# define CPLUSPLUS_EXPORT
# else
# define CPLUSPLUS_EXPORT Q_DECL_IMPORT
# endif
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index 6a81784360..7e7d01d907 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -190,6 +190,7 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast)
fun->setScope(_scope);
fun->setName(name);
fun->setMethodKey(semantic()->currentMethodKey());
+ fun->setVirtual(ty.isVirtual());
if (isQ_SIGNAL)
fun->setMethodKey(Function::SignalMethod);
else if (isQ_SLOT)
@@ -281,6 +282,7 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
}
Function *fun = funTy->asFunctionType();
+ fun->setVirtual(ty.isVirtual());
fun->setStartOffset(tokenAt(ast->firstToken()).offset);
fun->setEndOffset(tokenAt(ast->lastToken()).offset);
if (ast->declarator)
diff --git a/src/shared/cplusplus/FullySpecifiedType.cpp b/src/shared/cplusplus/FullySpecifiedType.cpp
index 578c6c9b7d..a9063fda67 100644
--- a/src/shared/cplusplus/FullySpecifiedType.cpp
+++ b/src/shared/cplusplus/FullySpecifiedType.cpp
@@ -80,6 +80,10 @@ FullySpecifiedType FullySpecifiedType::qualifiedType() const
ty.setExtern(false);
ty.setMutable(false);
ty.setTypedef(false);
+
+ ty.setInline(false);
+ ty.setVirtual(false);
+ ty.setExplicit(false);
return ty;
}
@@ -209,4 +213,19 @@ FullySpecifiedType FullySpecifiedType::simplified() const
return *this;
}
+void FullySpecifiedType::copySpecifiers(const FullySpecifiedType &type)
+{
+ // class storage specifiers
+ f._isFriend = type.f._isFriend;
+ f._isRegister = type.f._isRegister;
+ f._isStatic = type.f._isStatic;
+ f._isExtern = type.f._isExtern;
+ f._isMutable = type.f._isMutable;
+ f._isTypedef = type.f._isTypedef;
+
+ // function specifiers
+ f._isInline = type.f._isInline;
+ f._isVirtual = type.f._isVirtual;
+ f._isExplicit = type.f._isExplicit;
+}
diff --git a/src/shared/cplusplus/FullySpecifiedType.h b/src/shared/cplusplus/FullySpecifiedType.h
index 6c9f83d914..5aea04dca1 100644
--- a/src/shared/cplusplus/FullySpecifiedType.h
+++ b/src/shared/cplusplus/FullySpecifiedType.h
@@ -121,6 +121,8 @@ public:
FullySpecifiedType simplified() const;
+ void copySpecifiers(const FullySpecifiedType &type);
+
private:
Type *_type;
struct Flags {