From e4a6c5b3e41d655efcbd34e4e2dc0fd28f3da196 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 6 Mar 2014 09:09:05 +0100 Subject: 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 --- src/qml/compiler/qv4isel_moth.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/qml/compiler') 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); -- cgit v1.2.3