MCPcopy
hub / github.com/google/go-jsonnet / evalCall

Method evalCall

thunks.go:195–230  ·  view source on GitHub ↗
(arguments callArguments, i *interpreter)

Source from the content-addressed store, hash-verified

193}
194
195func (closure *closure) evalCall(arguments callArguments, i *interpreter) (value, error) {
196 argThunks := make(bindingFrame, len(arguments.named)+len(arguments.positional))
197 parameters := closure.parameters()
198 for i, arg := range arguments.positional {
199 argThunks[parameters[i].name] = arg
200 }
201
202 for _, arg := range arguments.named {
203 argThunks[arg.name] = arg.pv
204 }
205
206 var calledEnvironment environment
207
208 for _, param := range parameters {
209 if _, exists := argThunks[param.name]; !exists {
210 argThunks[param.name] = &cachedThunk{
211 // Default arguments are evaluated in the same environment as function body
212 env: &calledEnvironment,
213 body: param.defaultArg,
214 }
215 }
216 }
217
218 if arguments.tailstrict {
219 err := forceThunks(i, &argThunks)
220 if err != nil {
221 return nil, err
222 }
223 }
224
225 calledEnvironment = makeEnvironment(
226 addBindings(closure.env.upValues, argThunks),
227 closure.env.selfBinding,
228 )
229 return i.EvalInCleanEnv(&calledEnvironment, closure.function.Body, arguments.tailstrict)
230}
231
232func (closure *closure) parameters() []namedParameter {
233 return closure.params

Callers

nothing calls this directly

Calls 5

parametersMethod · 0.95
forceThunksFunction · 0.85
makeEnvironmentFunction · 0.85
addBindingsFunction · 0.85
EvalInCleanEnvMethod · 0.80

Tested by

no test coverage detected