summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-09-25 13:45:13 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2009-09-25 14:20:02 +0200
commite9a5ab1b0d497665c0673b1b1e54dcc386fb9cc5 (patch)
treed2a8a1947dc5dbe21801a129d5d221ede2fbe3cb /src/shared/cplusplus
parent54d60a77aef294ca0a6c0fc96bcb592db04d6e12 (diff)
downloadqt-creator-e9a5ab1b0d497665c0673b1b1e54dcc386fb9cc5.tar.gz
Added the `isVirtual' attribute to Function.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp1
-rw-r--r--src/shared/cplusplus/CheckDeclarator.cpp3
-rw-r--r--src/shared/cplusplus/Symbols.cpp6
-rw-r--r--src/shared/cplusplus/Symbols.h4
4 files changed, 14 insertions, 0 deletions
diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp
index 65d66be020..69e645b1be 100644
--- a/src/shared/cplusplus/CheckDeclaration.cpp
+++ b/src/shared/cplusplus/CheckDeclaration.cpp
@@ -316,6 +316,7 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
translationUnit()->error(ast->ctor_initializer->firstToken(),
"only constructors take base initializers");
}
+ accept(ast->ctor_initializer);
}
const int previousVisibility = semantic()->switchVisibility(Symbol::Public);
diff --git a/src/shared/cplusplus/CheckDeclarator.cpp b/src/shared/cplusplus/CheckDeclarator.cpp
index 95181e4c7a..5186055bca 100644
--- a/src/shared/cplusplus/CheckDeclarator.cpp
+++ b/src/shared/cplusplus/CheckDeclarator.cpp
@@ -168,6 +168,9 @@ bool CheckDeclarator::visit(FunctionDeclaratorAST *ast)
ast->symbol = fun;
fun->setReturnType(_fullySpecifiedType);
+ if (_fullySpecifiedType.isVirtual())
+ fun->setVirtual(true);
+
if (ast->parameters) {
DeclarationListAST *parameter_declarations = ast->parameters->parameter_declarations;
for (DeclarationListAST *decl = parameter_declarations; decl; decl = decl->next) {
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
index 27b33e6217..6e9980832f 100644
--- a/src/shared/cplusplus/Symbols.cpp
+++ b/src/shared/cplusplus/Symbols.cpp
@@ -259,6 +259,12 @@ bool Function::hasArguments() const
(argumentCount() == 1 && argumentAt(0)->type()->isVoidType()));
}
+bool Function::isVirtual() const
+{ return f._isVirtual; }
+
+void Function::setVirtual(bool isVirtual)
+{ f._isVirtual = isVirtual; }
+
bool Function::isVariadic() const
{ return f._isVariadic; }
diff --git a/src/shared/cplusplus/Symbols.h b/src/shared/cplusplus/Symbols.h
index a911c21ab9..1454e01224 100644
--- a/src/shared/cplusplus/Symbols.h
+++ b/src/shared/cplusplus/Symbols.h
@@ -307,6 +307,9 @@ public:
/** Convenience function that returns whether the function receives any arguments. */
bool hasArguments() const;
+ bool isVirtual() const;
+ void setVirtual(bool isVirtual);
+
bool isVariadic() const;
void setVariadic(bool isVariadic);
@@ -348,6 +351,7 @@ private:
TemplateParameters *_templateParameters;
FullySpecifiedType _returnType;
struct Flags {
+ unsigned _isVirtual: 1;
unsigned _isVariadic: 1;
unsigned _isPureVirtual: 1;
unsigned _isConst: 1;