Skip to content

Commit 8ec0158

Browse files
committed
Use ast.Patch func
1 parent 6ebd95a commit 8ec0158

File tree

8 files changed

+14
-22
lines changed

8 files changed

+14
-22
lines changed

ast/node.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@ import (
77
"github.com/antonmedv/expr/file"
88
)
99

10-
func Patch(node *Node, newNode Node) {
11-
newNode.SetType((*node).Type())
12-
newNode.SetLocation((*node).Location())
13-
*node = newNode
14-
}
15-
1610
// Node represents items of abstract syntax tree.
1711
type Node interface {
1812
Location() file.Location
@@ -21,6 +15,12 @@ type Node interface {
2115
SetType(reflect.Type)
2216
}
2317

18+
func Patch(node *Node, newNode Node) {
19+
newNode.SetType((*node).Type())
20+
newNode.SetLocation((*node).Location())
21+
*node = newNode
22+
}
23+
2424
type base struct {
2525
loc file.Location
2626
nodeType reflect.Type

compiler/patcher.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ func (p *operatorPatcher) Exit(node *ast.Node) {
3131
Name: fn,
3232
Arguments: []ast.Node{binaryNode.Left, binaryNode.Right},
3333
}
34-
newNode.SetType((*node).Type())
35-
newNode.SetLocation((*node).Location())
36-
*node = newNode
34+
ast.Patch(node, newNode)
3735
}
3836
}
3937

optimizer/const_expr.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func (c *constExpr) Exit(node *Node) {
3030

3131
patch := func(newNode Node) {
3232
c.applied = true
33-
patch(node, newNode)
33+
Patch(node, newNode)
3434
}
3535

3636
switch n := (*node).(type) {

optimizer/const_range.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (*constRange) Exit(node *Node) {
2323
for i := range value {
2424
value[i] = min.Value + i
2525
}
26-
patch(node, &ConstantNode{
26+
Patch(node, &ConstantNode{
2727
Value: value,
2828
})
2929
}

optimizer/fold.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func (*fold) Enter(*Node) {}
1414
func (fold *fold) Exit(node *Node) {
1515
patch := func(newNode Node) {
1616
fold.applied = true
17-
patch(node, newNode)
17+
Patch(node, newNode)
1818
}
1919

2020
switch n := (*node).(type) {

optimizer/in_array.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (*inArray) Exit(node *Node) {
3333
for _, a := range array.Nodes {
3434
value[a.(*IntegerNode).Value] = struct{}{}
3535
}
36-
patch(node, &BinaryNode{
36+
Patch(node, &BinaryNode{
3737
Operator: n.Operator,
3838
Left: n.Left,
3939
Right: &ConstantNode{Value: value},
@@ -51,7 +51,7 @@ func (*inArray) Exit(node *Node) {
5151
for _, a := range array.Nodes {
5252
value[a.(*StringNode).Value] = struct{}{}
5353
}
54-
patch(node, &BinaryNode{
54+
Patch(node, &BinaryNode{
5555
Operator: n.Operator,
5656
Left: n.Left,
5757
Right: &ConstantNode{Value: value},

optimizer/in_range.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ func (*inRange) Exit(node *Node) {
1414
if rng, ok := n.Right.(*BinaryNode); ok && rng.Operator == ".." {
1515
if from, ok := rng.Left.(*IntegerNode); ok {
1616
if to, ok := rng.Right.(*IntegerNode); ok {
17-
patch(node, &BinaryNode{
17+
Patch(node, &BinaryNode{
1818
Operator: "and",
1919
Left: &BinaryNode{
2020
Operator: ">=",
@@ -28,7 +28,7 @@ func (*inRange) Exit(node *Node) {
2828
},
2929
})
3030
if n.Operator == "not in" {
31-
patch(node, &UnaryNode{
31+
Patch(node, &UnaryNode{
3232
Operator: "not",
3333
Node: *node,
3434
})

optimizer/optimizer.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,3 @@ func Optimize(node *Node, config *conf.Config) error {
3232
Walk(node, &constRange{})
3333
return nil
3434
}
35-
36-
func patch(node *Node, newNode Node) {
37-
newNode.SetType((*node).Type())
38-
newNode.SetLocation((*node).Location())
39-
*node = newNode
40-
}

0 commit comments

Comments
 (0)