summaryrefslogtreecommitdiff
path: root/combinator.go
diff options
context:
space:
mode:
authorAdam Scarr <adam@vektah.net>2018-06-11 11:54:35 +1000
committerAdam Scarr <adam@vektah.net>2018-06-11 11:54:35 +1000
commit8a5260ae50486c5e424d9778b7ec824b27842b9d (patch)
tree8cbd8a6fffe8491fda32f6e69f4e878730f53fe5 /combinator.go
parent981f4347b18e79a0b3fbaa73b2a1c31bba1a4da4 (diff)
remove branch predictor in Any
fixes #2
Diffstat (limited to 'combinator.go')
-rw-r--r--combinator.go14
1 files changed, 1 insertions, 13 deletions
diff --git a/combinator.go b/combinator.go
index 38145ee..5b0d584 100644
--- a/combinator.go
+++ b/combinator.go
@@ -36,7 +36,6 @@ func NoAutoWS(parser Parserish) Parser {
func Any(parsers ...Parserish) Parser {
parserfied := ParsifyAll(parsers...)
// Records which parser was successful for each byte, and will use it first next time.
- predictor := [255]int{}
return NewParser("Any()", func(ps *State, node *Result) {
ps.WS(ps)
@@ -45,13 +44,6 @@ func Any(parsers ...Parserish) Parser {
return
}
startpos := ps.Pos
- predictorChar := ps.Input[startpos]
- predicted := predictor[predictorChar]
-
- parserfied[predicted](ps, node)
- if !ps.Errored() {
- return
- }
longestError := ps.Error
if ps.Cut <= startpos {
@@ -60,10 +52,7 @@ func Any(parsers ...Parserish) Parser {
return
}
- for i, parser := range parserfied {
- if i == predicted {
- continue
- }
+ for _, parser := range parserfied {
parser(ps, node)
if ps.Errored() {
if ps.Error.pos >= longestError.pos {
@@ -75,7 +64,6 @@ func Any(parsers ...Parserish) Parser {
ps.Recover()
continue
}
- predictor[predictorChar] = i
return
}