From a8357f0160681d02e7b9abaf3a6ad3b87bb5a933 Mon Sep 17 00:00:00 2001 From: Marcel van Lohuizen Date: Mon, 20 Aug 2012 10:56:41 +0200 Subject: [PATCH] exp/locale/collate/build: fixed bug that was exposed by experimenting with table changes. NOTE: there is no test for this, but 1) the code has now the same control flow as scan in exp/locale/collate/contract.go, which is tested and 2) Builder verifies the generated table so bugs in this code are quickly and easily found (which is how this bug was discovered). R=r CC=golang-dev https://golang.org/cl/6461082 --- src/pkg/exp/locale/collate/build/contract.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pkg/exp/locale/collate/build/contract.go b/src/pkg/exp/locale/collate/build/contract.go index 45d8f74b9b..f7cf64a730 100644 --- a/src/pkg/exp/locale/collate/build/contract.go +++ b/src/pkg/exp/locale/collate/build/contract.go @@ -241,8 +241,8 @@ func (ct *contractTrieSet) lookup(h ctHandle, str []byte) (index, ns int) { e := states[i] c := str[p] if c >= e.l { - p++ if e.l == c { + p++ if e.i != noIndex { index, ns = int(e.i), p } @@ -252,12 +252,13 @@ func (ct *contractTrieSet) lookup(h ctHandle, str []byte) (index, ns int) { } else { return } + continue } else if e.n == final && c <= e.h { + p++ return int(c-e.l) + int(e.i), p } - } else { - i++ } + i++ } return } -- 2.48.1