From: ChaiShushan Date: Thu, 28 Aug 2014 21:55:02 +0000 (-0700) Subject: strconv: use go generate to create isprint.go X-Git-Tag: go1.4beta1~647 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5db510f1344daf6b5b8f3150adc941fa68954c36;p=gostls13.git strconv: use go generate to create isprint.go LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/132230043 --- diff --git a/src/pkg/strconv/isprint.go b/src/pkg/strconv/isprint.go index ba0adbdbb5..80738ed711 100644 --- a/src/pkg/strconv/isprint.go +++ b/src/pkg/strconv/isprint.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. // DO NOT EDIT. GENERATED BY -// go run makeisprint.go >x && mv x isprint.go +// go run makeisprint.go -output isprint.go package strconv diff --git a/src/pkg/strconv/makeisprint.go b/src/pkg/strconv/makeisprint.go index 216159cc02..588d0a00b5 100644 --- a/src/pkg/strconv/makeisprint.go +++ b/src/pkg/strconv/makeisprint.go @@ -4,15 +4,26 @@ // +build ignore -// makeisprint generates the tables for strconv's compact isPrint. +// +// usage: +// +// go run makeisprint.go -output isprint.go +// + package main import ( + "bytes" + "flag" "fmt" - "os" + "go/format" + "io/ioutil" + "log" "unicode" ) +var filename = flag.String("output", "isprint.go", "output file name") + var ( range16 []uint16 except16 []uint16 @@ -110,6 +121,8 @@ func to16(x []uint32) []uint16 { } func main() { + flag.Parse() + rang, except := scan(0, 0xFFFF) range16 = to16(rang) except16 = to16(except) @@ -117,49 +130,58 @@ func main() { for i := rune(0); i <= unicode.MaxRune; i++ { if isPrint(i) != unicode.IsPrint(i) { - fmt.Fprintf(os.Stderr, "%U: isPrint=%v, want %v\n", i, isPrint(i), unicode.IsPrint(i)) - return + log.Fatalf("%U: isPrint=%v, want %v\n", i, isPrint(i), unicode.IsPrint(i)) } } - fmt.Printf(`// Copyright 2013 The Go Authors. All rights reserved. + var buf bytes.Buffer + + fmt.Fprintf(&buf, `// Copyright 2013 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.` + "\n\n") - fmt.Printf("// DO NOT EDIT. GENERATED BY\n") - fmt.Printf("// go run makeisprint.go >x && mv x isprint.go\n\n") - fmt.Printf("package strconv\n\n") +// license that can be found in the LICENSE file.`+"\n\n") + fmt.Fprintf(&buf, "// DO NOT EDIT. GENERATED BY\n") + fmt.Fprintf(&buf, "// go run makeisprint.go -output isprint.go\n\n") + fmt.Fprintf(&buf, "package strconv\n\n") - fmt.Printf("// (%d+%d+%d)*2 + (%d)*4 = %d bytes\n\n", + fmt.Fprintf(&buf, "// (%d+%d+%d)*2 + (%d)*4 = %d bytes\n\n", len(range16), len(except16), len(except32), len(range32), (len(range16)+len(except16)+len(except32))*2+ (len(range32))*4) - fmt.Printf("var isPrint16 = []uint16{\n") + fmt.Fprintf(&buf, "var isPrint16 = []uint16{\n") for i := 0; i < len(range16); i += 2 { - fmt.Printf("\t%#04x, %#04x,\n", range16[i], range16[i+1]) + fmt.Fprintf(&buf, "\t%#04x, %#04x,\n", range16[i], range16[i+1]) } - fmt.Printf("}\n\n") + fmt.Fprintf(&buf, "}\n\n") - fmt.Printf("var isNotPrint16 = []uint16{\n") + fmt.Fprintf(&buf, "var isNotPrint16 = []uint16{\n") for _, r := range except16 { - fmt.Printf("\t%#04x,\n", r) + fmt.Fprintf(&buf, "\t%#04x,\n", r) } - fmt.Printf("}\n\n") + fmt.Fprintf(&buf, "}\n\n") - fmt.Printf("var isPrint32 = []uint32{\n") + fmt.Fprintf(&buf, "var isPrint32 = []uint32{\n") for i := 0; i < len(range32); i += 2 { - fmt.Printf("\t%#06x, %#06x,\n", range32[i], range32[i+1]) + fmt.Fprintf(&buf, "\t%#06x, %#06x,\n", range32[i], range32[i+1]) } - fmt.Printf("}\n\n") + fmt.Fprintf(&buf, "}\n\n") - fmt.Printf("var isNotPrint32 = []uint16{ // add 0x10000 to each entry\n") + fmt.Fprintf(&buf, "var isNotPrint32 = []uint16{ // add 0x10000 to each entry\n") for _, r := range except32 { if r >= 0x20000 { - fmt.Fprintf(os.Stderr, "%U too big for isNotPrint32\n", r) - return + log.Fatalf("%U too big for isNotPrint32\n", r) } - fmt.Printf("\t%#04x,\n", r-0x10000) + fmt.Fprintf(&buf, "\t%#04x,\n", r-0x10000) + } + fmt.Fprintf(&buf, "}\n") + + data, err := format.Source(buf.Bytes()) + if err != nil { + log.Fatal(err) + } + err = ioutil.WriteFile(*filename, data, 0644) + if err != nil { + log.Fatal(err) } - fmt.Printf("}\n") } diff --git a/src/pkg/strconv/quote.go b/src/pkg/strconv/quote.go index 8cdfc472f3..4469c688b0 100644 --- a/src/pkg/strconv/quote.go +++ b/src/pkg/strconv/quote.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:generate go run makeisprint.go -output isprint.go + package strconv import (