aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8
diff options
context:
space:
mode:
authorMatthew Vogt <matthew.vogt@nokia.com>2012-06-18 15:06:16 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-22 00:13:28 +0200
commitfa457e593deca9fcffe2d6ec6ca0aa40d9fa7b76 (patch)
treea8e53434055544fcf3ebeb9ba5982b3d7f72cf38 /src/qml/qml/v8
parent57e3325affbe8bbb8edcc2c6d072db28aee46438 (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.cpp16
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);
}
}