From 9924a637ccf63a6a002080497a25890edafe492e Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 15 Nov 2011 10:14:23 +0100 Subject: moc: fix Q_INVOKABLE returning references The moc generated code would not compile otherwise Keep Moc::parseFunction and Moc::parseMaybeFunction in sync (the first is used for signals and slots, and the second for normal functions such as Q_INVOKABLE) Last patch that introduced function pointer updated parseFunction but not parseMaybeFunction When a slot return a reference, moc generate code that make the MetaObject system think it is a void, so qt_metacall and invokeMethod do not mess with the return value. But when we want to take the function signature, in the IndexOfMethod call, we need to have the exact return type. Change-Id: I4661218d7ce367ad3934e73929e7d04f0a6dbc09 Reviewed-by: Bradley T. Hughes --- src/tools/moc/moc.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/tools/moc/moc.cpp') diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp index 6086eb0ddb..e408b7c8ac 100644 --- a/src/tools/moc/moc.cpp +++ b/src/tools/moc/moc.cpp @@ -503,8 +503,11 @@ bool Moc::parseMaybeFunction(const ClassDef *cdef, FunctionDef *def) } // we don't support references as return types, it's too dangerous - if (def->type.referenceType == Type::Reference) + if (def->type.referenceType == Type::Reference) { + QByteArray rawName = def->type.rawName; def->type = Type("void"); + def->type.rawName = rawName; + } def->normalizedType = normalizeType(def->type.name); -- cgit v1.2.3