Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qv4errorobject_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#ifndef QV4ERROROBJECT_H
4#define QV4ERROROBJECT_H
5
6//
7// W A R N I N G
8// -------------
9//
10// This file is not part of the Qt API. It exists purely as an
11// implementation detail. This header file may change from version to
12// version without notice, or even be removed.
13//
14// We mean it.
15//
16
17#include "qv4object_p.h"
18#include "qv4functionobject_p.h"
19
21
22namespace QV4 {
23
24struct SyntaxErrorObject;
25
26namespace Heap {
27
28
29#define ErrorObjectMembers(class, Member) \
30 Member(class, Pointer, String *, stack)
31
34 enum ErrorType {
35 Error,
36 EvalError,
37 RangeError,
38 ReferenceError,
39 SyntaxError,
40 TypeError,
41 URIError
42 };
43 StackTrace *stackTrace;
44 ErrorType errorType;
45
46 void init();
47 void init(const Value &message, ErrorType t = Error);
48 void init(const Value &message, const QString &fileName, int line, int column, ErrorType t = Error);
49 void destroy() {
50 delete stackTrace;
51 Object::destroy();
52 }
53};
54
56 void init(const Value &message);
57};
58
60 void init(const Value &message);
61};
62
64 void init(const Value &message);
65 void init(const Value &msg, const QString &fileName, int lineNumber, int columnNumber);
66};
67
69 void init(const Value &message);
70 void init(const Value &msg, const QString &fileName, int lineNumber, int columnNumber);
71};
72
74 void init(const Value &message);
75};
76
78 void init(const Value &message);
79};
80
85
89
93
97
101
104};
105
108};
109
110}
111
113 enum {
114 IsErrorObject = true
115 };
116
117 enum {
118 Index_Stack = 0, // Accessor Property
119 Index_StackSetter = 1, // Accessor Property
122 Index_Message = 4
123 };
124
128 V4_PROTOTYPE(errorPrototype)
130
131 template <typename T>
132 static Heap::Object *create(ExecutionEngine *e, const Value &message, const Value *newTarget);
133 template <typename T>
134 static Heap::Object *create(ExecutionEngine *e, const QString &message);
135 template <typename T>
136 static Heap::Object *create(ExecutionEngine *e, const QString &message, const QString &filename, int line, int column);
137
139
140 static const char *className(Heap::ErrorObject::ErrorType t);
141
142 static ReturnedValue method_get_stack(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
143};
144
145template<>
146inline const ErrorObject *Value::as() const {
147 return isManaged() && m()->internalClass->vtable->isErrorObject ? reinterpret_cast<const ErrorObject *>(this) : nullptr;
148}
149
152 V4_PROTOTYPE(evalErrorPrototype)
153 const Data *d() const { return static_cast<const Data *>(ErrorObject::d()); }
154 Data *d() { return static_cast<Data *>(ErrorObject::d()); }
155};
156
159 V4_PROTOTYPE(rangeErrorPrototype)
160 const Data *d() const { return static_cast<const Data *>(ErrorObject::d()); }
161 Data *d() { return static_cast<Data *>(ErrorObject::d()); }
162};
163
166 V4_PROTOTYPE(referenceErrorPrototype)
167 const Data *d() const { return static_cast<const Data *>(ErrorObject::d()); }
168 Data *d() { return static_cast<Data *>(ErrorObject::d()); }
169};
170
173 V4_PROTOTYPE(syntaxErrorPrototype)
174 const Data *d() const { return static_cast<const Data *>(ErrorObject::d()); }
175 Data *d() { return static_cast<Data *>(ErrorObject::d()); }
176};
177
180 V4_PROTOTYPE(typeErrorPrototype)
181 const Data *d() const { return static_cast<const Data *>(ErrorObject::d()); }
182 Data *d() { return static_cast<Data *>(ErrorObject::d()); }
183};
184
187 V4_PROTOTYPE(uRIErrorPrototype)
188 const Data *d() const { return static_cast<const Data *>(ErrorObject::d()); }
189 Data *d() { return static_cast<Data *>(ErrorObject::d()); }
190};
191
193{
195
196 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
197 static ReturnedValue virtualCall(const FunctionObject *f, const Value *thisObject, const Value *argv, int argc);
198};
199
201{
203 V4_PROTOTYPE(errorCtor)
204
205 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
206};
207
209{
211 V4_PROTOTYPE(errorCtor)
212
213 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
214};
215
217{
219 V4_PROTOTYPE(errorCtor)
220
221 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
222};
223
225{
227 V4_PROTOTYPE(errorCtor)
228
229 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
230};
231
233{
235 V4_PROTOTYPE(errorCtor)
236
237 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
238};
239
241{
243 V4_PROTOTYPE(errorCtor)
244
245 static ReturnedValue virtualCallAsConstructor(const FunctionObject *f, const Value *argv, int argc, const Value *);
246};
247
248
250{
251 enum {
254 Index_Name = 2
255 };
256 void init(ExecutionEngine *engine, Object *ctor) { init(engine, ctor, this, Heap::ErrorObject::Error); }
257
258 static void init(ExecutionEngine *engine, Object *ctor, Object *obj, Heap::ErrorObject::ErrorType t);
259 static ReturnedValue method_toString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc);
260};
261
263{
264 void init(ExecutionEngine *engine, Object *ctor) { ErrorPrototype::init(engine, ctor, this, Heap::ErrorObject::EvalError); }
265};
266
268{
269 void init(ExecutionEngine *engine, Object *ctor) { ErrorPrototype::init(engine, ctor, this, Heap::ErrorObject::RangeError); }
270};
271
273{
274 void init(ExecutionEngine *engine, Object *ctor) { ErrorPrototype::init(engine, ctor, this, Heap::ErrorObject::ReferenceError); }
275};
276
278{
279 void init(ExecutionEngine *engine, Object *ctor) { ErrorPrototype::init(engine, ctor, this, Heap::ErrorObject::SyntaxError); }
280};
281
283{
284 void init(ExecutionEngine *engine, Object *ctor) { ErrorPrototype::init(engine, ctor, this, Heap::ErrorObject::TypeError); }
285};
286
288{
289 void init(ExecutionEngine *engine, Object *ctor) { ErrorPrototype::init(engine, ctor, this, Heap::ErrorObject::URIError); }
290};
291
292
294{
295 return d()->errorType == QV4::Heap::ErrorObject::SyntaxError ? static_cast<SyntaxErrorObject *>(this) : nullptr;
296}
297
298
299template <typename T>
300Heap::Object *ErrorObject::create(ExecutionEngine *e, const Value &message, const Value *newTarget) {
302 Scope scope(e);
303 ScopedObject proto(scope, static_cast<const Object *>(newTarget)->get(scope.engine->id_prototype()));
304 Scoped<InternalClass> ic(scope, e->internalClasses(klass)->changePrototype(proto->d()));
305 return e->memoryManager->allocObject<T>(ic->d(), message);
306}
307template <typename T>
309 Scope scope(e);
312 Scoped<InternalClass> ic(scope, e->internalClasses(klass)->changePrototype(T::defaultPrototype(e)->d()));
313 return e->memoryManager->allocObject<T>(ic->d(), v);
314}
315template <typename T>
316Heap::Object *ErrorObject::create(ExecutionEngine *e, const QString &message, const QString &filename, int line, int column) {
317 Scope scope(e);
320 Scoped<InternalClass> ic(scope, e->internalClasses(klass)->changePrototype(T::defaultPrototype(e)->d()));
321 return e->memoryManager->allocObject<T>(ic->d(), v, filename, line, column);
322}
323
324
325}
326
328
329#endif // QV4ECMAOBJECTS_P_H
Definition qlist.h:75
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
ObjectType::Data * allocObject(Heap::InternalClass *ic, Args &&... args)
Definition qv4mm_p.h:282
Combined button and popup list for selecting options.
quint64 ReturnedValue
GLsizei const GLfloat * v
[13]
const GLfloat * m
GLfloat GLfloat f
GLuint GLsizei const GLchar * message
GLuint name
GLenum GLenum GLsizei void GLsizei void * column
GLhandleARB obj
[2]
GLdouble GLdouble t
Definition qopenglext.h:243
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
#define V4_NEEDS_DESTROY
#define Q_MANAGED_TYPE(type)
#define V4_INTERNALCLASS(c)
#define DECLARE_HEAP_OBJECT(name, base)
#define DECLARE_MARKOBJECTS(class)
#define V4_PROTOTYPE(p)
#define V4_OBJECT2(DataClass, superClass)
view create()
static constexpr ReturnedValue undefined()
Heap::InternalClass * internalClasses(InternalClassType icType)
MemoryManager * memoryManager
static ReturnedValue method_get_stack(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
SyntaxErrorObject * asSyntaxError()
static V4_NEEDS_DESTROY Heap::Object * create(ExecutionEngine *e, const Value &message, const Value *newTarget)
void init(ExecutionEngine *engine, Object *ctor)
static ReturnedValue method_toString(const FunctionObject *, const Value *thisObject, const Value *argv, int argc)
const Data * d() const
Heap::EvalErrorObject Data
void init(ExecutionEngine *engine, Object *ctor)
String * id_prototype() const
Heap::String * newString(char16_t c)
ReturnedValue asReturnedValue() const
Definition qv4value_p.h:342
void init(ExecutionEngine *engine)
void init(ExecutionEngine *engine)
void init(const Value &message)
Q_REQUIRED_RESULT InternalClass * changePrototype(Heap::Object *proto)
void init(ExecutionEngine *engine)
void init(const Value &message)
void init(ExecutionEngine *engine)
void init(const Value &message)
void init(ExecutionEngine *engine)
void init(const Value &message)
void init(ExecutionEngine *engine)
void init(const Value &message)
void init(ExecutionEngine *engine)
void init(const Value &message)
QString className() const
ExecutionEngine * engine() const
ReturnedValue get(StringOrSymbol *name, bool *hasProperty=nullptr, const Value *receiver=nullptr) const
Heap::RangeErrorObject Data
const Data * d() const
void init(ExecutionEngine *engine, Object *ctor)
Heap::ReferenceErrorObject Data
void init(ExecutionEngine *engine, Object *ctor)
ExecutionEngine * engine
bool isManaged() const
bool isUndefined() const
const Data * d() const
Heap::SyntaxErrorObject Data
void init(ExecutionEngine *engine, Object *ctor)
const Data * d() const
Heap::TypeErrorObject Data
void init(ExecutionEngine *engine, Object *ctor)
const Data * d() const
Heap::URIErrorObject Data
void init(ExecutionEngine *engine, Object *ctor)
static constexpr VTable::CallAsConstructor virtualCallAsConstructor
static constexpr VTable::Call virtualCall
const T * as() const
Definition qv4value_p.h:132