1. 13 Dec, 2011 20 commits
    • Russ Cox's avatar
      math: regularize build · dd8dc6f0
      Russ Cox authored
      This will be nicer to the automatic tools.
      It requires a few more assembly stubs
      but fewer Go files.
      
      There are a few instances where it looks like
      there are new blobs of code, but they are just
      being copied out of deleted files.
      
      There is no new code here.
      
      Suppose you have a portable implementation for Sin
      and a 386-specific assembly one.  The old way to
      do this was to write three files
      
      sin_decl.go
         func Sin(x float64) float64  // declaration only
      sin_386.s
         assembly implementation
      
      sin_port.go
         func Sin(x float64) float64 { ... }  // pure-Go impl
      
      and then link in either sin_decl.go+sin_386.s or
      just sin_port.go.  The Makefile actually did the magic
      of linking in only the _port.go files for those without
      assembly and only the _decl.go files for those with
      assembly, or at least some of that magic.
      
      The biggest problem with this, beyond being hard
      to explain to the build system, is that once you do
      explain it to the build system, godoc knows which
      of sin_port.go or sin_decl.go are involved on a given
      architecture, and it (correctly) ignores the other.
      That means you have to put identical doc comments
      in both files.
      
      The new approach, which is more like what we did
      in the later packages math/big and sync/atomic,
      is to have
      
      sin.go
         func Sin(x float64) float64  // decl only
         func sin(x float64) float64 {...}  // pure-Go impl
      
      sin_386.s
         // assembly for Sin (ignores sin)
      sin_amd64.s
         // assembly for Sin: jmp sin
      sin_arm.s
         // assembly for Sin: jmp sin
      
      Once we abandon Makefiles we can put all the assembly
      stubs in one source file, so the number of files will
      actually go down.
      
      Chris asked whether the branches cost anything.
      Given that they are branching to pure-Go implementations
      that are not typically known for their speed, the single
      direct branch is not going to be noticeable.  That is,
      it's on the slow path.
      
      An alternative would have been to preserve the old
      "only write assembly files when there's an implementation"
      and still have just one copy of the declaration of Sin
      (and thus one doc comment) by doing:
      
      sin.go
         func Sin(x float64) float64 { return sin(x) }
      
      sin_decl.go
         func sin(x float64) float64 // declaration only
      sin_386.s
         // assembly for sin
      
      sin_port.go
         func sin(x float64) float64 { portable code }
      
      In this version everyone would link in sin.go and
      then either sin_decl.go+sin_386.s or sin_port.go.
      
      This has an extra function call on all paths, including
      the "fast path" to get to assembly, and it triples the
      number of Go files involved compared to what I did
      in this CL.  On the other hand you don't have to
      write assembly stubs.  After starting down this path
      I decided that the assembly stubs were the easier
      approach.
      
      As for generating the assembly stubs on the fly, much
      of the goal here is to eliminate magic from the build
      process, so that zero-configuration tools like goinstall
      or the new go tool can handle this package.
      
      R=golang-dev, r, cw, iant, r
      CC=golang-dev
      https://golang.org/cl/5488057
      dd8dc6f0
    • Christopher Wedgwood's avatar
      cypto/ocsp: fix tests · 6f975fbb
      Christopher Wedgwood authored
      Actually compare the result with expected not itself
      
      R=agl, bradfitz
      CC=golang-dev, rsc
      https://golang.org/cl/5477079
      6f975fbb
    • Russ Cox's avatar
      go: implement doc, fmt, fix, list, vet · 6e2c3ef4
      Russ Cox authored
      This CL is concerned with the basic Package structure
      and applies it to the (trivial) implementations of the
      doc, fmt, fix, list, and vet commands.
      
      The command as a whole is still very much a work in progress.
      In particular, work making the error messages look nice
      is deferred to a future CL.
      
      R=golang-dev, adg, dsymonds, r
      CC=golang-dev
      https://golang.org/cl/5482048
      6e2c3ef4
    • Russ Cox's avatar
      build: disable cgo on Windows/amd64 · 969b71d9
      Russ Cox authored
      Apparently it is broken.  Disable so that dashboard
      will let us see other breakages on Windows.
      
      R=golang-dev, bradfitz
      CC=golang-dev
      https://golang.org/cl/5477081
      969b71d9
    • Rob Pike's avatar
      strconv: make QuoteRune etc. take a rune argument · 38df0459
      Rob Pike authored
      Just an oversight it didn't already.
      Fixes #2515.
      
      R=golang-dev, rsc
      CC=golang-dev
      https://golang.org/cl/5483064
      38df0459
    • Russ Cox's avatar
      5g: fix build · c0951e9f
      Russ Cox authored
      R=ken2
      CC=golang-dev
      https://golang.org/cl/5482059
      c0951e9f
    • Rob Pike's avatar
      strconv: include package and function name in error strings · 02f6719d
      Rob Pike authored
      Fixes #2548.
      
      R=golang-dev, rsc
      CC=golang-dev
      https://golang.org/cl/5484062
      02f6719d
    • Russ Cox's avatar
      godoc: text wrapping · 6bf84214
      Russ Cox authored
      Example:
      
      PACKAGE
      
      package utf8
          import "unicode/utf8"
      
          Package utf8 implements functions and constants to support text
          encoded in UTF-8.  This package calls a Unicode character a rune for
          brevity.
      
      CONSTANTS
      
      const (
          RuneError = unicode.ReplacementChar // the "error" Rune or "replacement character".
          RuneSelf  = 0x80                    // characters below Runeself are represented as themselves in a single byte.
          UTFMax    = 4                       // maximum number of bytes of a UTF-8 encoded Unicode character.
      )
          Numbers fundamental to the encoding.
      
      FUNCTIONS
      
      func DecodeLastRune(p []byte) (r rune, size int)
          DecodeLastRune unpacks the last UTF-8 encoding in p and returns the
          rune and its width in bytes.
      
      func DecodeLastRuneInString(s string) (r rune, size int)
          DecodeLastRuneInString is like DecodeLastRune but its input is a
          string.
      
      func DecodeRune(p []byte) (r rune, size int)
          DecodeRune unpacks the first UTF-8 encoding in p and returns the rune
          and its width in bytes.
      
      func DecodeRuneInString(s string) (r rune, size int)
          DecodeRuneInString is like DecodeRune but its input is a string.
      
      func EncodeRune(p []byte, r rune) int
          EncodeRune writes into p (which must be large enough) the UTF-8
          encoding of the rune.  It returns the number of bytes written.
      
      func FullRune(p []byte) bool
          FullRune reports whether the bytes in p begin with a full UTF-8
          encoding of a rune.  An invalid encoding is considered a full Rune
          since it will convert as a width-1 error rune.
      
      func FullRuneInString(s string) bool
          FullRuneInString is like FullRune but its input is a string.
      
      func RuneCount(p []byte) int
          RuneCount returns the number of runes in p.  Erroneous and short
          encodings are treated as single runes of width 1 byte.
      
      func RuneCountInString(s string) (n int)
          RuneCountInString is like RuneCount but its input is a string.
      
      func RuneLen(r rune) int
          RuneLen returns the number of bytes required to encode the rune.
      
      func RuneStart(b byte) bool
          RuneStart reports whether the byte could be the first byte of an
          encoded rune.  Second and subsequent bytes always have the top two
          bits set to 10.
      
      func Valid(p []byte) bool
          Valid reports whether p consists entirely of valid UTF-8-encoded
          runes.
      
      func ValidString(s string) bool
          ValidString reports whether s consists entirely of valid UTF-8-encoded
          runes.
      
      TYPES
      
      type String struct {
          // contains filtered or unexported fields
      }
          String wraps a regular string with a small structure that provides
          more efficient indexing by code point index, as opposed to byte index.
          Scanning incrementally forwards or backwards is O(1) per index
          operation (although not as fast a range clause going forwards).
          Random access is O(N) in the length of the string, but the overhead is
          less than always scanning from the beginning.  If the string is ASCII,
          random access is O(1).  Unlike the built-in string type, String has
          internal mutable state and is not thread-safe.
      
      func NewString(contents string) *String
          NewString returns a new UTF-8 string with the provided contents.
      
      func (s *String) At(i int) rune
          At returns the rune with index i in the String.  The sequence of runes
          is the same as iterating over the contents with a "for range" clause.
      
      func (s *String) Init(contents string) *String
          Init initializes an existing String to hold the provided contents.
          It returns a pointer to the initialized String.
      
      func (s *String) IsASCII() bool
          IsASCII returns a boolean indicating whether the String contains only
          ASCII bytes.
      
      func (s *String) RuneCount() int
          RuneCount returns the number of runes (Unicode code points) in the
          String.
      
      func (s *String) Slice(i, j int) string
          Slice returns the string sliced at rune positions [i:j].
      
      func (s *String) String() string
          String returns the contents of the String.  This method also means the
          String is directly printable by fmt.Print.
      
      Fixes #2479.
      
      R=golang-dev, dsymonds, mattn.jp, r, gri, r
      CC=golang-dev
      https://golang.org/cl/5472051
      6bf84214
    • Russ Cox's avatar
      gc: delete DUPOK definition · 61655bc5
      Russ Cox authored
      The relevant header is already included.
      
      R=ken2
      CC=golang-dev
      https://golang.org/cl/5487062
      61655bc5
    • Dave Cheney's avatar
      exp/ssh: improve client channel close behavior · 2b600f77
      Dave Cheney authored
      R=gustav.paul
      CC=golang-dev
      https://golang.org/cl/5480062
      2b600f77
    • Luuk van Dijk's avatar
      gc: small fixes to fmt.c · 7cf48254
      Luuk van Dijk authored
      don't crash when printing error messages about symbols in a garbled state.
      render OCOMPLIT in export mode.
      
      R=rsc
      CC=golang-dev
      https://golang.org/cl/5466045
      7cf48254
    • Luuk van Dijk's avatar
      e1b1a5fe
    • Rob Pike's avatar
      doc/go1: time · 5fa18e10
      Rob Pike authored
      R=rsc
      CC=golang-dev
      https://golang.org/cl/5477077
      5fa18e10
    • Rob Pike's avatar
      doc/go1: more package updates · f76bd4fe
      Rob Pike authored
      Everything there (as first draft) except the time package.
      
      R=golang-dev, adg, bradfitz
      CC=golang-dev
      https://golang.org/cl/5487052
      f76bd4fe
    • Russ Cox's avatar
      gc: implement == on structs and arrays · 196b6630
      Russ Cox authored
      To allow these types as map keys, we must fill in
      equal and hash functions in their algorithm tables.
      Structs or arrays that are "just memory", like [2]int,
      can and do continue to use the AMEM algorithm.
      Structs or arrays that contain special values like
      strings or interface values use generated functions
      for both equal and hash.
      
      The runtime helper func runtime.equal(t, x, y) bool handles
      the general equality case for x == y and calls out to
      the equal implementation in the algorithm table.
      
      For short values (<= 4 struct fields or array elements),
      the sequence of elementwise comparisons is inlined
      instead of calling runtime.equal.
      
      R=ken, mpimenov
      CC=golang-dev
      https://golang.org/cl/5451105
      196b6630
    • Russ Cox's avatar
      spec: allow comparison of structs, arrays containing comparable values · 83f648c9
      Russ Cox authored
      Also, clarify when interface comparison panics and
      that comparison to nil is a special syntax rather than
      a general comparison rule.
      
      R=r, gri, r, iant, cw, bradfitz
      CC=golang-dev
      https://golang.org/cl/5440117
      83f648c9
    • Nigel Tao's avatar
      html: update comments to match latest spec. · 66113ac8
      Nigel Tao authored
      R=dsymonds
      CC=golang-dev
      https://golang.org/cl/5482054
      66113ac8
    • Nigel Tao's avatar
      html: a first step at parsing foreign content (MathML, SVG). · b9064fb1
      Nigel Tao authored
      Nodes now have a Namespace field.
      
      Pass adoption01.dat, test 12:
      <a><svg><tr><input></a>
      
      | <html>
      |   <head>
      |   <body>
      |     <a>
      |       <svg svg>
      |         <svg tr>
      |           <svg input>
      
      The other adoption01.dat tests already passed.
      
      R=andybalholm
      CC=golang-dev
      https://golang.org/cl/5467075
      b9064fb1
    • Mikio Hara's avatar
      syscall: regenerate z-files for darwin, freebsd · 0643aace
      Mikio Hara authored
      R=golang-dev, jsing, rsc
      CC=golang-dev
      https://golang.org/cl/5479054
      0643aace
    • Mikio Hara's avatar
      net: fix typo · f6972ba6
      Mikio Hara authored
      R=golang-dev, rsc
      CC=golang-dev
      https://golang.org/cl/5488052
      f6972ba6
  2. 12 Dec, 2011 20 commits