MCPcopy Create free account
hub / github.com/brimdata/super / parseCharClassMatcher

Method parseCharClassMatcher

compiler/parser/parser.go:25428–25492  ·  view source on GitHub ↗
(chr *charClassMatcher)

Source from the content-addressed store, hash-verified

25426}
25427
25428func (p *parser) parseCharClassMatcher(chr *charClassMatcher) (any, bool) {
25429 if p.debug {
25430 defer p.out(p.in("parseCharClassMatcher"))
25431 }
25432
25433 cur := p.pt.rn
25434 start := p.pt
25435
25436 // can't match EOF
25437 if cur == utf8.RuneError && p.pt.w == 0 { // see utf8.DecodeRune
25438 p.failAt(false, start.position, chr.val)
25439 return nil, false
25440 }
25441
25442 if chr.ignoreCase {
25443 cur = unicode.ToLower(cur)
25444 }
25445
25446 // try to match in the list of available chars
25447 for _, rn := range chr.chars {
25448 if rn == cur {
25449 if chr.inverted {
25450 p.failAt(false, start.position, chr.val)
25451 return nil, false
25452 }
25453 p.read()
25454 p.failAt(true, start.position, chr.val)
25455 return p.sliceFrom(start), true
25456 }
25457 }
25458
25459 // try to match in the list of ranges
25460 for i := 0; i < len(chr.ranges); i += 2 {
25461 if cur >= chr.ranges[i] && cur <= chr.ranges[i+1] {
25462 if chr.inverted {
25463 p.failAt(false, start.position, chr.val)
25464 return nil, false
25465 }
25466 p.read()
25467 p.failAt(true, start.position, chr.val)
25468 return p.sliceFrom(start), true
25469 }
25470 }
25471
25472 // try to match in the list of Unicode classes
25473 for _, cl := range chr.classes {
25474 if unicode.Is(cl, cur) {
25475 if chr.inverted {
25476 p.failAt(false, start.position, chr.val)
25477 return nil, false
25478 }
25479 p.read()
25480 p.failAt(true, start.position, chr.val)
25481 return p.sliceFrom(start), true
25482 }
25483 }
25484
25485 if chr.inverted {

Callers 1

parseExprMethod · 0.95

Calls 6

outMethod · 0.95
inMethod · 0.95
failAtMethod · 0.95
readMethod · 0.95
sliceFromMethod · 0.95
IsMethod · 0.80

Tested by

no test coverage detected