]> Cypherpunks repositories - gostls13.git/commitdiff
use append
authorRuss Cox <rsc@golang.org>
Thu, 28 Oct 2010 02:47:23 +0000 (19:47 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 28 Oct 2010 02:47:23 +0000 (19:47 -0700)
R=gri, r, r2
CC=golang-dev
https://golang.org/cl/2743042

32 files changed:
src/cmd/cgo/ast.go
src/cmd/cgo/gcc.go
src/cmd/cgo/util.go
src/cmd/hgpatch/main.go
src/cmd/prof/gopprof
src/pkg/bufio/bufio.go
src/pkg/bytes/bytes.go
src/pkg/crypto/tls/handshake_messages.go
src/pkg/crypto/x509/x509.go
src/pkg/debug/dwarf/type.go
src/pkg/debug/macho/file.go
src/pkg/exp/eval/func.go
src/pkg/exp/nacl/srpc/server.go
src/pkg/exp/ogle/process.go
src/pkg/flag/flag_test.go
src/pkg/go/ast/scope.go
src/pkg/go/doc/comment.go
src/pkg/go/doc/doc.go
src/pkg/html/token.go
src/pkg/image/format.go
src/pkg/json/scanner.go
src/pkg/net/hosts.go
src/pkg/os/dir_darwin.go
src/pkg/os/dir_freebsd.go
src/pkg/os/dir_linux.go
src/pkg/os/dir_nacl.go
src/pkg/os/env_windows.go
src/pkg/os/file_windows.go
src/pkg/regexp/regexp.go
src/pkg/template/template.go
src/pkg/testing/regexp.go
src/pkg/unicode/maketables.go

index 79c1557b32bf6aec029cf5ed71719d3203e4e4f4..9eb0d10945d20b44ccb14753dddf7e2ccaf30aee 100644 (file)
@@ -136,14 +136,6 @@ func (f *File) saveRef(x interface{}, context string) {
                // so that we will be able to distinguish a "top-level C"
                // from a local C.
                if l, ok := sel.X.(*ast.Ident); ok && l.Name == "C" {
-                       i := len(f.Ref)
-                       if i >= cap(f.Ref) {
-                               new := make([]*Ref, 2*i)
-                               for j, v := range f.Ref {
-                                       new[j] = v
-                               }
-                               f.Ref = new
-                       }
                        if context == "as2" {
                                context = "expr"
                        }
@@ -155,12 +147,11 @@ func (f *File) saveRef(x interface{}, context string) {
                                }
                                f.Name[goname] = name
                        }
-                       f.Ref = f.Ref[0 : i+1]
-                       f.Ref[i] = &Ref{
+                       f.Ref = append(f.Ref, &Ref{
                                Name:    name,
                                Expr:    n,
                                Context: context,
-                       }
+                       })
                        return
                }
        }
@@ -186,20 +177,10 @@ func (f *File) saveExport(x interface{}, context string) {
                        error(c.Position, "export missing name")
                }
 
-               if f.ExpFunc == nil {
-                       f.ExpFunc = make([]*ExpFunc, 0, 8)
-               }
-               i := len(f.ExpFunc)
-               if i >= cap(f.ExpFunc) {
-                       new := make([]*ExpFunc, i, 2*i)
-                       copy(new, f.ExpFunc)
-                       f.ExpFunc = new
-               }
-               f.ExpFunc = f.ExpFunc[0 : i+1]
-               f.ExpFunc[i] = &ExpFunc{
+               f.ExpFunc = append(f.ExpFunc, &ExpFunc{
                        Func:    n,
                        ExpName: name,
-               }
+               })
                break
        }
 }
