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

Method updateImpl

repl/evaluator.go:137–217  ·  view source on GitHub ↗
(env *cel.Env)

Source from the content-addressed store, hash-verified

135}
136
137func (l *letFunction) updateImpl(env *cel.Env) error {
138 // declaration but no binding.
139 if l.src == "" {
140 l.impl = nil
141 return nil
142 }
143 var paramVars []*decls.VariableDecl
144
145 if l.receiver != nil {
146 decl, err := makeParamVar(env, "this", l.receiver)
147
148 if err != nil {
149 return err
150 }
151 paramVars = append(paramVars, decl)
152 }
153
154 for _, p := range l.params {
155 decl, err := makeParamVar(env, p.identifier, p.typeHint)
156 if err != nil {
157 return err
158 }
159 paramVars = append(paramVars, decl)
160 }
161
162 var err error
163 l.fnEnv, err = env.Extend(cel.VariableDecls(paramVars...))
164 if err != nil {
165 return err
166 }
167
168 ast, iss := l.fnEnv.Compile(l.src)
169
170 if iss != nil {
171 return iss.Err()
172 }
173
174 if !typeAssignable(env, ast.OutputType(), l.resultType) {
175 return fmt.Errorf("got result type %s for function %s", UnparseType(ast.OutputType()), l)
176 }
177
178 l.prog, err = l.fnEnv.Program(ast)
179
180 if err != nil {
181 return err
182 }
183
184 l.impl = func(args ...ref.Val) ref.Val {
185 var err error
186 var instance ref.Val
187 if l.receiver != nil {
188 instance = args[0]
189 args = args[1:]
190 }
191 err = checkArgsMatch(env, l.params, args)
192 if err != nil {
193 return types.NewErr("error evaluating %s: %v", l, err)
194 }

Callers 1

updateMethod · 0.95

Calls 15

TypeMethod · 0.95
VariableDeclsFunction · 0.92
NewErrFunction · 0.92
makeParamVarFunction · 0.85
typeAssignableFunction · 0.85
UnparseTypeFunction · 0.85
checkArgsMatchFunction · 0.85
runtimeTypeAgreesFunction · 0.85
ErrMethod · 0.80
ProgramMethod · 0.80
SpecifierFormatMethod · 0.80
CompileMethod · 0.65

Tested by

no test coverage detected