1
0
mirror of https://github.com/golang/go synced 2024-11-24 22:57:57 -07:00

assorted cleanup

R=r, iant
CC=go-dev
http://go/go-review/1025024
This commit is contained in:
Russ Cox 2009-11-08 21:08:27 -08:00
parent 97a55a7485
commit 830813f019
10 changed files with 56 additions and 54 deletions

View File

@ -1,10 +1,5 @@
<!-- Contributing to the Go project --> <!-- Contributing to the Go project -->
<!-- TODO(rsc):
Mention community resources like IRC, mailing lists,
change list email groups, etc.
-->
<h2>Introduction</h2> <h2>Introduction</h2>
<p> <p>
@ -26,6 +21,29 @@ enables discussions about design before much code
has been written. has been written.
</p> </p>
<h2>Community resources</h2>
<p>
For real-time help, there may be users or developers on the
<code>#go-nuts</code> on the <a href="http://freenode.net/">Freenode</a> IRC server.
</p>
<p>
The official mailing list for discussion of the Go language is
<a href="http://groups.google.com/group/golang-nuts">Go Nuts</a>.
</p>
<p>
Bugs can be reported using the <a href="http://code.google.com/p/go/issues/list">Go issue tracker</a>.
</p>
<p>
For those who wish to keep up with development,
there is another mailing list, <a href="http://groups.google.com/group/golang-checkins">golang-checkins</a>,
that receives a message summarizing each checkin to the Go repository.
</p>
<h2>Creating a new package</h2> <h2>Creating a new package</h2>
<p> <p>
@ -244,7 +262,7 @@ The Mercurial configuration file format does not allow environment variable subs
<p> <p>
The code review server uses a Google Account to authenticate. The code review server uses a Google Account to authenticate.
(If you can use the account to (If you can use the account to
<a href="https://www.google.com/accounts/Login?hl=en&continue=http://www.google.com/">sign in at google.com</a>, <a href="https://www.google.com/accounts/Login?hl=en&amp;continue=http://www.google.com/">sign in at google.com</a>,
you can use it to sign in to the code review server.) you can use it to sign in to the code review server.)
</p> </p>

View File

@ -233,7 +233,7 @@ The <code>sync</code> package implements two lock data types,
</p> </p>
<p class="rule"> <p class="rule">
For any <code>sync.Mutex</code> variable <code>l</code> and <i>n</i> &lt; <i>m</i>, For any <code>sync.Mutex</code> or <code>sync.RWMutex</code> variable <code>l</code> and <i>n</i> &lt; <i>m</i>,
the <i>n</i>'th call to <code>l.Unlock()</code> happens before the <i>m</i>'th call to <code>l.Lock()</code> returns. the <i>n</i>'th call to <code>l.Unlock()</code> happens before the <i>m</i>'th call to <code>l.Lock()</code> returns.
</p> </p>
@ -265,8 +265,11 @@ before the second call to <code>l.Lock()</code> (in <code>main</code>) returns,
which happens before the <code>print</code>. which happens before the <code>print</code>.
</p> </p>
<p> <p class="rule">
TODO(rsc): <code>sync.RWMutex</code>. For any call to <code>l.RLock</code> on a <code>sync.RWMutex</code> variable <code>l</code>,
there is an <i>n</i> such that the <code>l.RLock</code> happens (returns) after the <i>n</i>'th call to
<code>l.Unlock</code> and the matching <code>l.RUnlock</code> happens
before the <i>n</i>+1'th call to <code>l.Lock</code>.
</p> </p>
<h3>Once</h3> <h3>Once</h3>

View File

@ -1078,7 +1078,15 @@ def sync(ui, repo, **opts):
sync_changes(ui, repo) sync_changes(ui, repo)
def sync_note(msg): def sync_note(msg):
if msg == 'resolving manifests\n' or msg == 'searching for changes\n': # we run sync (pull -u) in verbose mode to get the
# list of files being updated, but that drags along
# a bunch of messages we don't care about.
# omit them.
if msg == 'resolving manifests\n':
return
if msg == 'searching for changes\n':
return
if msg == "couldn't find merge tool hgmerge\n":
return return
sys.stdout.write(msg) sys.stdout.write(msg)

View File

@ -293,7 +293,7 @@ exprfmt(Fmt *f, Node *n, int prec)
case OCONVIFACE: case OCONVIFACE:
case OARRAYBYTESTR: case OARRAYBYTESTR:
case ORUNESTR: case ORUNESTR:
if(n->type->sym == S) if(n->type == T || n->type->sym == S)
fmtprint(f, "(%T)(", n->type); fmtprint(f, "(%T)(", n->type);
else else
fmtprint(f, "%T(", n->type); fmtprint(f, "%T(", n->type);

View File

@ -15,12 +15,6 @@ import (
) )
// TODO:
// - maybe define an interface
// - Reader: ReadRune, UnreadRune ?
// could make ReadRune generic if we dropped UnreadRune
// - buffered output
const ( const (
defaultBufSize = 4096; defaultBufSize = 4096;
) )

View File

