diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2010-12-03 15:40:08 +0100 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-01-04 15:58:21 +0100 |
commit | 633c254986477e1bf4259d7b316a47eb0d1fa806 (patch) | |
tree | c7898ef0112cde050a8ddc523f6033478f766b2e /src/shared/cplusplus | |
parent | 5f50a6ae343574bc247eb631c0a2314273f50add (diff) | |
download | qt-creator-633c254986477e1bf4259d7b316a47eb0d1fa806.tar.gz |
C++: Fix bind of Q_INVOKABLE functions.
Reviewed-by: Roberto Raggi
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/Bind.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/shared/cplusplus/Bind.cpp b/src/shared/cplusplus/Bind.cpp index 307ad0ef66..e887240b3b 100644 --- a/src/shared/cplusplus/Bind.cpp +++ b/src/shared/cplusplus/Bind.cpp @@ -1722,10 +1722,25 @@ bool Bind::visit(BracedInitializerAST *ast) return false; } +static int methodKeyForInvokableToken(int kind) +{ + if (kind == T_Q_SIGNAL) + return Function::SignalMethod; + else if (kind == T_Q_SLOT) + return Function::SlotMethod; + else if (kind == T_Q_INVOKABLE) + return Function::InvokableMethod; + + return Function::NormalMethod; +} // DeclarationAST bool Bind::visit(SimpleDeclarationAST *ast) { + int methodKey = _methodKey; + if (ast->qt_invokable_token) + methodKey = methodKeyForInvokableToken(tokenKind(ast->qt_invokable_token)); + // unsigned qt_invokable_token = ast->qt_invokable_token; FullySpecifiedType type; for (SpecifierListAST *it = ast->decl_specifier_list; it; it = it->next) { @@ -1782,7 +1797,7 @@ bool Bind::visit(SimpleDeclarationAST *ast) decl->setVisibility(_visibility); if (Function *funTy = decl->type()->asFunctionType()) { - funTy->setMethodKey(_methodKey); + funTy->setMethodKey(methodKey); if (funTy->isVirtual() && it->value->equal_token) funTy->setPureVirtual(true); @@ -1921,7 +1936,10 @@ bool Bind::visit(ExceptionDeclarationAST *ast) bool Bind::visit(FunctionDefinitionAST *ast) { - // unsigned qt_invokable_token = ast->qt_invokable_token; + int methodKey = _methodKey; + if (ast->qt_invokable_token) + methodKey = methodKeyForInvokableToken(tokenKind(ast->qt_invokable_token)); + FullySpecifiedType declSpecifiers; for (SpecifierListAST *it = ast->decl_specifier_list; it; it = it->next) { declSpecifiers = this->specifier(it->value, declSpecifiers); @@ -1937,7 +1955,7 @@ bool Bind::visit(FunctionDefinitionAST *ast) if (_scope->isClass()) { fun->setVisibility(_visibility); - fun->setMethodKey(_methodKey); + fun->setMethodKey(methodKey); } if (declaratorId && declaratorId->name) { |