diff options
author | Lars Knoll <lars.knoll@digia.com> | 2013-05-22 10:47:36 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2013-05-22 12:27:21 +0200 |
commit | d7f2868e427299c1cb9ec33b3c1939c6ad4e78a7 (patch) | |
tree | 9e642a0f8f238c6f70afa4fb70c286a92a701b1c /src/imports/testlib | |
parent | 3bd678c76d8ab699e79e5a3cfe43cff2db03fb8f (diff) |
Add support for generating stack traces to QV4::ExecutionEngine
This makes it possible to remove the v8::StackTrace API
Change-Id: I53eee022a1030f0f6bf9a9268ca7cd3d5975724d
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/imports/testlib')
-rw-r--r-- | src/imports/testlib/main.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/imports/testlib/main.cpp b/src/imports/testlib/main.cpp index d854a26af5..1192861856 100644 --- a/src/imports/testlib/main.cpp +++ b/src/imports/testlib/main.cpp @@ -106,22 +106,22 @@ public Q_SLOTS: QQmlV4Handle callerFile(int frameIndex = 0) const { - v8::Handle<v8::StackTrace> stacks = v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kDetailed); - int count = stacks->GetFrameCount(); - if (count >= frameIndex + 1) { - v8::Handle<v8::StackFrame> frame = stacks->GetFrame(frameIndex + 1); - return QQmlV4Handle(frame->GetScriptNameOrSourceURL()->v4Value()); - } + QQmlEngine *engine = qmlEngine(this); + QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine->handle()); + + 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(); } int callerLine(int frameIndex = 0) const { - v8::Handle<v8::StackTrace> stacks = v8::StackTrace::CurrentStackTrace(10, v8::StackTrace::kDetailed); - int count = stacks->GetFrameCount(); - if (count >= frameIndex + 1) { - v8::Handle<v8::StackFrame> frame = stacks->GetFrame(frameIndex + 1); - return frame->GetLineNumber(); - } + QQmlEngine *engine = qmlEngine(this); + QV4::ExecutionEngine *v4 = QV8Engine::getV4(engine->handle()); + + QVector<QV4::ExecutionEngine::StackFrame> stack = v4->stackTrace(frameIndex + 1); + if (stack.size() > frameIndex) + return stack.at(frameIndex).line; return -1; } }; |