Commit 04e7c491 authored by Roberto Raggi's avatar Roberto Raggi

Propagate the decl specifiers.

parent 9061a828
...@@ -110,8 +110,9 @@ void Bind::setDeclSpecifiers(Symbol *symbol, const FullySpecifiedType &declSpeci ...@@ -110,8 +110,9 @@ void Bind::setDeclSpecifiers(Symbol *symbol, const FullySpecifiedType &declSpeci
symbol->setStorage(storage); symbol->setStorage(storage);
if (Function *funTy = symbol->asFunction()) { if (Function *funTy = symbol->asFunction()) {
if (declSpecifiers.isVirtual()) if (declSpecifiers.isVirtual()) {
funTy->setVirtual(true); funTy->setVirtual(true);
}
} }
if (declSpecifiers.isDeprecated()) if (declSpecifiers.isDeprecated())
...@@ -1723,6 +1724,7 @@ bool Bind::visit(SimpleDeclarationAST *ast) ...@@ -1723,6 +1724,7 @@ bool Bind::visit(SimpleDeclarationAST *ast)
setDeclSpecifiers(decl, type); setDeclSpecifiers(decl, type);
if (Function *fun = decl->type()->asFunctionType()) { if (Function *fun = decl->type()->asFunctionType()) {
setDeclSpecifiers(fun, type);
if (declaratorId && declaratorId->name) if (declaratorId && declaratorId->name)
fun->setName(declaratorId->name->name); // update the function name fun->setName(declaratorId->name->name); // update the function name
} }
...@@ -1862,18 +1864,18 @@ bool Bind::visit(ExceptionDeclarationAST *ast) ...@@ -1862,18 +1864,18 @@ bool Bind::visit(ExceptionDeclarationAST *ast)
bool Bind::visit(FunctionDefinitionAST *ast) bool Bind::visit(FunctionDefinitionAST *ast)
{ {
// unsigned qt_invokable_token = ast->qt_invokable_token; // unsigned qt_invokable_token = ast->qt_invokable_token;
FullySpecifiedType type; FullySpecifiedType declSpecifiers;
for (SpecifierListAST *it = ast->decl_specifier_list; it; it = it->next) { for (SpecifierListAST *it = ast->decl_specifier_list; it; it = it->next) {
type = this->specifier(it->value, type); declSpecifiers = this->specifier(it->value, declSpecifiers);
} }
DeclaratorIdAST *declaratorId = 0; DeclaratorIdAST *declaratorId = 0;
type = this->declarator(ast->declarator, type, &declaratorId); FullySpecifiedType type = this->declarator(ast->declarator, declSpecifiers.qualifiedType(), &declaratorId);
Function *fun = type->asFunctionType(); Function *fun = type->asFunctionType();
ast->symbol = fun; ast->symbol = fun;
if (fun) { if (fun) {
setDeclSpecifiers(fun, type); setDeclSpecifiers(fun, declSpecifiers);
if (_scope->isClass()) { if (_scope->isClass()) {
fun->setVisibility(_visibility); fun->setVisibility(_visibility);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment