Skip to content

Commit b1fe2aa

Browse files
committed
Reset tracking of applied operator overloads before every walk of the ast tree.
1 parent fb6792b commit b1fe2aa

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

checker/checker.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,22 @@ func ParseCheck(input string, config *conf.Config) (*parser.Tree, error) {
2929
// types information available in the tree.
3030
_, _ = Check(tree, config)
3131

32+
r, repeatable := v.(interface {
33+
Reset()
34+
ShouldRepeat() bool
35+
});
36+
37+
if repeatable {
38+
r.Reset()
39+
}
40+
3241
ast.Walk(&tree.Node, v)
3342

34-
if v, ok := v.(interface {
35-
ShouldRepeat() bool
36-
}); ok {
37-
more = more || v.ShouldRepeat()
43+
if repeatable {
44+
more = more || r.ShouldRepeat()
3845
}
3946
}
47+
4048
if !more {
4149
break
4250
}

patcher/operator_override.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ func (p *OperatorOverloading) Visit(node *ast.Node) {
4343
}
4444
}
4545

46+
// Tracking must be reset before every walk over the AST tree
47+
func (p *OperatorOverloading) Reset() {
48+
p.applied = false
49+
}
50+
4651
func (p *OperatorOverloading) ShouldRepeat() bool {
4752
return p.applied
4853
}

0 commit comments

Comments
 (0)