Added support for override/final and enum classes

Change-Id: I6dfe9dd606781046ff5a1ed61315741d2f332cb8
Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
This commit is contained in:
Sergey Shambir
2012-06-25 23:49:17 +04:00
committed by Christian Kamm
parent 656ecfbf59
commit 95c5ab2746
18 changed files with 201 additions and 7 deletions

View File

@@ -2660,6 +2660,20 @@ bool Bind::visit(TemplateIdAST *ast)
bool Bind::visit(SimpleSpecifierAST *ast)
{
switch (tokenKind(ast->specifier_token)) {
case T_IDENTIFIER: {
const Identifier *id = tokenAt(ast->specifier_token).identifier;
if (id->isEqualTo(control()->cpp11Override())) {
if (_type.isOverride())
translationUnit()->error(ast->specifier_token, "duplicate `override'");
_type.setOverride(true);
}
else if (id->isEqualTo(control()->cpp11Final())) {
if (_type.isFinal())
translationUnit()->error(ast->specifier_token, "duplicate `final'");
_type.setFinal(true);
}
}
break;
case T_CONST:
if (_type.isConst())
translationUnit()->error(ast->specifier_token, "duplicate `%s'", spell(ast->specifier_token));
@@ -3106,6 +3120,8 @@ bool Bind::visit(FunctionDeclaratorAST *ast)
// propagate the cv-qualifiers
fun->setConst(type.isConst());
fun->setVolatile(type.isVolatile());
fun->setOverride(type.isOverride());
fun->setFinal(type.isFinal());
this->exceptionSpecification(ast->exception_specification, type);
if (ast->as_cpp_initializer != 0) {