From e43b6bd9c7a3d584e488cd3c84f9deb2d8955b64 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 8 Aug 2013 16:59:32 +0200 Subject: 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 --- src/qml/jsruntime/qv4errorobject.cpp | 52 +++++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 22 deletions(-) (limited to 'src/qml/jsruntime/qv4errorobject.cpp') 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) -- cgit v1.2.3