@ -197,7 +197,6 @@ type Reader interface {
} }
// Inflate state. // Inflate state.
// TODO(rsc): Expose this or not?
type inflater struct { type inflater struct {
// Input/output sources. // Input/output sources.
r Reader; r Reader;

View File

@ -4,8 +4,6 @@
package hmac package hmac
// TODO(rsc): better test
import ( import (
"hash"; "hash";
"fmt"; "fmt";

View File

@ -133,7 +133,7 @@ func commentEscape(w io.Writer, s []byte) {
last := 0; last := 0;
for i := 0; i < len(s)-1; i++ { for i := 0; i < len(s)-1; i++ {
if s[i] == s[i+1] && (s[i] == '`' || s[i] == '\'') { if s[i] == s[i+1] && (s[i] == '`' || s[i] == '\'') {
template.HtmlEscape(w, s[last:i]); template.HTMLEscape(w, s[last:i]);
last = i+2; last = i+2;
switch s[i] { switch s[i] {
case '`': case '`':
@ -144,7 +144,7 @@ func commentEscape(w io.Writer, s []byte) {
i++; // loop will add one more i++; // loop will add one more
} }
} }
template.HtmlEscape(w, s[last:len(s)]); template.HTMLEscape(w, s[last:len(s)]);
} }
@ -211,10 +211,9 @@ func unindent(block [][]byte) {
// //
// TODO(rsc): I'd like to pass in an array of variable names []string // TODO(rsc): I'd like to pass in an array of variable names []string
// and then italicize those strings when they appear as words. // and then italicize those strings when they appear as words.
func ToHtml(w io.Writer, s []byte) { func ToHTML(w io.Writer, s []byte) {
inpara := false; inpara := false;
/* TODO(rsc): 6g cant generate code for these
close := func() { close := func() {
if inpara { if inpara {
w.Write(html_endp); w.Write(html_endp);
@ -227,7 +226,6 @@ func ToHtml(w io.Writer, s []byte) {
inpara = true; inpara = true;
} }
}; };
*/
lines := split(s); lines := split(s);
unindent(lines); unindent(lines);
@ -235,19 +233,13 @@ func ToHtml(w io.Writer, s []byte) {
line := lines[i]; line := lines[i];
if isBlank(line) { if isBlank(line) {
// close paragraph // close paragraph
if inpara { close();
w.Write(html_endp);
inpara = false;
}
i++; i++;
continue; continue;
} }
if indentLen(line) > 0 { if indentLen(line) > 0 {
// close paragraph // close paragraph
if inpara { close();
w.Write(html_endp);
inpara = false;
}
// count indented or blank lines // count indented or blank lines
j := i+1; j := i+1;
@ -268,21 +260,15 @@ func ToHtml(w io.Writer, s []byte) {
// just html escaping // just html escaping
w.Write(html_pre); w.Write(html_pre);
for _, line := range block { for _, line := range block {
template.HtmlEscape(w, line); template.HTMLEscape(w, line);
} }
w.Write(html_endpre); w.Write(html_endpre);
continue; continue;
} }
// open paragraph // open paragraph
if !inpara { open();
w.Write(html_p);
inpara = true;
}
commentEscape(w, lines[i]); commentEscape(w, lines[i]);
i++; i++;
} }
if inpara { close();
w.Write(html_endp);
inpara = false;
}
} }

View File

@ -63,8 +63,7 @@ func ParseExpr(filename string, src interface{}) (ast.Expr, os.Error) {
var p parser; var p parser;
p.init(filename, data, 0); p.init(filename, data, 0);
x := p.parseExpr(); // TODO 6g bug - function call order in expr lists return p.parseExpr(), p.GetError(scanner.Sorted);
return x, p.GetError(scanner.Sorted);
} }
@ -81,8 +80,7 @@ func ParseStmtList(filename string, src interface{}) ([]ast.Stmt, os.Error) {
var p parser; var p parser;
p.init(filename, data, 0); p.init(filename, data, 0);
list := p.parseStmtList(); // TODO 6g bug - function call order in expr lists return p.parseStmtList(), p.GetError(scanner.Sorted);
return list, p.GetError(scanner.Sorted);
} }
@ -99,8 +97,7 @@ func ParseDeclList(filename string, src interface{}) ([]ast.Decl, os.Error) {
var p parser; var p parser;
p.init(filename, data, 0); p.init(filename, data, 0);
list := p.parseDeclList(); // TODO 6g bug - function call order in expr lists return p.parseDeclList(), p.GetError(scanner.Sorted);
return list, p.GetError(scanner.Sorted);
} }
@ -130,8 +127,7 @@ func ParseFile(filename string, src interface{}, mode uint) (*ast.File, os.Error
var p parser; var p parser;
p.init(filename, data, mode); p.init(filename, data, mode);
prog := p.parseFile(); // TODO 6g bug - function call order in expr lists return p.parseFile(), p.GetError(scanner.NoMultiples);
return prog, p.GetError(scanner.NoMultiples);
} }

View File

@ -511,7 +511,7 @@ func TestTime(t *testing.T) {
// A common failure mode on Darwin is to get 0, 0, // A common failure mode on Darwin is to get 0, 0,
// because it returns the time in registers instead of // because it returns the time in registers instead of
// filling in the structure passed to the system call. // filling in the structure passed to the system call.
// TODO(rsc): Too bad the compiler doesn't know that // Too bad the compiler doesn't know that
// 365.24*86400 is an integer. // 365.24*86400 is an integer.
sec, nsec, err := Time(); sec, nsec, err := Time();
if sec < (2009-1970)*36524*864 { if sec < (2009-1970)*36524*864 {