]> Cypherpunks repositories - gostls13.git/commitdiff
utf8.String: move to exp/utf8string.String
authorRob Pike <r@golang.org>
Tue, 17 Jan 2012 22:21:50 +0000 (14:21 -0800)
committerRob Pike <r@golang.org>
Tue, 17 Jan 2012 22:21:50 +0000 (14:21 -0800)
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5528115

21 files changed:
doc/go1.html
doc/go1.tmpl
src/buildscript/darwin_386.sh
src/buildscript/darwin_amd64.sh
src/buildscript/freebsd_386.sh
src/buildscript/freebsd_amd64.sh
src/buildscript/linux_386.sh
src/buildscript/linux_amd64.sh
src/buildscript/linux_arm.sh
src/buildscript/netbsd_386.sh
src/buildscript/netbsd_amd64.sh
src/buildscript/openbsd_386.sh
src/buildscript/openbsd_amd64.sh
src/buildscript/plan9_386.sh
src/buildscript/windows_386.sh
src/buildscript/windows_amd64.sh
src/pkg/exp/utf8string/Makefile [new file with mode: 0644]
src/pkg/exp/utf8string/string.go [moved from src/pkg/unicode/utf8/string.go with 88% similarity]
src/pkg/exp/utf8string/string_test.go [moved from src/pkg/unicode/utf8/string_test.go with 88% similarity]
src/pkg/unicode/utf8/Makefile
test/alias.go

index 2168ba56288b9950f5cc1ac98911fa97afb86477..af9bbd779a81bf18b939cbe1f28581f915df6d26 100644 (file)
@@ -922,6 +922,10 @@ Several packages have moved under <code>exp</code> at the time of Go 1's release
 <li><code>http/spdy</code></li>
 </ul>
 
+<p>
+Also, the <code>utf8.String</code> type has been moved to its own package, <code>exp/utf8string</code>.
+</p>
+
 <p>
 All these packages are available under the same names, with <code>exp/</code> prefixed: <code>exp/ebnf</code> etc.
 </p>
@@ -935,7 +939,7 @@ Also, the <code>gotype</code> command now resides in <code>exp/gotype</code>, wh
 <em>Updating</em>:
 Code that uses packages in <code>exp</code> will need to be updated by hand,
 or else compiled from an installation that has <code>exp</code> available.
-Gofix will warn about such uses.
+Gofix or the compiler will complain about such uses.
 <br>
 <font color="red">TODO: gofix should warn about such uses.</font>
 </p>
index 21256ed7f3a74c74e1b290fad4d25dc4b7b15e50..98517041192a5f10e1c216eb1df2c7c25174c523 100644 (file)
@@ -826,6 +826,10 @@ Several packages have moved under <code>exp</code> at the time of Go 1's release
 <li><code>http/spdy</code></li>
 </ul>
 
+<p>
+Also, the <code>utf8.String</code> type has been moved to its own package, <code>exp/utf8string</code>.
+</p>
+
 <p>
 All these packages are available under the same names, with <code>exp/</code> prefixed: <code>exp/ebnf</code> etc.
 </p>
@@ -839,7 +843,7 @@ Also, the <code>gotype</code> command now resides in <code>exp/gotype</code>, wh
 <em>Updating</em>:
 Code that uses packages in <code>exp</code> will need to be updated by hand,
 or else compiled from an installation that has <code>exp</code> available.
-Gofix will warn about such uses.
+Gofix or the compiler will complain about such uses.
 <br>
 <font color="red">TODO: gofix should warn about such uses.</font>
 </p>
index 42dbf5e17a9a1190fd7834830f3c67bd2b360f9e..6c8b997f0d87290626f024616104dc11b7ecb576 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/darwin_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/darwin_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/darwin_386/unicode/utf8.a
index 0766ff262c00a851e77e61c27c83ed5d946c6871..417e03fde392c6bc89dfae8aa77a370c4f0dc862 100755 (executable)
@@ -124,7 +124,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/darwin_amd64/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.6
 mkdir -p "$GOROOT"/pkg/darwin_amd64/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/darwin_amd64/unicode/utf8.a
index 310f3dcf7b589a9ca1be885c1c08f991c0e76ef0..2427f91439735bae567dbbf56164db14692369c8 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/freebsd_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/freebsd_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/freebsd_386/unicode/utf8.a
index 9a91017ac5db6e23601213f362d663a908b62b0c..6f632b4a5ff1f2c64dae2ce97f44cd88c4207399 100755 (executable)
@@ -124,7 +124,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/freebsd_amd64/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.6
 mkdir -p "$GOROOT"/pkg/freebsd_amd64/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/freebsd_amd64/unicode/utf8.a
