/* Apply constant folding. Remove any constant terms. */ func (this *DNF) VisitOr(expr *expression.Or) (interface{}, error) { err := expr.MapChildren(this) if err != nil { return nil, err } // Constant folding var terms expression.Expressions for _, term := range expr.Operands() { val := term.Value() if val == nil { if terms == nil { terms = make(expression.Expressions, 0, len(expr.Operands())) } terms = append(terms, term) continue } if val.Truth() { return expression.TRUE_EXPR, nil } } if len(terms) == 0 { return expression.FALSE_EXPR, nil } if len(terms) < len(expr.Operands()) { expr = expression.NewOr(terms...) } return expr, nil }