github.com/expr-lang/expr@v1.16.9/optimizer/optimizer.go (about) 1 package optimizer 2 3 import ( 4 . "github.com/expr-lang/expr/ast" 5 "github.com/expr-lang/expr/conf" 6 ) 7 8 func Optimize(node *Node, config *conf.Config) error { 9 Walk(node, &inArray{}) 10 for limit := 1000; limit >= 0; limit-- { 11 fold := &fold{} 12 Walk(node, fold) 13 if fold.err != nil { 14 return fold.err 15 } 16 if !fold.applied { 17 break 18 } 19 } 20 if config != nil && len(config.ConstFns) > 0 { 21 for limit := 100; limit >= 0; limit-- { 22 constExpr := &constExpr{ 23 fns: config.ConstFns, 24 } 25 Walk(node, constExpr) 26 if constExpr.err != nil { 27 return constExpr.err 28 } 29 if !constExpr.applied { 30 break 31 } 32 } 33 } 34 Walk(node, &inRange{}) 35 Walk(node, &filterMap{}) 36 Walk(node, &filterLen{}) 37 Walk(node, &filterLast{}) 38 Walk(node, &filterFirst{}) 39 Walk(node, &predicateCombination{}) 40 Walk(node, &sumArray{}) 41 Walk(node, &sumMap{}) 42 return nil 43 }