diff options
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; |