MCPcopy Create free account
hub / github.com/cel-expr/cel-go / Bindings

Method Bindings

common/decls/decls.go:328–418  ·  view source on GitHub ↗

Bindings produces a set of function bindings, if any are defined.

()

Source from the content-addressed store, hash-verified

326
327// Bindings produces a set of function bindings, if any are defined.
328func (f *FunctionDecl) Bindings() ([]*functions.Overload, error) {
329 var emptySet []*functions.Overload
330 if f == nil {
331 return emptySet, nil
332 }
333 overloads := []*functions.Overload{}
334 nonStrict := false
335 hasLateBinding := false
336 for _, oID := range f.overloadOrdinals {
337 o := f.overloads[oID]
338 hasLateBinding = hasLateBinding || o.HasLateBinding()
339 if o.HasBinding() {
340 overload := &functions.Overload{
341 Operator: o.ID(),
342 Unary: o.guardedUnaryOp(f.Name(), f.disableTypeGuards),
343 Binary: o.guardedBinaryOp(f.Name(), f.disableTypeGuards),
344 Function: o.guardedFunctionOp(f.Name(), f.disableTypeGuards),
345 OperandTrait: o.OperandTrait(),
346 NonStrict: o.IsNonStrict(),
347 }
348 overloads = append(overloads, overload)
349 nonStrict = nonStrict || o.IsNonStrict()
350 }
351 }
352 if f.singleton != nil {
353 if len(overloads) != 0 {
354 return nil, fmt.Errorf("singleton function incompatible with specialized overloads: %s", f.Name())
355 }
356 if hasLateBinding {
357 return nil, fmt.Errorf("singleton function incompatible with late bindings: %s", f.Name())
358 }
359 overloads = []*functions.Overload{
360 {
361 Operator: f.Name(),
362 Unary: f.singleton.Unary,
363 Binary: f.singleton.Binary,
364 Function: f.singleton.Function,
365 OperandTrait: f.singleton.OperandTrait,
366 },
367 }
368 // fall-through to return single overload case.
369 }
370 if len(overloads) == 0 {
371 return overloads, nil
372 }
373 // Single overload. Replicate an entry for it using the function name as well.
374 if len(overloads) == 1 {
375 if overloads[0].Operator == f.Name() {
376 return overloads, nil
377 }
378 return append(overloads, &functions.Overload{
379 Operator: f.Name(),
380 Unary: overloads[0].Unary,
381 Binary: overloads[0].Binary,
382 Function: overloads[0].Function,
383 NonStrict: overloads[0].NonStrict,
384 OperandTrait: overloads[0].OperandTrait,
385 }), nil

Callers 13

TestNilFunctionFunction · 0.95
newStandardInterpreterFunction · 0.80
addFunctionBindingsFunction · 0.80
funcBindingsFunction · 0.80
newProgramFunction · 0.80
TestFunctionBindingsFunction · 0.80
TestOverloadIsNonStrictFunction · 0.80

Calls 11

NameMethod · 0.95
MaybeNoSuchOverloadFunction · 0.85
HasBindingMethod · 0.80
guardedUnaryOpMethod · 0.80
guardedBinaryOpMethod · 0.80
guardedFunctionOpMethod · 0.80
OperandTraitMethod · 0.80
IsNonStrictMethod · 0.80
IDMethod · 0.65
HasLateBindingMethod · 0.45

Tested by 12

TestNilFunctionFunction · 0.76
newStandardInterpreterFunction · 0.64
addFunctionBindingsFunction · 0.64
funcBindingsFunction · 0.64
TestFunctionBindingsFunction · 0.64
TestOverloadIsNonStrictFunction · 0.64
TestOverloadOperandTraitFunction · 0.64