diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-06-18 15:06:16 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-22 00:13:28 +0200 |
commit | fa457e593deca9fcffe2d6ec6ca0aa40d9fa7b76 (patch) | |
tree | a8e53434055544fcf3ebeb9ba5982b3d7f72cf38 /src/qml/qml/v8 | |
parent | 57e3325affbe8bbb8edcc2c6d072db28aee46438 (diff) |
Support enum return types in Q_INVOKABLE functions.
Handle enums correctly when used as the return type of a Q_INVOKABLE
function.
Task-number: QTBUG-23543
Change-Id: I14a506ffee08f5ba6aa0fdf27d6104a3ae5c48b3
Reviewed-by: Chris Adams <christopher.adams@nokia.com>
Diffstat (limited to 'src/qml/qml/v8')
-rw-r--r-- | src/qml/qml/v8/qv8qobjectwrapper.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp index 600d98db5a..4128358e2f 100644 --- a/src/qml/qml/v8/qv8qobjectwrapper.cpp +++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp @@ -1762,11 +1762,21 @@ static const QQmlPropertyData * RelatedMethod(QObject *object, static v8::Handle<v8::Value> CallPrecise(QObject *object, const QQmlPropertyData &data, QV8Engine *engine, CallArgs &callArgs) { + QByteArray unknownTypeError; + + int returnType = QQmlPropertyCache::methodReturnType(object, data, &unknownTypeError); + + if (returnType == QMetaType::UnknownType) { + QString typeName = QString::fromLatin1(unknownTypeError); + QString error = QString::fromLatin1("Unknown method return type: %1").arg(typeName); + v8::ThrowException(v8::Exception::Error(engine->toString(error))); + return v8::Handle<v8::Value>(); + } + if (data.hasArguments()) { int *args = 0; QVarLengthArray<int, 9> dummy; - QByteArray unknownTypeError; args = QQmlPropertyCache::methodParameterTypes(object, data.coreIndex, dummy, &unknownTypeError); @@ -1784,11 +1794,11 @@ static v8::Handle<v8::Value> CallPrecise(QObject *object, const QQmlPropertyData return v8::Handle<v8::Value>(); } - return CallMethod(object, data.coreIndex, data.propType, args[0], args + 1, engine, callArgs); + return CallMethod(object, data.coreIndex, returnType, args[0], args + 1, engine, callArgs); } else { - return CallMethod(object, data.coreIndex, data.propType, 0, 0, engine, callArgs); + return CallMethod(object, data.coreIndex, returnType, 0, 0, engine, callArgs); } } |