summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2010-12-03 15:40:08 +0100
committerChristian Kamm <christian.d.kamm@nokia.com>2011-01-04 15:58:21 +0100
commit633c254986477e1bf4259d7b316a47eb0d1fa806 (patch)
treec7898ef0112cde050a8ddc523f6033478f766b2e /src/shared/cplusplus
parent5f50a6ae343574bc247eb631c0a2314273f50add (diff)
downloadqt-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.cpp24
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) {