index 26009320ce19a2f58d648da839e8b5f8703796ee..4deb775f7356af342839aeeda9a7f7521776244a 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/linux_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/linux_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/linux_386/unicode/utf8.a
index f2eae0a59b4a0900e2223ba193b9621fc55b4c1c..da27acc3fb8ba873ee9f477102afdb7ce41d373c 100755 (executable)
@@ -124,7 +124,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/linux_amd64/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.6
 mkdir -p "$GOROOT"/pkg/linux_amd64/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/linux_amd64/unicode/utf8.a
index 7589a5719e17dee54c8612640bbedc79f9549e6d..aa68cf802d4378cd78754c9b43f5a10438217b21 100755 (executable)
@@ -129,7 +129,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/linux_arm/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-5g -o "$WORK"/unicode/utf8/_obj/_go_.5 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+5g -o "$WORK"/unicode/utf8/_obj/_go_.5 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.5
 mkdir -p "$GOROOT"/pkg/linux_arm/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/linux_arm/unicode/utf8.a
index 8f9491c80f04e4482048b0225b73369486443237..5c822f345b5669062af6b9396881f6e671682159 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/netbsd_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/netbsd_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/netbsd_386/unicode/utf8.a
index be0053d066f8e8f39dc4071f093ed6f28d94601f..0bfea9c114e485d4f57d6dcbf8c647c7cd44a67d 100755 (executable)
@@ -124,7 +124,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/netbsd_amd64/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.6
 mkdir -p "$GOROOT"/pkg/netbsd_amd64/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/netbsd_amd64/unicode/utf8.a
index 30ddec6a5dd64f7112484be093309d235a98ca2d..be38d39441baa7ad0f2b561f56251a2864fdfea0 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/openbsd_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/openbsd_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/openbsd_386/unicode/utf8.a
index c315d59e1639768c61538d752544776b1c588948..00b32a139cfef4ce7fadf8dd2104243da412d68f 100755 (executable)
@@ -124,7 +124,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/openbsd_amd64/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.6
 mkdir -p "$GOROOT"/pkg/openbsd_amd64/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/openbsd_amd64/unicode/utf8.a
index 10a24724f1b76ba07448352550cb4e5e51f8df7e..d1c3ec6474f50254bb62d4ee0ba61f9f6f3f812b 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/plan9_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/plan9_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/plan9_386/unicode/utf8.a
index b5e79288bd95b884e2fdaac04a26f987f3ef045b..13885d8a2dd1fd9baacc11fd6bc29127cdec7229 100755 (executable)
@@ -128,7 +128,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/windows_386/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+8g -o "$WORK"/unicode/utf8/_obj/_go_.8 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.8
 mkdir -p "$GOROOT"/pkg/windows_386/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/windows_386/unicode/utf8.a
index bf87f6af9887aee0b7f4a1179d7a75a424b1a162..6eb6349c93d96914636abe43fc0d51ffa5acaa37 100755 (executable)
@@ -126,7 +126,7 @@ cp "$WORK"/unicode.a "$GOROOT"/pkg/windows_amd64/unicode.a
 
 mkdir -p "$WORK"/unicode/utf8/_obj/
 cd "$GOROOT"/src/pkg/unicode/utf8
-6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./string.go ./utf8.go
+6g -o "$WORK"/unicode/utf8/_obj/_go_.6 -p unicode/utf8 -I "$WORK" ./utf8.go
 gopack grc "$WORK"/unicode/utf8.a "$WORK"/unicode/utf8/_obj/_go_.6
 mkdir -p "$GOROOT"/pkg/windows_amd64/unicode/
 cp "$WORK"/unicode/utf8.a "$GOROOT"/pkg/windows_amd64/unicode/utf8.a
diff --git a/src/pkg/exp/utf8string/Makefile b/src/pkg/exp/utf8string/Makefile
new file mode 100644 (file)
index 0000000..49c1928
--- /dev/null
@@ -0,0 +1,11 @@
+# Copyright 2009 The Go Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file.
+
+include ../../../Make.inc
+
+TARG=exp/utf8string
+GOFILES=\
+       string.go\
+
+include ../../../Make.pkg
similarity index 88%
rename from src/pkg/unicode/utf8/string.go
rename to src/pkg/exp/utf8string/string.go
index 443decf056cdea432e314243d00251ca11c00123..da1e2de1ea2fc4db8c3f6cf6eda4670ca56733a5 100644 (file)
@@ -2,9 +2,13 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package utf8
+// Package utf8string provides an efficient way to index strings by rune rather than by byte.
+package utf8string
 
-import "errors"
+import (
+       "errors"
+       "unicode/utf8"
+)
 
 // String wraps a regular string with a small structure that provides more
 // efficient indexing by code point index, as opposed to byte index.
