diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-27 14:19:35 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2013-05-27 20:35:25 +0200 |
commit | 6b5c964caaa1076c988e41c011bf766801570fdd (patch) | |
tree | 37ebe0bb891569070aa6f72e959d9bb8e0f31fc7 | |
parent | 8a822866b68f5f425b2e1f5c793fe36acf291f4d (diff) |
Fix file and line number reporting of QML/JS errors
* Replace QUrl with QString in V4 for the source location (we don't need URL parsing)
* Replace line number and file in QV4::Exception with the information we retrieve from
the stack trace of the exception.
Fixes about five tst_qqmlecmascript tests that relied on correct file/line number information
Change-Id: I2a3daa72be6c5587fd965211ea8f6fb77142e7ee
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
28 files changed, 53 insertions, 55 deletions
diff --git a/src/imports/testlib/main.cpp b/src/imports/testlib/main.cpp index 1192861856..8a751300d0 100644 --- a/src/imports/testlib/main.cpp +++ b/src/imports/testlib/main.cpp @@ -111,7 +111,7 @@ public Q_SLOTS: QVector<QV4::ExecutionEngine::StackFrame> stack = v4->stackTrace(frameIndex + 1); if (stack.size() > frameIndex) - return QQmlV4Handle(QV4::Value::fromString(v4->newString(stack.at(frameIndex).source.url()))); + return QQmlV4Handle(QV4::Value::fromString(v4->newString(stack.at(frameIndex).source))); return QQmlV4Handle(); } int callerLine(int frameIndex = 0) const diff --git a/src/qml/qml/qqmljavascriptexpression.cpp b/src/qml/qml/qqmljavascriptexpression.cpp index 99ab12fcb5..a44ce540c2 100644 --- a/src/qml/qml/qqmljavascriptexpression.cpp +++ b/src/qml/qml/qqmljavascriptexpression.cpp @@ -79,8 +79,13 @@ void QQmlDelayedError::setErrorDescription(const QString &description) void QQmlDelayedError::setError(const QV4::Exception &e) { m_error.setDescription(e.value().toQString()); - m_error.setUrl(e.file()); - m_error.setLine(e.lineNumber()); + QV4::ExecutionEngine::StackTrace trace = e.stackTrace(); + if (!trace.isEmpty()) { + QV4::ExecutionEngine::StackFrame frame = trace.first(); + m_error.setUrl(QUrl(frame.source)); + m_error.setLine(frame.line); + } + m_error.setColumn(-1); } @@ -181,8 +186,7 @@ QQmlJavaScriptExpression::evaluate(QQmlContextData *context, *isUndefined = true; if (!watcher.wasDeleted()) { if (!e.value().isEmpty()) { - // ### line number - delayedError()->setErrorDescription(e.value().toQString()); + delayedError()->setError(e); } else { if (hasDelayedError()) delayedError()->clearError(); } @@ -300,9 +304,13 @@ QQmlDelayedError *QQmlJavaScriptExpression::delayedError() void QQmlJavaScriptExpression::exceptionToError(const QV4::Exception &e, QQmlError &error) { - error.setUrl(e.file()); - error.setLine(e.lineNumber()); - error.setColumn(-1); + QV4::ExecutionEngine::StackTrace trace = e.stackTrace(); + if (!trace.isEmpty()) { + QV4::ExecutionEngine::StackFrame frame = trace.first(); + error.setUrl(QUrl(frame.source)); + error.setLine(frame.line); + error.setColumn(-1); + } error.setDescription(e.value().toQString()); } diff --git a/src/qml/qml/qqmlxmlhttprequest.cpp b/src/qml/qml/qqmlxmlhttprequest.cpp index bf70e31899..8448e8dd16 100644 --- a/src/qml/qml/qqmlxmlhttprequest.cpp +++ b/src/qml/qml/qqmlxmlhttprequest.cpp @@ -1445,12 +1445,12 @@ void QQmlXMLHttpRequest::dispatchCallback(const QV4::Value &me) QV4::Object *o = me.asObject(); if (!o) __qmljs_throw(ctx, QV4::Value::fromObject( - v4->newErrorObject(QV4::Value::fromString(ctx, QStringLiteral("QQmlXMLHttpRequest: internal error: empty ThisObject")))), -1); + v4->newErrorObject(QV4::Value::fromString(ctx, QStringLiteral("QQmlXMLHttpRequest: internal error: empty ThisObject"))))); QV4::Object *thisObj = o->get(v4->newString(QStringLiteral("ThisObject"))).asObject(); if (!thisObj) __qmljs_throw(ctx, QV4::Value::fromObject( - v4->newErrorObject(QV4::Value::fromString(ctx, QStringLiteral("QQmlXMLHttpRequest: internal error: empty ThisObject")))), -1); + v4->newErrorObject(QV4::Value::fromString(ctx, QStringLiteral("QQmlXMLHttpRequest: internal error: empty ThisObject"))))); QV4::FunctionObject *callback = thisObj->get(v4->newString(QStringLiteral("onreadystatechange"))).asFunctionObject(); if (!callback) { diff --git a/src/qml/qml/v4/llvm_runtime.cpp b/src/qml/qml/v4/llvm_runtime.cpp index 615b303a5c..89d057d2a1 100644 --- a/src/qml/qml/v4/llvm_runtime.cpp +++ b/src/qml/qml/v4/llvm_runtime.cpp @@ -472,7 +472,7 @@ void __qmljs_llvm_typeof(ExecutionContext *ctx, Value *result, const Value *valu void __qmljs_llvm_throw(ExecutionContext *context, Value *value) { - __qmljs_throw(context, *value, -1); + __qmljs_throw(context, *value); } void __qmljs_llvm_delete_exception_handler(ExecutionContext *context) diff --git a/src/qml/qml/v4/moth/qv4instr_moth_p.h b/src/qml/qml/v4/moth/qv4instr_moth_p.h index 96043b4e00..ed762afb2d 100644 --- a/src/qml/qml/v4/moth/qv4instr_moth_p.h +++ b/src/qml/qml/v4/moth/qv4instr_moth_p.h @@ -249,7 +249,6 @@ union Instr struct instr_callBuiltinThrow { MOTH_INSTR_HEADER Param arg; - int line; }; struct instr_callBuiltinFinishTry { MOTH_INSTR_HEADER diff --git a/src/qml/qml/v4/moth/qv4isel_moth.cpp b/src/qml/qml/v4/moth/qv4isel_moth.cpp index 1b16ea4532..7e55a4e0cc 100644 --- a/src/qml/qml/v4/moth/qv4isel_moth.cpp +++ b/src/qml/qml/v4/moth/qv4isel_moth.cpp @@ -674,11 +674,10 @@ void InstructionSelection::callBuiltinPostIncrementValue(V4IR::Temp *value, V4IR addInstruction(call); } -void InstructionSelection::callBuiltinThrow(V4IR::Temp *arg, int line) +void InstructionSelection::callBuiltinThrow(V4IR::Temp *arg) { Instruction::CallBuiltinThrow call; call.arg = getParam(arg); - call.line = line; addInstruction(call); } diff --git a/src/qml/qml/v4/moth/qv4isel_moth_p.h b/src/qml/qml/v4/moth/qv4isel_moth_p.h index 49cef5cef0..dd3b73d5d8 100644 --- a/src/qml/qml/v4/moth/qv4isel_moth_p.h +++ b/src/qml/qml/v4/moth/qv4isel_moth_p.h @@ -45,7 +45,7 @@ protected: virtual void callBuiltinPostIncrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result); virtual void callBuiltinPostIncrementName(const QString &name, V4IR::Temp *result); virtual void callBuiltinPostIncrementValue(V4IR::Temp *value, V4IR::Temp *result); - virtual void callBuiltinThrow(V4IR::Temp *arg, int line); + virtual void callBuiltinThrow(V4IR::Temp *arg); virtual void callBuiltinFinishTry(); virtual void callBuiltinForeachIteratorObject(V4IR::Temp *arg, V4IR::Temp *result); virtual void callBuiltinForeachNextPropertyname(V4IR::Temp *arg, V4IR::Temp *result); diff --git a/src/qml/qml/v4/moth/qv4vme_moth.cpp b/src/qml/qml/v4/moth/qv4vme_moth.cpp index 69b239dfa3..2fb60e6e7c 100644 --- a/src/qml/qml/v4/moth/qv4vme_moth.cpp +++ b/src/qml/qml/v4/moth/qv4vme_moth.cpp @@ -308,7 +308,7 @@ QV4::Value VME::run(QV4::ExecutionContext *context, const uchar *&code, MOTH_END_INSTR(CallActivationProperty) MOTH_BEGIN_INSTR(CallBuiltinThrow) - __qmljs_throw(context, VALUE(instr.arg), instr.line); + __qmljs_throw(context, VALUE(instr.arg)); MOTH_END_INSTR(CallBuiltinThrow) MOTH_BEGIN_INSTR(EnterTry) diff --git a/src/qml/qml/v4/qv4codegen.cpp b/src/qml/qml/v4/qv4codegen.cpp index 31f7e5c45d..c2b58e4c21 100644 --- a/src/qml/qml/v4/qv4codegen.cpp +++ b/src/qml/qml/v4/qv4codegen.cpp @@ -2588,7 +2588,7 @@ V4IR::Function *Codegen::defineFunction(const QString &name, AST::Node *ast, enterEnvironment(ast); V4IR::Function *function = _module->newFunction(name, _function); - function->sourceFile = QUrl::fromLocalFile(_fileName); + function->sourceFile = _fileName; if (_debugger) _debugger->addFunction(function); diff --git a/src/qml/qml/v4/qv4context.cpp b/src/qml/qml/v4/qv4context.cpp index 005660891c..eb9a95393f 100644 --- a/src/qml/qml/v4/qv4context.cpp +++ b/src/qml/qml/v4/qv4context.cpp @@ -302,7 +302,7 @@ void ExecutionContext::mark() } } -QUrl ExecutionContext::currentFileName() const +QString ExecutionContext::currentFileName() const { const ExecutionContext *c = this; while (c) { @@ -313,7 +313,7 @@ QUrl ExecutionContext::currentFileName() const } c = c->outer; } - return QUrl(); + return QString(); } int ExecutionContext::currentLineNumber() const @@ -564,8 +564,7 @@ void ExecutionContext::inplaceBitOp(String *name, const Value &value, BinOp op) void ExecutionContext::throwError(const Value &value) { - // ### line number??? - __qmljs_throw(this, value, -1); + __qmljs_throw(this, value); } void ExecutionContext::throwError(const QString &message) diff --git a/src/qml/qml/v4/qv4context_p.h b/src/qml/qml/v4/qv4context_p.h index a96db3433b..dba87ff8c1 100644 --- a/src/qml/qml/v4/qv4context_p.h +++ b/src/qml/qml/v4/qv4context_p.h @@ -144,7 +144,7 @@ struct Q_QML_EXPORT ExecutionContext void mark(); - QUrl currentFileName() const; + QString currentFileName() const; int currentLineNumber() const; inline CallContext *asCallContext(); diff --git a/src/qml/qml/v4/qv4engine.cpp b/src/qml/qml/v4/qv4engine.cpp index 81ac59c037..5ba6ba5921 100644 --- a/src/qml/qml/v4/qv4engine.cpp +++ b/src/qml/qml/v4/qv4engine.cpp @@ -796,11 +796,9 @@ Function *ExecutionEngine::functionForProgramCounter(quintptr pc) const return 0; } -Exception::Exception(ExecutionContext *throwingContext, const Value &exceptionValue, int line) +Exception::Exception(ExecutionContext *throwingContext, const Value &exceptionValue) : exception(exceptionValue) - , m_line(line) { - m_file = throwingContext->currentFileName(); this->throwingContext = throwingContext->engine->current; accepted = false; m_stackTrace = throwingContext->engine->stackTrace(); diff --git a/src/qml/qml/v4/qv4engine_p.h b/src/qml/qml/v4/qv4engine_p.h index e7abf3c6a1..d2ea9db48d 100644 --- a/src/qml/qml/v4/qv4engine_p.h +++ b/src/qml/qml/v4/qv4engine_p.h @@ -274,7 +274,7 @@ struct Q_QML_EXPORT ExecutionEngine Object *qmlContextObject() const; struct StackFrame { - QUrl source; + QString source; QString function; int line; int column; @@ -314,7 +314,7 @@ inline ExecutionContext *ExecutionEngine::popContext() } struct Q_QML_EXPORT Exception { - explicit Exception(ExecutionContext *throwingContext, const Value &exceptionValue, int line); + explicit Exception(ExecutionContext *throwingContext, const Value &exceptionValue); ~Exception(); void accept(ExecutionContext *catchingContext); @@ -322,8 +322,6 @@ struct Q_QML_EXPORT Exception { void partiallyUnwindContext(ExecutionContext *catchingContext); Value value() const { return exception; } - QUrl file() const { return m_file; } - int lineNumber() const { return m_line; } ExecutionEngine::StackTrace stackTrace() const { return m_stackTrace; } @@ -331,8 +329,6 @@ private: ExecutionContext *throwingContext; bool accepted; PersistentValue exception; - QUrl m_file; - int m_line; ExecutionEngine::StackTrace m_stackTrace; }; diff --git a/src/qml/qml/v4/qv4function_p.h b/src/qml/qml/v4/qv4function_p.h index 2df63f1bfe..b487971209 100644 --- a/src/qml/qml/v4/qv4function_p.h +++ b/src/qml/qml/v4/qv4function_p.h @@ -109,7 +109,7 @@ struct Function { bool isStrict; bool isNamedExpression; - QUrl sourceFile; + QString sourceFile; QVector<LineNumberMapping> lineNumberMappings; Function(String *name) diff --git a/src/qml/qml/v4/qv4isel_masm.cpp b/src/qml/qml/v4/qv4isel_masm.cpp index bddf6d4c9b..28a5d51dbb 100644 --- a/src/qml/qml/v4/qv4isel_masm.cpp +++ b/src/qml/qml/v4/qv4isel_masm.cpp @@ -755,9 +755,9 @@ void InstructionSelection::callBuiltinPostDecrementValue(V4IR::Temp *value, V4IR Assembler::PointerToValue(result), Assembler::PointerToValue(value)); } -void InstructionSelection::callBuiltinThrow(V4IR::Temp *arg, int line) +void InstructionSelection::callBuiltinThrow(V4IR::Temp *arg) { - generateFunctionCall(Assembler::Void, __qmljs_throw, Assembler::ContextRegister, Assembler::Reference(arg), Assembler::TrustedImm32(line)); + generateFunctionCall(Assembler::Void, __qmljs_throw, Assembler::ContextRegister, Assembler::Reference(arg)); } typedef void *(*MiddleOfFunctionEntryPoint(ExecutionContext *, void *localsPtr)); diff --git a/src/qml/qml/v4/qv4isel_masm_p.h b/src/qml/qml/v4/qv4isel_masm_p.h index 277161fe5d..120b4a512b 100644 --- a/src/qml/qml/v4/qv4isel_masm_p.h +++ b/src/qml/qml/v4/qv4isel_masm_p.h @@ -780,7 +780,7 @@ protected: virtual void callBuiltinPostIncrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result); virtual void callBuiltinPostIncrementName(const QString &name, V4IR::Temp *result); virtual void callBuiltinPostIncrementValue(V4IR::Temp *value, V4IR::Temp *result); - virtual void callBuiltinThrow(V4IR::Temp *arg, int line); + virtual void callBuiltinThrow(V4IR::Temp *arg); virtual void callBuiltinFinishTry(); virtual void callBuiltinForeachIteratorObject(V4IR::Temp *arg, V4IR::Temp *result); virtual void callBuiltinForeachNextPropertyname(V4IR::Temp *arg, V4IR::Temp *result); diff --git a/src/qml/qml/v4/qv4isel_p.cpp b/src/qml/qml/v4/qv4isel_p.cpp index 3c83c68796..70713aa18f 100644 --- a/src/qml/qml/v4/qv4isel_p.cpp +++ b/src/qml/qml/v4/qv4isel_p.cpp @@ -310,7 +310,7 @@ void InstructionSelection::callBuiltin(V4IR::Call *call, V4IR::Temp *result) case V4IR::Name::builtin_throw: { V4IR::Temp *arg = call->args->expr->asTemp(); assert(arg != 0); - callBuiltinThrow(arg, baseName->line); + callBuiltinThrow(arg); } return; case V4IR::Name::builtin_finish_try: diff --git a/src/qml/qml/v4/qv4isel_p.h b/src/qml/qml/v4/qv4isel_p.h index d4f38d3a99..6739ff1d45 100644 --- a/src/qml/qml/v4/qv4isel_p.h +++ b/src/qml/qml/v4/qv4isel_p.h @@ -115,7 +115,7 @@ public: // to implement by subclasses: virtual void callBuiltinPostIncrementSubscript(V4IR::Temp *base, V4IR::Temp *index, V4IR::Temp *result) = 0; virtual void callBuiltinPostIncrementName(const QString &name, V4IR::Temp *result) = 0; virtual void callBuiltinPostIncrementValue(V4IR::Temp *value, V4IR::Temp *result) = 0; - virtual void callBuiltinThrow(V4IR::Temp *arg, int line) = 0; + virtual void callBuiltinThrow(V4IR::Temp *arg) = 0; virtual void callBuiltinFinishTry() = 0; virtual void callBuiltinForeachIteratorObject(V4IR::Temp *arg, V4IR::Temp *result) = 0; virtual void callBuiltinForeachNextPropertyname(V4IR::Temp *arg, V4IR::Temp *result) = 0; diff --git a/src/qml/qml/v4/qv4jsir_p.h b/src/qml/qml/v4/qv4jsir_p.h index 8ec223d9dc..0bb310b052 100644 --- a/src/qml/qml/v4/qv4jsir_p.h +++ b/src/qml/qml/v4/qv4jsir_p.h @@ -671,7 +671,7 @@ struct Function { QVector<Function *> nestedFunctions; Function *outer; - QUrl sourceFile; + QString sourceFile; int insideWithOrCatch; diff --git a/src/qml/qml/v4/qv4runtime.cpp b/src/qml/qml/v4/qv4runtime.cpp index d9ed491a57..52da74b9c1 100644 --- a/src/qml/qml/v4/qv4runtime.cpp +++ b/src/qml/qml/v4/qv4runtime.cpp @@ -917,7 +917,7 @@ void __qmljs_construct_property(ExecutionContext *context, Value *result, const context->throwTypeError(); } -void __qmljs_throw(ExecutionContext *context, const Value &value, int line) +void __qmljs_throw(ExecutionContext *context, const Value &value) { if (context->engine->debugger) context->engine->debugger->aboutToThrow(value); @@ -944,7 +944,7 @@ void __qmljs_throw(ExecutionContext *context, const Value &value, int line) printf("stack walked. throwing exception now...\n"); #endif - throw Exception(context, value, line); + throw Exception(context, value); } void __qmljs_builtin_typeof(ExecutionContext *ctx, Value *result, const Value &value) diff --git a/src/qml/qml/v4/qv4runtime_p.h b/src/qml/qml/v4/qv4runtime_p.h index 42e3669834..b9395b5c79 100644 --- a/src/qml/qml/v4/qv4runtime_p.h +++ b/src/qml/qml/v4/qv4runtime_p.h @@ -189,7 +189,7 @@ void __qmljs_delete_subscript(QV4::ExecutionContext *ctx, QV4::Value *result, co void __qmljs_delete_member(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &base, QV4::String *name); void __qmljs_delete_name(QV4::ExecutionContext *ctx, QV4::Value *result, QV4::String *name); -void Q_NORETURN __qmljs_throw(QV4::ExecutionContext*, const QV4::Value &value, int line); +void Q_NORETURN __qmljs_throw(QV4::ExecutionContext*, const QV4::Value &value); // binary operators typedef void (*BinOp)(QV4::ExecutionContext *ctx, QV4::Value *result, const QV4::Value &left, const QV4::Value &right); diff --git a/src/qml/qml/v4/qv4script.cpp b/src/qml/qml/v4/qv4script.cpp index 610e80246e..0d629e2781 100644 --- a/src/qml/qml/v4/qv4script.cpp +++ b/src/qml/qml/v4/qv4script.cpp @@ -162,7 +162,7 @@ void Script::parse() if (!vmFunction) // ### FIX file/line number - __qmljs_throw(v4->current, QV4::Value::fromObject(v4->newSyntaxErrorObject(v4->current, 0)), -1); + __qmljs_throw(v4->current, QV4::Value::fromObject(v4->newSyntaxErrorObject(v4->current, 0))); } Value Script::run() diff --git a/src/qml/qml/v4/qv4sequenceobject.cpp b/src/qml/qml/v4/qv4sequenceobject.cpp index 16b9ce7cb3..c0fa872204 100644 --- a/src/qml/qml/v4/qv4sequenceobject.cpp +++ b/src/qml/qml/v4/qv4sequenceobject.cpp @@ -60,7 +60,7 @@ static void generateWarning(QV4::ExecutionContext *ctx, const QString& descripti QQmlError retn; retn.setDescription(description); retn.setLine(ctx->currentLineNumber()); - retn.setUrl(ctx->currentFileName()); + retn.setUrl(QUrl(ctx->currentFileName())); QQmlEnginePrivate::warning(engine, retn); } diff --git a/src/qml/qml/v4/qv4v8.cpp b/src/qml/qml/v4/qv4v8.cpp index 8490d7fb48..97379956bc 100644 --- a/src/qml/qml/v4/qv4v8.cpp +++ b/src/qml/qml/v4/qv4v8.cpp @@ -1392,7 +1392,7 @@ ObjectTemplate::ObjectTemplate() Handle<Value> ThrowException(Handle<Value> exception) { - __qmljs_throw(currentEngine()->current, exception->v4Value(), -1); + __qmljs_throw(currentEngine()->current, exception->v4Value()); return Handle<Value>(); } diff --git a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp index 7f0c87d832..249add0f3f 100644 --- a/src/qml/qml/v8/qqmlbuiltinfunctions.cpp +++ b/src/qml/qml/v8/qqmlbuiltinfunctions.cpp @@ -81,7 +81,6 @@ struct StaticQtMetaObject : public QObject { return &staticQtMetaObject; } }; - QV4::QtObject::QtObject(ExecutionEngine *v4, QQmlEngine *qmlEngine) : Object(v4) , m_platform(0) @@ -1307,7 +1306,7 @@ static QString jsStack(QV4::ExecutionEngine *engine) { QString stackFrame = QString::fromLatin1("%1 (%2:%3:%4)\n").arg(frame.function, - frame.source.url(), + frame.source, QString::number(frame.line), QString::number(frame.column)); stack += stackFrame; @@ -1335,7 +1334,7 @@ static QV4::Value writeToConsole(ConsoleLogTypes logType, SimpleCallContext *ctx } QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - QMessageLogger logger(frame.source.url().toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); + QMessageLogger logger(frame.source.toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); switch (logType) { case Log: logger.debug("%s", qPrintable(result)); @@ -1376,7 +1375,7 @@ QV4::Value ConsoleObject::method_profile(SimpleCallContext *ctx) QV4::ExecutionEngine *v4 = ctx->engine; QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - QMessageLogger logger(frame.source.url().toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); + QMessageLogger logger(frame.source.toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); if (QQmlProfilerService::startProfiling()) { QV8ProfilerService::instance()->startProfiling(title); @@ -1398,7 +1397,7 @@ QV4::Value ConsoleObject::method_profileEnd(SimpleCallContext *ctx) QV4::ExecutionEngine *v4 = ctx->engine; QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - QMessageLogger logger(frame.source.url().toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); + QMessageLogger logger(frame.source.toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); if (QQmlProfilerService::stopProfiling()) { QV8ProfilerService *profiler = QV8ProfilerService::instance(); @@ -1454,7 +1453,7 @@ QV4::Value ConsoleObject::method_count(SimpleCallContext *ctx) QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - QString scriptName = frame.source.url(); + QString scriptName = frame.source; int value = v8engine->consoleCountHelper(scriptName, frame.line, frame.column); QString message = name + QLatin1String(": ") + QString::number(value); @@ -1475,7 +1474,7 @@ QV4::Value ConsoleObject::method_trace(SimpleCallContext *ctx) QString stack = jsStack(v4); QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - QMessageLogger logger(frame.source.url().toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); + QMessageLogger logger(frame.source.toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); logger.debug("%s", qPrintable(stack)); return QV4::Value::undefinedValue(); @@ -1505,7 +1504,7 @@ QV4::Value ConsoleObject::method_assert(SimpleCallContext *ctx) QString stack = jsStack(v4); QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - QMessageLogger logger(frame.source.url().toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); + QMessageLogger logger(frame.source.toUtf8().constData(), frame.line, frame.function.toUtf8().constData()); logger.critical("%s\n%s", qPrintable(message), qPrintable(stack)); } diff --git a/src/qml/qml/v8/qv8qobjectwrapper.cpp b/src/qml/qml/v8/qv8qobjectwrapper.cpp index 5e69ba208a..18b2265817 100644 --- a/src/qml/qml/v8/qv8qobjectwrapper.cpp +++ b/src/qml/qml/v8/qv8qobjectwrapper.cpp @@ -696,7 +696,7 @@ static inline void StoreProperty(QV8Engine *engine, QObject *object, QQmlPropert QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine); QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); - newBinding = new QQmlBinding(function->v4Value(), object, context, frame.source.url(), + newBinding = new QQmlBinding(function->v4Value(), object, context, frame.source, qmlSourceCoordinate(frame.line), qmlSourceCoordinate(frame.column)); newBinding->setTarget(object, *property, context); newBinding->setEvaluateFlags(newBinding->evaluateFlags() | diff --git a/src/qml/qml/v8/qv8valuetypewrapper.cpp b/src/qml/qml/v8/qv8valuetypewrapper.cpp index 3218da4e38..c51be06d1f 100644 --- a/src/qml/qml/v8/qv8valuetypewrapper.cpp +++ b/src/qml/qml/v8/qv8valuetypewrapper.cpp @@ -397,7 +397,7 @@ v8::Handle<v8::Value> QV8ValueTypeWrapper::Setter(v8::Handle<v8::String> propert QV4::ExecutionEngine::StackFrame frame = v4->currentStackFrame(); newBinding = new QQmlBinding(function->v4Value(), reference->object, context, - frame.source.url(), qmlSourceCoordinate(frame.line), qmlSourceCoordinate(frame.column)); + frame.source, qmlSourceCoordinate(frame.line), qmlSourceCoordinate(frame.column)); newBinding->setTarget(reference->object, cacheData, context); newBinding->setEvaluateFlags(newBinding->evaluateFlags() | QQmlBinding::RequiresThisObject); diff --git a/tools/v4/main.cpp b/tools/v4/main.cpp index ead057c86a..33c5ad7365 100644 --- a/tools/v4/main.cpp +++ b/tools/v4/main.cpp @@ -142,7 +142,7 @@ static void showException(QV4::ExecutionContext *ctx, const QV4::Exception &exce } foreach (const QV4::ExecutionEngine::StackFrame &frame, exception.stackTrace()) { - std::cerr << " at " << qPrintable(frame.function) << " (" << qPrintable(frame.source.toLocalFile()); + std::cerr << " at " << qPrintable(frame.function) << " (" << qPrintable(frame.source); if (frame.line >= 0) std::cerr << ":" << frame.line; std::cerr << ")" << std::endl; |