aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4errorobject.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-09-25 22:42:58 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-28 13:33:43 +0200
commit18d4794e3f614eec8594f6636d569af8bc112618 (patch)
treec4f552dab56fea3f76b0b9542585a775c41db108 /src/qml/jsruntime/qv4errorobject.cpp
parent150731fc68bcf823bec40729285813d902990cb7 (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.cpp77
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)