| 13 | } |
| 14 | |
| 15 | func (g *Grep) Call(vals []super.Value) super.Value { |
| 16 | patternVal, inputVal := vals[0], vals[1] |
| 17 | if super.TypeUnder(patternVal.Type()) != super.TypeString { |
| 18 | return g.sctx.WrapError("grep: pattern argument must be a string", patternVal) |
| 19 | } |
| 20 | if patternVal.IsNull() { |
| 21 | return super.Null |
| 22 | } |
| 23 | if p := patternVal.AsString(); g.grep == nil || g.pattern != p { |
| 24 | g.pattern = p |
| 25 | term := norm.NFC.Bytes(patternVal.Bytes()) |
| 26 | g.grep = expr.NewSearchString(string(term), nil) |
| 27 | } |
| 28 | return g.grep.Eval(inputVal) |
| 29 | } |