code: func parseCharClass(runes []rune) *tCharClass {
  	var totalSize int32
  	numRanges := len(runes) / 2
  	ranges := make([]tCharClassRange, numRanges, numRanges)
  
  	for i := 0; i < numRanges; i++ {
  		start := runes[i*2]
  		end := runes[i*2+1]
  
  		// indicates a negative class
  		if start == 0 {
  			// doesn't make sense to generate null bytes, so all ranges must start at
  			// no less than 1.
  			start = 1
  		}
  
  		r := newCharClassRange(start, end)
  
  		ranges[i] = r
  		totalSize += r.Size
  	}
  
  	return &tCharClass{ranges, totalSize}
  }
docs: /*
  ParseCharClass parses a character class as represented by syntax.Parse into a slice of CharClassRange structs.
  
  Char classes are encoded as pairs of runes representing ranges:
  [0-9] = 09, [a0] = aa00 (2 1-len ranges).
  
  e.g.
  
  "[a0-9]" -> "aa09" -> a, 0-9
  
  "[^a-z]" -> "…" -> 0-(a-1), (z+1)-(max rune)
  */