diff options
author | Lars Knoll <lars.knoll@digia.com> | 2014-03-06 09:09:05 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-07 16:55:12 +0100 |
commit | e4a6c5b3e41d655efcbd34e4e2dc0fd28f3da196 (patch) | |
tree | de355eb8310f5581127f3765cae1f99c22b30023 /src/qml/compiler | |
parent | 39b54d7293741c712116010b33f0d9823ab2ab1c (diff) |
Fix test failure in qqmldebugjs autotest
The debugger should only have one breakpoint that can
be set per line. Nevertheless, we should have proper
line number information available in case we stop at
other places.
We also need a debug instruction before the return
statement, so that step out will always find a last
stopping point in the parent frame.
Change-Id: I86145fc244148f106a4a97ce69ab60b568c8dac6
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/qml/compiler')
-rw-r--r-- | src/qml/compiler/qv4isel_moth.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/qml/compiler/qv4isel_moth.cpp b/src/qml/compiler/qv4isel_moth.cpp index 921af76151..d97fa5827f 100644 --- a/src/qml/compiler/qv4isel_moth.cpp +++ b/src/qml/compiler/qv4isel_moth.cpp @@ -385,7 +385,7 @@ void InstructionSelection::run(int functionIndex) push.value = quint32(locals); addInstruction(push); - currentLine = -1; + currentLine = 0; for (int i = 0, ei = _function->basicBlocks.size(); i != ei; ++i) { blockNeedsDebugInstruction = irModule->debugMode; _block = _function->basicBlocks[i]; @@ -1038,7 +1038,7 @@ void InstructionSelection::visitJump(IR::Jump *s) if (blockNeedsDebugInstruction) { Instruction::Debug debug; - debug.lineNumber = currentLine; + debug.lineNumber = -currentLine; addInstruction(debug); } @@ -1053,7 +1053,7 @@ void InstructionSelection::visitCJump(IR::CJump *s) { if (blockNeedsDebugInstruction) { Instruction::Debug debug; - debug.lineNumber = currentLine; + debug.lineNumber = -currentLine; addInstruction(debug); } @@ -1090,6 +1090,13 @@ void InstructionSelection::visitCJump(IR::CJump *s) void InstructionSelection::visitRet(IR::Ret *s) { + if (blockNeedsDebugInstruction) { + // this is required so stepOut will always be guaranteed to stop in every stack frame + Instruction::Debug debug; + debug.lineNumber = -currentLine; + addInstruction(debug); + } + Instruction::Ret ret; ret.result = getParam(s->expr); addInstruction(ret); |