aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4errorobject.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-08-08 16:59:32 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-20 14:20:44 +0200
commite43b6bd9c7a3d584e488cd3c84f9deb2d8955b64 (patch)
tree0d1a33571d2f75630db3dfe84b1a4ead23f87958 /src/qml/jsruntime/qv4errorobject.cpp
parent42b2685d0069e746dee344054831b6f08e482860 (diff)
Remove QV4::DiagnosticMessage
QQmlError provides the same functionality, so let's rather use that where required. Remove the dependency of codegen onto the ExecutionContext that was only required for error handling. Change-Id: Ib0b61c0e138f89ff989c32996c93c339e4b62223 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/jsruntime/qv4errorobject.cpp')
-rw-r--r--src/qml/jsruntime/qv4errorobject.cpp52
1 files changed, 30 insertions, 22 deletions
diff --git a/src/qml/jsruntime/qv4errorobject.cpp b/src/qml/jsruntime/qv4errorobject.cpp
index 516a4d37f8..508e9c118b 100644
--- a/src/qml/jsruntime/qv4errorobject.cpp
+++ b/src/qml/jsruntime/qv4errorobject.cpp
@@ -93,6 +93,32 @@ ErrorObject::ErrorObject(ExecutionEngine *engine, const Value &message, ErrorTyp
}
}
+ErrorObject::ErrorObject(ExecutionEngine *engine, const QString &message, const QString &fileName, int line, int column, ErrorObject::ErrorType t)
+ : Object(engine)
+ , stack(0)
+{
+ type = Type_ErrorObject;
+ vtbl = &static_vtbl;
+ subtype = t;
+ defineAccessorProperty(engine, QStringLiteral("stack"), ErrorObject::method_get_stack, 0);
+
+ defineDefaultProperty(engine, QStringLiteral("name"), Value::fromString(engine, className()));
+
+ stackTrace = engine->stackTrace();
+ ExecutionEngine::StackFrame frame;
+ frame.source = fileName;
+ frame.line = line;
+ frame.column = column;
+ stackTrace.prepend(frame);
+
+ if (!stackTrace.isEmpty()) {
+ defineDefaultProperty(engine, QStringLiteral("fileName"), Value::fromString(engine, stackTrace.at(0).source));
+ defineDefaultProperty(engine, QStringLiteral("lineNumber"), Value::fromInt32(stackTrace.at(0).line));
+ }
+
+ defineDefaultProperty(engine, QStringLiteral("message"), Value::fromString(engine->newString(message)));
+}
+
Value ErrorObject::method_get_stack(SimpleCallContext *ctx)
{
ErrorObject *This = ctx->thisObject.asErrorObject();
@@ -131,34 +157,18 @@ DEFINE_MANAGED_VTABLE(SyntaxErrorObject);
SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const Value &msg)
: ErrorObject(engine, msg, SyntaxError)
- , msg(0)
{
vtbl = &static_vtbl;
prototype = engine->syntaxErrorPrototype;
}
-SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const QString &msg)
- : ErrorObject(engine, Value::fromString(engine, msg), SyntaxError)
- , msg(0)
+SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber)
+ : ErrorObject(engine, msg, fileName, lineNumber, columnNumber, SyntaxError)
{
vtbl = &static_vtbl;
prototype = engine->syntaxErrorPrototype;
}
-SyntaxErrorObject::SyntaxErrorObject(ExecutionContext *ctx, DiagnosticMessage *message)
- : ErrorObject(ctx->engine, message ? Value::fromString(message->buildFullMessage(ctx)) : ctx->argument(0), SyntaxError)
- , msg(message)
-{
- vtbl = &static_vtbl;
- prototype = ctx->engine->syntaxErrorPrototype;
- if (message) {
- defineDefaultProperty(ctx->engine, QStringLiteral("fileName"), Value::fromString(ctx, message->fileName));
- defineDefaultProperty(ctx->engine, QStringLiteral("lineNumber"), Value::fromInt32(message->startLine));
- }
-}
-
-
-
EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const Value &message)
: ErrorObject(engine, message, EvalError)
{
@@ -189,12 +199,10 @@ ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QStrin
prototype = engine->referenceErrorPrototype;
}
-ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber)
- : ErrorObject(engine, Value::fromString(engine, msg), ReferenceError)
+ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber)
+ : ErrorObject(engine, msg, fileName, lineNumber, columnNumber, ReferenceError)
{
prototype = engine->referenceErrorPrototype;
- defineDefaultProperty(engine, QStringLiteral("fileName"), Value::fromString(engine->rootContext, fileName));
- defineDefaultProperty(engine, QStringLiteral("lineNumber"), Value::fromInt32(lineNumber));
}
TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const Value &message)