Fixes #44
Unified · Split
| @@ -360,7 +360,15 @@ func expandRangeTable(t *unicode.RangeTable, key any) []rune { · 359 unmodified lines | ||
| 360 | 360 | return cached.([]rune) |
| 361 | 361 | } |
| 362 | 362 | |
| 363 | − var ret []rune | |
| 363 | + n := 0 | |
| 364 | + for _, r := range t.R16 { | |
| 365 | + n += int(r.Hi-r.Lo)/int(r.Stride) + 1 | |
| 366 | + } | |
| 367 | + for _, r := range t.R32 { | |
| 368 | + n += int(r.Hi-r.Lo)/int(r.Stride) + 1 | |
| 369 | + } | |
| 370 | + | |
| 371 | + ret := make([]rune, 0, n) | |
| 364 | 372 | for _, r := range t.R16 { |
| 365 | 373 | for i := uint32(r.Lo); i <= uint32(r.Hi); i += uint32(r.Stride) { |
| 366 | 374 | ret = append(ret, rune(i)) |
| @@ -416,7 +424,7 @@ func charClassGen(re *syntax.Regexp) *Generator[rune] { · 49 unmodified lines | ||
| 416 | 424 | return cached.(*Generator[rune]) |
| 417 | 425 | } |
| 418 | 426 | |
| 419 | − t := &unicode.RangeTable{} | |
| 427 | + t := &unicode.RangeTable{R32: make([]unicode.Range32, 0, len(re.Rune)/2)} | |
| 420 | 428 | for i := 0; i < len(re.Rune); i += 2 { |
| 421 | 429 | t.R32 = append(t.R32, unicode.Range32{ |
| 422 | 430 | Lo: uint32(re.Rune[i]), |