mirror of
https://github.com/kubernetes-sigs/descheduler.git
synced 2026-01-26 21:31:18 +01:00
32
vendor/github.com/google/cel-go/parser/macro.go
generated
vendored
32
vendor/github.com/google/cel-go/parser/macro.go
generated
vendored
@@ -225,6 +225,9 @@ type ExprHelper interface {
|
||||
// NewAccuIdent returns an accumulator identifier for use with comprehension results.
|
||||
NewAccuIdent() ast.Expr
|
||||
|
||||
// AccuIdentName returns the name of the accumulator identifier.
|
||||
AccuIdentName() string
|
||||
|
||||
// NewCall creates a function call Expr value for a global (free) function.
|
||||
NewCall(function string, args ...ast.Expr) ast.Expr
|
||||
|
||||
@@ -259,8 +262,13 @@ var (
|
||||
|
||||
// ExistsOneMacro expands "range.exists_one(var, predicate)", which is true if for exactly one
|
||||
// element in range the predicate holds.
|
||||
// Deprecated: Use ExistsOneMacroNew
|
||||
ExistsOneMacro = NewReceiverMacro(operators.ExistsOne, 2, MakeExistsOne)
|
||||
|
||||
// ExistsOneMacroNew expands "range.existsOne(var, predicate)", which is true if for exactly one
|
||||
// element in range the predicate holds.
|
||||
ExistsOneMacroNew = NewReceiverMacro("existsOne", 2, MakeExistsOne)
|
||||
|
||||
// MapMacro expands "range.map(var, function)" into a comprehension which applies the function
|
||||
// to each element in the range to produce a new list.
|
||||
MapMacro = NewReceiverMacro(operators.Map, 2, MakeMap)
|
||||
@@ -280,6 +288,7 @@ var (
|
||||
AllMacro,
|
||||
ExistsMacro,
|
||||
ExistsOneMacro,
|
||||
ExistsOneMacroNew,
|
||||
MapMacro,
|
||||
MapFilterMacro,
|
||||
FilterMacro,
|
||||
@@ -292,6 +301,11 @@ var (
|
||||
// AccumulatorName is the traditional variable name assigned to the fold accumulator variable.
|
||||
const AccumulatorName = "__result__"
|
||||
|
||||
// HiddenAccumulatorName is a proposed update to the default fold accumlator variable.
|
||||
// @result is not normally accessible from source, preventing accidental or intentional collisions
|
||||
// in user expressions.
|
||||
const HiddenAccumulatorName = "@result"
|
||||
|
||||
type quantifierKind int
|
||||
|
||||
const (
|
||||
@@ -336,6 +350,10 @@ func MakeMap(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common
|
||||
if !found {
|
||||
return nil, eh.NewError(args[0].ID(), "argument is not an identifier")
|
||||
}
|
||||
accu := eh.AccuIdentName()
|
||||
if v == accu || v == AccumulatorName {
|
||||
return nil, eh.NewError(args[0].ID(), "iteration variable overwrites accumulator variable")
|
||||
}
|
||||
|
||||
var fn ast.Expr
|
||||
var filter ast.Expr
|
||||
@@ -355,7 +373,7 @@ func MakeMap(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *common
|
||||
if filter != nil {
|
||||
step = eh.NewCall(operators.Conditional, filter, step, eh.NewAccuIdent())
|
||||
}
|
||||
return eh.NewComprehension(target, v, AccumulatorName, init, condition, step, eh.NewAccuIdent()), nil
|
||||
return eh.NewComprehension(target, v, accu, init, condition, step, eh.NewAccuIdent()), nil
|
||||
}
|
||||
|
||||
// MakeFilter expands the input call arguments into a comprehension which produces a list which contains
|
||||
@@ -366,13 +384,17 @@ func MakeFilter(eh ExprHelper, target ast.Expr, args []ast.Expr) (ast.Expr, *com
|
||||
if !found {
|
||||
return nil, eh.NewError(args[0].ID(), "argument is not an identifier")
|
||||
}
|
||||
accu := eh.AccuIdentName()
|
||||
if v == accu || v == AccumulatorName {
|
||||
return nil, eh.NewError(args[0].ID(), "iteration variable overwrites accumulator variable")
|
||||
}
|
||||
|
||||
filter := args[1]
|
||||
init := eh.NewList()
|
||||
condition := eh.NewLiteral(types.True)
|
||||
step := eh.NewCall(operators.Add, eh.NewAccuIdent(), eh.NewList(args[0]))
|
||||
step = eh.NewCall(operators.Conditional, filter, step, eh.NewAccuIdent())
|
||||
return eh.NewComprehension(target, v, AccumulatorName, init, condition, step, eh.NewAccuIdent()), nil
|
||||
return eh.NewComprehension(target, v, accu, init, condition, step, eh.NewAccuIdent()), nil
|
||||
}
|
||||
|
||||
// MakeHas expands the input call arguments into a presence test, e.g. has(<operand>.field)
|
||||
@@ -389,6 +411,10 @@ func makeQuantifier(kind quantifierKind, eh ExprHelper, target ast.Expr, args []
|
||||
if !found {
|
||||
return nil, eh.NewError(args[0].ID(), "argument must be a simple name")
|
||||
}
|
||||
accu := eh.AccuIdentName()
|
||||
if v == accu || v == AccumulatorName {
|
||||
return nil, eh.NewError(args[0].ID(), "iteration variable overwrites accumulator variable")
|
||||
}
|
||||
|
||||
var init ast.Expr
|
||||
var condition ast.Expr
|
||||
@@ -416,7 +442,7 @@ func makeQuantifier(kind quantifierKind, eh ExprHelper, target ast.Expr, args []
|
||||
default:
|
||||
return nil, eh.NewError(args[0].ID(), fmt.Sprintf("unrecognized quantifier '%v'", kind))
|
||||
}
|
||||
return eh.NewComprehension(target, v, AccumulatorName, init, condition, step, result), nil
|
||||
return eh.NewComprehension(target, v, accu, init, condition, step, result), nil
|
||||
}
|
||||
|
||||
func extractIdent(e ast.Expr) (string, bool) {
|
||||
|
||||
Reference in New Issue
Block a user