Fold the qv4jsonwrapper into the json object
authorLars Knoll <lars.knoll@digia.com>
Mon, 3 Jun 2013 19:28:07 +0000 (21:28 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Mon, 3 Jun 2013 21:15:36 +0000 (23:15 +0200)
Removes the need for an extra file, and cleans up the QV8Engine
a bit more.

Change-Id: I25e4c9252357a098041ecb188960777094c6b959
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/qml/qml/v4/qv4jsonobject.cpp
src/qml/qml/v4/qv4jsonobject_p.h
src/qml/qml/v4/qv4managed_p.h
src/qml/qml/v8/qv4jsonwrapper.cpp [deleted file]
src/qml/qml/v8/qv4jsonwrapper_p.h [deleted file]
src/qml/qml/v8/qv8engine.cpp
src/qml/qml/v8/qv8engine_p.h
src/qml/qml/v8/qv8qobjectwrapper.cpp
src/qml/qml/v8/v8.pri

index b575609..cdc5ae7 100644 (file)
@@ -928,3 +928,121 @@ Value JsonObject::method_stringify(SimpleCallContext *ctx)
         return Value::undefinedValue();
     return Value::fromString(ctx, result);
 }
+
+
+
+QV4::Value JsonObject::fromJsonValue(ExecutionEngine *engine, const QJsonValue &value)
+{
+    if (value.isString())
+        return Value::fromString(engine->current, value.toString());
+    else if (value.isDouble())
+        return Value::fromDouble(value.toDouble());
+    else if (value.isBool())
+        return Value::fromBoolean(value.toBool());
+    else if (value.isArray())
+        return fromJsonArray(engine, value.toArray());
+    else if (value.isObject())
+        return fromJsonObject(engine, value.toObject());
+    else if (value.isNull())
+        return Value::nullValue();
+    else
+        return Value::undefinedValue();
+}
+
+QJsonValue JsonObject::toJsonValue(const QV4::Value &value,
+                                       V4ObjectSet &visitedObjects)
+{
+    if (String *s = value.asString())
+        return QJsonValue(s->toQString());
+    else if (value.isNumber())
+        return QJsonValue(value.toNumber());
+    else if (value.isBoolean())
+        return QJsonValue((bool)value.booleanValue());
+    else if (ArrayObject *a = value.asArrayObject())
+        return toJsonArray(a, visitedObjects);
+    else if (Object *o = value.asObject())
+        return toJsonObject(o, visitedObjects);
+    else if (value.isNull())
+        return QJsonValue(QJsonValue::Null);
+    else
+        return QJsonValue(QJsonValue::Undefined);
+}
+
+QV4::Value JsonObject::fromJsonObject(ExecutionEngine *engine, const QJsonObject &object)
+{
+    Object *o = engine->newObject();
+    for (QJsonObject::const_iterator it = object.begin(); it != object.end(); ++it)
+        o->put(engine->current, engine->newString(it.key()), fromJsonValue(engine, it.value()));
+    return Value::fromObject(o);
+}
+
+QJsonObject JsonObject::toJsonObject(QV4::Object *o, V4ObjectSet &visitedObjects)
+{
+    QJsonObject result;
+    if (!o || o->asFunctionObject())
+        return result;
+
+    if (visitedObjects.contains(o)) {
+        // Avoid recursion.
+        // For compatibility with QVariant{List,Map} conversion, we return an
+        // empty object (and no error is thrown).
+        return result;
+    }
+
+    visitedObjects.insert(o);
+
+    ObjectIterator it(o, ObjectIterator::EnumerableOnly);
+    while (1) {
+        PropertyAttributes attributes;
+        String *name;
+        uint idx;
+        Property *p = it.next(&name, &idx, &attributes);
+        if (!p)
+            break;
+
+        Value v = o->getValue(o->engine()->current, p, attributes);
+        QString key = name ? name->toQString() : QString::number(idx);
+        result.insert(key, toJsonValue(v, visitedObjects));
+    }
+
+    visitedObjects.remove(o);
+
+    return result;
+}
+
+QV4::Value JsonObject::fromJsonArray(ExecutionEngine *engine, const QJsonArray &array)
+{
+    int size = array.size();
+    ArrayObject *a = engine->newArrayObject();
+    a->arrayReserve(size);
+    for (int i = 0; i < size; i++)
+        a->arrayData[i].value = fromJsonValue(engine, array.at(i));
+    a->setArrayLengthUnchecked(size);
+    return Value::fromObject(a);
+}
+
+QJsonArray JsonObject::toJsonArray(ArrayObject *a, V4ObjectSet &visitedObjects)
+{
+    QJsonArray result;
+    if (!a)
+        return result;
+
+    if (visitedObjects.contains(a)) {
+        // Avoid recursion.
+        // For compatibility with QVariant{List,Map} conversion, we return an
+        // empty array (and no error is thrown).
+        return result;
+    }
+
+    visitedObjects.insert(a);
+
+    quint32 length = a->arrayLength();
+    for (quint32 i = 0; i < length; ++i) {
+        Value v = a->getIndexed(i);
+        result.append(toJsonValue(v, visitedObjects));
+    }
+
+    visitedObjects.remove(a);
+
+    return result;
+}
index 2a923fb..4225f4c 100644 (file)
 #define QV4SJONOBJECTS_H
 
 #include "qv4object_p.h"
