Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
5ed3960b
Commit
5ed3960b
authored
Oct 05, 2018
by
Jeremy Schlatter
Committed by
Felix Lange
Oct 05, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
accounts/abi/bind: stop using goimports in the binding generator (#17768)
parent
5b0c9c8a
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
153 additions
and
11418 deletions
+153
-11418
bind.go
accounts/abi/bind/bind.go
+3
-3
bind_test.go
accounts/abi/bind/bind_test.go
+126
-16
template.go
accounts/abi/bind/template.go
+24
-0
fastwalk.go
vendor/golang.org/x/tools/imports/fastwalk.go
+0
-172
fastwalk_dirent_fileno.go
vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go
+0
-13
fastwalk_dirent_ino.go
vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go
+0
-13
fastwalk_portable.go
vendor/golang.org/x/tools/imports/fastwalk_portable.go
+0
-29
fastwalk_unix.go
vendor/golang.org/x/tools/imports/fastwalk_unix.go
+0
-122
fix.go
vendor/golang.org/x/tools/imports/fix.go
+0
-978
imports.go
vendor/golang.org/x/tools/imports/imports.go
+0
-289
mkindex.go
vendor/golang.org/x/tools/imports/mkindex.go
+0
-173
mkstdlib.go
vendor/golang.org/x/tools/imports/mkstdlib.go
+0
-103
sortimports.go
vendor/golang.org/x/tools/imports/sortimports.go
+0
-212
zstdlib.go
vendor/golang.org/x/tools/imports/zstdlib.go
+0
-9289
vendor.json
vendor/vendor.json
+0
-6
No files found.
accounts/abi/bind/bind.go
View file @
5ed3960b
...
@@ -23,13 +23,13 @@ package bind
...
@@ -23,13 +23,13 @@ package bind
import
(
import
(
"bytes"
"bytes"
"fmt"
"fmt"
"go/format"
"regexp"
"regexp"
"strings"
"strings"
"text/template"
"text/template"
"unicode"
"unicode"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi"
"golang.org/x/tools/imports"
)
)
// Lang is a target programming language selector to generate bindings for.
// Lang is a target programming language selector to generate bindings for.
...
@@ -145,9 +145,9 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La
...
@@ -145,9 +145,9 @@ func Bind(types []string, abis []string, bytecodes []string, pkg string, lang La
if
err
:=
tmpl
.
Execute
(
buffer
,
data
);
err
!=
nil
{
if
err
:=
tmpl
.
Execute
(
buffer
,
data
);
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
// For Go bindings pass the code through go
imports to clean it up and double check
// For Go bindings pass the code through go
fmt to clean it up
if
lang
==
LangGo
{
if
lang
==
LangGo
{
code
,
err
:=
imports
.
Process
(
"."
,
buffer
.
Bytes
(),
nil
)
code
,
err
:=
format
.
Source
(
buffer
.
Bytes
()
)
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"%v
\n
%s"
,
err
,
buffer
)
return
""
,
fmt
.
Errorf
(
"%v
\n
%s"
,
err
,
buffer
)
}
}
...
...
accounts/abi/bind/bind_test.go
View file @
5ed3960b
...
@@ -27,7 +27,6 @@ import (
...
@@ -27,7 +27,6 @@ import (
"testing"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
"golang.org/x/tools/imports"
)
)
var
bindTests
=
[]
struct
{
var
bindTests
=
[]
struct
{
...
@@ -35,6 +34,7 @@ var bindTests = []struct {
...
@@ -35,6 +34,7 @@ var bindTests = []struct {
contract
string
contract
string
bytecode
string
bytecode
string
abi
string
abi
string
imports
string
tester
string
tester
string
}{
}{
// Test that the binding is available in combined and separate forms too
// Test that the binding is available in combined and separate forms too
...
@@ -43,6 +43,7 @@ var bindTests = []struct {
...
@@ -43,6 +43,7 @@ var bindTests = []struct {
`contract NilContract {}`
,
`contract NilContract {}`
,
`606060405260068060106000396000f3606060405200`
,
`606060405260068060106000396000f3606060405200`
,
`[]`
,
`[]`
,
`"github.com/ethereum/go-ethereum/common"`
,
`
`
if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil {
if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil {
t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil)
t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil)
...
@@ -61,6 +62,7 @@ var bindTests = []struct {
...
@@ -61,6 +62,7 @@ var bindTests = []struct {
`https://ethereum.org/token`
,
`https://ethereum.org/token`
,
`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`
,
`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`
,
`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`
,
`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`
,
`"github.com/ethereum/go-ethereum/common"`
,
`
`
if b, err := NewToken(common.Address{}, nil); b == nil || err != nil {
if b, err := NewToken(common.Address{}, nil); b == nil || err != nil {
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
...
@@ -72,6 +74,7 @@ var bindTests = []struct {
...
@@ -72,6 +74,7 @@ var bindTests = []struct {
`https://ethereum.org/crowdsale`
,
`https://ethereum.org/crowdsale`
,
`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`
,
`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`
,
`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`
,
`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`
,
`"github.com/ethereum/go-ethereum/common"`
,
`
`
if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil {
if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil {
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
...
@@ -83,6 +86,7 @@ var bindTests = []struct {
...
@@ -83,6 +86,7 @@ var bindTests = []struct {
`https://ethereum.org/dao`
,
`https://ethereum.org/dao`
,
`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`
,
`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`
,
`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`
,
`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`
,
`"github.com/ethereum/go-ethereum/common"`
,
`
`
if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil {
if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil {
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
...
@@ -102,6 +106,11 @@ var bindTests = []struct {
...
@@ -102,6 +106,11 @@ var bindTests = []struct {
{"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]}
{"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]}
]
]
`
,
`
,
`
"fmt"
"github.com/ethereum/go-ethereum/common"
`
,
`if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil {
`if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil {
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
} else if false { // Don't run, just compile and test types
} else if false { // Don't run, just compile and test types
...
@@ -131,6 +140,11 @@ var bindTests = []struct {
...
@@ -131,6 +140,11 @@ var bindTests = []struct {
{"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]}
{"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]}
]
]
`
,
`
,
`
"fmt"
"github.com/ethereum/go-ethereum/common"
`
,
`if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil {
`if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil {
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
} else if false { // Don't run, just compile and test types
} else if false { // Don't run, just compile and test types
...
@@ -160,6 +174,13 @@ var bindTests = []struct {
...
@@ -160,6 +174,13 @@ var bindTests = []struct {
{"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]}
{"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]}
]
]
`
,
`
,
`
"fmt"
"math/big"
"reflect"
"github.com/ethereum/go-ethereum/common"
`
,
`if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil {
`if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil {
t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil)
t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil)
} else if false { // Don't run, just compile and test types
} else if false { // Don't run, just compile and test types
...
@@ -225,6 +246,14 @@ var bindTests = []struct {
...
@@ -225,6 +246,14 @@ var bindTests = []struct {
`
,
`
,
`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`
,
`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`
,
`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`
,
`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -266,6 +295,14 @@ var bindTests = []struct {
...
@@ -266,6 +295,14 @@ var bindTests = []struct {
`
,
`
,
`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`
,
`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`
,
`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`
,
`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -298,6 +335,14 @@ var bindTests = []struct {
...
@@ -298,6 +335,14 @@ var bindTests = []struct {
`
,
`
,
`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`
,
`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`
,
`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`
,
`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -340,6 +385,16 @@ var bindTests = []struct {
...
@@ -340,6 +385,16 @@ var bindTests = []struct {
`
,
`
,
`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`
,
`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`
,
`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`
,
`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`
,
`
"math/big"
"reflect"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -374,6 +429,14 @@ var bindTests = []struct {
...
@@ -374,6 +429,14 @@ var bindTests = []struct {
`
,
`
,
`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`
,
`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`
,
`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`
,
`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -409,6 +472,11 @@ var bindTests = []struct {
...
@@ -409,6 +472,11 @@ var bindTests = []struct {
`
,
`
,
`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`
,
`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`
,
`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`
,
`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`
,
`
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
`
,
`
`
// Create a simulator and wrap a non-deployed contract
// Create a simulator and wrap a non-deployed contract
sim := backends.NewSimulatedBackend(nil, uint64(10000000000))
sim := backends.NewSimulatedBackend(nil, uint64(10000000000))
...
@@ -443,6 +511,14 @@ var bindTests = []struct {
...
@@ -443,6 +511,14 @@ var bindTests = []struct {
`
,
`
,
`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`
,
`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`
,
`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`
,
`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -478,6 +554,15 @@ var bindTests = []struct {
...
@@ -478,6 +554,15 @@ var bindTests = []struct {
}
}
`
,
`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`
,
`
,
`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`
,
`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`
,
`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -538,6 +623,15 @@ var bindTests = []struct {
...
@@ -538,6 +623,15 @@ var bindTests = []struct {
}
}
`
,
`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`
,
`
,
`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`
,
`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`
,
`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`
,
`
"fmt"
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -608,6 +702,16 @@ var bindTests = []struct {
...
@@ -608,6 +702,16 @@ var bindTests = []struct {
`
,
`
,
`6060604052341561000f57600080fd5b61042c8061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063528300ff1461005c578063630c31e2146100fc578063c7d116dd14610156575b600080fd5b341561006757600080fd5b6100fa600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610194565b005b341561010757600080fd5b610154600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080351515906020019091908035906020019091905050610367565b005b341561016157600080fd5b610192600480803590602001909190803560010b90602001909190803563ffffffff169060200190919050506103c3565b005b806040518082805190602001908083835b6020831015156101ca57805182526020820191506020810190506020830392506101a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020826040518082805190602001908083835b60208310151561022d5780518252602082019150602081019050602083039250610208565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561032757808201518184015260208101905061030c565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b81151583600019168573ffffffffffffffffffffffffffffffffffffffff167f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8846040518082815260200191505060405180910390a450505050565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820d1f8a8bbddbc5bb29f285891d6ae1eef8420c52afdc05e1573f6114d8e1714710029`
,
`6060604052341561000f57600080fd5b61042c8061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063528300ff1461005c578063630c31e2146100fc578063c7d116dd14610156575b600080fd5b341561006757600080fd5b6100fa600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610194565b005b341561010757600080fd5b610154600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919080351515906020019091908035906020019091905050610367565b005b341561016157600080fd5b610192600480803590602001909190803560010b90602001909190803563ffffffff169060200190919050506103c3565b005b806040518082805190602001908083835b6020831015156101ca57805182526020820191506020810190506020830392506101a5565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020826040518082805190602001908083835b60208310151561022d5780518252602082019150602081019050602083039250610208565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156102c15780820151818401526020810190506102a6565b50505050905090810190601f1680156102ee5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561032757808201518184015260208101905061030c565b50505050905090810190601f1680156103545780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b81151583600019168573ffffffffffffffffffffffffffffffffffffffff167f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8846040518082815260200191505060405180910390a450505050565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820d1f8a8bbddbc5bb29f285891d6ae1eef8420c52afdc05e1573f6114d8e1714710029`
,
`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"}]`
,
`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"}]`
,
`
"math/big"
"time"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -757,6 +861,14 @@ var bindTests = []struct {
...
@@ -757,6 +861,14 @@ var bindTests = []struct {
`
,
`
,
`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`
,
`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`
,
`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`
,
`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`
,
`
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind/backends"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/crypto"
`
,
`
`
// Generate a new random account and a funded simulator
// Generate a new random account and a funded simulator
key, _ := crypto.GenerateKey()
key, _ := crypto.GenerateKey()
...
@@ -819,15 +931,6 @@ func TestBindings(t *testing.T) {
...
@@ -819,15 +931,6 @@ func TestBindings(t *testing.T) {
if
!
common
.
FileExist
(
gocmd
)
{
if
!
common
.
FileExist
(
gocmd
)
{
t
.
Skip
(
"go sdk not found for testing"
)
t
.
Skip
(
"go sdk not found for testing"
)
}
}
// Skip the test if the go-ethereum sources are symlinked (https://github.com/golang/go/issues/14845)
linkTestCode
:=
fmt
.
Sprintf
(
"package linktest
\n
func CheckSymlinks(){
\n
fmt.Println(backends.NewSimulatedBackend(nil,uint64(10000000000)))
\n
}"
)
linkTestDeps
,
err
:=
imports
.
Process
(
os
.
TempDir
(),
[]
byte
(
linkTestCode
),
nil
)
if
err
!=
nil
{
t
.
Fatalf
(
"failed check for goimports symlink bug: %v"
,
err
)
}
if
!
strings
.
Contains
(
string
(
linkTestDeps
),
"go-ethereum"
)
{
t
.
Skip
(
"symlinked environment doesn't support bind (https://github.com/golang/go/issues/14845)"
)
}
// Create a temporary workspace for the test suite
// Create a temporary workspace for the test suite
ws
,
err
:=
ioutil
.
TempDir
(
""
,
""
)
ws
,
err
:=
ioutil
.
TempDir
(
""
,
""
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -850,12 +953,19 @@ func TestBindings(t *testing.T) {
...
@@ -850,12 +953,19 @@ func TestBindings(t *testing.T) {
t
.
Fatalf
(
"test %d: failed to write binding: %v"
,
i
,
err
)
t
.
Fatalf
(
"test %d: failed to write binding: %v"
,
i
,
err
)
}
}
// Generate the test file with the injected test code
// Generate the test file with the injected test code
code
:=
fmt
.
Sprintf
(
"package bindtest
\n
import
\"
testing
\"\n
func Test%s(t *testing.T){
\n
%s
\n
}"
,
tt
.
name
,
tt
.
tester
)
code
:=
fmt
.
Sprintf
(
`
blob
,
err
:=
imports
.
Process
(
""
,
[]
byte
(
code
),
nil
)
package bindtest
if
err
!=
nil
{
t
.
Fatalf
(
"test %d: failed to generate tests: %v"
,
i
,
err
)
import (
}
"testing"
if
err
:=
ioutil
.
WriteFile
(
filepath
.
Join
(
pkg
,
strings
.
ToLower
(
tt
.
name
)
+
"_test.go"
),
blob
,
0600
);
err
!=
nil
{
%s
)
func Test%s(t *testing.T) {
%s
}
`
,
tt
.
imports
,
tt
.
name
,
tt
.
tester
)
if
err
:=
ioutil
.
WriteFile
(
filepath
.
Join
(
pkg
,
strings
.
ToLower
(
tt
.
name
)
+
"_test.go"
),
[]
byte
(
code
),
0600
);
err
!=
nil
{
t
.
Fatalf
(
"test %d: failed to write tests: %v"
,
i
,
err
)
t
.
Fatalf
(
"test %d: failed to write tests: %v"
,
i
,
err
)
}
}
}
}
...
...
accounts/abi/bind/template.go
View file @
5ed3960b
...
@@ -64,6 +64,30 @@ const tmplSourceGo = `
...
@@ -64,6 +64,30 @@ const tmplSourceGo = `
package {{.Package}}
package {{.Package}}
import (
"math/big"
"strings"
ethereum "github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/event"
)
// Reference imports to suppress errors if they are not otherwise used.
var (
_ = big.NewInt
_ = strings.NewReader
_ = ethereum.NotFound
_ = abi.U256
_ = bind.Bind
_ = common.Big1
_ = types.BloomLookup
_ = event.NewSubscription
)
{{range $contract := .Contracts}}
{{range $contract := .Contracts}}
// {{.Type}}ABI is the input ABI used to generate the binding from.
// {{.Type}}ABI is the input ABI used to generate the binding from.
const {{.Type}}ABI = "{{.InputABI}}"
const {{.Type}}ABI = "{{.InputABI}}"
...
...
vendor/golang.org/x/tools/imports/fastwalk.go
deleted
100644 → 0
View file @
5b0c9c8a
// Copyright 2016 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.
// A faster implementation of filepath.Walk.
//
// filepath.Walk's design necessarily calls os.Lstat on each file,
// even if the caller needs less info. And goimports only need to know
// the type of each file. The kernel interface provides the type in
// the Readdir call but the standard library ignored it.
// fastwalk_unix.go contains a fork of the syscall routines.
//
// See golang.org/issue/16399
package
imports
import
(
"errors"
"os"
"path/filepath"
"runtime"
)
// traverseLink is a sentinel error for fastWalk, similar to filepath.SkipDir.
var
traverseLink
=
errors
.
New
(
"traverse symlink, assuming target is a directory"
)
// fastWalk walks the file tree rooted at root, calling walkFn for
// each file or directory in the tree, including root.
//
// If fastWalk returns filepath.SkipDir, the directory is skipped.
//
// Unlike filepath.Walk:
// * file stat calls must be done by the user.
// The only provided metadata is the file type, which does not include
// any permission bits.
// * multiple goroutines stat the filesystem concurrently. The provided
// walkFn must be safe for concurrent use.
// * fastWalk can follow symlinks if walkFn returns the traverseLink
// sentinel error. It is the walkFn's responsibility to prevent
// fastWalk from going into symlink cycles.
func
fastWalk
(
root
string
,
walkFn
func
(
path
string
,
typ
os
.
FileMode
)
error
)
error
{
// TODO(bradfitz): make numWorkers configurable? We used a
// minimum of 4 to give the kernel more info about multiple
// things we want, in hopes its I/O scheduling can take
// advantage of that. Hopefully most are in cache. Maybe 4 is
// even too low of a minimum. Profile more.
numWorkers
:=
4
if
n
:=
runtime
.
NumCPU
();
n
>
numWorkers
{
numWorkers
=
n
}
w
:=
&
walker
{
fn
:
walkFn
,
enqueuec
:
make
(
chan
walkItem
,
numWorkers
),
// buffered for performance
workc
:
make
(
chan
walkItem
,
numWorkers
),
// buffered for performance
donec
:
make
(
chan
struct
{}),
// buffered for correctness & not leaking goroutines:
resc
:
make
(
chan
error
,
numWorkers
),
}
defer
close
(
w
.
donec
)
// TODO(bradfitz): start the workers as needed? maybe not worth it.
for
i
:=
0
;
i
<
numWorkers
;
i
++
{
go
w
.
doWork
()
}
todo
:=
[]
walkItem
{{
dir
:
root
}}
out
:=
0
for
{
workc
:=
w
.
workc
var
workItem
walkItem
if
len
(
todo
)
==
0
{
workc
=
nil
}
else
{
workItem
=
todo
[
len
(
todo
)
-
1
]
}
select
{
case
workc
<-
workItem
:
todo
=
todo
[
:
len
(
todo
)
-
1
]
out
++
case
it
:=
<-
w
.
enqueuec
:
todo
=
append
(
todo
,
it
)
case
err
:=
<-
w
.
resc
:
out
--
if
err
!=
nil
{
return
err
}
if
out
==
0
&&
len
(
todo
)
==
0
{
// It's safe to quit here, as long as the buffered
// enqueue channel isn't also readable, which might
// happen if the worker sends both another unit of
// work and its result before the other select was
// scheduled and both w.resc and w.enqueuec were
// readable.
select
{
case
it
:=
<-
w
.
enqueuec
:
todo
=
append
(
todo
,
it
)
default
:
return
nil
}
}
}
}
}
// doWork reads directories as instructed (via workc) and runs the
// user's callback function.
func
(
w
*
walker
)
doWork
()
{
for
{
select
{
case
<-
w
.
donec
:
return
case
it
:=
<-
w
.
workc
:
w
.
resc
<-
w
.
walk
(
it
.
dir
,
!
it
.
callbackDone
)
}
}
}
type
walker
struct
{
fn
func
(
path
string
,
typ
os
.
FileMode
)
error
donec
chan
struct
{}
// closed on fastWalk's return
workc
chan
walkItem
// to workers
enqueuec
chan
walkItem
// from workers
resc
chan
error
// from workers
}
type
walkItem
struct
{
dir
string
callbackDone
bool
// callback already called; don't do it again
}
func
(
w
*
walker
)
enqueue
(
it
walkItem
)
{
select
{
case
w
.
enqueuec
<-
it
:
case
<-
w
.
donec
:
}
}
func
(
w
*
walker
)
onDirEnt
(
dirName
,
baseName
string
,
typ
os
.
FileMode
)
error
{
joined
:=
dirName
+
string
(
os
.
PathSeparator
)
+
baseName
if
typ
==
os
.
ModeDir
{
w
.
enqueue
(
walkItem
{
dir
:
joined
})
return
nil
}
err
:=
w
.
fn
(
joined
,
typ
)
if
typ
==
os
.
ModeSymlink
{
if
err
==
traverseLink
{
// Set callbackDone so we don't call it twice for both the
// symlink-as-symlink and the symlink-as-directory later:
w
.
enqueue
(
walkItem
{
dir
:
joined
,
callbackDone
:
true
})
return
nil
}
if
err
==
filepath
.
SkipDir
{
// Permit SkipDir on symlinks too.
return
nil
}
}
return
err
}
func
(
w
*
walker
)
walk
(
root
string
,
runUserCallback
bool
)
error
{
if
runUserCallback
{
err
:=
w
.
fn
(
root
,
os
.
ModeDir
)
if
err
==
filepath
.
SkipDir
{
return
nil
}
if
err
!=
nil
{
return
err
}
}
return
readDir
(
root
,
w
.
onDirEnt
)
}
vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go
deleted
100644 → 0
View file @
5b0c9c8a
// Copyright 2016 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.
// +build freebsd openbsd netbsd
package
imports
import
"syscall"
func
direntInode
(
dirent
*
syscall
.
Dirent
)
uint64
{
return
uint64
(
dirent
.
Fileno
)
}
vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go
deleted
100644 → 0
View file @
5b0c9c8a
// Copyright 2016 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.
// +build linux,!appengine darwin
package
imports
import
"syscall"
func
direntInode
(
dirent
*
syscall
.
Dirent
)
uint64
{
return
uint64
(
dirent
.
Ino
)
}
vendor/golang.org/x/tools/imports/fastwalk_portable.go
deleted
100644 → 0
View file @
5b0c9c8a
// Copyright 2016 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.
// +build appengine !linux,!darwin,!freebsd,!openbsd,!netbsd
package
imports
import
(
"io/ioutil"
"os"
)
// readDir calls fn for each directory entry in dirName.
// It does not descend into directories or follow symlinks.
// If fn returns a non-nil error, readDir returns with that error
// immediately.
func
readDir
(
dirName
string
,
fn
func
(
dirName
,
entName
string
,
typ
os
.
FileMode
)
error
)
error
{
fis
,
err
:=
ioutil
.
ReadDir
(
dirName
)
if
err
!=
nil
{
return
err
}
for
_
,
fi
:=
range
fis
{
if
err
:=
fn
(
dirName
,
fi
.
Name
(),
fi
.
Mode
()
&
os
.
ModeType
);
err
!=
nil
{
return
err
}
}
return
nil
}
vendor/golang.org/x/tools/imports/fastwalk_unix.go
deleted
100644 → 0
View file @
5b0c9c8a
// Copyright 2016 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.
// +build linux,!appengine darwin freebsd openbsd netbsd
package
imports
import
(
"bytes"
"fmt"
"os"
"syscall"
"unsafe"
)
const
blockSize
=
8
<<
10
// unknownFileMode is a sentinel (and bogus) os.FileMode
// value used to represent a syscall.DT_UNKNOWN Dirent.Type.
const
unknownFileMode
os
.
FileMode
=
os
.
ModeNamedPipe
|
os
.
ModeSocket
|
os
.
ModeDevice
func
readDir
(
dirName
string
,
fn
func
(
dirName
,
entName
string
,
typ
os
.
FileMode
)
error
)
error
{
fd
,
err
:=
syscall
.
Open
(
dirName
,
0
,
0
)
if
err
!=
nil
{
return
err
}
defer
syscall
.
Close
(
fd
)
// The buffer must be at least a block long.
buf
:=
make
([]
byte
,
blockSize
)
// stack-allocated; doesn't escape
bufp
:=
0
// starting read position in buf
nbuf
:=
0
// end valid data in buf
for
{
if
bufp
>=
nbuf
{
bufp
=
0
nbuf
,
err
=
syscall
.
ReadDirent
(
fd
,
buf
)
if
err
!=
nil
{
return
os
.
NewSyscallError
(
"readdirent"
,
err
)
}
if
nbuf
<=
0
{
return
nil
}
}
consumed
,
name
,
typ
:=
parseDirEnt
(
buf
[
bufp
:
nbuf
])
bufp
+=
consumed
if
name
==
""
||
name
==
"."
||
name
==
".."
{
continue
}
// Fallback for filesystems (like old XFS) that don't
// support Dirent.Type and have DT_UNKNOWN (0) there
// instead.
if
typ
==
unknownFileMode
{
fi
,
err
:=
os
.
Lstat
(
dirName
+
"/"
+
name
)
if
err
!=
nil
{
// It got deleted in the meantime.
if
os
.
IsNotExist
(
err
)
{
continue
}
return
err
}
typ
=
fi
.
Mode
()
&
os
.
ModeType
}
if
err
:=
fn
(
dirName
,
name
,
typ
);
err
!=
nil
{
return
err
}
}
}
func
parseDirEnt
(
buf
[]
byte
)
(
consumed
int
,
name
string
,
typ
os
.
FileMode
)
{
// golang.org/issue/15653
dirent
:=
(
*
syscall
.
Dirent
)(
unsafe
.
Pointer
(
&
buf
[
0
]))
if
v
:=
unsafe
.
Offsetof
(
dirent
.
Reclen
)
+
unsafe
.
Sizeof
(
dirent
.
Reclen
);
uintptr
(
len
(
buf
))
<
v
{
panic
(
fmt
.
Sprintf
(
"buf size of %d smaller than dirent header size %d"
,
len
(
buf
),
v
))
}
if
len
(
buf
)
<
int
(
dirent
.
Reclen
)
{
panic
(
fmt
.
Sprintf
(
"buf size %d < record length %d"
,
len
(
buf
),
dirent
.
Reclen
))
}
consumed
=
int
(
dirent
.
Reclen
)
if
direntInode
(
dirent
)
==
0
{
// File absent in directory.
return
}
switch
dirent
.
Type
{
case
syscall
.
DT_REG
:
typ
=
0
case
syscall
.
DT_DIR
:
typ
=
os
.
ModeDir
case
syscall
.
DT_LNK
:
typ
=
os
.
ModeSymlink
case
syscall
.
DT_BLK
:
typ
=
os
.
ModeDevice
case
syscall
.
DT_FIFO
:
typ
=
os
.
ModeNamedPipe
case
syscall
.
DT_SOCK
:
typ
=
os
.
ModeSocket
case
syscall
.
DT_UNKNOWN
:
typ
=
unknownFileMode
default
:
// Skip weird things.
// It's probably a DT_WHT (http://lwn.net/Articles/325369/)
// or something. Revisit if/when this package is moved outside
// of goimports. goimports only cares about regular files,
// symlinks, and directories.
return
}
nameBuf
:=
(
*
[
unsafe
.
Sizeof
(
dirent
.
Name
)]
byte
)(
unsafe
.
Pointer
(
&
dirent
.
Name
[
0
]))
nameLen
:=
bytes
.
IndexByte
(
nameBuf
[
:
],
0
)
if
nameLen
<
0
{
panic
(
"failed to find terminating 0 byte in dirent"
)
}
// Special cases for common things:
if
nameLen
==
1
&&
nameBuf
[
0
]
==
'.'
{
name
=
"."
}
else
if
nameLen
==
2
&&
nameBuf
[
0
]
==
'.'
&&
nameBuf
[
1
]
==
'.'
{
name
=
".."
}
else
{
name
=
string
(
nameBuf
[
:
nameLen
])
}
return
}
vendor/golang.org/x/tools/imports/fix.go
deleted
100644 → 0
View file @
5b0c9c8a
// 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.
package
imports
import
(
"bufio"
"bytes"
"fmt"
"go/ast"
"go/build"
"go/parser"
"go/token"
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
"sort"
"strings"
"sync"
"golang.org/x/tools/go/ast/astutil"
)
// Debug controls verbose logging.
var
Debug
=
false
var
(
inTests
=
false
// set true by fix_test.go; if false, no need to use testMu
testMu
sync
.
RWMutex
// guards globals reset by tests; used only if inTests
)
// If set, LocalPrefix instructs Process to sort import paths with the given
// prefix into another group after 3rd-party packages.
var
LocalPrefix
string
// importToGroup is a list of functions which map from an import path to
// a group number.
var
importToGroup
=
[]
func
(
importPath
string
)
(
num
int
,
ok
bool
){
func
(
importPath
string
)
(
num
int
,
ok
bool
)
{
if
LocalPrefix
!=
""
&&
strings
.
HasPrefix
(
importPath
,
LocalPrefix
)
{
return
3
,
true
}
return
},
func
(
importPath
string
)
(
num
int
,
ok
bool
)
{
if
strings
.
HasPrefix
(
importPath
,
"appengine"
)
{
return
2
,
true
}
return
},
func
(
importPath
string
)
(
num
int
,
ok
bool
)
{
if
strings
.
Contains
(
importPath
,
"."
)
{
return
1
,
true
}
return
},
}
func
importGroup
(
importPath
string
)
int
{
for
_
,
fn
:=
range
importToGroup
{
if
n
,
ok
:=
fn
(
importPath
);
ok
{
return
n
}
}
return
0
}
// packageInfo is a summary of features found in a package.
type
packageInfo
struct
{
Globals
map
[
string
]
bool
// symbol => true
}
// dirPackageInfo gets information from other files in the package.
func
dirPackageInfo
(
srcDir
,
filename
string
)
(
*
packageInfo
,
error
)
{
considerTests
:=
strings
.
HasSuffix
(
filename
,
"_test.go"
)
// Handle file from stdin
if
_
,
err
:=
os
.
Stat
(
filename
);
err
!=
nil
{
if
os
.
IsNotExist
(
err
)
{
return
&
packageInfo
{},
nil
}
return
nil
,
err
}
fileBase
:=
filepath
.
Base
(
filename
)
packageFileInfos
,
err
:=
ioutil
.
ReadDir
(
srcDir
)
if
err
!=
nil
{
return
nil
,
err
}
info
:=
&
packageInfo
{
Globals
:
make
(
map
[
string
]
bool
)}
for
_
,
fi
:=
range
packageFileInfos
{
if
fi
.
Name
()
==
fileBase
||
!
strings
.
HasSuffix
(
fi
.
Name
(),
".go"
)
{
continue
}
if
!
considerTests
&&
strings
.
HasSuffix
(
fi
.
Name
(),
"_test.go"
)
{
continue
}
fileSet
:=
token
.
NewFileSet
()
root
,
err
:=
parser
.
ParseFile
(
fileSet
,
filepath
.
Join
(
srcDir
,
fi
.
Name
()),
nil
,
0
)
if
err
!=
nil
{
continue
}
for
_
,
decl
:=
range
root
.
Decls
{
genDecl
,
ok
:=
decl
.
(
*
ast
.
GenDecl
)
if
!
ok
{
continue
}
for
_
,
spec
:=
range
genDecl
.
Specs
{
valueSpec
,
ok
:=
spec
.
(
*
ast
.
ValueSpec
)
if
!
ok
{
continue
}
info
.
Globals
[
valueSpec
.
Names
[
0
]
.
Name
]
=
true
}
}
}
return
info
,
nil
}
func
fixImports
(
fset
*
token
.
FileSet
,
f
*
ast
.
File
,
filename
string
)
(
added
[]
string
,
err
error
)
{
// refs are a set of possible package references currently unsatisfied by imports.
// first key: either base package (e.g. "fmt") or renamed package
// second key: referenced package symbol (e.g. "Println")
refs
:=
make
(
map
[
string
]
map
[
string
]
bool
)
// decls are the current package imports. key is base package or renamed package.
decls
:=
make
(
map
[
string
]
*
ast
.
ImportSpec
)
abs
,
err
:=
filepath
.
Abs
(
filename
)
if
err
!=
nil
{
return
nil
,
err
}
srcDir
:=
filepath
.
Dir
(
abs
)
if
Debug
{
log
.
Printf
(
"fixImports(filename=%q), abs=%q, srcDir=%q ..."
,
filename
,
abs
,
srcDir
)
}
var
packageInfo
*
packageInfo
var
loadedPackageInfo
bool
// collect potential uses of packages.
var
visitor
visitFn
visitor
=
visitFn
(
func
(
node
ast
.
Node
)
ast
.
Visitor
{
if
node
==
nil
{
return
visitor
}
switch
v
:=
node
.
(
type
)
{
case
*
ast
.
ImportSpec
:
if
v
.
Name
!=
nil
{
decls
[
v
.
Name
.
Name
]
=
v
break
}
ipath
:=
strings
.
Trim
(
v
.
Path
.
Value
,
`"`
)
if
ipath
==
"C"
{
break
}
local
:=
importPathToName
(
ipath
,
srcDir
)
decls
[
local
]
=
v
case
*
ast
.
SelectorExpr
:
xident
,
ok
:=
v
.
X
.
(
*
ast
.
Ident
)
if
!
ok
{
break
}
if
xident
.
Obj
!=
nil
{
// if the parser can resolve it, it's not a package ref
break
}
pkgName
:=
xident
.
Name
if
refs
[
pkgName
]
==
nil
{
refs
[
pkgName
]
=
make
(
map
[
string
]
bool
)
}
if
!
loadedPackageInfo
{
loadedPackageInfo
=
true
packageInfo
,
_
=
dirPackageInfo
(
srcDir
,
filename
)
}
if
decls
[
pkgName
]
==
nil
&&
(
packageInfo
==
nil
||
!
packageInfo
.
Globals
[
pkgName
])
{
refs
[
pkgName
][
v
.
Sel
.
Name
]
=
true
}
}
return
visitor
})
ast
.
Walk
(
visitor
,
f
)
// Nil out any unused ImportSpecs, to be removed in following passes
unusedImport
:=
map
[
string
]
string
{}
for
pkg
,
is
:=
range
decls
{
if
refs
[
pkg
]
==
nil
&&
pkg
!=
"_"
&&
pkg
!=
"."
{
name
:=
""
if
is
.
Name
!=
nil
{
name
=
is
.
Name
.
Name
}
unusedImport
[
strings
.
Trim
(
is
.
Path
.
Value
,
`"`
)]
=
name
}
}
for
ipath
,
name
:=
range
unusedImport
{
if
ipath
==
"C"
{
// Don't remove cgo stuff.
continue
}
astutil
.
DeleteNamedImport
(
fset
,
f
,
name
,
ipath
)
}
for
pkgName
,
symbols
:=
range
refs
{
if
len
(
symbols
)
==
0
{
// skip over packages already imported
delete
(
refs
,
pkgName
)
}
}
// Search for imports matching potential package references.
searches
:=
0
type
result
struct
{
ipath
string
// import path (if err == nil)
name
string
// optional name to rename import as
err
error
}
results
:=
make
(
chan
result
)
for
pkgName
,
symbols
:=
range
refs
{
go
func
(
pkgName
string
,
symbols
map
[
string
]
bool
)
{
ipath
,
rename
,
err
:=
findImport
(
pkgName
,
symbols
,
filename
)
r
:=
result
{
ipath
:
ipath
,
err
:
err
}
if
rename
{
r
.
name
=
pkgName
}
results
<-
r
}(
pkgName
,
symbols
)
searches
++
}
for
i
:=
0
;
i
<
searches
;
i
++
{
result
:=
<-
results
if
result
.
err
!=
nil
{
return
nil
,
result
.
err
}
if
result
.
ipath
!=
""
{
if
result
.
name
!=
""
{
astutil
.
AddNamedImport
(
fset
,
f
,
result
.
name
,
result
.
ipath
)
}
else
{
astutil
.
AddImport
(
fset
,
f
,
result
.
ipath
)
}
added
=
append
(
added
,
result
.
ipath
)
}
}
return
added
,
nil
}
// importPathToName returns the package name for the given import path.
var
importPathToName
func
(
importPath
,
srcDir
string
)
(
packageName
string
)
=
importPathToNameGoPath
// importPathToNameBasic assumes the package name is the base of import path.
func
importPathToNameBasic
(
importPath
,
srcDir
string
)
(
packageName
string
)
{
return
path
.
Base
(
importPath
)
}
// importPathToNameGoPath finds out the actual package name, as declared in its .go files.
// If there's a problem, it falls back to using importPathToNameBasic.
func
importPathToNameGoPath
(
importPath
,
srcDir
string
)
(
packageName
string
)
{
// Fast path for standard library without going to disk.
if
pkg
,
ok
:=
stdImportPackage
[
importPath
];
ok
{
return
pkg
}
pkgName
,
err
:=
importPathToNameGoPathParse
(
importPath
,
srcDir
)
if
Debug
{
log
.
Printf
(
"importPathToNameGoPathParse(%q, srcDir=%q) = %q, %v"
,
importPath
,
srcDir
,
pkgName
,
err
)
}
if
err
==
nil
{
return
pkgName
}
return
importPathToNameBasic
(
importPath
,
srcDir
)
}
// importPathToNameGoPathParse is a faster version of build.Import if
// the only thing desired is the package name. It uses build.FindOnly
// to find the directory and then only parses one file in the package,
// trusting that the files in the directory are consistent.
func
importPathToNameGoPathParse
(
importPath
,
srcDir
string
)
(
packageName
string
,
err
error
)
{
buildPkg
,
err
:=
build
.
Import
(
importPath
,
srcDir
,
build
.
FindOnly
)
if
err
!=
nil
{
return
""
,
err
}
d
,
err
:=
os
.
Open
(
buildPkg
.
Dir
)
if
err
!=
nil
{
return
""
,
err
}
names
,
err
:=
d
.
Readdirnames
(
-
1
)
d
.
Close
()
if
err
!=
nil
{
return
""
,
err
}
sort
.
Strings
(
names
)
// to have predictable behavior
var
lastErr
error
var
nfile
int
for
_
,
name
:=
range
names
{
if
!
strings
.
HasSuffix
(
name
,
".go"
)
{
continue
}
if
strings
.
HasSuffix
(
name
,
"_test.go"
)
{
continue
}
nfile
++
fullFile
:=
filepath
.
Join
(
buildPkg
.
Dir
,
name
)
fset
:=
token
.
NewFileSet
()
f
,
err
:=
parser
.
ParseFile
(
fset
,
fullFile
,
nil
,
parser
.
PackageClauseOnly
)
if
err
!=
nil
{
lastErr
=
err
continue
}
pkgName
:=
f
.
Name
.
Name
if
pkgName
==
"documentation"
{
// Special case from go/build.ImportDir, not
// handled by ctx.MatchFile.
continue
}
if
pkgName
==
"main"
{
// Also skip package main, assuming it's a +build ignore generator or example.
// Since you can't import a package main anyway, there's no harm here.
continue
}
return
pkgName
,
nil
}
if
lastErr
!=
nil
{
return
""
,
lastErr
}
return
""
,
fmt
.
Errorf
(
"no importable package found in %d Go files"
,
nfile
)
}
var
stdImportPackage
=
map
[
string
]
string
{}
// "net/http" => "http"
func
init
()
{
// Nothing in the standard library has a package name not
// matching its import base name.
for
_
,
pkg
:=
range
stdlib
{
if
_
,
ok
:=
stdImportPackage
[
pkg
];
!
ok
{
stdImportPackage
[
pkg
]
=
path
.
Base
(
pkg
)
}
}
}
// Directory-scanning state.
var
(
// scanGoRootOnce guards calling scanGoRoot (for $GOROOT)
scanGoRootOnce
sync
.
Once
// scanGoPathOnce guards calling scanGoPath (for $GOPATH)
scanGoPathOnce
sync
.
Once
// populateIgnoreOnce guards calling populateIgnore
populateIgnoreOnce
sync
.
Once
ignoredDirs
[]
os
.
FileInfo
dirScanMu
sync
.
RWMutex
dirScan
map
[
string
]
*
pkg
// abs dir path => *pkg
)
type
pkg
struct
{
dir
string
// absolute file path to pkg directory ("/usr/lib/go/src/net/http")
importPath
string
// full pkg import path ("net/http", "foo/bar/vendor/a/b")
importPathShort
string
// vendorless import path ("net/http", "a/b")
}
// byImportPathShortLength sorts by the short import path length, breaking ties on the
// import string itself.
type
byImportPathShortLength
[]
*
pkg
func
(
s
byImportPathShortLength
)
Len
()
int
{
return
len
(
s
)
}
func
(
s
byImportPathShortLength
)
Less
(
i
,
j
int
)
bool
{
vi
,
vj
:=
s
[
i
]
.
importPathShort
,
s
[
j
]
.
importPathShort
return
len
(
vi
)
<
len
(
vj
)
||
(
len
(
vi
)
==
len
(
vj
)
&&
vi
<
vj
)
}
func
(
s
byImportPathShortLength
)
Swap
(
i
,
j
int
)
{
s
[
i
],
s
[
j
]
=
s
[
j
],
s
[
i
]
}
// gate is a semaphore for limiting concurrency.
type
gate
chan
struct
{}
func
(
g
gate
)
enter
()
{
g
<-
struct
{}{}
}
func
(
g
gate
)
leave
()
{
<-
g
}
var
visitedSymlinks
struct
{
sync
.
Mutex
m
map
[
string
]
struct
{}
}
// guarded by populateIgnoreOnce; populates ignoredDirs.
func
populateIgnore
()
{
for
_
,
srcDir
:=
range
build
.
Default
.
SrcDirs
()
{
if
srcDir
==
filepath
.
Join
(
build
.
Default
.
GOROOT
,
"src"
)
{
continue
}
populateIgnoredDirs
(
srcDir
)
}
}
// populateIgnoredDirs reads an optional config file at <path>/.goimportsignore
// of relative directories to ignore when scanning for go files.
// The provided path is one of the $GOPATH entries with "src" appended.
func
populateIgnoredDirs
(
path
string
)
{
file
:=
filepath
.
Join
(
path
,
".goimportsignore"
)
slurp
,
err
:=
ioutil
.
ReadFile
(
file
)
if
Debug
{
if
err
!=
nil
{
log
.
Print
(
err
)
}
else
{
log
.
Printf
(
"Read %s"
,
file
)
}
}
if
err
!=
nil
{
return
}
bs
:=
bufio
.
NewScanner
(
bytes
.
NewReader
(
slurp
))
for
bs
.
Scan
()
{
line
:=
strings
.
TrimSpace
(
bs
.
Text
())
if
line
==
""
||
strings
.
HasPrefix
(
line
,
"#"
)
{
continue
}
full
:=
filepath
.
Join
(
path
,
line
)
if
fi
,
err
:=
os
.
Stat
(
full
);
err
==
nil
{
ignoredDirs
=
append
(
ignoredDirs
,
fi
)
if
Debug
{
log
.
Printf
(
"Directory added to ignore list: %s"
,
full
)
}
}
else
if
Debug
{
log
.
Printf
(
"Error statting entry in .goimportsignore: %v"
,
err
)
}
}
}
func
skipDir
(
fi
os
.
FileInfo
)
bool
{
for
_
,
ignoredDir
:=
range
ignoredDirs
{
if
os
.
SameFile
(
fi
,
ignoredDir
)
{
return
true
}
}
return
false
}
// shouldTraverse reports whether the symlink fi should, found in dir,
// should be followed. It makes sure symlinks were never visited
// before to avoid symlink loops.
func
shouldTraverse
(
dir
string
,
fi
os
.
FileInfo
)
bool
{
path
:=
filepath
.
Join
(
dir
,
fi
.
Name
())
target
,
err
:=
filepath
.
EvalSymlinks
(
path
)
if
err
!=
nil
{
if
!
os
.
IsNotExist
(
err
)
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
}
return
false
}
ts
,
err
:=
os
.
Stat
(
target
)
if
err
!=
nil
{
fmt
.
Fprintln
(
os
.
Stderr
,
err
)
return
false
}
if
!
ts
.
IsDir
()
{
return
false
}
if
skipDir
(
ts
)
{
return
false
}
realParent
,
err
:=
filepath
.
EvalSymlinks
(
dir
)
if
err
!=
nil
{
fmt
.
Fprint
(
os
.
Stderr
,
err
)
return
false
}
realPath
:=
filepath
.
Join
(
realParent
,
fi
.
Name
())
visitedSymlinks
.
Lock
()
defer
visitedSymlinks
.
Unlock
()
if
visitedSymlinks
.
m
==
nil
{
visitedSymlinks
.
m
=
make
(
map
[
string
]
struct
{})
}
if
_
,
ok
:=
visitedSymlinks
.
m
[
realPath
];
ok
{
return
false
}
visitedSymlinks
.
m
[
realPath
]
=
struct
{}{}
return
true
}
var
testHookScanDir
=
func
(
dir
string
)
{}
var
scanGoRootDone
=
make
(
chan
struct
{})
// closed when scanGoRoot is done
func
scanGoRoot
()
{
go
func
()
{
scanGoDirs
(
true
)
close
(
scanGoRootDone
)
}()
}
func
scanGoPath
()
{
scanGoDirs
(
false
)
}
func
scanGoDirs
(
goRoot
bool
)
{
if
Debug
{
which
:=
"$GOROOT"
if
!
goRoot
{
which
=
"$GOPATH"
}
log
.
Printf
(
"scanning "
+
which
)
defer
log
.
Printf
(
"scanned "
+
which
)
}
dirScanMu
.
Lock
()
if
dirScan
==
nil
{
dirScan
=
make
(
map
[
string
]
*
pkg
)
}
dirScanMu
.
Unlock
()
for
_
,
srcDir
:=
range
build
.
Default
.
SrcDirs
()
{
isGoroot
:=
srcDir
==
filepath
.
Join
(
build
.
Default
.
GOROOT
,
"src"
)
if
isGoroot
!=
goRoot
{
continue
}
testHookScanDir
(
srcDir
)
walkFn
:=
func
(
path
string
,
typ
os
.
FileMode
)
error
{
dir
:=
filepath
.
Dir
(
path
)
if
typ
.
IsRegular
()
{
if
dir
==
srcDir
{
// Doesn't make sense to have regular files
// directly in your $GOPATH/src or $GOROOT/src.
return
nil
}
if
!
strings
.
HasSuffix
(
path
,
".go"
)
{
return
nil
}
dirScanMu
.
Lock
()
if
_
,
dup
:=
dirScan
[
dir
];
!
dup
{
importpath
:=
filepath
.
ToSlash
(
dir
[
len
(
srcDir
)
+
len
(
"/"
)
:
])
dirScan
[
dir
]
=
&
pkg
{
importPath
:
importpath
,
importPathShort
:
vendorlessImportPath
(
importpath
),
dir
:
dir
,
}
}
dirScanMu
.
Unlock
()
return
nil
}
if
typ
==
os
.
ModeDir
{
base
:=
filepath
.
Base
(
path
)
if
base
==
""
||
base
[
0
]
==
'.'
||
base
[
0
]
==
'_'
||
base
==
"testdata"
||
base
==
"node_modules"
{
return
filepath
.
SkipDir
}
fi
,
err
:=
os
.
Lstat
(
path
)
if
err
==
nil
&&
skipDir
(
fi
)
{
if
Debug
{
log
.
Printf
(
"skipping directory %q under %s"
,
fi
.
Name
(),
dir
)
}
return
filepath
.
SkipDir
}
return
nil
}
if
typ
==
os
.
ModeSymlink
{
base
:=
filepath
.
Base
(
path
)
if
strings
.
HasPrefix
(
base
,
".#"
)
{
// Emacs noise.
return
nil
}
fi
,
err
:=
os
.
Lstat
(
path
)
if
err
!=
nil
{
// Just ignore it.
return
nil
}
if
shouldTraverse
(
dir
,
fi
)
{
return
traverseLink
}
}
return
nil
}
if
err
:=
fastWalk
(
srcDir
,
walkFn
);
err
!=
nil
{
log
.
Printf
(
"goimports: scanning directory %v: %v"
,
srcDir
,
err
)
}
}
}
// vendorlessImportPath returns the devendorized version of the provided import path.
// e.g. "foo/bar/vendor/a/b" => "a/b"
func
vendorlessImportPath
(
ipath
string
)
string
{
// Devendorize for use in import statement.
if
i
:=
strings
.
LastIndex
(
ipath
,
"/vendor/"
);
i
>=
0
{
return
ipath
[
i
+
len
(
"/vendor/"
)
:
]
}
if
strings
.
HasPrefix
(
ipath
,
"vendor/"
)
{
return
ipath
[
len
(
"vendor/"
)
:
]
}
return
ipath
}
// loadExports returns the set of exported symbols in the package at dir.
// It returns nil on error or if the package name in dir does not match expectPackage.
var
loadExports
func
(
expectPackage
,
dir
string
)
map
[
string
]
bool
=
loadExportsGoPath
func
loadExportsGoPath
(
expectPackage
,
dir
string
)
map
[
string
]
bool
{
if
Debug
{
log
.
Printf
(
"loading exports in dir %s (seeking package %s)"
,
dir
,
expectPackage
)
}
exports
:=
make
(
map
[
string
]
bool
)
ctx
:=
build
.
Default
// ReadDir is like ioutil.ReadDir, but only returns *.go files
// and filters out _test.go files since they're not relevant
// and only slow things down.
ctx
.
ReadDir
=
func
(
dir
string
)
(
notTests
[]
os
.
FileInfo
,
err
error
)
{
all
,
err
:=
ioutil
.
ReadDir
(
dir
)
if
err
!=
nil
{
return
nil
,
err
}
notTests
=
all
[
:
0
]
for
_
,
fi
:=
range
all
{
name
:=
fi
.
Name
()
if
strings
.
HasSuffix
(
name
,
".go"
)
&&
!
strings
.
HasSuffix
(
name
,
"_test.go"
)
{
notTests
=
append
(
notTests
,
fi
)
}
}
return
notTests
,
nil
}
files
,
err
:=
ctx
.
ReadDir
(
dir
)
if
err
!=
nil
{
log
.
Print
(
err
)
return
nil
}
fset
:=
token
.
NewFileSet
()
for
_
,
fi
:=
range
files
{
match
,
err
:=
ctx
.
MatchFile
(
dir
,
fi
.
Name
())
if
err
!=
nil
||
!
match
{
continue
}
fullFile
:=
filepath
.
Join
(
dir
,
fi
.
Name
())
f
,
err
:=
parser
.
ParseFile
(
fset
,
fullFile
,
nil
,
0
)
if
err
!=
nil
{
if
Debug
{
log
.
Printf
(
"Parsing %s: %v"
,
fullFile
,
err
)
}
return
nil
}
pkgName
:=
f
.
Name
.
Name
if
pkgName
==
"documentation"
{
// Special case from go/build.ImportDir, not
// handled by ctx.MatchFile.
continue
}
if
pkgName
!=
expectPackage
{
if
Debug
{
log
.
Printf
(
"scan of dir %v is not expected package %v (actually %v)"
,
dir
,
expectPackage
,
pkgName
)
}
return
nil
}
for
name
:=
range
f
.
Scope
.
Objects
{
if
ast
.
IsExported
(
name
)
{
exports
[
name
]
=
true
}
}
}
if
Debug
{
exportList
:=
make
([]
string
,
0
,
len
(
exports
))
for
k
:=
range
exports
{
exportList
=
append
(
exportList
,
k
)
}
sort
.
Strings
(
exportList
)
log
.
Printf
(
"loaded exports in dir %v (package %v): %v"
,
dir
,
expectPackage
,
strings
.
Join
(
exportList
,
", "
))
}
return
exports
}
// findImport searches for a package with the given symbols.
// If no package is found, findImport returns ("", false, nil)
//
// This is declared as a variable rather than a function so goimports
// can be easily extended by adding a file with an init function.
//
// The rename value tells goimports whether to use the package name as
// a local qualifier in an import. For example, if findImports("pkg",
// "X") returns ("foo/bar", rename=true), then goimports adds the
// import line:
// import pkg "foo/bar"
// to satisfy uses of pkg.X in the file.
var
findImport
func
(
pkgName
string
,
symbols
map
[
string
]
bool
,
filename
string
)
(
foundPkg
string
,
rename
bool
,
err
error
)
=
findImportGoPath
// findImportGoPath is the normal implementation of findImport.
// (Some companies have their own internally.)
func
findImportGoPath
(
pkgName
string
,
symbols
map
[
string
]
bool
,
filename
string
)
(
foundPkg
string
,
rename
bool
,
err
error
)
{
if
inTests
{
testMu
.
RLock
()
defer
testMu
.
RUnlock
()
}
// Fast path for the standard library.
// In the common case we hopefully never have to scan the GOPATH, which can
// be slow with moving disks.
if
pkg
,
rename
,
ok
:=
findImportStdlib
(
pkgName
,
symbols
);
ok
{
return
pkg
,
rename
,
nil
}
if
pkgName
==
"rand"
&&
symbols
[
"Read"
]
{
// Special-case rand.Read.
//
// If findImportStdlib didn't find it above, don't go
// searching for it, lest it find and pick math/rand
// in GOROOT (new as of Go 1.6)
//
// crypto/rand is the safer choice.
return
""
,
false
,
nil
}
// TODO(sameer): look at the import lines for other Go files in the
// local directory, since the user is likely to import the same packages
// in the current Go file. Return rename=true when the other Go files
// use a renamed package that's also used in the current file.
// Read all the $GOPATH/src/.goimportsignore files before scanning directories.
populateIgnoreOnce
.
Do
(
populateIgnore
)
// Start scanning the $GOROOT asynchronously, then run the
// GOPATH scan synchronously if needed, and then wait for the
// $GOROOT to finish.
//
// TODO(bradfitz): run each $GOPATH entry async. But nobody
// really has more than one anyway, so low priority.
scanGoRootOnce
.
Do
(
scanGoRoot
)
// async
if
!
fileInDir
(
filename
,
build
.
Default
.
GOROOT
)
{
scanGoPathOnce
.
Do
(
scanGoPath
)
// blocking
}
<-
scanGoRootDone
// Find candidate packages, looking only at their directory names first.
var
candidates
[]
*
pkg
for
_
,
pkg
:=
range
dirScan
{
if
pkgIsCandidate
(
filename
,
pkgName
,
pkg
)
{
candidates
=
append
(
candidates
,
pkg
)
}
}
// Sort the candidates by their import package length,
// assuming that shorter package names are better than long
// ones. Note that this sorts by the de-vendored name, so
// there's no "penalty" for vendoring.
sort
.
Sort
(
byImportPathShortLength
(
candidates
))
if
Debug
{
for
i
,
pkg
:=
range
candidates
{
log
.
Printf
(
"%s candidate %d/%d: %v"
,
pkgName
,
i
+
1
,
len
(
candidates
),
pkg
.
importPathShort
)
}
}
// Collect exports for packages with matching names.
done
:=
make
(
chan
struct
{})
// closed when we find the answer
defer
close
(
done
)
rescv
:=
make
([]
chan
*
pkg
,
len
(
candidates
))
for
i
:=
range
candidates
{
rescv
[
i
]
=
make
(
chan
*
pkg
)
}
const
maxConcurrentPackageImport
=
4
loadExportsSem
:=
make
(
chan
struct
{},
maxConcurrentPackageImport
)
go
func
()
{
for
i
,
pkg
:=
range
candidates
{
select
{
case
loadExportsSem
<-
struct
{}{}
:
select
{
case
<-
done
:
default
:
}
case
<-
done
:
return
}
pkg
:=
pkg
resc
:=
rescv
[
i
]
go
func
()
{
if
inTests
{
testMu
.
RLock
()
defer
testMu
.
RUnlock
()
}
defer
func
()
{
<-
loadExportsSem
}()
exports
:=
loadExports
(
pkgName
,
pkg
.
dir
)
// If it doesn't have the right
// symbols, send nil to mean no match.
for
symbol
:=
range
symbols
{
if
!
exports
[
symbol
]
{
pkg
=
nil
break
}
}
select
{
case
resc
<-
pkg
:
case
<-
done
:
}
}()
}
}()
for
_
,
resc
:=
range
rescv
{
pkg
:=
<-
resc
if
pkg
==
nil
{
continue
}
// If the package name in the source doesn't match the import path's base,
// return true so the rewriter adds a name (import foo "github.com/bar/go-foo")
needsRename
:=
path
.
Base
(
pkg
.
importPath
)
!=
pkgName
return
pkg
.
importPathShort
,
needsRename
,
nil
}
return
""
,
false
,
nil
}
// pkgIsCandidate reports whether pkg is a candidate for satisfying the
// finding which package pkgIdent in the file named by filename is trying
// to refer to.
//
// This check is purely lexical and is meant to be as fast as possible
// because it's run over all $GOPATH directories to filter out poor
// candidates in order to limit the CPU and I/O later parsing the
// exports in candidate packages.
//
// filename is the file being formatted.
// pkgIdent is the package being searched for, like "client" (if
// searching for "client.New")
func
pkgIsCandidate
(
filename
,
pkgIdent
string
,
pkg
*
pkg
)
bool
{
// Check "internal" and "vendor" visibility:
if
!
canUse
(
filename
,
pkg
.
dir
)
{
return
false
}
// Speed optimization to minimize disk I/O:
// the last two components on disk must contain the
// package name somewhere.
//
// This permits mismatch naming like directory
// "go-foo" being package "foo", or "pkg.v3" being "pkg",
// or directory "google.golang.org/api/cloudbilling/v1"
// being package "cloudbilling", but doesn't
// permit a directory "foo" to be package
// "bar", which is strongly discouraged
// anyway. There's no reason goimports needs
// to be slow just to accomodate that.
lastTwo
:=
lastTwoComponents
(
pkg
.
importPathShort
)
if
strings
.
Contains
(
lastTwo
,
pkgIdent
)
{
return
true
}
if
hasHyphenOrUpperASCII
(
lastTwo
)
&&
!
hasHyphenOrUpperASCII
(
pkgIdent
)
{
lastTwo
=
lowerASCIIAndRemoveHyphen
(
lastTwo
)
if
strings
.
Contains
(
lastTwo
,
pkgIdent
)
{
return
true
}
}
return
false
}
func
hasHyphenOrUpperASCII
(
s
string
)
bool
{
for
i
:=
0
;
i
<
len
(
s
);
i
++
{
b
:=
s
[
i
]
if
b
==
'-'
||
(
'A'
<=
b
&&
b
<=
'Z'
)
{
return
true
}
}
return
false
}
func
lowerASCIIAndRemoveHyphen
(
s
string
)
(
ret
string
)
{
buf
:=
make
([]
byte
,
0
,
len
(
s
))
for
i
:=
0
;
i
<
len
(
s
);
i
++
{
b
:=
s
[
i
]
switch
{
case
b
==
'-'
:
continue
case
'A'
<=
b
&&
b
<=
'Z'
:
buf
=
append
(
buf
,
b
+
(
'a'
-
'A'
))
default
:
buf
=
append
(
buf
,
b
)
}
}
return
string
(
buf
)
}
// canUse reports whether the package in dir is usable from filename,
// respecting the Go "internal" and "vendor" visibility rules.
func
canUse
(
filename
,
dir
string
)
bool
{
// Fast path check, before any allocations. If it doesn't contain vendor
// or internal, it's not tricky:
// Note that this can false-negative on directories like "notinternal",
// but we check it correctly below. This is just a fast path.
if
!
strings
.
Contains
(
dir
,
"vendor"
)
&&
!
strings
.
Contains
(
dir
,
"internal"
)
{
return
true
}
dirSlash
:=
filepath
.
ToSlash
(
dir
)
if
!
strings
.
Contains
(
dirSlash
,
"/vendor/"
)
&&
!
strings
.
Contains
(
dirSlash
,
"/internal/"
)
&&
!
strings
.
HasSuffix
(
dirSlash
,
"/internal"
)
{
return
true
}
// Vendor or internal directory only visible from children of parent.
// That means the path from the current directory to the target directory
// can contain ../vendor or ../internal but not ../foo/vendor or ../foo/internal
// or bar/vendor or bar/internal.
// After stripping all the leading ../, the only okay place to see vendor or internal
// is at the very beginning of the path.
absfile
,
err
:=
filepath
.
Abs
(
filename
)
if
err
!=
nil
{
return
false
}
absdir
,
err
:=
filepath
.
Abs
(
dir
)
if
err
!=
nil
{
return
false
}
rel
,
err
:=
filepath
.
Rel
(
absfile
,
absdir
)
if
err
!=
nil
{
return
false
}
relSlash
:=
filepath
.
ToSlash
(
rel
)
if
i
:=
strings
.
LastIndex
(
relSlash
,
"../"
);
i
>=
0
{
relSlash
=
relSlash
[
i
+
len
(
"../"
)
:
]
}
return
!
strings
.
Contains
(
relSlash
,
"/vendor/"
)
&&
!
strings
.
Contains
(
relSlash
,
"/internal/"
)
&&
!
strings
.
HasSuffix
(
relSlash
,
"/internal"
)
}
// lastTwoComponents returns at most the last two path components
// of v, using either / or \ as the path separator.
func
lastTwoComponents
(
v
string
)
string
{
nslash
:=
0
for
i
:=
len
(
v
)
-
1
;
i
>=
0
;
i
--
{
if
v
[
i
]
==
'/'
||
v
[
i
]
==
'\\'
{
nslash
++
if
nslash
==
2
{
return
v
[
i
:
]
}
}
}
return
v
}
type
visitFn
func
(
node
ast
.
Node
)
ast
.
Visitor
func
(
fn
visitFn
)
Visit
(
node
ast
.
Node
)
ast
.
Visitor
{
return
fn
(
node
)
}
func
findImportStdlib
(
shortPkg
string
,
symbols
map
[
string
]
bool
)
(
importPath
string
,
rename
,
ok
bool
)
{
for
symbol
:=
range
symbols
{
key
:=
shortPkg
+
"."
+
symbol
path
:=
stdlib
[
key
]
if
path
==
""
{
if
key
==
"rand.Read"
{
continue
}
return
""
,
false
,
false
}
if
importPath
!=
""
&&
importPath
!=
path
{
// Ambiguous. Symbols pointed to different things.
return
""
,
false
,
false
}
importPath
=
path
}
if
importPath
==
""
&&
shortPkg
==
"rand"
&&
symbols
[
"Read"
]
{
return
"crypto/rand"
,
false
,
true
}
return
importPath
,
false
,
importPath
!=
""
}
// fileInDir reports whether the provided file path looks like
// it's in dir. (without hitting the filesystem)
func
fileInDir
(
file
,
dir
string
)
bool
{
rest
:=
strings
.
TrimPrefix
(
file
,
dir
)
if
len
(
rest
)
==
len
(
file
)
{
// dir is not a prefix of file.
return
false
}
// Check for boundary: either nothing (file == dir), or a slash.
return
len
(
rest
)
==
0
||
rest
[
0
]
==
'/'
||
rest
[
0
]
==
'\\'
}
vendor/golang.org/x/tools/imports/imports.go
deleted
100644 → 0
View file @
5b0c9c8a
// 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.
//go:generate go run mkstdlib.go
// Package imports implements a Go pretty-printer (like package "go/format")
// that also adds or removes import statements as necessary.
package
imports
// import "golang.org/x/tools/imports"
import
(
"bufio"
"bytes"
"fmt"
"go/ast"
"go/format"
"go/parser"
"go/printer"
"go/token"
"io"
"regexp"
"strconv"
"strings"
"golang.org/x/tools/go/ast/astutil"
)
// Options specifies options for processing files.
type
Options
struct
{
Fragment
bool
// Accept fragment of a source file (no package statement)
AllErrors
bool
// Report all errors (not just the first 10 on different lines)
Comments
bool
// Print comments (true if nil *Options provided)
TabIndent
bool
// Use tabs for indent (true if nil *Options provided)
TabWidth
int
// Tab width (8 if nil *Options provided)
FormatOnly
bool
// Disable the insertion and deletion of imports
}
// Process formats and adjusts imports for the provided file.
// If opt is nil the defaults are used.
//
// Note that filename's directory influences which imports can be chosen,
// so it is important that filename be accurate.
// To process data ``as if'' it were in filename, pass the data as a non-nil src.
func
Process
(
filename
string
,
src
[]
byte
,
opt
*
Options
)
([]
byte
,
error
)
{
if
opt
==
nil
{
opt
=
&
Options
{
Comments
:
true
,
TabIndent
:
true
,
TabWidth
:
8
}
}
fileSet
:=
token
.
NewFileSet
()
file
,
adjust
,
err
:=
parse
(
fileSet
,
filename
,
src
,
opt
)
if
err
!=
nil
{
return
nil
,
err
}
if
!
opt
.
FormatOnly
{
_
,
err
=
fixImports
(
fileSet
,
file
,
filename
)
if
err
!=
nil
{
return
nil
,
err
}
}
sortImports
(
fileSet
,
file
)
imps
:=
astutil
.
Imports
(
fileSet
,
file
)
var
spacesBefore
[]
string
// import paths we need spaces before
for
_
,
impSection
:=
range
imps
{
// Within each block of contiguous imports, see if any
// import lines are in different group numbers. If so,
// we'll need to put a space between them so it's
// compatible with gofmt.
lastGroup
:=
-
1
for
_
,
importSpec
:=
range
impSection
{
importPath
,
_
:=
strconv
.
Unquote
(
importSpec
.
Path
.
Value
)
groupNum
:=
importGroup
(
importPath
)
if
groupNum
!=
lastGroup
&&
lastGroup
!=
-
1
{
spacesBefore
=
append
(
spacesBefore
,
importPath
)
}
lastGroup
=
groupNum
}
}
printerMode
:=
printer
.
UseSpaces
if
opt
.
TabIndent
{
printerMode
|=
printer
.
TabIndent
}
printConfig
:=
&
printer
.
Config
{
Mode
:
printerMode
,
Tabwidth
:
opt
.
TabWidth
}
var
buf
bytes
.
Buffer
err
=
printConfig
.
Fprint
(
&
buf
,
fileSet
,
file
)
if
err
!=
nil
{
return
nil
,
err
}
out
:=
buf
.
Bytes
()
if
adjust
!=
nil
{
out
=
adjust
(
src
,
out
)
}
if
len
(
spacesBefore
)
>
0
{
out
=
addImportSpaces
(
bytes
.
NewReader
(
out
),
spacesBefore
)
}
out
,
err
=
format
.
Source
(
out
)
if
err
!=
nil
{
return
nil
,
err
}
return
out
,
nil
}
// parse parses src, which was read from filename,
// as a Go source file or statement list.
func
parse
(
fset
*
token
.
FileSet
,
filename
string
,
src
[]
byte
,
opt
*
Options
)
(
*
ast
.
File
,
func
(
orig
,
src
[]
byte
)
[]
byte
,
error
)
{
parserMode
:=
parser
.
Mode
(
0
)
if
opt
.
Comments
{
parserMode
|=
parser
.
ParseComments
}
if
opt
.
AllErrors
{
parserMode
|=
parser
.
AllErrors
}
// Try as whole source file.
file
,
err
:=
parser
.
ParseFile
(
fset
,
filename
,
src
,
parserMode
)
if
err
==
nil
{
return
file
,
nil
,
nil
}
// If the error is that the source file didn't begin with a
// package line and we accept fragmented input, fall through to
// try as a source fragment. Stop and return on any other error.
if
!
opt
.
Fragment
||
!
strings
.
Contains
(
err
.
Error
(),
"expected 'package'"
)
{
return
nil
,
nil
,
err
}
// If this is a declaration list, make it a source file
// by inserting a package clause.
// Insert using a ;, not a newline, so that the line numbers
// in psrc match the ones in src.
psrc
:=
append
([]
byte
(
"package main;"
),
src
...
)
file
,
err
=
parser
.
ParseFile
(
fset
,
filename
,
psrc
,
parserMode
)
if
err
==
nil
{
// If a main function exists, we will assume this is a main
// package and leave the file.
if
containsMainFunc
(
file
)
{
return
file
,
nil
,
nil
}
adjust
:=
func
(
orig
,
src
[]
byte
)
[]
byte
{
// Remove the package clause.
// Gofmt has turned the ; into a \n.
src
=
src
[
len
(
"package main
\n
"
)
:
]
return
matchSpace
(
orig
,
src
)
}
return
file
,
adjust
,
nil
}
// If the error is that the source file didn't begin with a
// declaration, fall through to try as a statement list.
// Stop and return on any other error.
if
!
strings
.
Contains
(
err
.
Error
(),
"expected declaration"
)
{
return
nil
,
nil
,
err
}
// If this is a statement list, make it a source file
// by inserting a package clause and turning the list
// into a function body. This handles expressions too.
// Insert using a ;, not a newline, so that the line numbers
// in fsrc match the ones in src.
fsrc
:=
append
(
append
([]
byte
(
"package p; func _() {"
),
src
...
),
'}'
)
file
,
err
=
parser
.
ParseFile
(
fset
,
filename
,
fsrc
,
parserMode
)
if
err
==
nil
{
adjust
:=
func
(
orig
,
src
[]
byte
)
[]
byte
{
// Remove the wrapping.
// Gofmt has turned the ; into a \n\n.
src
=
src
[
len
(
"package p
\n\n
func _() {"
)
:
]
src
=
src
[
:
len
(
src
)
-
len
(
"}
\n
"
)]
// Gofmt has also indented the function body one level.
// Remove that indent.
src
=
bytes
.
Replace
(
src
,
[]
byte
(
"
\n\t
"
),
[]
byte
(
"
\n
"
),
-
1
)
return
matchSpace
(
orig
,
src
)
}
return
file
,
adjust
,
nil
}
// Failed, and out of options.
return
nil
,
nil
,
err
}
// containsMainFunc checks if a file contains a function declaration with the
// function signature 'func main()'
func
containsMainFunc
(
file
*
ast
.
File
)
bool
{
for
_
,
decl
:=
range
file
.
Decls
{
if
f
,
ok
:=
decl
.
(
*
ast
.
FuncDecl
);
ok
{
if
f
.
Name
.
Name
!=
"main"
{
continue
}
if
len
(
f
.
Type
.
Params
.
List
)
!=
0
{
continue
}
if
f
.
Type
.
Results
!=
nil
&&
len
(
f
.
Type
.
Results
.
List
)
!=
0
{
continue
}
return
true
}
}
return
false
}
func
cutSpace
(
b
[]
byte
)
(
before
,
middle
,
after
[]
byte
)
{
i
:=
0
for
i
<
len
(
b
)
&&
(
b
[
i
]
==
' '
||
b
[
i
]
==
'\t'
||
b
[
i
]
==
'\n'
)
{
i
++
}
j
:=
len
(
b
)
for
j
>
0
&&
(
b
[
j
-
1
]
==
' '
||
b
[
j
-
1
]
==
'\t'
||
b
[
j
-
1
]
==
'\n'
)
{
j
--
}
if
i
<=
j
{
return
b
[
:
i
],
b
[
i
:
j
],
b
[
j
:
]
}
return
nil
,
nil
,
b
[
j
:
]
}
// matchSpace reformats src to use the same space context as orig.
// 1) If orig begins with blank lines, matchSpace inserts them at the beginning of src.
// 2) matchSpace copies the indentation of the first non-blank line in orig
// to every non-blank line in src.
// 3) matchSpace copies the trailing space from orig and uses it in place
// of src's trailing space.
func
matchSpace
(
orig
[]
byte
,
src
[]
byte
)
[]
byte
{
before
,
_
,
after
:=
cutSpace
(
orig
)
i
:=
bytes
.
LastIndex
(
before
,
[]
byte
{
'\n'
})
before
,
indent
:=
before
[
:
i
+
1
],
before
[
i
+
1
:
]
_
,
src
,
_
=
cutSpace
(
src
)
var
b
bytes
.
Buffer
b
.
Write
(
before
)
for
len
(
src
)
>
0
{
line
:=
src
if
i
:=
bytes
.
IndexByte
(
line
,
'\n'
);
i
>=
0
{
line
,
src
=
line
[
:
i
+
1
],
line
[
i
+
1
:
]
}
else
{
src
=
nil
}
if
len
(
line
)
>
0
&&
line
[
0
]
!=
'\n'
{
// not blank
b
.
Write
(
indent
)
}
b
.
Write
(
line
)
}
b
.
Write
(
after
)
return
b
.
Bytes
()
}
var
impLine
=
regexp
.
MustCompile
(
`^\s+(?:[\w\.]+\s+)?"(.+)"`
)
func
addImportSpaces
(
r
io
.
Reader
,
breaks
[]
string
)
[]
byte
{
var
out
bytes
.
Buffer
sc
:=
bufio
.
NewScanner
(
r
)
inImports
:=
false
done
:=
false
for
sc
.
Scan
()
{
s
:=
sc
.
Text
()
if
!
inImports
&&
!
done
&&
strings
.
HasPrefix
(
s
,
"import"
)
{
inImports
=
true
}
if
inImports
&&
(
strings
.
HasPrefix
(
s
,
"var"
)
||
strings
.
HasPrefix
(
s
,
"func"
)
||
strings
.
HasPrefix
(
s
,
"const"
)
||
strings
.
HasPrefix
(
s
,
"type"
))
{
done
=
true
inImports
=
false
}
if
inImports
&&
len
(
breaks
)
>
0
{
if
m
:=
impLine
.
FindStringSubmatch
(
s
);
m
!=
nil
{
if
m
[
1
]
==
breaks
[
0
]
{
out
.
WriteByte
(
'\n'
)
breaks
=
breaks
[
1
:
]
}
}
}
fmt
.
Fprintln
(
&
out
,
s
)
}
return
out
.
Bytes
()
}
vendor/golang.org/x/tools/imports/mkindex.go
deleted
100644 → 0
View file @
5b0c9c8a
// +build ignore
// 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.
// Command mkindex creates the file "pkgindex.go" containing an index of the Go
// standard library. The file is intended to be built as part of the imports
// package, so that the package may be used in environments where a GOROOT is
// not available (such as App Engine).
package
main
import
(
"bytes"
"fmt"
"go/ast"
"go/build"
"go/format"
"go/parser"
"go/token"
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
"strings"
)
var
(
pkgIndex
=
make
(
map
[
string
][]
pkg
)
exports
=
make
(
map
[
string
]
map
[
string
]
bool
)
)
func
main
()
{
// Don't use GOPATH.
ctx
:=
build
.
Default
ctx
.
GOPATH
=
""
// Populate pkgIndex global from GOROOT.
for
_
,
path
:=
range
ctx
.
SrcDirs
()
{
f
,
err
:=
os
.
Open
(
path
)
if
err
!=
nil
{
log
.
Print
(
err
)
continue
}
children
,
err
:=
f
.
Readdir
(
-
1
)
f
.
Close
()
if
err
!=
nil
{
log
.
Print
(
err
)
continue
}
for
_
,
child
:=
range
children
{
if
child
.
IsDir
()
{
loadPkg
(
path
,
child
.
Name
())
}
}
}
// Populate exports global.
for
_
,
ps
:=
range
pkgIndex
{
for
_
,
p
:=
range
ps
{
e
:=
loadExports
(
p
.
dir
)
if
e
!=
nil
{
exports
[
p
.
dir
]
=
e
}
}
}
// Construct source file.
var
buf
bytes
.
Buffer
fmt
.
Fprint
(
&
buf
,
pkgIndexHead
)
fmt
.
Fprintf
(
&
buf
,
"var pkgIndexMaster = %#v
\n
"
,
pkgIndex
)
fmt
.
Fprintf
(
&
buf
,
"var exportsMaster = %#v
\n
"
,
exports
)
src
:=
buf
.
Bytes
()
// Replace main.pkg type name with pkg.
src
=
bytes
.
Replace
(
src
,
[]
byte
(
"main.pkg"
),
[]
byte
(
"pkg"
),
-
1
)
// Replace actual GOROOT with "/go".
src
=
bytes
.
Replace
(
src
,
[]
byte
(
ctx
.
GOROOT
),
[]
byte
(
"/go"
),
-
1
)
// Add some line wrapping.
src
=
bytes
.
Replace
(
src
,
[]
byte
(
"}, "
),
[]
byte
(
"},
\n
"
),
-
1
)
src
=
bytes
.
Replace
(
src
,
[]
byte
(
"true, "
),
[]
byte
(
"true,
\n
"
),
-
1
)
var
err
error
src
,
err
=
format
.
Source
(
src
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
// Write out source file.
err
=
ioutil
.
WriteFile
(
"pkgindex.go"
,
src
,
0644
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
}
const
pkgIndexHead
=
`package imports
func init() {
pkgIndexOnce.Do(func() {
pkgIndex.m = pkgIndexMaster
})
loadExports = func(dir string) map[string]bool {
return exportsMaster[dir]
}
}
`
type
pkg
struct
{
importpath
string
// full pkg import path, e.g. "net/http"
dir
string
// absolute file path to pkg directory e.g. "/usr/lib/go/src/fmt"
}
var
fset
=
token
.
NewFileSet
()
func
loadPkg
(
root
,
importpath
string
)
{
shortName
:=
path
.
Base
(
importpath
)
if
shortName
==
"testdata"
{
return
}
dir
:=
filepath
.
Join
(
root
,
importpath
)
pkgIndex
[
shortName
]
=
append
(
pkgIndex
[
shortName
],
pkg
{
importpath
:
importpath
,
dir
:
dir
,
})
pkgDir
,
err
:=
os
.
Open
(
dir
)
if
err
!=
nil
{
return
}
children
,
err
:=
pkgDir
.
Readdir
(
-
1
)
pkgDir
.
Close
()
if
err
!=
nil
{
return
}
for
_
,
child
:=
range
children
{
name
:=
child
.
Name
()
if
name
==
""
{
continue
}
if
c
:=
name
[
0
];
c
==
'.'
||
(
'0'
<=
c
&&
c
<=
'9'
)
{
continue
}
if
child
.
IsDir
()
{
loadPkg
(
root
,
filepath
.
Join
(
importpath
,
name
))
}
}
}
func
loadExports
(
dir
string
)
map
[
string
]
bool
{
exports
:=
make
(
map
[
string
]
bool
)
buildPkg
,
err
:=
build
.
ImportDir
(
dir
,
0
)
if
err
!=
nil
{
if
strings
.
Contains
(
err
.
Error
(),
"no buildable Go source files in"
)
{
return
nil
}
log
.
Printf
(
"could not import %q: %v"
,
dir
,
err
)
return
nil
}
for
_
,
file
:=
range
buildPkg
.
GoFiles
{
f
,
err
:=
parser
.
ParseFile
(
fset
,
filepath
.
Join
(
dir
,
file
),
nil
,
0
)
if
err
!=
nil
{
log
.
Printf
(
"could not parse %q: %v"
,
file
,
err
)
continue
}
for
name
:=
range
f
.
Scope
.
Objects
{
if
ast
.
IsExported
(
name
)
{
exports
[
name
]
=
true
}
}
}
return
exports
}
vendor/golang.org/x/tools/imports/mkstdlib.go
deleted
100644 → 0
View file @
5b0c9c8a
// +build ignore
// mkstdlib generates the zstdlib.go file, containing the Go standard
// library API symbols. It's baked into the binary to avoid scanning
// GOPATH in the common case.
package
main
import
(
"bufio"
"bytes"
"fmt"
"go/format"
"io"
"io/ioutil"
"log"
"os"
"path"
"path/filepath"
"regexp"
"sort"
"strings"
)
func
mustOpen
(
name
string
)
io
.
Reader
{
f
,
err
:=
os
.
Open
(
name
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
return
f
}
func
api
(
base
string
)
string
{
return
filepath
.
Join
(
os
.
Getenv
(
"GOROOT"
),
"api"
,
base
)
}
var
sym
=
regexp
.
MustCompile
(
`^pkg (\S+).*?, (?:var|func|type|const) ([A-Z]\w*)`
)
func
main
()
{
var
buf
bytes
.
Buffer
outf
:=
func
(
format
string
,
args
...
interface
{})
{
fmt
.
Fprintf
(
&
buf
,
format
,
args
...
)
}
outf
(
"// AUTO-GENERATED BY mkstdlib.go
\n\n
"
)
outf
(
"package imports
\n
"
)
outf
(
"var stdlib = map[string]string{
\n
"
)
f
:=
io
.
MultiReader
(
mustOpen
(
api
(
"go1.txt"
)),
mustOpen
(
api
(
"go1.1.txt"
)),
mustOpen
(
api
(
"go1.2.txt"
)),
mustOpen
(
api
(
"go1.3.txt"
)),
mustOpen
(
api
(
"go1.4.txt"
)),
mustOpen
(
api
(
"go1.5.txt"
)),
mustOpen
(
api
(
"go1.6.txt"
)),
mustOpen
(
api
(
"go1.7.txt"
)),
)
sc
:=
bufio
.
NewScanner
(
f
)
fullImport
:=
map
[
string
]
string
{}
// "zip.NewReader" => "archive/zip"
ambiguous
:=
map
[
string
]
bool
{}
var
keys
[]
string
for
sc
.
Scan
()
{
l
:=
sc
.
Text
()
has
:=
func
(
v
string
)
bool
{
return
strings
.
Contains
(
l
,
v
)
}
if
has
(
"struct, "
)
||
has
(
"interface, "
)
||
has
(
", method ("
)
{
continue
}
if
m
:=
sym
.
FindStringSubmatch
(
l
);
m
!=
nil
{
full
:=
m
[
1
]
key
:=
path
.
Base
(
full
)
+
"."
+
m
[
2
]
if
exist
,
ok
:=
fullImport
[
key
];
ok
{
if
exist
!=
full
{
ambiguous
[
key
]
=
true
}
}
else
{
fullImport
[
key
]
=
full
keys
=
append
(
keys
,
key
)
}
}
}
if
err
:=
sc
.
Err
();
err
!=
nil
{
log
.
Fatal
(
err
)
}
sort
.
Strings
(
keys
)
for
_
,
key
:=
range
keys
{
if
ambiguous
[
key
]
{
outf
(
"
\t
// %q is ambiguous
\n
"
,
key
)
}
else
{
outf
(
"
\t
%q: %q,
\n
"
,
key
,
fullImport
[
key
])
}
}
outf
(
"
\n
"
)
for
_
,
sym
:=
range
[
...
]
string
{
"Alignof"
,
"ArbitraryType"
,
"Offsetof"
,
"Pointer"
,
"Sizeof"
}
{
outf
(
"
\t
%q: %q,
\n
"
,
"unsafe."
+
sym
,
"unsafe"
)
}
outf
(
"}
\n
"
)
fmtbuf
,
err
:=
format
.
Source
(
buf
.
Bytes
())
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
err
=
ioutil
.
WriteFile
(
"zstdlib.go"
,
fmtbuf
,
0666
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
}
vendor/golang.org/x/tools/imports/sortimports.go
deleted
100644 → 0
View file @
5b0c9c8a
// 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.
// Hacked up copy of go/ast/import.go
package
imports
import
(
"go/ast"
"go/token"
"sort"
"strconv"
)
// sortImports sorts runs of consecutive import lines in import blocks in f.
// It also removes duplicate imports when it is possible to do so without data loss.
func
sortImports
(
fset
*
token
.
FileSet
,
f
*
ast
.
File
)
{
for
i
,
d
:=
range
f
.
Decls
{
d
,
ok
:=
d
.
(
*
ast
.
GenDecl
)
if
!
ok
||
d
.
Tok
!=
token
.
IMPORT
{
// Not an import declaration, so we're done.
// Imports are always first.
break
}
if
len
(
d
.
Specs
)
==
0
{
// Empty import block, remove it.
f
.
Decls
=
append
(
f
.
Decls
[
:
i
],
f
.
Decls
[
i
+
1
:
]
...
)
}
if
!
d
.
Lparen
.
IsValid
()
{
// Not a block: sorted by default.
continue
}
// Identify and sort runs of specs on successive lines.
i
:=
0
specs
:=
d
.
Specs
[
:
0
]
for
j
,
s
:=
range
d
.
Specs
{
if
j
>
i
&&
fset
.
Position
(
s
.
Pos
())
.
Line
>
1
+
fset
.
Position
(
d
.
Specs
[
j
-
1
]
.
End
())
.
Line
{
// j begins a new run. End this one.
specs
=
append
(
specs
,
sortSpecs
(
fset
,
f
,
d
.
Specs
[
i
:
j
])
...
)
i
=
j
}
}
specs
=
append
(
specs
,
sortSpecs
(
fset
,
f
,
d
.
Specs
[
i
:
])
...
)
d
.
Specs
=
specs
// Deduping can leave a blank line before the rparen; clean that up.
if
len
(
d
.
Specs
)
>
0
{
lastSpec
:=
d
.
Specs
[
len
(
d
.
Specs
)
-
1
]
lastLine
:=
fset
.
Position
(
lastSpec
.
Pos
())
.
Line
if
rParenLine
:=
fset
.
Position
(
d
.
Rparen
)
.
Line
;
rParenLine
>
lastLine
+
1
{
fset
.
File
(
d
.
Rparen
)
.
MergeLine
(
rParenLine
-
1
)
}
}
}
}
func
importPath
(
s
ast
.
Spec
)
string
{
t
,
err
:=
strconv
.
Unquote
(
s
.
(
*
ast
.
ImportSpec
)
.
Path
.
Value
)
if
err
==
nil
{
return
t
}
return
""
}
func
importName
(
s
ast
.
Spec
)
string
{
n
:=
s
.
(
*
ast
.
ImportSpec
)
.
Name
if
n
==
nil
{
return
""
}
return
n
.
Name
}
func
importComment
(
s
ast
.
Spec
)
string
{
c
:=
s
.
(
*
ast
.
ImportSpec
)
.
Comment
if
c
==
nil
{
return
""
}
return
c
.
Text
()
}
// collapse indicates whether prev may be removed, leaving only next.
func
collapse
(
prev
,
next
ast
.
Spec
)
bool
{
if
importPath
(
next
)
!=
importPath
(
prev
)
||
importName
(
next
)
!=
importName
(
prev
)
{
return
false
}
return
prev
.
(
*
ast
.
ImportSpec
)
.
Comment
==
nil
}
type
posSpan
struct
{
Start
token
.
Pos
End
token
.
Pos
}
func
sortSpecs
(
fset
*
token
.
FileSet
,
f
*
ast
.
File
,
specs
[]
ast
.
Spec
)
[]
ast
.
Spec
{
// Can't short-circuit here even if specs are already sorted,
// since they might yet need deduplication.
// A lone import, however, may be safely ignored.
if
len
(
specs
)
<=
1
{
return
specs
}
// Record positions for specs.
pos
:=
make
([]
posSpan
,
len
(
specs
))
for
i
,
s
:=
range
specs
{
pos
[
i
]
=
posSpan
{
s
.
Pos
(),
s
.
End
()}
}
// Identify comments in this range.
// Any comment from pos[0].Start to the final line counts.
lastLine
:=
fset
.
Position
(
pos
[
len
(
pos
)
-
1
]
.
End
)
.
Line
cstart
:=
len
(
f
.
Comments
)
cend
:=
len
(
f
.
Comments
)
for
i
,
g
:=
range
f
.
Comments
{
if
g
.
Pos
()
<
pos
[
0
]
.
Start
{
continue
}
if
i
<
cstart
{
cstart
=
i
}
if
fset
.
Position
(
g
.
End
())
.
Line
>
lastLine
{
cend
=
i
break
}
}
comments
:=
f
.
Comments
[
cstart
:
cend
]
// Assign each comment to the import spec preceding it.
importComment
:=
map
[
*
ast
.
ImportSpec
][]
*
ast
.
CommentGroup
{}
specIndex
:=
0
for
_
,
g
:=
range
comments
{
for
specIndex
+
1
<
len
(
specs
)
&&
pos
[
specIndex
+
1
]
.
Start
<=
g
.
Pos
()
{
specIndex
++
}
s
:=
specs
[
specIndex
]
.
(
*
ast
.
ImportSpec
)
importComment
[
s
]
=
append
(
importComment
[
s
],
g
)
}
// Sort the import specs by import path.
// Remove duplicates, when possible without data loss.
// Reassign the import paths to have the same position sequence.
// Reassign each comment to abut the end of its spec.
// Sort the comments by new position.
sort
.
Sort
(
byImportSpec
(
specs
))
// Dedup. Thanks to our sorting, we can just consider
// adjacent pairs of imports.
deduped
:=
specs
[
:
0
]
for
i
,
s
:=
range
specs
{
if
i
==
len
(
specs
)
-
1
||
!
collapse
(
s
,
specs
[
i
+
1
])
{
deduped
=
append
(
deduped
,
s
)
}
else
{
p
:=
s
.
Pos
()
fset
.
File
(
p
)
.
MergeLine
(
fset
.
Position
(
p
)
.
Line
)
}
}
specs
=
deduped
// Fix up comment positions
for
i
,
s
:=
range
specs
{
s
:=
s
.
(
*
ast
.
ImportSpec
)
if
s
.
Name
!=
nil
{
s
.
Name
.
NamePos
=
pos
[
i
]
.
Start
}
s
.
Path
.
ValuePos
=
pos
[
i
]
.
Start
s
.
EndPos
=
pos
[
i
]
.
End
for
_
,
g
:=
range
importComment
[
s
]
{
for
_
,
c
:=
range
g
.
List
{
c
.
Slash
=
pos
[
i
]
.
End
}
}
}
sort
.
Sort
(
byCommentPos
(
comments
))
return
specs
}
type
byImportSpec
[]
ast
.
Spec
// slice of *ast.ImportSpec
func
(
x
byImportSpec
)
Len
()
int
{
return
len
(
x
)
}
func
(
x
byImportSpec
)
Swap
(
i
,
j
int
)
{
x
[
i
],
x
[
j
]
=
x
[
j
],
x
[
i
]
}
func
(
x
byImportSpec
)
Less
(
i
,
j
int
)
bool
{
ipath
:=
importPath
(
x
[
i
])
jpath
:=
importPath
(
x
[
j
])
igroup
:=
importGroup
(
ipath
)
jgroup
:=
importGroup
(
jpath
)
if
igroup
!=
jgroup
{
return
igroup
<
jgroup
}
if
ipath
!=
jpath
{
return
ipath
<
jpath
}
iname
:=
importName
(
x
[
i
])
jname
:=
importName
(
x
[
j
])
if
iname
!=
jname
{
return
iname
<
jname
}
return
importComment
(
x
[
i
])
<
importComment
(
x
[
j
])
}
type
byCommentPos
[]
*
ast
.
CommentGroup
func
(
x
byCommentPos
)
Len
()
int
{
return
len
(
x
)
}
func
(
x
byCommentPos
)
Swap
(
i
,
j
int
)
{
x
[
i
],
x
[
j
]
=
x
[
j
],
x
[
i
]
}
func
(
x
byCommentPos
)
Less
(
i
,
j
int
)
bool
{
return
x
[
i
]
.
Pos
()
<
x
[
j
]
.
Pos
()
}
vendor/golang.org/x/tools/imports/zstdlib.go
deleted
100644 → 0
View file @
5b0c9c8a
This source diff could not be displayed because it is too large. You can
view the blob
instead.
vendor/vendor.json
View file @
5ed3960b
...
@@ -880,12 +880,6 @@
...
@@ -880,12 +880,6 @@
"revision"
:
"be0fcc31ae2332374e800dfff29b721c585b35df"
,
"revision"
:
"be0fcc31ae2332374e800dfff29b721c585b35df"
,
"revisionTime"
:
"2016-11-04T18:56:24Z"
"revisionTime"
:
"2016-11-04T18:56:24Z"
},
},
{
"checksumSHA1"
:
"2ko3hvt1vrfwG+p7SLW+zqDEeV4="
,
"path"
:
"golang.org/x/tools/imports"
,
"revision"
:
"be0fcc31ae2332374e800dfff29b721c585b35df"
,
"revisionTime"
:
"2016-11-04T18:56:24Z"
},
{
{
"checksumSHA1"
:
"CEFTYXtWmgSh+3Ik1NmDaJcz4E0="
,
"checksumSHA1"
:
"CEFTYXtWmgSh+3Ik1NmDaJcz4E0="
,
"path"
:
"gopkg.in/check.v1"
,
"path"
:
"gopkg.in/check.v1"
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment