in match/compile.go [25:83]
func compile(r *syntax.Regexp) (stringMatcher, error) {
switch {
case isSubstringLiteral(r):
s := string(r.Rune)
return &substringMatcher{s, []byte(s)}, nil
case isExactLiteral(r):
s := string(r.Sub[1].Rune)
return &equalsMatcher{s, []byte(s)}, nil
case isAltLiterals(r):
var literals [][]byte
for _, sub := range r.Sub {
literals = append(literals, []byte(string(sub.Rune)))
}
return &altSubstringMatcher{literals}, nil
case isOneOfLiterals(r):
var literals [][]byte
for _, sub := range r.Sub[1].Sub {
literals = append(literals, []byte(string(sub.Rune)))
}
return &oneOfMatcher{literals}, nil
case isPrefixLiteral(r):
s := []byte(string(r.Sub[1].Rune))
return &prefixMatcher{s}, nil
case isPrefixAltLiterals(r):
var literals [][]byte
for _, sub := range r.Sub[1].Sub {
literals = append(literals, []byte(string(sub.Rune)))
}
return &altPrefixMatcher{literals}, nil
case isPrefixNumDate(r):
return compilePrefixNumDate(r)
case isEmptyText(r):
var m *emptyStringMatcher
return m, nil
case isEmptyTextWithWhitespace(r):
var m *emptyWhiteStringMatcher
return m, nil
case isAnyMatch(r):
var m *matchAny
return m, nil
default:
r, err := regexp.Compile(r.String())
if err != nil {
return nil, err
}
return r, nil
}
}