+#include <qjsonarray.h>
+#include <qjsonobject.h>
+#include <qjsonvalue.h>
 
 QT_BEGIN_NAMESPACE
 
 namespace QV4 {
 
 struct JsonObject : Object {
+private:
+    typedef QSet<QV4::Object *> V4ObjectSet;
+public:
     JsonObject(ExecutionContext *context);
 
     static Value method_parse(SimpleCallContext *ctx);
     static Value method_stringify(SimpleCallContext *ctx);
 
+    static QV4::Value fromJsonValue(ExecutionEngine *engine, const QJsonValue &value);
+    static QV4::Value fromJsonObject(ExecutionEngine *engine, const QJsonObject &object);
+    static QV4::Value fromJsonArray(ExecutionEngine *engine, const QJsonArray &array);
+
+    static inline QJsonValue toJsonValue(const QV4::Value &value)
+    { V4ObjectSet visitedObjects; return toJsonValue(value, visitedObjects); }
+    static inline QJsonObject toJsonObject(QV4::Object *o)
+    { V4ObjectSet visitedObjects; return toJsonObject(o, visitedObjects); }
+    static inline QJsonArray toJsonArray(QV4::ArrayObject *a)
+    { V4ObjectSet visitedObjects; return toJsonArray(a, visitedObjects); }
+
+private:
+    static QJsonValue toJsonValue(const QV4::Value &value, V4ObjectSet &visitedObjects);
+    static QJsonObject toJsonObject(QV4::Object *o, V4ObjectSet &visitedObjects);
+    static QJsonArray toJsonArray(QV4::ArrayObject *a, V4ObjectSet &visitedObjects);
 };
 
 }
index 966410b..81b2260 100644 (file)
@@ -66,7 +66,6 @@ struct DateObject;
 struct FunctionObject;
 struct ErrorObject;
 struct ArgumentsObject;
-struct JSONObject;
 struct Managed;
 struct Value;
 struct Lookup;
@@ -204,8 +203,6 @@ public:
     DateObject *asDateObject() { return type == Type_DateObject ? reinterpret_cast<DateObject *>(this) : 0; }
     ErrorObject *asErrorObject() { return type == Type_ErrorObject ? reinterpret_cast<ErrorObject *>(this) : 0; }
     ArgumentsObject *asArgumentsObject() { return type == Type_ArgumentsObject ? reinterpret_cast<ArgumentsObject *>(this) : 0; }
-    JSONObject *asJSONObject() { return type == Type_JSONObject ? reinterpret_cast<JSONObject *>(this) : 0; }
-
 
     bool isListType() const { return type == Type_QmlSequence; }
 
