summaryrefslogtreecommitdiff
path: root/src/regexp/onepass.go
Commit message (Collapse)AuthorAgeFilesLines
* regexp: split one-pass execution out of machine structRuss Cox2018-10-121-13/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows the one-pass executions to have their own pool of (much smaller) allocated structures. A step toward eliminating the per-Regexp machine cache. Not much effect on benchmarks, since there are no optimizations here, and pools are a tiny bit slower than a locked data structure for single-threaded code. name old time/op new time/op delta Find-12 254ns ± 0% 252ns ± 0% -0.94% (p=0.000 n=9+10) FindAllNoMatches-12 135ns ± 0% 134ns ± 1% -0.49% (p=0.002 n=9+9) FindString-12 247ns ± 0% 246ns ± 0% -0.24% (p=0.003 n=8+10) FindSubmatch-12 334ns ± 0% 333ns ± 2% ~ (p=0.283 n=10+10) FindStringSubmatch-12 321ns ± 0% 320ns ± 0% -0.51% (p=0.000 n=9+10) Literal-12 92.2ns ± 0% 91.1ns ± 0% -1.25% (p=0.000 n=9+10) NotLiteral-12 1.47µs ± 0% 1.45µs ± 0% -0.99% (p=0.000 n=9+10) MatchClass-12 2.17µs ± 0% 2.19µs ± 0% +0.84% (p=0.000 n=7+9) MatchClass_InRange-12 2.13µs ± 0% 2.09µs ± 0% -1.70% (p=0.000 n=10+10) ReplaceAll-12 1.39µs ± 0% 1.39µs ± 0% +0.51% (p=0.000 n=10+10) AnchoredLiteralShortNonMatch-12 83.2ns ± 0% 82.4ns ± 0% -0.96% (p=0.000 n=8+8) AnchoredLiteralLongNonMatch-12 105ns ± 0% 106ns ± 1% ~ (p=0.087 n=10+10) AnchoredShortMatch-12 131ns ± 0% 130ns ± 0% -0.76% (p=0.000 n=10+9) AnchoredLongMatch-12 267ns ± 0% 272ns ± 0% +2.01% (p=0.000 n=10+8) OnePassShortA-12 611ns ± 0% 615ns ± 0% +0.61% (p=0.000 n=9+10) NotOnePassShortA-12 552ns ± 0% 549ns ± 0% -0.46% (p=0.000 n=8+9) OnePassShortB-12 491ns ± 0% 494ns ± 0% +0.61% (p=0.000 n=8+8) NotOnePassShortB-12 412ns ± 0% 412ns ± 1% ~ (p=0.151 n=9+10) OnePassLongPrefix-12 112ns ± 0% 108ns ± 0% -3.57% (p=0.000 n=10+10) OnePassLongNotPrefix-12 410ns ± 0% 402ns ± 0% -1.95% (p=0.000 n=9+8) MatchParallelShared-12 38.8ns ± 1% 38.6ns ± 2% ~ (p=0.536 n=10+9) MatchParallelCopied-12 39.2ns ± 3% 39.4ns ± 7% ~ (p=0.986 n=10+10) QuoteMetaAll-12 94.6ns ± 0% 94.9ns ± 0% +0.29% (p=0.001 n=8+9) QuoteMetaNone-12 52.7ns ± 0% 52.7ns ± 0% ~ (all equal) Match/Easy0/32-12 72.9ns ± 0% 72.1ns ± 0% -1.07% (p=0.000 n=9+9) Match/Easy0/1K-12 298ns ± 0% 298ns ± 0% ~ (p=0.140 n=6+8) Match/Easy0/32K-12 4.60µs ± 2% 4.64µs ± 1% ~ (p=0.171 n=10+10) Match/Easy0/1M-12 235µs ± 0% 234µs ± 0% -0.14% (p=0.004 n=10+10) Match/Easy0/32M-12 7.96ms ± 0% 7.95ms ± 0% -0.12% (p=0.043 n=10+9) Match/Easy0i/32-12 1.09µs ± 0% 1.10µs ± 0% +0.15% (p=0.000 n=8+9) Match/Easy0i/1K-12 31.7µs ± 0% 31.8µs ± 1% ~ (p=0.905 n=9+10) Match/Easy0i/32K-12 1.61ms ± 0% 1.62ms ± 1% +1.12% (p=0.000 n=9+10) Match/Easy0i/1M-12 51.4ms ± 0% 51.8ms ± 0% +0.85% (p=0.000 n=8+8) Match/Easy0i/32M-12 1.65s ± 1% 1.65s ± 0% ~ (p=0.113 n=9+9) Match/Easy1/32-12 67.9ns ± 0% 67.7ns ± 1% ~ (p=0.232 n=8+10) Match/Easy1/1K-12 884ns ± 0% 873ns ± 0% -1.29% (p=0.000 n=9+10) Match/Easy1/32K-12 39.2µs ± 0% 39.4µs ± 0% +0.50% (p=0.000 n=9+10) Match/Easy1/1M-12 1.39ms ± 0% 1.39ms ± 0% +0.29% (p=0.000 n=9+10) Match/Easy1/32M-12 44.2ms ± 1% 44.3ms ± 0% +0.21% (p=0.029 n=10+10) Match/Medium/32-12 1.05µs ± 0% 1.04µs ± 0% -0.27% (p=0.001 n=8+9) Match/Medium/1K-12 31.3µs ± 0% 31.4µs ± 0% +0.39% (p=0.000 n=9+8) Match/Medium/32K-12 1.45ms ± 0% 1.45ms ± 0% +0.33% (p=0.000 n=8+9) Match/Medium/1M-12 46.2ms ± 0% 46.4ms ± 0% +0.35% (p=0.000 n=9+8) Match/Medium/32M-12 1.48s ± 0% 1.49s ± 1% +0.70% (p=0.000 n=8+10) Match/Hard/32-12 1.49µs ± 0% 1.48µs ± 0% -0.43% (p=0.000 n=10+9) Match/Hard/1K-12 45.1µs ± 1% 45.0µs ± 1% ~ (p=0.393 n=10+10) Match/Hard/32K-12 2.18ms ± 1% 2.24ms ± 0% +2.71% (p=0.000 n=9+8) Match/Hard/1M-12 69.7ms ± 1% 71.6ms ± 0% +2.76% (p=0.000 n=9+7) Match/Hard/32M-12 2.23s ± 1% 2.29s ± 0% +2.65% (p=0.000 n=9+9) Match/Hard1/32-12 7.89µs ± 0% 7.89µs ± 0% ~ (p=0.286 n=9+9) Match/Hard1/1K-12 244µs ± 0% 244µs ± 0% ~ (p=0.905 n=9+10) Match/Hard1/32K-12 10.3ms ± 0% 10.3ms ± 0% ~ (p=0.796 n=10+10) Match/Hard1/1M-12 331ms ± 0% 331ms ± 0% ~ (p=0.167 n=8+9) Match/Hard1/32M-12 10.6s ± 0% 10.6s ± 0% ~ (p=0.315 n=8+10) Match_onepass_regex/32-12 812ns ± 0% 830ns ± 0% +2.19% (p=0.000 n=10+9) Match_onepass_regex/1K-12 28.5µs ± 0% 28.7µs ± 1% +0.97% (p=0.000 n=10+9) Match_onepass_regex/32K-12 936µs ± 0% 949µs ± 0% +1.43% (p=0.000 n=10+8) Match_onepass_regex/1M-12 30.2ms ± 0% 30.4ms ± 0% +0.62% (p=0.000 n=10+8) Match_onepass_regex/32M-12 970ms ± 0% 973ms ± 0% +0.35% (p=0.000 n=10+9) CompileOnepass-12 4.63µs ± 1% 4.64µs ± 0% ~ (p=0.060 n=10+10) [Geo mean] 23.3µs 23.3µs +0.12% https://perf.golang.org/search?q=upload:20181004.2 Change-Id: Iff9e9f9d4a4698162126a2f300e8ed1b1a39361e Reviewed-on: https://go-review.googlesource.com/c/139780 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* all: use strings.Builder instead of bytes.Buffer where appropriateBrad Fitzpatrick2018-03-261-2/+2
| | | | | | | | | | | | | | I grepped for "bytes.Buffer" and "buf.String" and mostly ignored test files. I skipped a few on purpose and probably missed a few others, but otherwise I think this should be most of them. Updates #18990 Change-Id: I5a6ae4296b87b416d8da02d7bfaf981d8cc14774 Reviewed-on: https://go-review.googlesource.com/102479 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* regexp: remove redundant breakDaniel Martí2017-04-251-1/+0
| | | | | | | | | | | Breaks are implicit, and since there is no outer loop this one could not mean a loop break that was missing a label. Change-Id: Ie91018db1825aa8285c1aa55c9d28fc7ec7148af Reviewed-on: https://go-review.googlesource.com/39691 Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
* regexp: Use []bool instead of map[uint32]bool in makeOnePassTakuto Ikuta2017-04-161-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Variable m is accessed like variable onePassRunes. So, we can use array instead of map for variable m. Onepass compile performance is improved 10~20%. name old time/op new time/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 4.60µs ± 1% 4.10µs ± 1% -10.98% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 3.76µs ± 2% 3.33µs ± 1% -11.43% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 4.47µs ± 1% 4.14µs ± 1% -7.49% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 4.07µs ± 1% 3.81µs ± 2% -6.60% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 5.21µs ± 1% 4.80µs ± 2% -7.90% (p=0.008 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 3.26µs ± 1% 3.06µs ± 1% -6.15% (p=0.008 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 4.33µs ± 0% 4.04µs ± 3% -6.78% (p=0.008 n=5+5) CompileOnepass/^[a-c]+$-4 3.33µs ± 1% 3.06µs ± 4% -8.24% (p=0.008 n=5+5) CompileOnepass/^[a-c]*$-4 3.69µs ± 1% 3.39µs ± 4% -8.26% (p=0.008 n=5+5) CompileOnepass/^(?:a*)$-4 3.78µs ± 2% 3.36µs ± 0% -11.09% (p=0.008 n=5+5) CompileOnepass/^(?:(?:aa)|a)$-4 5.11µs ± 1% 4.60µs ± 1% -9.85% (p=0.008 n=5+5) CompileOnepass/^...$-4 3.51µs ± 1% 3.25µs ± 1% -7.37% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 5.05µs ± 1% 4.59µs ± 1% -9.13% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 5.24µs ± 1% 4.66µs ± 1% -11.16% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 5.94µs ± 7% 5.02µs ± 1% -15.62% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 5.34µs ± 7% 4.21µs ± 2% -21.05% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 7.25µs ± 7% 5.86µs ± 1% -19.17% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 4.13µs ± 9% 3.35µs ± 1% -18.99% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 6.48µs ± 4% 5.05µs ± 1% -22.16% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 7.05µs ± 7% 5.48µs ± 1% -22.21% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 4.71µs ± 4% 3.85µs ± 0% -18.14% (p=0.008 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 4.10µs ± 2% 3.69µs ± 1% -9.98% (p=0.008 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 5.20µs ± 1% 4.59µs ± 0% -11.72% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 9.29µs ± 2% 8.23µs ± 1% -11.43% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 6.33µs ± 3% 5.51µs ± 5% -12.95% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 162µs ± 0% 138µs ± 2% -14.70% (p=0.008 n=5+5) name old alloc/op new alloc/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 3.38kB ± 0% 3.27kB ± 0% -3.08% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 2.74kB ± 0% 2.59kB ± 0% -5.54% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 3.34kB ± 0% 3.23kB ± 0% -3.12% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 2.95kB ± 0% 2.85kB ± 0% -3.52% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 3.74kB ± 0% 3.58kB ± 0% -4.07% (p=0.008 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 2.45kB ± 0% 2.35kB ± 0% -4.20% (p=0.008 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 3.13kB ± 0% 3.02kB ± 0% -3.32% (p=0.008 n=5+5) CompileOnepass/^[a-c]+$-4 2.48kB ± 0% 2.38kB ± 0% -4.19% (p=0.008 n=5+5) CompileOnepass/^[a-c]*$-4 2.52kB ± 0% 2.42kB ± 0% -4.13% (p=0.008 n=5+5) CompileOnepass/^(?:a*)$-4 2.63kB ± 0% 2.53kB ± 0% -3.95% (p=0.008 n=5+5) CompileOnepass/^(?:(?:aa)|a)$-4 3.62kB ± 0% 3.47kB ± 0% -4.19% (p=0.008 n=5+5) CompileOnepass/^...$-4 2.87kB ± 0% 2.78kB ± 0% -3.34% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 3.62kB ± 0% 3.47kB ± 0% -4.19% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 4.38kB ± 0% 4.23kB ± 0% -3.33% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 4.30kB ± 0% 4.15kB ± 0% -3.35% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 4.05kB ± 0% 3.90kB ± 0% -3.56% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 5.30kB ± 0% 5.05kB ± 0% -4.83% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 2.87kB ± 0% 2.77kB ± 0% -3.62% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 4.35kB ± 0% 4.21kB ± 0% -3.31% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 4.58kB ± 0% 4.44kB ± 0% -3.14% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 3.15kB ± 0% 3.00kB ± 0% -4.82% (p=0.008 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 2.94kB ± 0% 2.84kB ± 0% -3.53% (p=0.008 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 4.08kB ± 0% 3.94kB ± 0% -3.53% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 6.10kB ± 0% 5.85kB ± 0% -4.19% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 4.46kB ± 0% 4.31kB ± 0% -3.28% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 135kB ± 0% 127kB ± 0% -5.88% (p=0.008 n=5+5) name old allocs/op new allocs/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 47.0 ± 0% 46.0 ± 0% -2.13% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 41.0 ± 0% 40.0 ± 0% -2.44% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 49.0 ± 0% 48.0 ± 0% -2.04% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 44.0 ± 0% 43.0 ± 0% -2.27% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 54.0 ± 0% 53.0 ± 0% -1.85% (p=0.008 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 33.0 ± 0% 32.0 ± 0% -3.03% (p=0.008 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 46.0 ± 0% 45.0 ± 0% -2.17% (p=0.008 n=5+5) CompileOnepass/^[a-c]+$-4 36.0 ± 0% 35.0 ± 0% -2.78% (p=0.008 n=5+5) CompileOnepass/^[a-c]*$-4 41.0 ± 0% 40.0 ± 0% -2.44% (p=0.008 n=5+5) CompileOnepass/^(?:a*)$-4 42.0 ± 0% 41.0 ± 0% -2.38% (p=0.008 n=5+5) CompileOnepass/^(?:(?:aa)|a)$-4 53.0 ± 0% 52.0 ± 0% -1.89% (p=0.008 n=5+5) CompileOnepass/^...$-4 39.0 ± 0% 38.0 ± 0% -2.56% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 53.0 ± 0% 52.0 ± 0% -1.89% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 53.0 ± 0% 52.0 ± 0% -1.89% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 56.0 ± 0% 55.0 ± 0% -1.79% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 47.0 ± 0% 46.0 ± 0% -2.13% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 65.0 ± 0% 64.0 ± 0% -1.54% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 40.0 ± 0% 39.0 ± 0% -2.50% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 57.0 ± 0% 56.0 ± 0% -1.75% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 63.0 ± 0% 62.0 ± 0% -1.59% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 46.0 ± 0% 45.0 ± 0% -2.17% (p=0.008 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 43.0 ± 0% 42.0 ± 0% -2.33% (p=0.008 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 49.0 ± 0% 48.0 ± 0% -2.04% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 101 ± 0% 100 ± 0% -0.99% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 60.0 ± 0% 59.0 ± 0% -1.67% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 1.09k ± 0% 1.08k ± 0% -0.74% (p=0.008 n=5+5) Fixes #19984 Change-Id: I2268b28d068926a057c62751528de15b6de61a7b Reviewed-on: https://go-review.googlesource.com/40890 Reviewed-by: Ralph Corderoy <ralph@inputplus.co.uk> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* regexp: reduce allocations at makeOnePasshaya14busa2017-03-291-15/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It reduces needless allocations on compiling onepass regex. Following CL 38750 name old time/op new time/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 5.75µs ± 1% 5.51µs ± 2% -4.25% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 4.76µs ± 0% 4.52µs ± 1% -5.06% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 5.56µs ± 0% 5.56µs ± 3% ~ (p=0.524 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 5.09µs ± 0% 5.15µs ± 5% ~ (p=0.690 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 6.53µs ± 0% 6.43µs ± 5% ~ (p=0.151 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 4.05µs ± 1% 4.00µs ± 2% ~ (p=0.095 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 5.47µs ± 0% 5.36µs ± 1% -1.91% (p=0.008 n=5+5) CompileOnepass/^[a-c]+$-4 4.13µs ± 1% 4.05µs ± 0% -2.07% (p=0.008 n=5+5) CompileOnepass/^[a-c]*$-4 4.59µs ± 2% 4.93µs ± 7% +7.30% (p=0.016 n=5+5) CompileOnepass/^(?:a*)$-4 4.67µs ± 1% 4.82µs ± 8% ~ (p=0.730 n=4+5) CompileOnepass/^(?:(?:aa)|a)$-4 6.43µs ± 1% 6.18µs ± 1% -3.91% (p=0.008 n=5+5) CompileOnepass/^...$-4 4.71µs ± 0% 4.31µs ± 1% -8.51% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 6.37µs ± 0% 6.17µs ± 0% -3.23% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 6.85µs ± 1% 6.50µs ± 1% -5.15% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 6.99µs ± 1% 6.66µs ± 1% -4.81% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 6.15µs ± 1% 5.87µs ± 0% -4.57% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 8.62µs ± 1% 8.21µs ± 1% -4.77% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 5.76µs ±42% 4.42µs ± 1% -23.35% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 7.17µs ± 6% 6.86µs ± 0% -4.39% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 8.08µs ± 2% 7.67µs ± 2% -4.97% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 5.53µs ± 3% 5.35µs ± 1% -3.34% (p=0.008 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 5.08µs ± 1% 4.98µs ± 0% -2.02% (p=0.008 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 6.49µs ± 1% 6.29µs ± 1% -3.03% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 11.8µs ± 1% 11.4µs ± 3% -3.98% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 8.02µs ± 1% 7.54µs ± 1% -6.00% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 228µs ±18% 196µs ± 0% -14.02% (p=0.016 n=5+4) name old alloc/op new alloc/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 3.41kB ± 0% 3.38kB ± 0% -0.94% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 2.75kB ± 0% 2.74kB ± 0% -0.29% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 3.34kB ± 0% 3.34kB ± 0% ~ (all equal) CompileOnepass/^(?:(?:a+)*)$-4 2.95kB ± 0% 2.95kB ± 0% ~ (all equal) CompileOnepass/^(?:(?:a|(?:aa)))$-4 3.75kB ± 0% 3.74kB ± 0% -0.43% (p=0.008 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 2.46kB ± 0% 2.45kB ± 0% -0.49% (p=0.008 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 3.13kB ± 0% 3.13kB ± 0% ~ (all equal) CompileOnepass/^[a-c]+$-4 2.48kB ± 0% 2.48kB ± 0% ~ (all equal) CompileOnepass/^[a-c]*$-4 2.52kB ± 0% 2.52kB ± 0% ~ (all equal) CompileOnepass/^(?:a*)$-4 2.63kB ± 0% 2.63kB ± 0% ~ (all equal) CompileOnepass/^(?:(?:aa)|a)$-4 3.64kB ± 0% 3.62kB ± 0% -0.44% (p=0.008 n=5+5) CompileOnepass/^...$-4 2.91kB ± 0% 2.87kB ± 0% -1.37% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 3.64kB ± 0% 3.62kB ± 0% -0.44% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 4.39kB ± 0% 4.38kB ± 0% -0.18% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 4.32kB ± 0% 4.30kB ± 0% -0.56% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 4.06kB ± 0% 4.05kB ± 0% -0.39% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 5.31kB ± 0% 5.30kB ± 0% -0.15% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 2.88kB ± 0% 2.87kB ± 0% -0.28% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 4.36kB ± 0% 4.35kB ± 0% -0.18% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 4.59kB ± 0% 4.58kB ± 0% -0.17% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 3.15kB ± 0% 3.15kB ± 0% ~ (all equal) CompileOnepass/^a(?:[bcd])+$-4 2.94kB ± 0% 2.94kB ± 0% ~ (all equal) CompileOnepass/^a((?:[bcd])+)$-4 4.09kB ± 0% 4.08kB ± 0% -0.20% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 6.15kB ± 0% 6.10kB ± 0% -0.78% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 4.47kB ± 0% 4.46kB ± 0% -0.36% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 135kB ± 0% 135kB ± 0% ~ (p=0.810 n=5+5) name old allocs/op new allocs/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 49.0 ± 0% 47.0 ± 0% -4.08% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 41.0 ± 0% 41.0 ± 0% ~ (all equal) CompileOnepass/^(?:(?:a{0,})*?)$-4 49.0 ± 0% 49.0 ± 0% ~ (all equal) CompileOnepass/^(?:(?:a+)*)$-4 44.0 ± 0% 44.0 ± 0% ~ (all equal) CompileOnepass/^(?:(?:a|(?:aa)))$-4 54.0 ± 0% 54.0 ± 0% ~ (all equal) CompileOnepass/^(?:[^\s\S])$-4 33.0 ± 0% 33.0 ± 0% ~ (all equal) CompileOnepass/^(?:(?:(?:a*)+))$-4 46.0 ± 0% 46.0 ± 0% ~ (all equal) CompileOnepass/^[a-c]+$-4 36.0 ± 0% 36.0 ± 0% ~ (all equal) CompileOnepass/^[a-c]*$-4 41.0 ± 0% 41.0 ± 0% ~ (all equal) CompileOnepass/^(?:a*)$-4 42.0 ± 0% 42.0 ± 0% ~ (all equal) CompileOnepass/^(?:(?:aa)|a)$-4 53.0 ± 0% 53.0 ± 0% ~ (all equal) CompileOnepass/^...$-4 43.0 ± 0% 39.0 ± 0% -9.30% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 53.0 ± 0% 53.0 ± 0% ~ (all equal) CompileOnepass/^a((b))c$-4 53.0 ± 0% 53.0 ± 0% ~ (all equal) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 58.0 ± 0% 56.0 ± 0% -3.45% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 47.0 ± 0% 47.0 ± 0% ~ (all equal) CompileOnepass/^a(?:(b)|(c))c$-4 65.0 ± 0% 65.0 ± 0% ~ (all equal) CompileOnepass/^a(?:b|c)$-4 40.0 ± 0% 40.0 ± 0% ~ (all equal) CompileOnepass/^a(?:b?|c)$-4 57.0 ± 0% 57.0 ± 0% ~ (all equal) CompileOnepass/^a(?:b?|c+)$-4 63.0 ± 0% 63.0 ± 0% ~ (all equal) CompileOnepass/^a(?:bc)+$-4 46.0 ± 0% 46.0 ± 0% ~ (all equal) CompileOnepass/^a(?:[bcd])+$-4 43.0 ± 0% 43.0 ± 0% ~ (all equal) CompileOnepass/^a((?:[bcd])+)$-4 49.0 ± 0% 49.0 ± 0% ~ (all equal) CompileOnepass/^a(:?b|c)*d$-4 105 ± 0% 101 ± 0% -3.81% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 62.0 ± 0% 60.0 ± 0% -3.23% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 1.09k ± 0% 1.09k ± 0% ~ (all equal) Fixes #19735 Change-Id: Ib90e18e1b06166407b26b2a68b88afbb1f486024 Reviewed-on: https://go-review.googlesource.com/38751 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* regexp: reduce allocations at onePassCopyhaya14busa2017-03-281-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It reduces needless allocations on compiling onepass regex. name old time/op new time/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 6.31µs ± 3% 6.11µs ± 3% ~ (p=0.056 n=5+5) CompileOnepass/^abcd$-4 5.69µs ±12% 4.93µs ± 4% -13.42% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 7.10µs ±12% 5.82µs ± 5% -17.95% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 5.99µs ±10% 6.07µs ±11% ~ (p=1.000 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 7.36µs ± 4% 7.81µs ±19% ~ (p=0.310 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 4.71µs ± 3% 4.71µs ± 5% ~ (p=1.000 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 6.06µs ± 2% 6.23µs ± 9% ~ (p=0.310 n=5+5) CompileOnepass/^[a-c]+$-4 4.74µs ± 4% 4.64µs ± 6% ~ (p=0.421 n=5+5) CompileOnepass/^[a-c]*$-4 5.17µs ± 2% 4.68µs ± 0% -9.57% (p=0.016 n=5+4) CompileOnepass/^(?:a*)$-4 5.34µs ± 3% 5.08µs ±12% ~ (p=0.151 n=5+5) CompileOnepass/^(?:(?:aa)|a)$-4 7.24µs ± 5% 7.33µs ±12% ~ (p=0.841 n=5+5) CompileOnepass/^...$-4 5.28µs ± 3% 4.99µs ± 9% ~ (p=0.095 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 7.20µs ± 4% 7.24µs ±10% ~ (p=0.841 n=5+5) CompileOnepass/^a((b))c$-4 7.99µs ± 3% 7.76µs ± 8% ~ (p=0.151 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 8.30µs ± 5% 7.29µs ± 4% -12.08% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 7.34µs ± 4% 7.24µs ±19% ~ (p=0.690 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 9.80µs ± 6% 9.49µs ±18% ~ (p=0.151 n=5+5) CompileOnepass/^a(?:b|c)$-4 5.23µs ± 3% 4.80µs ±10% ~ (p=0.056 n=5+5) CompileOnepass/^a(?:b?|c)$-4 8.26µs ± 3% 7.30µs ± 3% -11.62% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 9.18µs ± 2% 8.16µs ± 2% -11.06% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 6.16µs ± 3% 6.41µs ±13% ~ (p=0.548 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 5.75µs ± 5% 5.50µs ±12% ~ (p=0.151 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 7.65µs ± 5% 6.93µs ± 9% ~ (p=0.056 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 13.0µs ± 1% 12.1µs ± 2% -6.91% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 9.20µs ± 4% 8.25µs ± 3% -10.38% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 254µs ± 2% 220µs ± 6% -13.47% (p=0.008 n=5+5) name old alloc/op new alloc/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 3.92kB ± 0% 3.41kB ± 0% -13.06% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 3.20kB ± 0% 2.75kB ± 0% -14.00% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 3.85kB ± 0% 3.34kB ± 0% -13.31% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 3.46kB ± 0% 2.95kB ± 0% -14.78% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 4.20kB ± 0% 3.75kB ± 0% -10.67% (p=0.008 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 3.10kB ± 0% 2.46kB ± 0% -20.62% (p=0.008 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 3.64kB ± 0% 3.13kB ± 0% -14.07% (p=0.008 n=5+5) CompileOnepass/^[a-c]+$-4 3.06kB ± 0% 2.48kB ± 0% -18.85% (p=0.008 n=5+5) CompileOnepass/^[a-c]*$-4 3.10kB ± 0% 2.52kB ± 0% -18.60% (p=0.008 n=5+5) CompileOnepass/^(?:a*)$-4 3.21kB ± 0% 2.63kB ± 0% -17.96% (p=0.008 n=5+5) CompileOnepass/^(?:(?:aa)|a)$-4 4.09kB ± 0% 3.64kB ± 0% -10.96% (p=0.008 n=5+5) CompileOnepass/^...$-4 3.42kB ± 0% 2.91kB ± 0% -14.95% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 4.09kB ± 0% 3.64kB ± 0% -10.96% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 5.67kB ± 0% 4.39kB ± 0% -22.59% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 5.73kB ± 0% 4.32kB ± 0% -24.58% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 5.41kB ± 0% 4.06kB ± 0% -24.85% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 6.40kB ± 0% 5.31kB ± 0% -17.00% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 3.46kB ± 0% 2.88kB ± 0% -16.67% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 5.77kB ± 0% 4.36kB ± 0% -24.41% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 5.94kB ± 0% 4.59kB ± 0% -22.64% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 3.60kB ± 0% 3.15kB ± 0% -12.44% (p=0.008 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 3.46kB ± 0% 2.94kB ± 0% -14.81% (p=0.008 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 5.50kB ± 0% 4.09kB ± 0% -25.62% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 7.24kB ± 0% 6.15kB ± 0% -15.03% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 5.75kB ± 0% 4.47kB ± 0% -22.25% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 225kB ± 0% 135kB ± 0% -39.99% (p=0.008 n=5+5) name old allocs/op new allocs/op delta CompileOnepass/^(?:(?:(?:.(?:$))?))...-4 52.0 ± 0% 49.0 ± 0% -5.77% (p=0.008 n=5+5) CompileOnepass/^abcd$-4 44.0 ± 0% 41.0 ± 0% -6.82% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a{0,})*?)$-4 52.0 ± 0% 49.0 ± 0% -5.77% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a+)*)$-4 47.0 ± 0% 44.0 ± 0% -6.38% (p=0.008 n=5+5) CompileOnepass/^(?:(?:a|(?:aa)))$-4 57.0 ± 0% 54.0 ± 0% -5.26% (p=0.008 n=5+5) CompileOnepass/^(?:[^\s\S])$-4 36.0 ± 0% 33.0 ± 0% -8.33% (p=0.008 n=5+5) CompileOnepass/^(?:(?:(?:a*)+))$-4 49.0 ± 0% 46.0 ± 0% -6.12% (p=0.008 n=5+5) CompileOnepass/^[a-c]+$-4 39.0 ± 0% 36.0 ± 0% -7.69% (p=0.008 n=5+5) CompileOnepass/^[a-c]*$-4 44.0 ± 0% 41.0 ± 0% -6.82% (p=0.008 n=5+5) CompileOnepass/^(?:a*)$-4 45.0 ± 0% 42.0 ± 0% -6.67% (p=0.008 n=5+5) CompileOnepass/^(?:(?:aa)|a)$-4 56.0 ± 0% 53.0 ± 0% -5.36% (p=0.008 n=5+5) CompileOnepass/^...$-4 46.0 ± 0% 43.0 ± 0% -6.52% (p=0.008 n=5+5) CompileOnepass/^(?:a|(?:aa))$-4 56.0 ± 0% 53.0 ± 0% -5.36% (p=0.008 n=5+5) CompileOnepass/^a((b))c$-4 57.0 ± 0% 53.0 ± 0% -7.02% (p=0.008 n=5+5) CompileOnepass/^a.[l-nA-Cg-j]?e$-4 62.0 ± 0% 58.0 ± 0% -6.45% (p=0.008 n=5+5) CompileOnepass/^a((b))$-4 51.0 ± 0% 47.0 ± 0% -7.84% (p=0.008 n=5+5) CompileOnepass/^a(?:(b)|(c))c$-4 69.0 ± 0% 65.0 ± 0% -5.80% (p=0.008 n=5+5) CompileOnepass/^a(?:b|c)$-4 43.0 ± 0% 40.0 ± 0% -6.98% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c)$-4 61.0 ± 0% 57.0 ± 0% -6.56% (p=0.008 n=5+5) CompileOnepass/^a(?:b?|c+)$-4 67.0 ± 0% 63.0 ± 0% -5.97% (p=0.008 n=5+5) CompileOnepass/^a(?:bc)+$-4 49.0 ± 0% 46.0 ± 0% -6.12% (p=0.008 n=5+5) CompileOnepass/^a(?:[bcd])+$-4 46.0 ± 0% 43.0 ± 0% -6.52% (p=0.008 n=5+5) CompileOnepass/^a((?:[bcd])+)$-4 53.0 ± 0% 49.0 ± 0% -7.55% (p=0.008 n=5+5) CompileOnepass/^a(:?b|c)*d$-4 109 ± 0% 105 ± 0% -3.67% (p=0.008 n=5+5) CompileOnepass/^.bc(d|e)*$-4 66.0 ± 0% 62.0 ± 0% -6.06% (p=0.008 n=5+5) CompileOnepass/^loooooooooooooooooo...-4 1.10k ± 0% 1.09k ± 0% -0.91% (p=0.008 n=5+5) Fixes #19735 Change-Id: Ic68503aaa08e42fafcf7e11cf1f584d674f5ea7b Reviewed-on: https://go-review.googlesource.com/38750 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* regexp: remove dead codeBrad Fitzpatrick2016-10-041-5/+0
| | | | | | | | | | Wasn't convenient enough. Change-Id: I78270dc22cdb2e264641148e50029a9e4de953cd Reviewed-on: https://go-review.googlesource.com/30251 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* all: remove unnecessary type conversionsMatthew Dempsky2016-04-151-1/+1
| | | | | | | | | | | | | cmd and runtime were handled separately, and I'm intentionally skipped syscall. This is the rest of the standard library. CL generated mechanically with github.com/mdempsky/unconvert. Change-Id: I9e0eff886974dedc37adb93f602064b83e469122 Reviewed-on: https://go-review.googlesource.com/22104 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* all: single space after period.Brad Fitzpatrick2016-03-021-1/+1
| | | | | | | | | | | | | | | | | | | | The tree's pretty inconsistent about single space vs double space after a period in documentation. Make it consistently a single space, per earlier decisions. This means contributors won't be confused by misleading precedence. This CL doesn't use go/doc to parse. It only addresses // comments. It was generated with: $ perl -i -npe 's,^(\s*// .+[a-z]\.) +([A-Z]),$1 $2,' $(git grep -l -E '^\s*//(.+\.) +([A-Z])') $ go test go/doc -update Change-Id: Iccdb99c37c797ef1f804a94b22ba5ee4b500c4f7 Reviewed-on: https://go-review.googlesource.com/20022 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Dave Day <djd@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* all: make copyright headers consistent with one space after periodBrad Fitzpatrick2016-03-011-1/+1
| | | | | | | | | | | | | | | | | | | | | | This is a subset of https://golang.org/cl/20022 with only the copyright header lines, so the next CL will be smaller and more reviewable. Go policy has been single space after periods in comments for some time. The copyright header template at: https://golang.org/doc/contribute.html#copyright also uses a single space. Make them all consistent. Change-Id: Icc26c6b8495c3820da6b171ca96a74701b4a01b0 Reviewed-on: https://go-review.googlesource.com/20111 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* regexp: fix one-pass compilationCaleb Spare2015-11-251-78/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | The one-pass transformation is structured as a search over the input machine for conditions that violate the one-pass requisites. At each iteration, we should fully explore all non-input paths that proceed from the current instruction; this is implemented via recursive check calls. But when we reach instructions that demand input (InstRune*), these should be put onto the search queue. Instead of searching this way, the routine previously (effectively) proceeded through the machine one instruction at a time until finding an Inst{Match,Fail,Rune*}, calling check on each instruction. This caused bug #11905, where the transformation stopped before rewriting all InstAlts as InstAltMatches. Further, the check function unnecessarily recurred on InstRune* instructions. (I believe this helps to mask the above bug.) This change also deletes some unused functions and duplicate test cases. Fixes #11905. Change-Id: I5b0b26efea3d3bd01c7479a518b5ed1b886701cd Reviewed-on: https://go-review.googlesource.com/17195 Reviewed-by: Russ Cox <rsc@golang.org>
* regexp: fix LiteralPrefix for certain onepass progsCaleb Spare2015-11-251-1/+6
| | | | | | | | | | | | | | | | The prefix computation for onepass was incorrectly returning complete=true when it encountered a beginning-of-text empty width match (^) in the middle of an expression. Fix by returning complete only when the prefix is followed by $ and then an accepting state. Fixes #11175. Change-Id: Ie9c4cf5f76c1d2c904a6fb2f016cedb265c19fde Reviewed-on: https://go-review.googlesource.com/16200 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
* build: move package sources from src/pkg to srcRuss Cox2014-09-081-0/+581
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.