Check for the wrong usage of ctor initializers.

This commit is contained in:
Roberto Raggi
2008-12-03 11:59:11 +01:00
parent 3d9945238d
commit e689a17395

View File

@@ -236,13 +236,21 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
_scope->enterSymbol(fun); _scope->enterSymbol(fun);
if (ast->ctor_initializer && (ty.isValid() || (fun->identity() && ! fun->identity()->isNameId()))) { if (ast->ctor_initializer) {
translationUnit()->error(ast->ctor_initializer->firstToken(), bool looksLikeCtor = false;
"only constructors take base initializers"); if (ty.isValid() || ! fun->identity())
looksLikeCtor = false;
else if (fun->identity()->isNameId() || fun->identity()->isTemplateNameId())
looksLikeCtor = true;
if (! looksLikeCtor) {
translationUnit()->error(ast->ctor_initializer->firstToken(),
"only constructors take base initializers");
}
} }
int previousVisibility = semantic()->switchVisibility(Symbol::Public); const int previousVisibility = semantic()->switchVisibility(Symbol::Public);
int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod); const int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
semantic()->check(ast->function_body, fun->members()); semantic()->check(ast->function_body, fun->members());