diff --git a/src/qml/qml/v8/qv4jsonwrapper.cpp b/src/qml/qml/v8/qv4jsonwrapper.cpp
deleted file mode 100644 (file)
index 5f0f285..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.  For licensing terms and
-** conditions see http://qt.digia.com/licensing.  For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights.  These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qv4jsonwrapper_p.h"
-#include "private/qv4engine_p.h"
-#include "private/qv4object_p.h"
-#include "private/qv4objectiterator_p.h"
-
-QT_BEGIN_NAMESPACE
-
-using namespace QV4;
-
-QV4JsonWrapper::QV4JsonWrapper()
-: m_engine(0)
-{
-}
-
-QV4JsonWrapper::~QV4JsonWrapper()
-{
-}
-
-void QV4JsonWrapper::init(QV4::ExecutionEngine *engine)
-{
-    m_engine = engine;
-}
-
-void QV4JsonWrapper::destroy()
-{
-}
-
-QV4::Value QV4JsonWrapper::fromJsonValue(const QJsonValue &value)
-{
-    if (value.isString())
-        return Value::fromString(m_engine->current, value.toString());
-    else if (value.isDouble())
-        return Value::fromDouble(value.toDouble());
-    else if (value.isBool())
-        return Value::fromBoolean(value.toBool());
-    else if (value.isArray())
-        return fromJsonArray(value.toArray());
-    else if (value.isObject())
-        return fromJsonObject(value.toObject());
-    else if (value.isNull())
-        return Value::nullValue();
-    else
-        return Value::undefinedValue();
-}
-
-QJsonValue QV4JsonWrapper::toJsonValue(const QV4::Value &value,
-                                       V4ObjectSet &visitedObjects)
-{
-    if (String *s = value.asString())
-        return QJsonValue(s->toQString());
-    else if (value.isNumber())
-        return QJsonValue(value.toNumber());
-    else if (value.isBoolean())
-        return QJsonValue((bool)value.booleanValue());
-    else if (ArrayObject *a = value.asArrayObject())
-        return toJsonArray(a, visitedObjects);
-    else if (Object *o = value.asObject())
-        return toJsonObject(o, visitedObjects);
-    else if (value.isNull())
-        return QJsonValue(QJsonValue::Null);
-    else
-        return QJsonValue(QJsonValue::Undefined);
-}
-
-QV4::Value QV4JsonWrapper::fromJsonObject(const QJsonObject &object)
-{
-    Object *o = m_engine->newObject();
-    for (QJsonObject::const_iterator it = object.begin(); it != object.end(); ++it)
-        o->put(m_engine->current, m_engine->newString(it.key()), fromJsonValue(it.value()));
-    return Value::fromObject(o);
-}
-
-QJsonObject QV4JsonWrapper::toJsonObject(QV4::Object *o, V4ObjectSet &visitedObjects)
-{
-    QJsonObject result;
-    if (!o || o->asFunctionObject())
-        return result;
-
-    if (visitedObjects.contains(o)) {
-        // Avoid recursion.
-        // For compatibility with QVariant{List,Map} conversion, we return an
-        // empty object (and no error is thrown).
-        return result;
-    }
-
-    visitedObjects.insert(o);
-
-    ObjectIterator it(o, ObjectIterator::EnumerableOnly);
-    while (1) {
-        PropertyAttributes attributes;
-        String *name;
-        uint idx;
-        Property *p = it.next(&name, &idx, &attributes);
-        if (!p)
-            break;
-
-        Value v = o->getValue(m_engine->current, p, attributes);
-        QString key = name ? name->toQString() : QString::number(idx);
-        result.insert(key, toJsonValue(v, visitedObjects));
-    }
-
-    visitedObjects.remove(o);
-
-    return result;
-}
-
-QV4::Value QV4JsonWrapper::fromJsonArray(const QJsonArray &array)
-{
-    int size = array.size();
-    ArrayObject *a = m_engine->newArrayObject();
-    a->arrayReserve(size);
-    for (int i = 0; i < size; i++)
-        a->arrayData[i].value = fromJsonValue(array.at(i));
-    a->setArrayLengthUnchecked(size);
-    return Value::fromObject(a);
-}
-
-QJsonArray QV4JsonWrapper::toJsonArray(ArrayObject *a, V4ObjectSet &visitedObjects)
-{
-    QJsonArray result;
-    if (!a)
-        return result;
-
-    if (visitedObjects.contains(a)) {
-        // Avoid recursion.
-        // For compatibility with QVariant{List,Map} conversion, we return an
-        // empty array (and no error is thrown).
-        return result;
-    }
-
-    visitedObjects.insert(a);
-
-    quint32 length = a->arrayLength();
-    for (quint32 i = 0; i < length; ++i) {
-        Value v = a->getIndexed(m_engine->current, i);
-        result.append(toJsonValue(v, visitedObjects));
-    }
-
-    visitedObjects.remove(a);
-
-    return result;
-}
-
-QT_END_NAMESPACE
diff --git a/src/qml/qml/v8/qv4jsonwrapper_p.h b/src/qml/qml/v8/qv4jsonwrapper_p.h
deleted file mode 100644 (file)
index 7fe24c0..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the QtQml module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.  For licensing terms and
-** conditions see http://qt.digia.com/licensing.  For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights.  These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QV8JSONWRAPPER_P_H
-#define QV8JSONWRAPPER_P_H
-
-//
-//  W A R N I N G
-//  -------------
-//
-// This file is not part of the Qt API.  It exists purely as an
-// implementation detail.  This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qglobal.h>
-#include <QtCore/qset.h>
-
-#include <QtCore/qjsonarray.h>
-#include <QtCore/qjsonobject.h>
-#include <QtCore/qjsonvalue.h>
-
-QT_BEGIN_NAMESPACE
-
-namespace QV4 {
-struct Value;
-struct Object;
-struct ArrayObject;
-struct ExecutionEngine;
-}
-
-class QV4JsonWrapper
-{
-    typedef QSet<QV4::Object *> V4ObjectSet;
-public:
-    QV4JsonWrapper();
-    ~QV4JsonWrapper();
-
-    void init(QV4::ExecutionEngine *);
-    void destroy();
-
-    QV4::Value fromJsonValue(const QJsonValue &value);
-    inline QJsonValue toJsonValue(const QV4::Value &value)
-    { V4ObjectSet visitedObjects; return toJsonValue(value, visitedObjects); }
-
-    QV4::Value fromJsonObject(const QJsonObject &object);
-    inline QJsonObject toJsonObject(QV4::Object *o)
-    { V4ObjectSet visitedObjects; return toJsonObject(o, visitedObjects); }
-
-    QV4::Value fromJsonArray(const QJsonArray &array);
-    inline QJsonArray toJsonArray(QV4::ArrayObject *a)
-    { V4ObjectSet visitedObjects; return toJsonArray(a, visitedObjects); }
-
-private:
-    QJsonValue toJsonValue(const QV4::Value &value, V4ObjectSet &visitedObjects);
-    QJsonObject toJsonObject(QV4::Object *o, V4ObjectSet &visitedObjects);
-    QJsonArray toJsonArray(QV4::ArrayObject *a, V4ObjectSet &visitedObjects);
-
-    QV4::ExecutionEngine *m_engine;
-};
-
-QT_END_NAMESPACE
-
-#endif // QV8JSONWRAPPER_P_H
-
index b5d42f6..4af730f 100644 (file)
@@ -76,6 +76,7 @@
 #include <private/qv4variantobject_p.h>
 #include <private/qv4script_p.h>
 #include <private/qv4include_p.h>
