1/****************************************************************************
2**
3** Copyright (C) 2015 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the QtScript module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QSCRIPTVALUE_P_H
41#define QSCRIPTVALUE_P_H
42
43//
44// W A R N I N G
45// -------------
46//
47// This file is not part of the Qt API. It exists purely as an
48// implementation detail. This header file may change from version to
49// version without notice, or even be removed.
50//
51// We mean it.
52//
53
54#include <QtCore/qobjectdefs.h>
55#include <QtCore/qshareddata.h>
56
57#include "wtf/Platform.h"
58#include "JSValue.h"
59
60QT_BEGIN_NAMESPACE
61
62class QString;
63class QScriptEnginePrivate;
64
65class QScriptValue;
66class QScriptValuePrivate : public QSharedData
67{
68 Q_DISABLE_COPY(QScriptValuePrivate)
69public:
70 inline void* operator new(size_t, QScriptEnginePrivate*);
71 inline void operator delete(void*);
72
73 enum Type {
74 JavaScriptCore,
75 Number,
76 String
77 };
78
79 inline QScriptValuePrivate(QScriptEnginePrivate*);
80 inline ~QScriptValuePrivate();
81
82 inline void initFrom(JSC::JSValue value);
83 inline void initFrom(qsreal value);
84 inline void initFrom(const QString &value);
85
86 inline bool isJSC() const;
87 inline bool isObject() const;
88
89 static inline QScriptValuePrivate *get(const QScriptValue &q)
90 {
91 return q.d_ptr.data();
92 }
93
94 static inline QScriptValue toPublic(QScriptValuePrivate *d)
95 {
96 return QScriptValue(d);
97 }
98
99 static inline QScriptEnginePrivate *getEngine(const QScriptValue &q)
100 {
101 if (!q.d_ptr)
102 return 0;
103 return q.d_ptr->engine;
104 }
105
106 inline JSC::JSValue property(const JSC::Identifier &id,
107 const QScriptValue::ResolveFlags &mode = QScriptValue::ResolvePrototype) const;
108 inline JSC::JSValue property(quint32 index, const QScriptValue::ResolveFlags &mode = QScriptValue::ResolvePrototype) const;
109 inline JSC::JSValue property(const JSC::UString &, const QScriptValue::ResolveFlags &mode = QScriptValue::ResolvePrototype) const;
110 inline void setProperty(const JSC::UString &name, const JSC::JSValue &value,
111 const QScriptValue::PropertyFlags &flags = QScriptValue::KeepExistingFlags);
112 inline void setProperty(const JSC::Identifier &id, const JSC::JSValue &value,
113 const QScriptValue::PropertyFlags &flags = QScriptValue::KeepExistingFlags);
114 inline void setProperty(quint32 index, const JSC::JSValue &value,
115 const QScriptValue::PropertyFlags &flags = QScriptValue::KeepExistingFlags);
116 inline QScriptValue::PropertyFlags propertyFlags(
117 const JSC::Identifier &id, const QScriptValue::ResolveFlags &mode = QScriptValue::ResolvePrototype) const;
118
119 void detachFromEngine();
120
121 qint64 objectId()
122 {
123 if ( (type == JavaScriptCore) && (engine) && jscValue.isCell() )
124 return (qint64)jscValue.asCell();
125 else
126 return -1;
127 }
128
129 QScriptEnginePrivate *engine;
130 Type type;
131 JSC::JSValue jscValue;
132 qsreal numberValue;
133 QString stringValue;
134
135 // linked list of engine's script values
136 QScriptValuePrivate *prev;
137 QScriptValuePrivate *next;
138};
139
140inline QScriptValuePrivate::QScriptValuePrivate(QScriptEnginePrivate *e)
141 : engine(e), prev(0), next(0)
142{
143}
144
145inline bool QScriptValuePrivate::isJSC() const
146{
147 return (type == JavaScriptCore);
148}
149
150inline bool QScriptValuePrivate::isObject() const
151{
152 return isJSC() && jscValue && jscValue.isObject();
153}
154
155// Rest of inline functions implemented in qscriptengine_p.h
156
157QT_END_NAMESPACE
158
159#endif
160

source code of qtscript/src/script/api/qscriptvalue_p.h