| 207 | } |
| 208 | |
| 209 | func CompareBytes(op string, pattern []byte) (Boolean, error) { |
| 210 | compare, ok := compareBytes[op] |
| 211 | if !ok { |
| 212 | return nil, fmt.Errorf("unknown bytes comparator: %s", op) |
| 213 | } |
| 214 | return func(val super.Value) super.Value { |
| 215 | val = val.Under() |
| 216 | if val.IsNull() { |
| 217 | return super.Null |
| 218 | } |
| 219 | if val.IsError() { |
| 220 | return val |
| 221 | } |
| 222 | v := false |
| 223 | switch val.Type().ID() { |
| 224 | case super.IDBytes, super.IDType: |
| 225 | v = compare(val.Bytes(), pattern) |
| 226 | } |
| 227 | return super.NewBool(v) |
| 228 | }, nil |
| 229 | } |
| 230 | |
| 231 | func CompileRegexp(pattern string) (*regexp.Regexp, error) { |
| 232 | re, err := regexp.Compile(pattern) |