+#include <private/qv4jsonobject_p.h>
 
 Q_DECLARE_METATYPE(QList<int>)
 
@@ -100,8 +101,6 @@ QV8Engine::QV8Engine(QJSEngine* qq)
     m_v4Engine->publicEngine = q;
 
     m_qobjectWrapper.init(this);
-    m_jsonWrapper.init(m_v4Engine);
-
 }
 
 QV8Engine::~QV8Engine()
@@ -115,9 +114,6 @@ QV8Engine::~QV8Engine()
     delete m_listModelData;
     m_listModelData = 0;
 
-    m_jsonWrapper.destroy();
-    m_qobjectWrapper.destroy();
-
     v8::Isolate::SetEngine(0);
     delete m_v4Engine;
 }
@@ -134,7 +130,7 @@ QVariant QV8Engine::toVariant(const QV4::Value &value, int typeHint)
         return QVariant(value.toBoolean());
 
     if (typeHint == QMetaType::QJsonValue)
-        return QVariant::fromValue(jsonValueFromJS(value));
+        return QVariant::fromValue(QV4::JsonObject::toJsonValue(value));
 
     if (typeHint == qMetaTypeId<QJSValue>())
         return QVariant::fromValue(QJSValue(new QJSValuePrivate(m_v4Engine, value)));
