mirror of
https://github.com/go-delve/delve.git
synced 2025-10-29 01:27:16 +08:00
Properly handle infinite for loops when next'ing
This commit is contained in:
@ -191,8 +191,17 @@ func (s *Searcher) parseDefaultBlock(ifRoot ast.Node, parsedFile *ast.File, line
|
|||||||
}
|
}
|
||||||
|
|
||||||
if stmt, ok := n.(*ast.ForStmt); ok {
|
if stmt, ok := n.(*ast.ForStmt); ok {
|
||||||
parents = append(parents, stmt.Body)
|
|
||||||
pos := s.fileset.Position(stmt.Pos())
|
pos := s.fileset.Position(stmt.Pos())
|
||||||
|
if stmt.Cond == nil {
|
||||||
|
nextLine := s.fileset.Position(stmt.Body.List[0].Pos()).Line
|
||||||
|
if line < nextLine {
|
||||||
|
lines = []int{nextLine}
|
||||||
|
found = true
|
||||||
|
parents = nil
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
parents = append(parents, stmt.Body)
|
||||||
parentBlockBeginLine = pos.Line
|
parentBlockBeginLine = pos.Line
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,7 @@ func TestNextLines(t *testing.T) {
|
|||||||
line int
|
line int
|
||||||
nextlines []int
|
nextlines []int
|
||||||
}{
|
}{
|
||||||
|
{5, []int{7}},
|
||||||
{8, []int{9, 10, 13}},
|
{8, []int{9, 10, 13}},
|
||||||
{15, []int{17, 19}},
|
{15, []int{17, 19}},
|
||||||
{25, []int{27}},
|
{25, []int{27}},
|
||||||
@ -50,7 +51,7 @@ func TestNextLines(t *testing.T) {
|
|||||||
}
|
}
|
||||||
if len(lines) != len(c.nextlines) {
|
if len(lines) != len(c.nextlines) {
|
||||||
fmt.Println(lines)
|
fmt.Println(lines)
|
||||||
t.Fatalf("did not get correct number of lines back expected %d got %d for test case %d", len(c.nextlines), len(lines), i+1)
|
t.Fatalf("did not get correct number of lines back expected %d got %d for test case %d got %#v", len(c.nextlines), len(lines), i+1, lines)
|
||||||
}
|
}
|
||||||
for j, l := range lines {
|
for j, l := range lines {
|
||||||
if l != c.nextlines[j] {
|
if l != c.nextlines[j] {
|
||||||
|
|||||||
Reference in New Issue
Block a user