diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-09-25 13:45:13 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-09-25 14:20:02 +0200 |
commit | e9a5ab1b0d497665c0673b1b1e54dcc386fb9cc5 (patch) | |
tree | d2a8a1947dc5dbe21801a129d5d221ede2fbe3cb /src/shared/cplusplus | |
parent | 54d60a77aef294ca0a6c0fc96bcb592db04d6e12 (diff) | |
download | qt-creator-e9a5ab1b0d497665c0673b1b1e54dcc386fb9cc5.tar.gz |
Added the `isVirtual' attribute to Function.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/CheckDeclaration.cpp | 1 | ||||
-rw-r--r-- | src/shared/cplusplus/CheckDeclarator.cpp | 3 | ||||
-rw-r--r-- | src/shared/cplusplus/Symbols.cpp | 6 | ||||
-rw-r--r-- | src/shared/cplusplus/Symbols.h | 4 |
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; |