@@ -155,7 +151,7 @@ QVariant QV8Engine::toVariant(const QV4::Value &value, int typeHint)
             }
         } else if (typeHint == QMetaType::QJsonObject
                    && !value.asArrayObject() && !value.asFunctionObject()) {
-            return QVariant::fromValue(jsonObjectFromJS(value));
+            return QVariant::fromValue(QV4::JsonObject::toJsonObject(object));
         } else if (QV4::QObjectWrapper *wrapper = object->as<QV4::QObjectWrapper>()) {
             return qVariantFromValue<QObject *>(wrapper->object());
         } else if (QV4::QmlContextWrapper *wrapper = object->as<QV4::QmlContextWrapper>()) {
@@ -185,7 +181,7 @@ QVariant QV8Engine::toVariant(const QV4::Value &value, int typeHint)
 
             return qVariantFromValue<QList<QObject*> >(list);
         } else if (typeHint == QMetaType::QJsonArray) {
-            return QVariant::fromValue(jsonArrayFromJS(value));
+            return QVariant::fromValue(QV4::JsonObject::toJsonArray(a));
         }
 
         bool succeeded = false;
@@ -293,11 +289,11 @@ QV4::Value QV8Engine::fromVariant(const QVariant &variant)
             case QMetaType::QVariantMap:
                 return objectFromVariantMap(this, *reinterpret_cast<const QVariantMap *>(ptr));
             case QMetaType::QJsonValue:
-                return jsonValueToJS(*reinterpret_cast<const QJsonValue *>(ptr));
+                return QV4::JsonObject::fromJsonValue(m_v4Engine, *reinterpret_cast<const QJsonValue *>(ptr));
             case QMetaType::QJsonObject:
-                return jsonObjectToJS(*reinterpret_cast<const QJsonObject *>(ptr));
+                return QV4::JsonObject::fromJsonObject(m_v4Engine, *reinterpret_cast<const QJsonObject *>(ptr));
             case QMetaType::QJsonArray:
-                return jsonArrayToJS(*reinterpret_cast<const QJsonArray *>(ptr));
+                return QV4::JsonObject::fromJsonArray(m_v4Engine, *reinterpret_cast<const QJsonArray *>(ptr));
 
             default:
                 break;
@@ -716,13 +712,13 @@ QV4::Value QV8Engine::metaTypeToJS(int type, const void *data)
         result = variantToJS(*reinterpret_cast<const QVariant*>(data));
         break;
     case QMetaType::QJsonValue:
-        result = m_jsonWrapper.fromJsonValue(*reinterpret_cast<const QJsonValue *>(data));
+        result = QV4::JsonObject::fromJsonValue(m_v4Engine, *reinterpret_cast<const QJsonValue *>(data));
         break;
     case QMetaType::QJsonObject:
-        result = m_jsonWrapper.fromJsonObject(*reinterpret_cast<const QJsonObject *>(data));
+        result = QV4::JsonObject::fromJsonObject(m_v4Engine, *reinterpret_cast<const QJsonObject *>(data));
         break;
     case QMetaType::QJsonArray:
