Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qv4jsonobject_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant
4#ifndef QV4JSONOBJECT_H
5#define QV4JSONOBJECT_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qv4object_p.h"
19#include <qjsonarray.h>
20#include <qjsonobject.h>
21#include <qjsonvalue.h>
22#include <qjsondocument.h>
23#include <qhash.h>
24
26
27namespace QV4 {
28
29namespace Heap {
30
32 void init();
33};
34
35}
36
37struct ObjectItem {
38 const QV4::Object *o;
39 ObjectItem(const QV4::Object *o) : o(o) {}
40};
41
42inline bool operator ==(const ObjectItem &a, const ObjectItem &b)
43{ return a.o->d() == b.o->d(); }
44
45inline size_t qHash(const ObjectItem &i, size_t seed = 0)
46{ return ::qHash((void *)i.o->d(), seed); }
47
49 Q_MANAGED_TYPE(JsonObject)
50 V4_OBJECT2(JsonObject, Object)
51private:
52
54public:
55
56 static ReturnedValue method_parse(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
57 static ReturnedValue method_stringify(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
58
59 static ReturnedValue fromJsonValue(ExecutionEngine *engine, const QJsonValue &value);
60 static ReturnedValue fromJsonObject(ExecutionEngine *engine, const QJsonObject &object);
61 static ReturnedValue fromJsonArray(ExecutionEngine *engine, const QJsonArray &array);
62
63 static inline QJsonValue toJsonValue(const QV4::Value &value)
64 { V4ObjectSet visitedObjects; return toJsonValue(value, visitedObjects); }
65 static inline QJsonObject toJsonObject(const QV4::Object *o)
66 { V4ObjectSet visitedObjects; return toJsonObject(o, visitedObjects); }
67 static inline QJsonArray toJsonArray(const QV4::Object *o)
68 { V4ObjectSet visitedObjects; return toJsonArray(o, visitedObjects); }
69
70private:
71 static QJsonValue toJsonValue(const QV4::Value &value, V4ObjectSet &visitedObjects);
72 static QJsonObject toJsonObject(const Object *o, V4ObjectSet &visitedObjects);
73 static QJsonArray toJsonArray(const Object *o, V4ObjectSet &visitedObjects);
74};
75
77{
78public:
79 JsonParser(ExecutionEngine *engine, const QChar *json, int length);
80
81 ReturnedValue parse(QJsonParseError *error);
82
83private:
84 inline bool eatSpace();
85 inline QChar nextToken();
86
87 ReturnedValue parseObject();
88 ReturnedValue parseArray();
89 bool parseMember(Object *o);
90 bool parseString(QString *string);
91 bool parseValue(Value *val);
92 bool parseNumber(Value *val);
93
94 ExecutionEngine *engine;
95 const QChar *head;
96 const QChar *json;
97 const QChar *end;
98
99 int nestingLevel;
100 QJsonParseError::ParseError lastError;
101};
102
103}
104
105QT_END_NAMESPACE
106
107#endif
JsonParser(ExecutionEngine *engine, const QChar *json, int length)
ReturnedValue parse(QJsonParseError *error)
Definition qjsvalue.h:23
bool operator==(const ObjectItem &a, const ObjectItem &b)
size_t qHash(const ObjectItem &i, size_t seed=0)
@ BeginObject
@ LineFeed
@ EndObject
@ BeginArray
@ ValueSeparator
@ Quote
@ Tab
@ Space
@ NameSeparator
@ EndArray
@ Return
#define END(function)
static bool scanEscapeSequence(const QChar *&json, const QChar *end, uint *ch)
static const int nestingLimit
DEFINE_OBJECT_VTABLE(JsonObject)
static bool addHexDigit(QChar digit, uint *result)
#define BEGIN
#define Q_MANAGED_TYPE(type)
#define CHECK_EXCEPTION()
#define RETURN_UNDEFINED()
#define RETURN_RESULT(r)
static ReturnedValue fromJsonValue(ExecutionEngine *engine, const QJsonValue &value)
static ReturnedValue fromJsonObject(ExecutionEngine *engine, const QJsonObject &object)
static QJsonArray toJsonArray(const QV4::Object *o)
static ReturnedValue fromJsonArray(ExecutionEngine *engine, const QJsonArray &array)
static ReturnedValue method_parse(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static QJsonObject toJsonObject(const QV4::Object *o)
static ReturnedValue method_stringify(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
static QJsonValue toJsonValue(const QV4::Value &value)
ObjectItem(const QV4::Object *o)
const QV4::Object * o