diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-09-25 22:42:58 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-28 13:33:43 +0200 |
commit | 18d4794e3f614eec8594f6636d569af8bc112618 (patch) | |
tree | c4f552dab56fea3f76b0b9542585a775c41db108 /src/qml/jsruntime/qv4errorobject.cpp | |
parent | 150731fc68bcf823bec40729285813d902990cb7 (diff) |
Fix Value usage in ErrorObjects
Change-Id: Iaa14ad5a8d3f085843e49195f8f4bb7bb020b9b6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4errorobject.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4errorobject.cpp | 77 |
1 files changed, 52 insertions, 25 deletions
diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp index 024068eed0..21917a94f0 100644 --- a/src/qml/jsruntime/qv4errorobject.cpp +++ b/src/qml/jsruntime/qv4errorobject.cpp @@ -85,7 +85,7 @@ ErrorObject::ErrorObject(InternalClass *ic) defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, "Error")); } -ErrorObject::ErrorObject(InternalClass *ic, const Value &message, ErrorType t) +ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t) : Object(ic) , stack(0) { @@ -98,8 +98,32 @@ ErrorObject::ErrorObject(InternalClass *ic, const Value &message, ErrorType t) defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0); - if (!message.isUndefined()) - defineDefaultProperty(QStringLiteral("message"), message); + if (!message->isUndefined()) + defineDefaultProperty(QStringLiteral("message"), *message); + defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className())); + + stackTrace = ic->engine->stackTrace(); + if (!stackTrace.isEmpty()) { + defineDefaultProperty(QStringLiteral("fileName"), Value::fromString(ic->engine, stackTrace.at(0).source)); + defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line)); + } +} + +ErrorObject::ErrorObject(InternalClass *ic, const QString &message, ErrorObject::ErrorType t) + : Object(ic) + , stack(0) +{ + type = Type_ErrorObject; + vtbl = &static_vtbl; + subtype = t; + + Scope scope(engine()); + ScopedValue protectThis(scope, this); + + defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0); + + ScopedValue v(scope, ic->engine->newString(message)); + defineDefaultProperty(QStringLiteral("message"), v); defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className())); stackTrace = ic->engine->stackTrace(); @@ -175,7 +199,7 @@ DEFINE_MANAGED_VTABLE(ErrorObject); DEFINE_MANAGED_VTABLE(SyntaxErrorObject); -SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const Value &msg) +SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const ValueRef msg) : ErrorObject(engine->syntaxErrorClass, msg, SyntaxError) { vtbl = &static_vtbl; @@ -187,28 +211,28 @@ SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const QString &msg vtbl = &static_vtbl; } -EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const Value &message) +EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const ValueRef message) : ErrorObject(engine->evalErrorClass, message, EvalError) { } -RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const Value &message) +RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const ValueRef message) : ErrorObject(engine->rangeErrorClass, message, RangeError) { } RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const QString &message) - : ErrorObject(engine->rangeErrorClass, Value::fromString(engine, message), RangeError) + : ErrorObject(engine->rangeErrorClass, message, RangeError) { } -ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const Value &message) +ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const ValueRef message) : ErrorObject(engine->referenceErrorClass, message, ReferenceError) { } ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QString &message) - : ErrorObject(engine->referenceErrorClass, Value::fromString(engine, message), ReferenceError) + : ErrorObject(engine->referenceErrorClass, message, ReferenceError) { } @@ -217,17 +241,17 @@ ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QStrin { } -TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const Value &message) +TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const ValueRef message) : ErrorObject(engine->typeErrorClass, message, TypeError) { } TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const QString &message) - : ErrorObject(engine->typeErrorClass, Value::fromString(engine, message), TypeError) + : ErrorObject(engine->typeErrorClass, message, TypeError) { } -URIErrorObject::URIErrorObject(ExecutionEngine *engine, const Value &message) +URIErrorObject::URIErrorObject(ExecutionEngine *engine, const ValueRef message) : ErrorObject(engine->uriErrorClass, message, URIError) { } @@ -254,7 +278,9 @@ ErrorCtor::ErrorCtor(ExecutionContext *scope, const QString &name) ReturnedValue ErrorCtor::construct(Managed *m, CallData *callData) { - return Encode(m->engine()->newErrorObject(callData->argc ? callData->args[0] : Primitive::undefinedValue())); + Scope scope(m->engine()); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return Encode(m->engine()->newErrorObject(v)); } ReturnedValue ErrorCtor::call(Managed *that, CallData *callData) @@ -270,8 +296,9 @@ EvalErrorCtor::EvalErrorCtor(ExecutionContext *scope) ReturnedValue EvalErrorCtor::construct(Managed *m, CallData *callData) { - return Value::fromObject(new (m->engine()->memoryManager) EvalErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue())) - .asReturnedValue(); + Scope scope(m->engine()); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return (new (m->engine()->memoryManager) EvalErrorObject(m->engine(), v))->asReturnedValue(); } RangeErrorCtor::RangeErrorCtor(ExecutionContext *scope) @@ -283,8 +310,8 @@ RangeErrorCtor::RangeErrorCtor(ExecutionContext *scope) ReturnedValue RangeErrorCtor::construct(Managed *m, CallData *callData) { Scope scope(m->engine()); - ScopedValue v(scope, new (m->engine()->memoryManager) RangeErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue())); - return v.asReturnedValue(); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return (new (m->engine()->memoryManager) RangeErrorObject(scope.engine, v))->asReturnedValue(); } ReferenceErrorCtor::ReferenceErrorCtor(ExecutionContext *scope) @@ -296,8 +323,8 @@ ReferenceErrorCtor::ReferenceErrorCtor(ExecutionContext *scope) ReturnedValue ReferenceErrorCtor::construct(Managed *m, CallData *callData) { Scope scope(m->engine()); - ScopedValue v(scope, new (m->engine()->memoryManager) ReferenceErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue())); - return v.asReturnedValue(); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return (new (m->engine()->memoryManager) ReferenceErrorObject(scope.engine, v))->asReturnedValue(); } SyntaxErrorCtor::SyntaxErrorCtor(ExecutionContext *scope) @@ -309,8 +336,8 @@ SyntaxErrorCtor::SyntaxErrorCtor(ExecutionContext *scope) ReturnedValue SyntaxErrorCtor::construct(Managed *m, CallData *callData) { Scope scope(m->engine()); - ScopedValue v(scope, new (m->engine()->memoryManager) SyntaxErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue())); - return v.asReturnedValue(); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return (new (m->engine()->memoryManager) SyntaxErrorObject(scope.engine, v))->asReturnedValue(); } TypeErrorCtor::TypeErrorCtor(ExecutionContext *scope) @@ -322,8 +349,8 @@ TypeErrorCtor::TypeErrorCtor(ExecutionContext *scope) ReturnedValue TypeErrorCtor::construct(Managed *m, CallData *callData) { Scope scope(m->engine()); - ScopedValue v(scope, new (m->engine()->memoryManager) TypeErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue())); - return v.asReturnedValue(); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return (new (m->engine()->memoryManager) TypeErrorObject(scope.engine, v))->asReturnedValue(); } URIErrorCtor::URIErrorCtor(ExecutionContext *scope) @@ -335,8 +362,8 @@ URIErrorCtor::URIErrorCtor(ExecutionContext *scope) ReturnedValue URIErrorCtor::construct(Managed *m, CallData *callData) { Scope scope(m->engine()); - ScopedValue v(scope, new (m->engine()->memoryManager) URIErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue())); - return v.asReturnedValue(); + ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue()); + return (new (m->engine()->memoryManager) URIErrorObject(scope.engine, v))->asReturnedValue(); } void ErrorPrototype::init(ExecutionEngine *engine, const Value &ctor, Object *obj) |