aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-03-06 09:09:05 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-07 16:55:12 +0100
commite4a6c5b3e41d655efcbd34e4e2dc0fd28f3da196 (patch)
treede355eb8310f5581127f3765cae1f99c22b30023 /src/qml/compiler
parent39b54d7293741c712116010b33f0d9823ab2ab1c (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.cpp13
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);