-        result = m_jsonWrapper.fromJsonArray(*reinterpret_cast<const QJsonArray *>(data));
+        result = QV4::JsonObject::fromJsonArray(m_v4Engine, *reinterpret_cast<const QJsonArray *>(data));
         break;
     default:
         if (type == qMetaTypeId<QJSValue>()) {
@@ -834,13 +830,13 @@ bool QV8Engine::metaTypeFromJS(const QV4::Value &value, int type, void *data) {
         *reinterpret_cast<QVariant*>(data) = variantFromJS(value);
         return true;
     case QMetaType::QJsonValue:
-        *reinterpret_cast<QJsonValue *>(data) = jsonValueFromJS(value);
+        *reinterpret_cast<QJsonValue *>(data) = QV4::JsonObject::toJsonValue(value);
         return true;
     case QMetaType::QJsonObject:
-        *reinterpret_cast<QJsonObject *>(data) = jsonObjectFromJS(value);
+        *reinterpret_cast<QJsonObject *>(data) = QV4::JsonObject::toJsonObject(value.asObject());
         return true;
     case QMetaType::QJsonArray:
-        *reinterpret_cast<QJsonArray *>(data) = jsonArrayFromJS(value);
+        *reinterpret_cast<QJsonArray *>(data) = QV4::JsonObject::toJsonArray(value.asArrayObject());
         return true;
     default:
     ;
@@ -961,35 +957,6 @@ QVariant QV8Engine::variantFromJS(const QV4::Value &value,
     return variantMapFromJS(value.asObject(), visitedObjects);
 }
 
-QV4::Value QV8Engine::jsonValueToJS(const QJsonValue &value)
-{
-    return m_jsonWrapper.fromJsonValue(value);
-}
-
-QJsonValue QV8Engine::jsonValueFromJS(const QV4::Value &value)
-{
-    return m_jsonWrapper.toJsonValue(value);
-}
-
-QV4::Value QV8Engine::jsonObjectToJS(const QJsonObject &object)
-{
-    return m_jsonWrapper.fromJsonObject(object);
-}
-
-QJsonObject QV8Engine::jsonObjectFromJS(const QV4::Value &value)
-{
-    return m_jsonWrapper.toJsonObject(value.asObject());
-}
-
-QV4::Value QV8Engine::jsonArrayToJS(const QJsonArray &array)
-{
-    return m_jsonWrapper.fromJsonArray(array);
-}
-
-QJsonArray QV8Engine::jsonArrayFromJS(const QV4::Value &value)
-{
-    return m_jsonWrapper.toJsonArray(value.asArrayObject());
-}
 
 bool QV8Engine::convertToNativeQObject(const QV4::Value &value, const QByteArray &targetType, void **result)
 {
index 9b317b5..b7c07ee 100644 (file)
@@ -72,7 +72,6 @@
 
 #include "qv8objectresource_p.h"
 #include "qv8qobjectwrapper_p.h"
-#include "qv4jsonwrapper_p.h"
 #include <private/qv4value_p.h>
 #include <private/qv4object_p.h>
 
@@ -292,13 +291,6 @@ public:
     inline QVariant variantFromJS(const QV4::Value &value)
     { V8ObjectSet visitedObjects; return variantFromJS(value, visitedObjects); }
 
-    QV4::Value jsonValueToJS(const QJsonValue &value);
-    QJsonValue jsonValueFromJS(const QV4::Value &value);
-    QV4::Value jsonObjectToJS(const QJsonObject &object);
-    QJsonObject jsonObjectFromJS(const QV4::Value &value);
-    QV4::Value jsonArrayToJS(const QJsonArray &array);
-    QJsonArray jsonArrayFromJS(const QV4::Value &value);
-
     QV4::Value metaTypeToJS(int type, const void *data);
     bool metaTypeFromJS(const QV4::Value &value, int type, void *data);
 
@@ -322,7 +314,6 @@ protected:
     QV4::ExecutionEngine *m_v4Engine;
 
     QV8QObjectWrapper m_qobjectWrapper;
-    QV4JsonWrapper m_jsonWrapper;
 
     QV4::PersistentValue m_freezeObject;
 
index 47a504a..15ae806 100644 (file)
@@ -61,6 +61,7 @@
 #include <private/qv4variantobject_p.h>
 #include <private/qv4sequenceobject_p.h>
 #include <private/qv4objectproto_p.h>
+#include <private/qv4jsonobject_p.h>
 
 #include <QtQml/qjsvalue.h>
 #include <QtCore/qjsonarray.h>
@@ -1729,13 +1730,13 @@ void CallArgument::fromValue(int callType, QV8Engine *engine, const QV4::Value &
         handlePtr = new (&allocData) QQmlV4Handle(QQmlV4Handle(value));
         type = callType;
     } else if (callType == QMetaType::QJsonArray) {
-        jsonArrayPtr = new (&allocData) QJsonArray(engine->jsonArrayFromJS(value));
+        jsonArrayPtr = new (&allocData) QJsonArray(QV4::JsonObject::toJsonArray(value.asArrayObject()));
         type = callType;
     } else if (callType == QMetaType::QJsonObject) {
-        jsonObjectPtr = new (&allocData) QJsonObject(engine->jsonObjectFromJS(value));
+        jsonObjectPtr = new (&allocData) QJsonObject(QV4::JsonObject::toJsonObject(value.asObject()));
         type = callType;
     } else if (callType == QMetaType::QJsonValue) {
-        jsonValuePtr = new (&allocData) QJsonValue(engine->jsonValueFromJS(value));
+        jsonValuePtr = new (&allocData) QJsonValue(QV4::JsonObject::toJsonValue(value));
         type = callType;
     } else if (callType == QMetaType::Void) {
         *qvariantPtr = QVariant();
@@ -1806,11 +1807,11 @@ QV4::Value CallArgument::toValue(QV8Engine *engine)
     } else if (type == qMetaTypeId<QQmlV4Handle>()) {
         return handlePtr->toValue();
     } else if (type == QMetaType::QJsonArray) {
-        return engine->jsonArrayToJS(*jsonArrayPtr);
+        return QV4::JsonObject::fromJsonArray(QV8Engine::getV4(engine), *jsonArrayPtr);
     } else if (type == QMetaType::QJsonObject) {
-        return engine->jsonObjectToJS(*jsonObjectPtr);
+        return QV4::JsonObject::fromJsonObject(QV8Engine::getV4(engine), *jsonObjectPtr);
     } else if (type == QMetaType::QJsonValue) {
-        return engine->jsonValueToJS(*jsonValuePtr);
+        return QV4::JsonObject::fromJsonValue(QV8Engine::getV4(engine), *jsonValuePtr);
     } else if (type == -1 || type == qMetaTypeId<QVariant>()) {
         QVariant value = *qvariantPtr;
         QV4::Value rv = engine->fromVariant(value);
index 01ecd2e..073e2cf 100644 (file)
@@ -6,7 +6,6 @@ HEADERS += \
     $$PWD/qv8profiler_p.h \
     $$PWD/qv8engine_p.h \
     $$PWD/qv8qobjectwrapper_p.h \
-    $$PWD/qv4jsonwrapper_p.h \
     $$PWD/qv4domerrors_p.h \
     $$PWD/qv4sqlerrors_p.h \
     $$PWD/qqmlbuiltinfunctions_p.h \
@@ -15,7 +14,6 @@ HEADERS += \
 SOURCES += \
     $$PWD/qv8engine.cpp \
     $$PWD/qv8qobjectwrapper.cpp \
-    $$PWD/qv4jsonwrapper.cpp \
     $$PWD/qv4domerrors.cpp \
     $$PWD/qv4sqlerrors.cpp \
     $$PWD/qqmlbuiltinfunctions.cpp