~ubuntu-branches/ubuntu/saucy/golang/saucy

« back to all changes in this revision

Viewing changes to test/stress/parsego.go

  • Committer: Package Import Robot
  • Author(s): Adam Conrad
  • Date: 2013-07-08 05:52:37 UTC
  • mfrom: (29.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20130708055237-at01839e0hp8z3ni
Tags: 2:1.1-1ubuntu1
016-armhf-elf-header.patch: Use correct ELF header for armhf binaries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2013 The Go Authors.  All rights reserved.
 
2
// Use of this source code is governed by a BSD-style
 
3
// license that can be found in the LICENSE file.
 
4
 
 
5
package main
 
6
 
 
7
import (
 
8
        "go/ast"
 
9
        "go/parser"
 
10
        "go/token"
 
11
        "os"
 
12
        "path"
 
13
        "runtime"
 
14
        "strings"
 
15
)
 
16
 
 
17
func isGoFile(dir os.FileInfo) bool {
 
18
        return !dir.IsDir() &&
 
19
                !strings.HasPrefix(dir.Name(), ".") && // ignore .files
 
20
                path.Ext(dir.Name()) == ".go"
 
21
}
 
22
 
 
23
func isPkgFile(dir os.FileInfo) bool {
 
24
        return isGoFile(dir) &&
 
25
                !strings.HasSuffix(dir.Name(), "_test.go") // ignore test files
 
26
}
 
27
 
 
28
func pkgName(filename string) string {
 
29
        file, err := parser.ParseFile(token.NewFileSet(), filename, nil, parser.PackageClauseOnly)
 
30
        if err != nil || file == nil {
 
31
                return ""
 
32
        }
 
33
        return file.Name.Name
 
34
}
 
35
 
 
36
func parseDir(dirpath string) map[string]*ast.Package {
 
37
        // the package name is the directory name within its parent.
 
38
        // (use dirname instead of path because dirname is clean; it
 
39
        // has no trailing '/')
 
40
        _, pkgname := path.Split(dirpath)
 
41
 
 
42
        // filter function to select the desired .go files
 
43
        filter := func(d os.FileInfo) bool {
 
44
                if isPkgFile(d) {
 
45
                        // Some directories contain main packages: Only accept
 
46
                        // files that belong to the expected package so that
 
47
                        // parser.ParsePackage doesn't return "multiple packages
 
48
                        // found" errors.
 
49
                        // Additionally, accept the special package name
 
50
                        // fakePkgName if we are looking at cmd documentation.
 
51
                        name := pkgName(dirpath + "/" + d.Name())
 
52
                        return name == pkgname
 
53
                }
 
54
                return false
 
55
        }
 
56
 
 
57
        // get package AST
 
58
        pkgs, err := parser.ParseDir(token.NewFileSet(), dirpath, filter, parser.ParseComments)
 
59
        if err != nil {
 
60
                println("parse", dirpath, err.Error())
 
61
                panic("go ParseDir fail: " + err.Error())
 
62
        }
 
63
        return pkgs
 
64
}
 
65
 
 
66
func stressParseGo() {
 
67
        pkgroot := runtime.GOROOT() + "/src/pkg/"
 
68
        for {
 
69
                m := make(map[string]map[string]*ast.Package)
 
70
                for _, pkg := range packages {
 
71
                        m[pkg] = parseDir(pkgroot + pkg)
 
72
                        Println("parsed go package", pkg)
 
73
                }
 
74
        }
 
75
}
 
76
 
 
77
// find . -type d -not -path "./exp" -not -path "./exp/*" -printf "\t\"%p\",\n" | sort | sed "s/\.\///" | grep -v testdata
 
78
var packages = []string{
 
79
        "archive",
 
80
        "archive/tar",
 
81
        "archive/zip",
 
82
        "bufio",
 
83
        "builtin",
 
84
        "bytes",
 
85
        "compress",
 
86
        "compress/bzip2",
 
87
        "compress/flate",
 
88
        "compress/gzip",
 
89
        "compress/lzw",
 
90
        "compress/zlib",
 
91
        "container",
 
92
        "container/heap",
 
93
        "container/list",
 
94
        "container/ring",
 
95
        "crypto",
 
96
        "crypto/aes",
 
97
        "crypto/cipher",
 
98
        "crypto/des",
 
99
        "crypto/dsa",
 
100
        "crypto/ecdsa",
 
101
        "crypto/elliptic",
 
102
        "crypto/hmac",
 
103
        "crypto/md5",
 
104
        "crypto/rand",
 
105
        "crypto/rc4",
 
106
        "crypto/rsa",
 
107
        "crypto/sha1",
 
108
        "crypto/sha256",
 
109
        "crypto/sha512",
 
110
        "crypto/subtle",
 
111
        "crypto/tls",
 
112
        "crypto/x509",
 
113
        "crypto/x509/pkix",
 
114
        "database",
 
115
        "database/sql",
 
116
        "database/sql/driver",
 
117
        "debug",
 
118
        "debug/dwarf",
 
119
        "debug/elf",
 
120
        "debug/gosym",
 
121
        "debug/macho",
 
122
        "debug/pe",
 
123
        "encoding",
 
124
        "encoding/ascii85",
 
125
        "encoding/asn1",
 
126
        "encoding/base32",
 
127
        "encoding/base64",
 
128
        "encoding/binary",
 
129
        "encoding/csv",
 
130
        "encoding/gob",
 
131
        "encoding/hex",
 
132
        "encoding/json",
 
133
        "encoding/pem",
 
134
        "encoding/xml",
 
135
        "errors",
 
136
        "expvar",
 
137
        "flag",
 
138
        "fmt",
 
139
        "go",
 
140
        "go/ast",
 
141
        "go/build",
 
142
        "go/doc",
 
143
        "go/format",
 
144
        "go/parser",
 
145
        "go/printer",
 
146
        "go/scanner",
 
147
        "go/token",
 
148
        "hash",
 
149
        "hash/adler32",
 
150
        "hash/crc32",
 
151
        "hash/crc64",
 
152
        "hash/fnv",
 
153
        "html",
 
154
        "html/template",
 
155
        "image",
 
156
        "image/color",
 
157
        "image/draw",
 
158
        "image/gif",
 
159
        "image/jpeg",
 
160
        "image/png",
 
161
        "index",
 
162
        "index/suffixarray",
 
163
        "io",
 
164
        "io/ioutil",
 
165
        "log",
 
166
        "log/syslog",
 
167
        "math",
 
168
        "math/big",
 
169
        "math/cmplx",
 
170
        "math/rand",
 
171
        "mime",
 
172
        "mime/multipart",
 
173
        "net",
 
174
        "net/http",
 
175
        "net/http/cgi",
 
176
        "net/http/cookiejar",
 
177
        "net/http/fcgi",
 
178
        "net/http/httptest",
 
179
        "net/http/httputil",
 
180
        "net/http/pprof",
 
181
        "net/mail",
 
182
        "net/rpc",
 
183
        "net/rpc/jsonrpc",
 
184
        "net/smtp",
 
185
        "net/textproto",
 
186
        "net/url",
 
187
        "os",
 
188
        "os/exec",
 
189
        "os/signal",
 
190
        "os/user",
 
191
        "path",
 
192
        "path/filepath",
 
193
        "reflect",
 
194
        "regexp",
 
195
        "regexp/syntax",
 
196
        "runtime",
 
197
        "runtime/cgo",
 
198
        "runtime/debug",
 
199
        "runtime/pprof",
 
200
        "runtime/race",
 
201
        "sort",
 
202
        "strconv",
 
203
        "strings",
 
204
        "sync",
 
205
        "sync/atomic",
 
206
        "syscall",
 
207
        "testing",
 
208
        "testing/iotest",
 
209
        "testing/quick",
 
210
        "text",
 
211
        "text/scanner",
 
212
        "text/tabwriter",
 
213
        "text/template",
 
214
        "text/template/parse",
 
215
        "time",
 
216
        "unicode",
 
217
        "unicode/utf16",
 
218
        "unicode/utf8",
 
219
        "unsafe",
 
220
}