Brad Fitzpatrick [Thu, 16 Jun 2011 20:02:28 +0000 (13:02 -0700)]
http: make Headers be source of truth
Previously Request and Response had redundant fields for
Referer, UserAgent, and cookies which caused confusion and
bugs. It also didn't allow us to expand the package over
time, since the way to access fields would be in the Headers
one day and promoted to a field the next day. That would be
hard to gofix, especially with code ranging over Headers.
After a discussion on the mail package's design with a similar
problem, we've designed to make the Headers be the source of
truth and add accessors instead.
Volker Dobler [Thu, 16 Jun 2011 16:56:49 +0000 (12:56 -0400)]
xml: allow attributes without value in non-strict mode.
Attributes without value are commen in html and the xml
parser will accept them in non-strict mode and use the
attribute name as value. Thus parsing <p nowrap> as
<p norwar="nowrap">.
Brad Fitzpatrick [Thu, 16 Jun 2011 15:55:53 +0000 (08:55 -0700)]
mime/multipart: convert Reader from interface to struct
It was always a weird interface but I didn't know what I
was doing at the time. rsc questioned me about it then
but didn't press on it during review. Then adg bugged me
about it too recently.
So clean it up. It parallels the Writer struct too.
Russ Cox [Tue, 14 Jun 2011 18:30:10 +0000 (14:30 -0400)]
exp/regexp/syntax: more escapes, character classes
Still TODO: parsing optimizations
make_perl_groups.pl is copied with minimal modifications
(just to generate Go syntax instead of C++) from RE2.
Google Inc is "The RE2 Author" of that file and is one of
the Go Authors, so copyright changed to the Go Authors instead.
Lucio De Re [Tue, 14 Jun 2011 18:14:11 +0000 (14:14 -0400)]
build: fix header files for Plan 9
The "elf.h" header changes involve only comments, the released
Plan 9 C preprocessing function does not cope with multiline
comments following the #define keyword. All multiline comments
have been moved to the line above the associated definition.
Sigh! Fixing the Plan 9 compiler is not an option.
<time.h> does not exist in the Plan 9 Native library. I have
moved it from src/cmd/ld/pe.h to include/u.h. RSC correctly points
out that this copy of <u.h> is not the one used to compile the
Go release on Plan 9 platforms.
Jeff Hodges [Tue, 14 Jun 2011 16:56:46 +0000 (12:56 -0400)]
syscall: add ptrace on darwin
The ptrace syscall remains gutted on darwin, but usable. This
also makes the syscall addition process reproducible on darwin
instead of relying on a file path in rsc's home directory.
I've also removed an override of $PATH in env.bash that made
tooling harder.
R=rsc, dave, r
CC=golang-dev
https://golang.org/cl/4517147
William Chan [Tue, 14 Jun 2011 15:31:18 +0000 (11:31 -0400)]
http/spdy: improve error handling.
Create a new spdy.Error type that includes the enumerated error type and
the associated stream id (0 if not associated with a specific stream).
This will let users handle errors differently (RST_STREAM vs GOAWAY).
Russ Cox [Mon, 13 Jun 2011 19:28:54 +0000 (15:28 -0400)]
build: stop early if commands are missing
If we fail due to a missing command (always bison)
during the build, it is running many things in parallel
and the error message gets lost in the noise.
Also diagnose bison++.
$ ./make.bash
Your system's bison is bison++, a buggy copy of the original bison.
Go needs the original bison instead.
See http://golang.org/doc/install.html#ctools
$ sudo apt-get remove bison++
... ridiculous amount of output ...
$ ./make.bash
Cannot find 'bison' on search path.
See http://golang.org/doc/install.html#ctools
$ sudo apt-get install bison
... ridiculous amount of output ...
$ ./make.bash
... works
Luuk van Dijk [Mon, 13 Jun 2011 14:56:43 +0000 (16:56 +0200)]
ld: dwarf emit filenames in debug_line header instead of as extended opcodes.
Makes it possible for older tools like objdump to find the filenames,
fixes objdump -d -l --start-address=0x400c00 --stop-address=0x400c36 6.out
fixes #1950
Russ Cox [Mon, 13 Jun 2011 13:20:23 +0000 (09:20 -0400)]
exp/regexp/syntax: syntax data structures, parser
Parser is a work in progress but can populate most of the
interesting parts of the data structure, so a good checkpoint.
All the complicated Perl syntax is missing, as are various
important optimizations made during parsing to the
syntax tree.
The plan is that exp/regexp's API will mimic regexp,
and exp/regexp/syntax provides the parser directly
for programs that need it (and for implementing exp/regexp).
Rob Pike [Mon, 13 Jun 2011 06:08:35 +0000 (16:08 +1000)]
exp/template: lexical scanner for new template package.
An unusual design using slice and a goroutine makes for a
compact scanner with very little allocation.
R=rsc, r
CC=golang-dev, kevlar
https://golang.org/cl/4610041
Rob Pike [Sat, 11 Jun 2011 00:03:02 +0000 (00:03 +0000)]
fmt: debugging formats for characters: %+q %#U
%+q uses strconv.Quote[Rune]ToASCII, guaranteeing ASCII-only output.
%#U a quoted character if the rune is printable: 'x'=U+0078; otherwise
it's as before: U+000A.
Russ Cox [Thu, 9 Jun 2011 22:07:56 +0000 (18:07 -0400)]
5l: delete dead code
Thumb code and ARM pre-V4 code is unused,
unmaintained, and almost certainly wrong by now.
Every time I try to change 5l I have to sort out
what's dead code and what's not.
Nigel Tao [Wed, 8 Jun 2011 23:50:38 +0000 (09:50 +1000)]
compress/lzw: reduce decoder buffer size from 3*4096 to 2*4096.
This happens to speed up the decoder benchmarks by 50% on my computer
(GOARCH=amd64 GOOS=linux), but I don't have a good intuition as to why.
For example, just adding an unused [4096]byte field to the decoder
struct doesn't significantly change the numbers.
Brad Fitzpatrick [Wed, 8 Jun 2011 22:59:23 +0000 (15:59 -0700)]
http: fix handling of 0-lengthed http requests
Via Russ Ross' bug report on golang-nuts, it was not possible
to send an HTTP request with a zero length body with either a
Content-Length (it was stripped) or chunking (it wasn't set).
This means Go couldn't upload 0-length objects to Amazon S3.
(which aren't as silly as they might sound, as S3 objects can
have key/values associated with them, set in the headers)
Amazon further doesn't supported chunked uploads. (not Go's
problem, but we should be able to let users set an explicit
Content-Length, even if it's zero.)
To fix the ambiguity of an explicit zero Content-Length and
the Request struct's default zero value, users need to
explicit set TransferEncoding to []string{"identity"} to force
the Request.Write to include a Content-Length: 0. identity is
in RFC 2616 but is ignored pretty much everywhere. We don't
even then serialize it on the wire, since it's kinda useless,
except as an internal sentinel value.
The "identity" value is then documented, but most users can
ignore that because NewRequest now sets that.