(expr Expr)
| 816 | var _ Visitor = &isConstVisitor{} |
| 817 | |
| 818 | func (v *isConstVisitor) VisitPre(expr Expr) (recurse bool, newExpr Expr) { |
| 819 | if v.isConst { |
| 820 | if isVar(v.ctx, expr, true /*allowConstPlaceholders*/) { |
| 821 | v.isConst = false |
| 822 | return false, expr |
| 823 | } |
| 824 | |
| 825 | switch t := expr.(type) { |
| 826 | case *FuncExpr: |
| 827 | if t.IsImpure() { |
| 828 | v.isConst = false |
| 829 | return false, expr |
| 830 | } |
| 831 | } |
| 832 | } |
| 833 | return true, expr |
| 834 | } |
| 835 | |
| 836 | func (*isConstVisitor) VisitPost(expr Expr) Expr { return expr } |
| 837 |