diff options
Diffstat (limited to 'src/qml/jsruntime/qv4jsonobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4jsonobject.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/qml/jsruntime/qv4jsonobject.cpp b/src/qml/jsruntime/qv4jsonobject.cpp index 4f46e605af..d78d09113a 100644 --- a/src/qml/jsruntime/qv4jsonobject.cpp +++ b/src/qml/jsruntime/qv4jsonobject.cpp @@ -114,6 +114,7 @@ QChar JsonParser::nextToken() case EndArray: case EndObject: eatSpace(); + break; case Quote: break; default: @@ -695,12 +696,18 @@ QString Stringify::Str(const QString &key, const Value &v) } if (replacerFunction) { - ScopedObject holder(scope, v4->newObject()); - holder->put(scope.engine->id_empty(), value); JSCallArguments jsCallData(scope, 2); jsCallData.args[0] = v4->newString(key); jsCallData.args[1] = value; - *jsCallData.thisObject = holder; + + if (stack.isEmpty()) { + ScopedObject holder(scope, v4->newObject()); + holder->put(scope.engine->id_empty(), v); + *jsCallData.thisObject = holder; + } else { + *jsCallData.thisObject = stack.top(); + } + value = replacerFunction->call(jsCallData); if (v4->hasException) return QString(); @@ -981,12 +988,16 @@ QJsonValue JsonObject::toJsonValue(const Value &value, V4ObjectSet &visitedObjec Q_ASSERT(value.isObject()); Scope scope(value.as<Object>()->engine()); - ScopedArrayObject a(scope, value); - if (a) + if (ScopedArrayObject a{ scope, value }) { return toJsonArray(a, visitedObjects); - ScopedObject o(scope, value); - if (o) + } else if (Scoped<QV4::Sequence> a{ scope, value }) { + return toJsonArray(a, visitedObjects); + } else if (Scoped<QmlListWrapper> lw{ scope, value }) { + return toJsonArray(lw, visitedObjects); + } else if (ScopedObject o{ scope, value }) { return toJsonObject(o, visitedObjects); + } + return QJsonValue(value.toQString()); } @@ -1051,7 +1062,7 @@ QV4::ReturnedValue JsonObject::fromJsonArray(ExecutionEngine *engine, const QJso return a.asReturnedValue(); } -QJsonArray JsonObject::toJsonArray(const ArrayObject *a, V4ObjectSet &visitedObjects) +QJsonArray JsonObject::toJsonArray(const Object *a, V4ObjectSet &visitedObjects) { QJsonArray result; if (!a) |