@@ -37,10 +41,10 @@ func (s *String) Init(contents string) *String {
        s.bytePos = 0
        s.runePos = 0
        for i := 0; i < len(contents); i++ {
-               if contents[i] >= RuneSelf {
+               if contents[i] >= utf8.RuneSelf {
                        // Not ASCII.
-                       s.numRunes = RuneCountInString(contents)
-                       _, s.width = DecodeRuneInString(contents)
+                       s.numRunes = utf8.RuneCountInString(contents)
+                       _, s.width = utf8.DecodeRuneInString(contents)
                        s.nonASCII = i
                        return s
                }
@@ -121,7 +125,7 @@ func (s *String) At(i int) rune {
        switch {
 
        case i == s.runePos-1: // backing up one rune
-               r, s.width = DecodeLastRuneInString(s.str[0:s.bytePos])
+               r, s.width = utf8.DecodeLastRuneInString(s.str[0:s.bytePos])
                s.runePos = i
                s.bytePos -= s.width
                return r
@@ -130,16 +134,16 @@ func (s *String) At(i int) rune {
                s.bytePos += s.width
                fallthrough
        case i == s.runePos:
-               r, s.width = DecodeRuneInString(s.str[s.bytePos:])
+               r, s.width = utf8.DecodeRuneInString(s.str[s.bytePos:])
                return r
        case i == 0: // start of string
-               r, s.width = DecodeRuneInString(s.str)
+               r, s.width = utf8.DecodeRuneInString(s.str)
                s.runePos = 0
                s.bytePos = 0
                return r
 
        case i == s.numRunes-1: // last rune in string
-               r, s.width = DecodeLastRuneInString(s.str)
+               r, s.width = utf8.DecodeLastRuneInString(s.str)
                s.runePos = i
                s.bytePos = len(s.str) - s.width
                return r
@@ -175,7 +179,7 @@ func (s *String) At(i int) rune {
        if forward {
                // TODO: Is it much faster to use a range loop for this scan?
                for {
-                       r, s.width = DecodeRuneInString(s.str[s.bytePos:])
+                       r, s.width = utf8.DecodeRuneInString(s.str[s.bytePos:])
                        if s.runePos == i {
                                break
                        }
@@ -184,7 +188,7 @@ func (s *String) At(i int) rune {
                }
        } else {
                for {
-                       r, s.width = DecodeLastRuneInString(s.str[0:s.bytePos])
+                       r, s.width = utf8.DecodeLastRuneInString(s.str[0:s.bytePos])
                        s.runePos--
                        s.bytePos -= s.width
                        if s.runePos == i {
similarity index 88%
rename from src/pkg/unicode/utf8/string_test.go
rename to src/pkg/exp/utf8string/string_test.go
index 2c139bea98cd8ba275e54b906d883c130d24b77a..28511b2f5f159274bce88245387f6f317be27ff1 100644 (file)
@@ -2,14 +2,23 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package utf8_test
+package utf8string
 
 import (
        "math/rand"
        "testing"
-       "unicode/utf8"
+       "unicode/utf8"
 )
 
+var testStrings = []string{
+       "",
+       "abcd",
+       "☺☻☹",
+       "日a本b語ç日ð本Ê語þ日¥本¼語i日©",
+       "日a本b語ç日ð本Ê語þ日¥本¼語i日©日a本b語ç日ð本Ê語þ日¥本¼語i日©日a本b語ç日ð本Ê語þ日¥本¼語i日©",
+       "\x80\x80\x80\x80",
+}
+
 func TestScanForwards(t *testing.T) {
        for _, s := range testStrings {
                runes := []rune(s)
@@ -106,7 +115,7 @@ func TestLimitSliceAccess(t *testing.T) {
                if str.Slice(0, 0) != "" {
                        t.Error("failure with empty slice at beginning")
                }
-               nr := RuneCountInString(s)
+               nr := utf8.RuneCountInString(s)
                if str.Slice(nr, nr) != "" {
                        t.Error("failure with empty slice at end")
                }
index 9863433b02128b60d7f10e580d1533addc893196..b6c36f07b20cf557ee660bad614c8e9f72b377f6 100644 (file)
@@ -6,7 +6,6 @@ include ../../../Make.inc
 
 TARG=unicode/utf8
 GOFILES=\
-       string.go\
        utf8.go\
 
 include ../../../Make.pkg
index 410a44e6c065ece34613b889430a470a65a37ca2..639a9cabbb4fa5d61ac3b42b23af7bbf13e5acea 100644 (file)
@@ -7,7 +7,7 @@
 package main
 
 // Test that error messages say what the source file says
-// (uint8 vs byte).
+// (uint8 vs byte, int32 vs. rune).
 
 import (
        "fmt"
@@ -29,7 +29,4 @@ func main() {
        ff.Format(fs, x) // ERROR "rune"
 
        utf8.RuneStart(x) // ERROR "byte"
-
-       var s utf8.String
-       s.At(x) // ERROR "int"
 }