index 46316ea782838396a627131e1eb9a34422e5b62c..d052481585b333f7f8a350c9dc6ae96aeac80e02 100644 (file)
@@ -495,7 +495,7 @@ func (p *Package) gccCmd() []string {
 // returns the corresponding DWARF data and any messages
 // printed to standard error.
 func (p *Package) gccDebug(stdin []byte) *dwarf.Data {
-       runGcc(stdin, concat(p.gccCmd(), p.GccOptions))
+       runGcc(stdin, append(p.gccCmd(), p.GccOptions...))
 
        // Try to parse f as ELF and Mach-O and hope one works.
        var f interface {
@@ -521,7 +521,7 @@ func (p *Package) gccDebug(stdin []byte) *dwarf.Data {
 // and its included files.
 func (p *Package) gccDefines(stdin []byte) string {
        base := []string{p.gccName(), p.gccMachine(), "-E", "-dM", "-xc", "-"}
-       stdout, _ := runGcc(stdin, concat(base, p.GccOptions))
+       stdout, _ := runGcc(stdin, append(base, p.GccOptions...))
        return stdout
 }
 
@@ -530,7 +530,7 @@ func (p *Package) gccDefines(stdin []byte) string {
 // gcc to fail.
 func (p *Package) gccErrors(stdin []byte) string {
        // TODO(rsc): require failure
-       args := concat(p.gccCmd(), p.GccOptions)
+       args := append(p.gccCmd(), p.GccOptions...)
        if *debugGcc {
                fmt.Fprintf(os.Stderr, "$ %s <<EOF\n", strings.Join(args, " "))
                os.Stderr.Write(stdin)
index 5c7fc7205c5065bf4f58db7ff2aea3d9fcb4e8c2..3ddf94d89cdc3990cc1fb4d4fb169b0498d3b5fa 100644 (file)
@@ -110,10 +110,3 @@ func slashToUnderscore(c int) int {
        }
        return c
 }
-
-func concat(a, b []string) []string {
-       c := make([]string, len(a)+len(b))
-       copy(c, a)
-       copy(c[len(a):], b)
-       return c
-}
index cdc293a13fbdb537cac348119173f33d27e0f549..bd4b563f92c49fb70aac43bf9dd02796520ed49b 100644 (file)
@@ -318,11 +318,9 @@ func hgRename(dst, src string) os.Error {
        return err
 }
 
-func copy(a []string) []string {
+func dup(a []string) []string {
        b := make([]string, len(a))
-       for i, s := range a {
-               b[i] = s
-       }
+       copy(b, a)
        return b
 }
 
@@ -379,7 +377,7 @@ func run(argv []string, input []byte) (out string, err os.Error) {
        return
 
 Error:
-       err = &runError{copy(argv), err}
+       err = &runError{dup(argv), err}
        return
 }
 
index dffeeffa13fe698127240c100ccafb91dbcab86e..4bcfa58009f113ce6bddad32bf0393e990029558 100755 (executable)
@@ -2736,6 +2736,7 @@ sub IsSymbolizedProfileFile {
 
 sub CheckSymbolPage {
   my $url = SymbolPageURL();
+print STDERR "Read $url\n";
   open(SYMBOL, "$CURL -s '$url' |");
   my $line = <SYMBOL>;
   $line =~ s/\r//g;         # turn windows-looking lines into unix-looking lines
@@ -2816,7 +2817,7 @@ sub ResolveRedirectionForCurl {
 # $main::prog to have the correct program name.
 sub ReadSymbols {
   my $in = shift;
-  my $map = {};
+  my $map = shift;
   while (<$in>) {
     s/\r//g;         # turn windows-looking lines into unix-looking lines
     # Removes all the leading zeroes from the symbols, see comment below.
@@ -2858,20 +2859,30 @@ sub FetchSymbols {
   my @pcs = grep { !$seen{$_}++ } keys(%$pcset);  # uniq
 
   if (!defined($symbol_map)) {
-    my $post_data = join("+", sort((map {"0x" . "$_"} @pcs)));
-
-    open(POSTFILE, ">$main::tmpfile_sym");
-    print POSTFILE $post_data;
-    close(POSTFILE);
-
-    my $url = SymbolPageURL();
-    $url = ResolveRedirectionForCurl($url);
-    my $command_line = "$CURL -sd '\@$main::tmpfile_sym' '$url'";
-    # We use c++filt in case $SYMBOL_PAGE gives us mangled symbols.
-    my $cppfilt = $obj_tool_map{"c++filt"};
-    open(SYMBOL, "$command_line | $cppfilt |") or error($command_line);
-    $symbol_map = ReadSymbols(*SYMBOL{IO});
-    close(SYMBOL);
+    $symbol_map = {};
+    my @toask = @pcs;
+    while (@toask > 0) {
+      my $n = @toask;
+      if ($n > 49) { $n = 49; }
+      my @thisround = @toask[0..$n];
+my $t = @toask;
+print STDERR "$n $t\n";
+      @toask = @toask[($n+1)..(@toask-1)];
+      my $post_data = join("+", sort((map {"0x" . "$_"} @thisround)));
+      open(POSTFILE, ">$main::tmpfile_sym");
+      print POSTFILE $post_data;
+      close(POSTFILE);
+
+print STDERR "SYMBL!\n";
+      my $url = SymbolPageURL();
+      $url = ResolveRedirectionForCurl($url);
+      my $command_line = "$CURL -sd '\@$main::tmpfile_sym' '$url'";
+      # We use c++filt in case $SYMBOL_PAGE gives us mangled symbols.
+      my $cppfilt = $obj_tool_map{"c++filt"};
+      open(SYMBOL, "$command_line | $cppfilt |") or error($command_line);
+      ReadSymbols(*SYMBOL{IO}, $symbol_map);
+      close(SYMBOL);
+    }
   }
 
   my $symbols = {};
index b5b8fb3ee6fbf2a84307351cddf9b079dd8b3fb3..7d59fb883cb3dc13f114cd9f1beb7c268adc767f 100644 (file)
@@ -293,7 +293,6 @@ func (b *Reader) ReadBytes(delim byte) (line []byte, err os.Error) {
        // accumulating full buffers.
        var frag []byte
        var full [][]byte
-       nfull := 0
        err = nil
 
        for {
@@ -310,24 +309,12 @@ func (b *Reader) ReadBytes(delim byte) (line []byte, err os.Error) {
                // Make a copy of the buffer.
                buf := make([]byte, len(frag))
                copy(buf, frag)
-
-               // Grow list if needed.
-               if full == nil {
-                       full = make([][]byte, 16)
-               } else if nfull >= len(full) {
-                       newfull := make([][]byte, len(full)*2)
-                       copy(newfull, full)
-                       full = newfull
-               }
-
-               // Save buffer
-               full[nfull] = buf
-               nfull++
+               full = append(full, buf)
        }
 
        // Allocate new buffer to hold the full pieces and the fragment.
        n := 0
-       for i := 0; i < nfull; i++ {
+       for i := range full {
                n += len(full[i])
        }
        n += len(frag)
@@ -335,9 +322,8 @@ func (b *Reader) ReadBytes(delim byte) (line []byte, err os.Error) {
        // Copy full pieces and fragment in.
        buf := make([]byte, n)
        n = 0
-       for i := 0; i < nfull; i++ {
-               copy(buf[n:], full[i])
-               n += len(full[i])
+       for i := range full {
+               n += copy(buf[n:], full[i])
        }
        copy(buf[n:], frag)
        return buf, err
index 62311d41d635ae100a6de5e64ee8e5a060f97e5e..1939fd567845484561decf3b5ba34781d346cf59 100644 (file)
@@ -545,7 +545,7 @@ func resize(n int) int {
 // Add appends the contents of t to the end of s and returns the result.
 // If s has enough capacity, it is extended in place; otherwise a
 // new array is allocated and returned.
-func Add(s, t []byte) []byte {
+func Add(s, t []byte) []byte { // TODO
        lens := len(s)
        lent := len(t)
        if lens+lent <= cap(s) {
@@ -562,7 +562,7 @@ func Add(s, t []byte) []byte {
 // AddByte appends byte t to the end of s and returns the result.
 // If s has enough capacity, it is extended in place; otherwise a
 // new array is allocated and returned.
-func AddByte(s []byte, t byte) []byte {
+func AddByte(s []byte, t byte) []byte { // TODO
        lens := len(s)
        if lens+1 <= cap(s) {
                s = s[0 : lens+1]
index b3b982b1c0897f8b32c29dcc83e4bad678100cd7..91771ce62b138271036c10d539757d18c3866503 100644 (file)
@@ -315,19 +315,6 @@ func (m *serverHelloMsg) marshal() []byte {
        return x
 }
 
-func append(slice []string, elem string) []string {
-       if len(slice) < cap(slice) {
-               slice = slice[0 : len(slice)+1]
-               slice[len(slice)-1] = elem
-               return slice
-       }
-
-       fresh := make([]string, len(slice)+1, cap(slice)*2+1)
-       copy(fresh, slice)
-       fresh[len(slice)] = elem
-       return fresh
-}
-
 func (m *serverHelloMsg) unmarshal(data []byte) bool {
        if len(data) < 42 {
                return false
index 327a5de2efee968fdc9e8c016dd4e032ccf316de..b7a527c4163f31c77e107bf177c7ef4f9d096ec5 100644 (file)
@@ -187,19 +187,19 @@ func (n *Name) fillFromRDNSequence(rdns *rdnSequence) {
                        case 5:
                                n.SerialNumber = value
                        case 6:
-                               n.Country = appendString(n.Country, value)
+                               n.Country = append(n.Country, value)
                        case 7:
-                               n.Locality = appendString(n.Locality, value)
+                               n.Locality = append(n.Locality, value)
                        case 8:
-                               n.Province = appendString(n.Province, value)
+                               n.Province = append(n.Province, value)
                        case 9:
-                               n.StreetAddress = appendString(n.StreetAddress, value)
+                               n.StreetAddress = append(n.StreetAddress, value)
                        case 10:
-                               n.Organization = appendString(n.Organization, value)
+                               n.Organization = append(n.Organization, value)
                        case 11:
-                               n.OrganizationalUnit = appendString(n.OrganizationalUnit, value)
+                               n.OrganizationalUnit = append(n.OrganizationalUnit, value)
                        case 17:
-                               n.PostalCode = appendString(n.PostalCode, value)
+                               n.PostalCode = append(n.PostalCode, value)
                        }
                }
        }
@@ -501,17 +501,6 @@ func parsePublicKey(algo PublicKeyAlgorithm, asn1Data []byte) (interface{}, os.E
        panic("unreachable")
 }
 
-func appendString(in []string, v string) (out []string) {
-       if cap(in)-len(in) < 1 {
-               out = make([]string, len(in)+1, len(in)*2+1)
-               copy(out, in)
-       } else {
-               out = in[0 : len(in)+1]
-       }
-       out[len(in)] = v
-       return out
-}
-
 func parseCertificate(in *certificate) (*Certificate, os.Error) {
        out := new(Certificate)
        out.Raw = in.TBSCertificate.Raw
@@ -601,10 +590,10 @@ func parseCertificate(in *certificate) (*Certificate, os.Error) {
                                        }
                                        switch v.Tag {
                                        case 1:
-                                               out.EmailAddresses = appendString(out.EmailAddresses, string(v.Bytes))
+                                               out.EmailAddresses = append(out.EmailAddresses, string(v.Bytes))
                                                parsedName = true
                                        case 2:
-                                               out.DNSNames = appendString(out.DNSNames, string(v.Bytes))
+                                               out.DNSNames = append(out.DNSNames, string(v.Bytes))
                                                parsedName = true
                                        }
                                }
index dc2e8b116d2486148900fff9dcc82c9db2cba3bf..902a545f860dd517ffe75189f5fdf714cd97e6db 100644 (file)
@@ -451,14 +451,7 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
                                f.ByteSize, _ = kid.Val(AttrByteSize).(int64)
                                f.BitOffset, _ = kid.Val(AttrBitOffset).(int64)
                                f.BitSize, _ = kid.Val(AttrBitSize).(int64)
-                               n := len(t.Field)
-                               if n >= cap(t.Field) {
-                                       fld := make([]*StructField, n, n*2)
-                                       copy(fld, t.Field)
-                                       t.Field = fld
-                               }
-                               t.Field = t.Field[0 : n+1]
-                               t.Field[n] = f
+                               t.Field = append(t.Field, f)
                        }
                }
 
@@ -554,14 +547,7 @@ func (d *Data) Type(off Offset) (Type, os.Error) {
                        case TagUnspecifiedParameters:
                                tkid = &DotDotDotType{}
                        }
-                       n := len(t.ParamType)
-                       if n >= cap(t.ParamType) {
-                               param := make([]Type, n, n*2)
-                               copy(param, t.ParamType)
-                               t.ParamType = param
-                       }
-                       t.ParamType = t.ParamType[0 : n+1]
-                       t.ParamType[n] = tkid
+                       t.ParamType = append(t.ParamType, tkid)
                }
 
        case TagTypedef:
index 4664f0190debd6f3582edaa9f42684739bcd6036..d2802266efa6b7eb6aa5c990597748a88bcaee92 100644 (file)
@@ -302,15 +302,7 @@ func NewFile(r io.ReaderAt) (*File, os.Error) {
 }
 
 func (f *File) pushSection(sh *Section, r io.ReaderAt) {
-       n := len(f.Sections)
-       if n >= cap(f.Sections) {
-               m := (n + 1) * 2
-               new := make([]*Section, n, m)
-               copy(new, f.Sections)
-               f.Sections = new
-       }
-       f.Sections = f.Sections[0 : n+1]
-       f.Sections[n] = sh
+       f.Sections = append(f.Sections, sh)
        sh.sr = io.NewSectionReader(r, int64(sh.Offset), int64(sh.Size))
        sh.ReaderAt = sh.sr
 }
index 777f7e5f64e1af02b588efc11a562ec98d3d32fd..cb1b579e42c9f35d92e7c5a0158222cfc096bcff 100644 (file)
@@ -43,14 +43,7 @@ type codeBuf struct {
 func newCodeBuf() *codeBuf { return &codeBuf{make(code, 0, 16)} }
 
 func (b *codeBuf) push(instr func(*Thread)) {
-       n := len(b.instrs)
-       if n >= cap(b.instrs) {
-               a := make(code, n, n*2)
-               copy(a, b.instrs)
-               b.instrs = a
-       }
-       b.instrs = b.instrs[0 : n+1]
-       b.instrs[n] = instr
+       b.instrs = append(b.instrs, instr)
 }
 
 func (b *codeBuf) nextPC() uint { return uint(len(b.instrs)) }
index 0abc6df4189bf511ef6f719b4bb2636ddd2def3d..5d65ca1fabbfa9927231772cd4e263c5342eb974 100644 (file)
@@ -53,14 +53,7 @@ var rpcMethod []method
 //     s       string
 //
 func Add(name, fmt string, handler Handler) {
-       n := len(rpcMethod)
-       if n >= cap(rpcMethod) {
-               a := make([]method, n, (n+4)*2)
-               copy(a, rpcMethod)
-               rpcMethod = a
-       }
-       rpcMethod = rpcMethod[0 : n+1]
-       rpcMethod[n] = method{name, fmt, handler}
+       rpcMethod = append(rpcMethod, method{name, fmt, handler})
 }
 
 // Serve accepts new SRPC connections from the file descriptor fd
index 2c59c79fc9397c60f6c343aafffc4519d82dce03..58e830aa68bfcd9595ebed406db3b46e670665fa 100644 (file)
@@ -390,15 +390,7 @@ func (p *Process) causesToEvents() ([]Event, os.Error) {
 // postEvent appends an event to the posted queue.  These events will
 // be processed before any currently pending events.
 func (p *Process) postEvent(ev Event) {
-       n := len(p.posted)
-       m := n * 2
-       if m == 0 {
-               m = 4
-       }
-       posted := make([]Event, n+1, m)
-       copy(posted, p.posted)
-       posted[n] = ev
-       p.posted = posted
+       p.posted = append(p.posted, ev)
 }
 
 // processEvents processes events in the event queue until no events
index 83bf7eebf85c9d3b7a939abb871a4504604de81d..5fb76493f637d0f3b2f71ffb1963e30f822544ca 100644 (file)
@@ -161,10 +161,7 @@ func (f *flagVar) String() string {
 }
 
 func (f *flagVar) Set(value string) bool {
-       n := make(flagVar, len(*f)+1)
-       copy(n, *f)
-       *f = n
-       (*f)[len(*f)-1] = value
+       *f = append(*f, value)
        return true
 }
 
index d65297c5b5883582ead0b660e0b2d7a20a9b8108..956a208aede5aa3e24d482dc879bbf7373e230e0 100644 (file)
@@ -66,17 +66,9 @@ func (s *Scope) Insert(obj *Object) *Object {
 
 
 func (s *Scope) append(obj *Object) {
-       n := len(s.Objects)
-       if n >= cap(s.Objects) {
-               new := make([]*Object, 2*n)
-               copy(new, s.Objects)
-               s.Objects = new
-       }
-       s.Objects = s.Objects[0 : n+1]
-       s.Objects[n] = obj
+       s.Objects = append(s.Objects, obj)
 }
 
-
 // ----------------------------------------------------------------------------
 // Objects
 
index e8595a690baef965a098f2fe0e957d44f4b6137f..f54a672db5280fab51a17870804c0d01057561b8 100644 (file)
@@ -62,16 +62,7 @@ func CommentText(comment *ast.CommentGroup) string {
 
                // Walk lines, stripping trailing white space and adding to list.
                for _, l := range cl {
-                       l = stripTrailingWhitespace(l)
-                       // Add to list.
-                       n := len(lines)
-                       if n+1 >= cap(lines) {
-                               newlines := make([]string, n, 2*cap(lines))
-                               copy(newlines, lines)
-                               lines = newlines
-                       }
-                       lines = lines[0 : n+1]
-                       lines[n] = l
+                       lines = append(lines, stripTrailingWhitespace(l))
                }
        }
 
index 39950525adfdb1a538786bbb6700715a2f398c34..aa139f45358ed71c62b557c8ec10e15890252c14 100644 (file)
@@ -277,12 +277,9 @@ func (doc *docReader) addDecl(decl ast.Decl) {
 
 
 func copyCommentList(list []*ast.Comment) []*ast.Comment {
-       nlist := make([]*ast.Comment, len(list))
-       copy(nlist, list)
-       return nlist
+       return append([]*ast.Comment(nil), list...)
 }
 
-
 var (
        bug_markers = regexp.MustCompile("^/[/*][ \t]*BUG\\(.*\\):[ \t]*") // BUG(uid):
        bug_content = regexp.MustCompile("[^ \n\r\t]+")                    // at least one non-whitespace char
index 1137d948af93e9453eef945fc08d4a0c504cf25e..0d4de254308de33463b2f148afb27738213dfeba 100644 (file)
@@ -374,26 +374,15 @@ func (z *Tokenizer) Token() Token {
        case Text:
                t.Data = string(z.Text())
        case StartTag, EndTag, SelfClosingTag:
-               var (
-                       attr []Attribute
-                       a    int
-               )
+               var attr []Attribute
                name, remaining := z.TagName()
                for remaining {
                        var key, val []byte
                        key, val, remaining = z.TagAttr()
-                       if a == len(attr) {
-                               // Grow the attr slice.
-                               n := 4 + 2*a
-                               attr1 := make([]Attribute, n, n)
-                               copy(attr1, attr)
-                               attr = attr1
-                       }
-                       attr[a] = Attribute{string(key), string(val)}
-                       a++
+                       attr = append(attr, Attribute{string(key), string(val)})
                }
                t.Data = string(name)
-               t.Attr = attr[0:a]
+               t.Attr = attr
        }
        return t
 }
index b445c19b025759fc78f440dc56bd4451cea30711..1d541b0940669d3efcb385ee96db5fe0e5e25e52 100644 (file)
@@ -29,15 +29,7 @@ var formats []format
 // Decode is the function that decodes the encoded image.
 // DecodeConfig is the function that decodes just its configuration.
 func RegisterFormat(name, magic string, decode func(io.Reader) (Image, os.Error), decodeConfig func(io.Reader) (Config, os.Error)) {
-       n := len(formats)
-       if n == cap(formats) {
-               x := make([]format, n+1, 2*n+4)
-               copy(x, formats)
-               formats = x
-       } else {
-               formats = formats[0 : n+1]
-       }
-       formats[n] = format{name, magic, decode, decodeConfig}
+       formats = append(formats, format{name, magic, decode, decodeConfig})
 }
 
 // A reader is an io.Reader that can also peek ahead.
index 584231ef00f21f1a78c55336877d700713c62094..112c8f9c3507a32cfe79eac6759dbb487f90caaa 100644 (file)
@@ -155,18 +155,7 @@ func (s *scanner) eof() int {
 
 // pushParseState pushes a new parse state p onto the parse stack.
 func (s *scanner) pushParseState(p int) {
-       n := len(s.parseState)
-       if n >= cap(s.parseState) {
-               if n == 0 {
-                       s.parseState = make([]int, 0, 16)
-               } else {
-                       ps := make([]int, n, 2*n)
-                       copy(ps, s.parseState)
-                       s.parseState = ps
-               }
-       }
-       s.parseState = s.parseState[0 : n+1]
-       s.parseState[n] = p
+       s.parseState = append(s.parseState, p)
 }
 
 // popParseState pops a parse state (already obtained) off the stack
index 006352b1783b3d80c56fd9244235425a03324b9d..556d57f112ddb90b5e5d802e19bd68f680939bc6 100644 (file)
@@ -44,7 +44,7 @@ func readHosts() {
                        }
                        for i := 1; i < len(f); i++ {
                                h := f[i]
-                               hs[h] = appendHost(hs[h], f[0])
+                               hs[h] = append(hs[h], f[0])
                        }
                }
                // Update the data cache.
@@ -55,18 +55,6 @@ func readHosts() {
        }
 }
 
-func appendHost(hosts []string, address string) []string {
-       n := len(hosts)
-       if n+1 > cap(hosts) { // reallocate
-               a := make([]string, n, 2*n+1)
-               copy(a, hosts)
-               hosts = a
-       }
-       hosts = hosts[0 : n+1]
-       hosts[n] = address
-       return hosts
-}
-
 // lookupStaticHosts looks up the addresses for the given host from /etc/hosts.
 func lookupStaticHost(host string) []string {
        hosts.Lock()
index a512190bb5cba48001e665f456a11b7a6f70f1df..861bcef27d46f53ef8e3adac6e1d6eae94d15817 100644 (file)
@@ -64,13 +64,7 @@ func (file *File) Readdirnames(count int) (names []string, err Error) {
                                continue
                        }
                        count--
-                       if len(names) == cap(names) {
-                               nnames := make([]string, len(names), 2*len(names))
-                               copy(nnames, names)
-                               names = nnames
-                       }
-                       names = names[0 : len(names)+1]
-                       names[len(names)-1] = name
+                       names = append(names, name)
                }
        }
        return names, nil
index 9c4b4469945a1956052f219da0fd6c700ed50c73..2ebe368a65f8469f3e6cbbe710feaed158f7ee7a 100644 (file)
@@ -59,13 +59,7 @@ func (file *File) Readdirnames(count int) (names []string, err Error) {
                                continue
                        }
                        count--
-                       if len(names) == cap(names) {
-                               nnames := make([]string, len(names), 2*len(names))
-                               copy(nnames, names)
-                               names = nnames
-                       }
-                       names = names[0 : len(names)+1]
-                       names[len(names)-1] = name
+                       names = append(names, name)
                }
        }
        return names, nil
index 2177625e2d09a8addb0d11407ab5707d701b6aac..09aad6367d27f96ba2c93c769c64850833d1f254 100644 (file)
@@ -62,13 +62,7 @@ func (file *File) Readdirnames(count int) (names []string, err Error) {
                                continue
                        }
                        count--
-                       if len(names) == cap(names) {
-                               nnames := make([]string, len(names), 2*len(names))
-                               copy(nnames, names)
-                               names = nnames
-                       }
-                       names = names[0 : len(names)+1]
-                       names[len(names)-1] = name
+                       names = append(names, name)
                }
        }
        return names, nil
index 2177625e2d09a8addb0d11407ab5707d701b6aac..09aad6367d27f96ba2c93c769c64850833d1f254 100644 (file)
@@ -62,13 +62,7 @@ func (file *File) Readdirnames(count int) (names []string, err Error) {
                                continue
                        }
                        count--
-                       if len(names) == cap(names) {
-                               nnames := make([]string, len(names), 2*len(names))
-                               copy(nnames, names)
-                               names = nnames
-                       }
-                       names = names[0 : len(names)+1]
-                       names[len(names)-1] = name
+                       names = append(names, name)
                }
        }
        return names, nil
index ed344815551511d41bcb886bcf205e553f9790e9..6908a9ca85b3f18d141e8d06cad6fed869f17961 100644 (file)
@@ -87,13 +87,7 @@ func Environ() []string {
                        if i <= from {
                                break
                        }
-                       if len(r) == cap(r) {
-                               nr := make([]string, len(r), 2*len(r))
-                               copy(nr, r)
-                               r = nr
-                       }
-                       r = r[0 : len(r)+1]
-                       r[len(r)-1] = string(utf16.Decode(p[from:i]))
+                       r = append(r, string(utf16.Decode(p[from:i])))
                        from = i + 1
                }
        }
index f13911ad82a02a99c9626e09d8f81a73768f4947..bf710bb67150d339b7045ee98afed6fcc46910d8 100644 (file)
@@ -157,13 +157,7 @@ func (file *File) Readdir(count int) (fi []FileInfo, err Error) {
                        continue
                }
                count--
-               if len(fi) == cap(fi) {
-                       nfi := make([]FileInfo, len(fi), 2*len(fi))
-                       copy(nfi, fi)
-                       fi = nfi
-               }
-               fi = fi[0 : len(fi)+1]
-               fi[len(fi)-1] = f
+               fi = append(fi, f)
        }
        return fi, nil
 }
index 488b023333f1965fe3b5e2011c0662e07678a098..00ff76fe3a17d0a196f92f99c30e6897375a1f8f 100644 (file)
@@ -816,15 +816,7 @@ func (a *matchArena) addState(s []state, inst instr, prefixed bool, match *match
                        return s
                }
        }
-       if l == cap(s) {
-               s1 := make([]state, 2*l)[0:l]
-               copy(s1, s)
-               s = s1
-       }
-       s = s[0 : l+1]
-       s[l].inst = inst
-       s[l].prefixed = prefixed
-       s[l].match = match
+       s = append(s, state{inst, prefixed, match})
        match.ref++
        if inst.kind() == _ALT {
                s = a.addState(s, inst.(*_Alt).left, prefixed, a.copy(match), pos, end)
@@ -1262,21 +1254,14 @@ func (re *Regexp) FindAll(b []byte, n int) [][]byte {
        if n < 0 {
                n = len(b) + 1
        }
-       result := make([][]byte, startSize)
-       i := 0
+       result := make([][]byte, 0, startSize)
        re.allMatches("", b, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][]byte, 2*i)
-                       copy(new, result)
-                       result = new
-               }
-               result[i] = b[match[0]:match[1]]
-               i++
+               result = append(result, b[match[0]:match[1]])
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllIndex is the 'All' version of FindIndex; it returns a slice of all
@@ -1287,21 +1272,14 @@ func (re *Regexp) FindAllIndex(b []byte, n int) [][]int {
        if n < 0 {
                n = len(b) + 1
        }
-       result := make([][]int, startSize)
-       i := 0
+       result := make([][]int, 0, startSize)
        re.allMatches("", b, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][]int, 2*i)
-                       copy(new, result)
-                       result = new
-               }
-               result[i] = match[0:2]
-               i++
+               result = append(result, match[0:2])
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllString is the 'All' version of FindString; it returns a slice of all
@@ -1312,21 +1290,14 @@ func (re *Regexp) FindAllString(s string, n int) []string {
        if n < 0 {
                n = len(s) + 1
        }
-       result := make([]string, startSize)
-       i := 0
+       result := make([]string, 0, startSize)
        re.allMatches(s, nil, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([]string, 2*i)
-                       copy(new, result)
-                       result = new
-               }
-               result[i] = s[match[0]:match[1]]
-               i++
+               result = append(result, s[match[0]:match[1]])
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllStringIndex is the 'All' version of FindStringIndex; it returns a
@@ -1337,21 +1308,14 @@ func (re *Regexp) FindAllStringIndex(s string, n int) [][]int {
        if n < 0 {
                n = len(s) + 1
        }
-       result := make([][]int, startSize)
-       i := 0
+       result := make([][]int, 0, startSize)
        re.allMatches(s, nil, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][]int, 2*i)
-                       copy(new, result)
-                       result = new
-               }
-               result[i] = match[0:2]
-               i++
+               result = append(result, match[0:2])
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllSubmatch is the 'All' version of FindSubmatch; it returns a slice
@@ -1362,27 +1326,20 @@ func (re *Regexp) FindAllSubmatch(b []byte, n int) [][][]byte {
        if n < 0 {
                n = len(b) + 1
        }
-       result := make([][][]byte, startSize)
-       i := 0
+       result := make([][][]byte, 0, startSize)
        re.allMatches("", b, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][][]byte, 2*i)
-                       copy(new, result)
-                       result = new
-               }
                slice := make([][]byte, len(match)/2)
                for j := range slice {
                        if match[2*j] >= 0 {
                                slice[j] = b[match[2*j]:match[2*j+1]]
                        }
                }
-               result[i] = slice
-               i++
+               result = append(result, slice)
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllSubmatchIndex is the 'All' version of FindSubmatchIndex; it returns
@@ -1393,21 +1350,14 @@ func (re *Regexp) FindAllSubmatchIndex(b []byte, n int) [][]int {
        if n < 0 {
                n = len(b) + 1
        }
-       result := make([][]int, startSize)
-       i := 0
+       result := make([][]int, 0, startSize)
        re.allMatches("", b, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][]int, 2*i)
-                       copy(new, result)
-                       result = new
-               }
-               result[i] = match
-               i++
+               result = append(result, match)
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllStringSubmatch is the 'All' version of FindStringSubmatch; it
@@ -1418,27 +1368,20 @@ func (re *Regexp) FindAllStringSubmatch(s string, n int) [][]string {
        if n < 0 {
                n = len(s) + 1
        }
-       result := make([][]string, startSize)
-       i := 0
+       result := make([][]string, 0, startSize)
        re.allMatches(s, nil, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][]string, 2*i)
-                       copy(new, result)
-                       result = new
-               }
                slice := make([]string, len(match)/2)
                for j := range slice {
                        if match[2*j] >= 0 {
                                slice[j] = s[match[2*j]:match[2*j+1]]
                        }
                }
-               result[i] = slice
-               i++
+               result = append(result, slice)
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
 
 // FindAllStringSubmatchIndex is the 'All' version of
@@ -1450,19 +1393,12 @@ func (re *Regexp) FindAllStringSubmatchIndex(s string, n int) [][]int {
        if n < 0 {
                n = len(s) + 1
        }
-       result := make([][]int, startSize)
-       i := 0
+       result := make([][]int, 0, startSize)
        re.allMatches(s, nil, n, func(match []int) {
-               if i == cap(result) {
-                       new := make([][]int, 2*i)
-                       copy(new, result)
-                       result = new
-               }
-               result[i] = match
-               i++
+               result = append(result, match)
        })
-       if i == 0 {
+       if len(result) == 0 {
                return nil
        }
-       return result[0:i]
+       return result
 }
index a575ce1af0c919f77b98af97816bc37c11c3fbfc..082c06261b033b8c5dff6f9361d0f0f053c4c720 100644 (file)
@@ -318,13 +318,7 @@ func words(buf []byte) []string {
                if start == p { // no text left
                        break
                }
-               if i == cap(s) {
-                       ns := make([]string, 2*cap(s))
-                       copy(ns, s)
-                       s = ns
-               }
-               s = s[0 : i+1]
-               s[i] = string(buf[start:p])
+               s = append(s, string(buf[start:p]))
        }
        return s
 }
index 8f15b276254a662bc5b5ba516658c6841533d1c0..9d2c8d5a975dae7b78168b62d7f8e312471eeeeb 100644 (file)
@@ -167,17 +167,7 @@ func (cclass *_CharClass) print() {
 
 func (cclass *_CharClass) addRange(a, b int) {
        // range is a through b inclusive
-       n := len(cclass.ranges)
-       if n >= cap(cclass.ranges) {
-               nr := make([]int, n, 2*n)
-               copy(nr, cclass.ranges)
-               cclass.ranges = nr
-       }
-       cclass.ranges = cclass.ranges[0 : n+2]
-       cclass.ranges[n] = a
-       n++
-       cclass.ranges[n] = b
-       n++
+       cclass.ranges = append(cclass.ranges, a, b)
 }
 
 func (cclass *_CharClass) matches(c int) bool {
@@ -249,15 +239,8 @@ func (nop *_Nop) kind() int { return _NOP }
 func (nop *_Nop) print()    { print("nop") }
 
 func (re *Regexp) add(i instr) instr {
-       n := len(re.inst)
        i.setIndex(len(re.inst))
-       if n >= cap(re.inst) {
-               ni := make([]instr, n, 2*n)
-               copy(ni, re.inst)
-               re.inst = ni
-       }
-       re.inst = re.inst[0 : n+1]
-       re.inst[n] = i
+       re.inst = append(re.inst, i)
        return i
 }
 
index 102b034a54fa8c27a41582c5966aa343c734106a..65a55de9d5d50b50d0ae64c3e60685bc8d0dfd55 100644 (file)
@@ -493,15 +493,7 @@ func parseScript(line string, scripts map[string][]Script) {
                }
        }
        name := matches[3]
-       s, ok := scripts[name]
-       if !ok || len(s) == cap(s) {
-               ns := make([]Script, len(s), len(s)+100)
-               copy(ns, s)
-               s = ns
-       }
-       s = s[0 : len(s)+1]
-       s[len(s)-1] = Script{uint32(lo), uint32(hi), name}
-       scripts[name] = s
+       scripts[name] = append(scripts[name], Script{uint32(lo), uint32(hi), name})
 }
 
 // The script tables have a lot of adjacent elements. Fold them together.