aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8
diff options
context:
space:
mode:
authorMatthew Vogt <matthew.vogt@nokia.com>2012-08-21 12:44:42 +1000
committerQt by Nokia <qt-info@nokia.com>2012-08-23 08:16:24 +0200
commit9ee6bb0e14d968647350683eafbe80eed7a27058 (patch)
tree6218951a0de9e1f47ea2f76a2673d26bac85097f /src/qml/qml/v8
parent540092608b26c469d4905d3c673374542cc32940 (diff)
Increase test coverage for V4
Add test for integer operations, Math functions and exercise some previously uncovered code. Change-Id: Idff3f3672498775ac117ca98bf34b0fe96cbf760 Reviewed-by: Michael Brasser <michael.brasser@nokia.com>
Diffstat (limited to 'src/qml/qml/v8')
-rw-r--r--src/qml/qml/v8/qv8engine.cpp2
-rw-r--r--src/qml/qml/v8/qv8engine_p.h12
-rw-r--r--src/qml/qml/v8/qv8valuetypewrapper.cpp6
-rw-r--r--src/qml/qml/v8/qv8valuetypewrapper_p.h2
4 files changed, 22 insertions, 0 deletions
diff --git a/src/qml/qml/v8/qv8engine.cpp b/src/qml/qml/v8/qv8engine.cpp
index 9f37c2dcaa..cbb9053de7 100644
--- a/src/qml/qml/v8/qv8engine.cpp
+++ b/src/qml/qml/v8/qv8engine.cpp
@@ -1289,6 +1289,8 @@ QVariant QV8Engine::variantFromJS(v8::Handle<v8::Value> value,
return variantValue(value);
if (isQObject(value))
return qVariantFromValue(qtObjectFromJS(value));
+ if (isValueType(value))
+ return toValueType(value);
return variantMapFromJS(value->ToObject(), visitedObjects);
}
diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h
index 28acd15ff8..09ff7f4b2f 100644
--- a/src/qml/qml/v8/qv8engine_p.h
+++ b/src/qml/qml/v8/qv8engine_p.h
@@ -332,6 +332,8 @@ public:
// Create a new value type object
inline v8::Handle<v8::Value> newValueType(QObject *, int coreIndex, QQmlValueType *);
inline v8::Handle<v8::Value> newValueType(const QVariant &, QQmlValueType *);
+ inline bool isValueType(v8::Handle<v8::Value>) const;
+ inline QVariant toValueType(v8::Handle<v8::Value> obj);
// Create a new sequence type object
inline v8::Handle<v8::Value> newSequence(int sequenceType, QObject *, int coreIndex, bool *succeeded);
@@ -599,6 +601,16 @@ v8::Handle<v8::Value> QV8Engine::newValueType(const QVariant &value, QQmlValueTy
return m_valueTypeWrapper.newValueType(value, type);
}
+bool QV8Engine::isValueType(v8::Handle<v8::Value> obj) const
+{
+ return obj->IsObject()?m_valueTypeWrapper.isValueType(v8::Handle<v8::Object>::Cast(obj)):false;
+}
+
+QVariant QV8Engine::toValueType(v8::Handle<v8::Value> obj)
+{
+ return obj->IsObject()?m_valueTypeWrapper.toVariant(v8::Handle<v8::Object>::Cast(obj)):QVariant();
+}
+
v8::Handle<v8::Value> QV8Engine::newSequence(int sequenceType, QObject *object, int property, bool *succeeded)
{
return m_sequenceWrapper.newSequence(sequenceType, object, property, succeeded);
diff --git a/src/qml/qml/v8/qv8valuetypewrapper.cpp b/src/qml/qml/v8/qv8valuetypewrapper.cpp
index 6a0521b8be..0408df4b00 100644
--- a/src/qml/qml/v8/qv8valuetypewrapper.cpp
+++ b/src/qml/qml/v8/qv8valuetypewrapper.cpp
@@ -181,6 +181,12 @@ static bool readReferenceValue(QV8ValueTypeReferenceResource *reference)
return true;
}
+bool QV8ValueTypeWrapper::isValueType(v8::Handle<v8::Object> obj) const
+{
+ QV8ValueTypeResource *r = v8_resource_cast<QV8ValueTypeResource>(obj);
+ return (r != 0);
+}
+
QVariant QV8ValueTypeWrapper::toVariant(v8::Handle<v8::Object> obj, int typeHint, bool *succeeded)
{
// NOTE: obj must not be an external resource object (ie, wrapper object)
diff --git a/src/qml/qml/v8/qv8valuetypewrapper_p.h b/src/qml/qml/v8/qv8valuetypewrapper_p.h
index f3dd246116..849ca4112e 100644
--- a/src/qml/qml/v8/qv8valuetypewrapper_p.h
+++ b/src/qml/qml/v8/qv8valuetypewrapper_p.h
@@ -76,6 +76,8 @@ public:
v8::Local<v8::Object> newValueType(QObject *, int, QQmlValueType *);
v8::Local<v8::Object> newValueType(const QVariant &, QQmlValueType *);
+ bool isValueType(v8::Handle<v8::Object>) const;
+
QVariant toVariant(v8::Handle<v8::Object>, int typeHint, bool *succeeded);
QVariant toVariant(v8::Handle<v8::Object>);
QVariant toVariant(QV8ObjectResource *);