diff options
| author | Lars Knoll <lars.knoll@digia.com> | 2014-04-29 11:02:35 +0200 |
|---|---|---|
| committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:49:03 +0200 |
| commit | 42b137bd1ee07ff604a44ead02160b792e1809f0 (patch) | |
| tree | afdf2b8161ac260f7c3e44869b60bffe911c7883 /src | |
| parent | 06ad87eb0f8abde691026b9a72d372184d6d8249 (diff) | |
Convert ErrorObject to new storage scheme
Change-Id: I356a9947b87a5cda4eda738d3b6d5d51ee9a98f2
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/qml/jsruntime/qv4engine.cpp | 2 | ||||
| -rw-r--r-- | src/qml/jsruntime/qv4errorobject.cpp | 44 | ||||
| -rw-r--r-- | src/qml/jsruntime/qv4errorobject_p.h | 31 |
3 files changed, 40 insertions, 37 deletions
diff --git a/src/qml/jsruntime/qv4engine.cpp b/src/qml/jsruntime/qv4engine.cpp index 360262e941..f089737e42 100644 --- a/src/qml/jsruntime/qv4engine.cpp +++ b/src/qml/jsruntime/qv4engine.cpp @@ -930,7 +930,7 @@ ReturnedValue ExecutionEngine::throwException(const ValueRef value) QV4::Scope scope(this); QV4::Scoped<ErrorObject> error(scope, value); if (!!error) - exceptionStackTrace = error->stackTrace; + exceptionStackTrace = error->d()->stackTrace; else exceptionStackTrace = stackTrace(); diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp index 6742d5624c..9c1e4f607f 100644 --- a/src/qml/jsruntime/qv4errorobject.cpp +++ b/src/qml/jsruntime/qv4errorobject.cpp @@ -73,7 +73,6 @@ using namespace QV4; ErrorObject::ErrorObject(InternalClass *ic) : Object(ic) - , stack(0) { Scope scope(engine()); ScopedValue protectThis(scope, this); @@ -84,7 +83,6 @@ ErrorObject::ErrorObject(InternalClass *ic) ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t) : Object(ic) - , stack(0) { setSubtype(t); @@ -98,16 +96,15 @@ ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t) ScopedString s(scope); defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className()))); - stackTrace = ic->engine->stackTrace(); - if (!stackTrace.isEmpty()) { - defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source))); - defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); + d()->stackTrace = ic->engine->stackTrace(); + if (!d()->stackTrace.isEmpty()) { + defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(d()->stackTrace.at(0).source))); + defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(d()->stackTrace.at(0).line)); } } ErrorObject::ErrorObject(InternalClass *ic, const QString &message, ErrorObject::ErrorType t) : Object(ic) - , stack(0) { setSubtype(t); @@ -121,16 +118,15 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, ErrorObject: defineDefaultProperty(QStringLiteral("message"), v); defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className()))); - stackTrace = ic->engine->stackTrace(); - if (!stackTrace.isEmpty()) { - defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source))); - defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); + d()->stackTrace = ic->engine->stackTrace(); + if (!d()->stackTrace.isEmpty()) { + defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(d()->stackTrace.at(0).source))); + defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(d()->stackTrace.at(0).line)); } } ErrorObject::ErrorObject(InternalClass *ic, const QString &message, const QString &fileName, int line, int column, ErrorObject::ErrorType t) : Object(ic) - , stack(0) { setSubtype(t); @@ -141,16 +137,16 @@ ErrorObject::ErrorObject(InternalClass *ic, const QString &message, const QStrin defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0); defineDefaultProperty(QStringLiteral("name"), (s = ic->engine->newString(className()))); - stackTrace = ic->engine->stackTrace(); + d()->stackTrace = ic->engine->stackTrace(); StackFrame frame; frame.source = fileName; frame.line = line; frame.column = column; - stackTrace.prepend(frame); + d()->stackTrace.prepend(frame); - if (!stackTrace.isEmpty()) { - defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(stackTrace.at(0).source))); - defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); + if (!d()->stackTrace.isEmpty()) { + defineDefaultProperty(QStringLiteral("fileName"), (s = ic->engine->newString(d()->stackTrace.at(0).source))); + defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(d()->stackTrace.at(0).line)); } ScopedValue v(scope, ic->engine->newString(message)); @@ -163,12 +159,12 @@ ReturnedValue ErrorObject::method_get_stack(CallContext *ctx) Scoped<ErrorObject> This(scope, ctx->callData->thisObject); if (!This) return ctx->throwTypeError(); - if (!This->stack) { + if (!This->d()->stack) { QString trace; - for (int i = 0; i < This->stackTrace.count(); ++i) { + for (int i = 0; i < This->d()->stackTrace.count(); ++i) { if (i > 0) trace += QLatin1Char('\n'); - const StackFrame &frame = This->stackTrace[i]; + const StackFrame &frame = This->d()->stackTrace[i]; trace += frame.function; trace += QLatin1Char('@'); trace += frame.source; @@ -177,16 +173,16 @@ ReturnedValue ErrorObject::method_get_stack(CallContext *ctx) trace += QString::number(frame.line); } } - This->stack = ctx->engine->newString(trace)->getPointer(); + This->d()->stack = ctx->engine->newString(trace)->getPointer(); } - return This->stack->asReturnedValue(); + return This->d()->stack->asReturnedValue(); } void ErrorObject::markObjects(Managed *that, ExecutionEngine *e) { ErrorObject *This = that->asErrorObject(); - if (This->stack) - This->stack->mark(e); + if (This->d()->stack) + This->d()->stack->mark(e); Object::markObjects(that, e); } diff --git a/src/qml/jsruntime/qv4errorobject_p.h b/src/qml/jsruntime/qv4errorobject_p.h index ffb22743e5..7b812ca909 100644 --- a/src/qml/jsruntime/qv4errorobject_p.h +++ b/src/qml/jsruntime/qv4errorobject_p.h @@ -51,7 +51,16 @@ namespace QV4 { struct SyntaxErrorObject; struct ErrorObject: Object { - V4_OBJECT + struct Data : Object::Data { + StackTrace stackTrace; + String *stack; + }; + struct { + StackTrace stackTrace; + String *stack; + } __data; + + V4_OBJECT_NEW Q_MANAGED_TYPE(ErrorObject) enum { IsErrorObject = true @@ -74,9 +83,6 @@ struct ErrorObject: Object { SyntaxErrorObject *asSyntaxError(); - StackTrace stackTrace; - String *stack; - static ReturnedValue method_get_stack(CallContext *ctx); static void markObjects(Managed *that, ExecutionEngine *e); static void destroy(Managed *that) { static_cast<ErrorObject *>(that)->~ErrorObject(); } @@ -103,7 +109,7 @@ struct ReferenceErrorObject: ErrorObject { }; struct SyntaxErrorObject: ErrorObject { - V4_OBJECT + V4_OBJECT_NEW SyntaxErrorObject(ExecutionEngine *engine, const ValueRef msg); SyntaxErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber); }; @@ -119,7 +125,7 @@ struct URIErrorObject: ErrorObject { struct ErrorCtor: FunctionObject { - V4_OBJECT + V4_OBJECT_NEW ErrorCtor(ExecutionContext *scope); ErrorCtor(ExecutionContext *scope, const QString &name); @@ -129,7 +135,8 @@ struct ErrorCtor: FunctionObject struct EvalErrorCtor: ErrorCtor { - V4_OBJECT + V4_OBJECT_NEW + EvalErrorCtor(ExecutionContext *scope); static ReturnedValue construct(Managed *m, CallData *callData); @@ -137,7 +144,7 @@ struct EvalErrorCtor: ErrorCtor struct RangeErrorCtor: ErrorCtor { - V4_OBJECT + V4_OBJECT_NEW RangeErrorCtor(ExecutionContext *scope); static ReturnedValue construct(Managed *m, CallData *callData); @@ -145,7 +152,7 @@ struct RangeErrorCtor: ErrorCtor struct ReferenceErrorCtor: ErrorCtor { - V4_OBJECT + V4_OBJECT_NEW ReferenceErrorCtor(ExecutionContext *scope); static ReturnedValue construct(Managed *m, CallData *callData); @@ -153,7 +160,7 @@ struct ReferenceErrorCtor: ErrorCtor struct SyntaxErrorCtor: ErrorCtor { - V4_OBJECT + V4_OBJECT_NEW SyntaxErrorCtor(ExecutionContext *scope); static ReturnedValue construct(Managed *m, CallData *callData); @@ -161,7 +168,7 @@ struct SyntaxErrorCtor: ErrorCtor struct TypeErrorCtor: ErrorCtor { - V4_OBJECT + V4_OBJECT_NEW TypeErrorCtor(ExecutionContext *scope); static ReturnedValue construct(Managed *m, CallData *callData); @@ -169,7 +176,7 @@ struct TypeErrorCtor: ErrorCtor struct URIErrorCtor: ErrorCtor { - V4_OBJECT + V4_OBJECT_NEW URIErrorCtor(ExecutionContext *scope); static ReturnedValue construct(Managed *m, CallData *callData); |
