| 385 | } |
| 386 | |
| 387 | func (f *functionCaller) CallFunction(name string, arguments []interface{}, intr *treeInterpreter) (interface{}, error) { |
| 388 | entry, ok := f.functionTable[name] |
| 389 | if !ok { |
| 390 | return nil, errors.New("unknown function: " + name) |
| 391 | } |
| 392 | resolvedArgs, err := entry.resolveArgs(arguments) |
| 393 | if err != nil { |
| 394 | return nil, err |
| 395 | } |
| 396 | if entry.hasExpRef { |
| 397 | var extra []interface{} |
| 398 | extra = append(extra, intr) |
| 399 | resolvedArgs = append(extra, resolvedArgs...) |
| 400 | } |
| 401 | return entry.handler(resolvedArgs) |
| 402 | } |
| 403 | |
| 404 | func jpfAbs(arguments []interface{}) (interface{}, error) { |
| 405 | num := arguments[0].(float64) |