@@ -19,6 +19,7 @@ package bind
19
19
import (
20
20
"fmt"
21
21
"regexp"
22
+ "sync"
22
23
"testing"
23
24
24
25
"github.com/ethereum/go-ethereum/common"
@@ -35,6 +36,26 @@ type linkTestCase struct {
35
36
overrides map [string ]common.Address
36
37
}
37
38
39
+ func copyMetaData (m * MetaData ) * MetaData {
40
+ m .mu .Lock ()
41
+ defer m .mu .Unlock ()
42
+ var deps []* MetaData
43
+ if len (m .Deps ) > 0 {
44
+ for _ , dep := range m .Deps {
45
+ deps = append (deps , copyMetaData (dep ))
46
+ }
47
+ }
48
+
49
+ return & MetaData {
50
+ Bin : m .Bin ,
51
+ ABI : m .ABI ,
52
+ Deps : deps ,
53
+ Pattern : m .Pattern ,
54
+ mu : sync.Mutex {},
55
+ parsedABI : m .parsedABI ,
56
+ }
57
+ }
58
+
38
59
func makeLinkTestCase (input map [rune ][]rune , overrides map [rune ]common.Address ) * linkTestCase {
39
60
codes := make (map [string ]string )
40
61
libCodes := make (map [string ]string )
@@ -103,14 +124,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
103
124
roots [pattern ] = struct {}{}
104
125
}
105
126
106
- connectedDeps := make (map [string ]MetaData )
127
+ connectedDeps := make (map [string ]* MetaData )
107
128
for pattern , dep := range deps {
108
- connectedDeps [pattern ] = internalLinkDeps (* dep , deps , & roots ) //nolint:all
129
+ connectedDeps [pattern ] = internalLinkDeps (dep , deps , & roots )
109
130
}
110
- rootMetadatas := []* MetaData {}
131
+
132
+ var rootMetadatas []* MetaData
111
133
for pattern := range roots {
112
- dep := connectedDeps [pattern ] //nolint:all
113
- rootMetadatas = append (rootMetadatas , & dep )
134
+ dep := connectedDeps [pattern ]
135
+ rootMetadatas = append (rootMetadatas , dep )
114
136
}
115
137
return rootMetadatas
116
138
}
@@ -119,15 +141,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
119
141
// given the depMap (map of solidity link pattern to contract metadata object), deleting contract entries from the roots
120
142
// map if they were referenced as dependencies. It returns a new MetaData object which is the linked version of metadata
121
143
// parameter.
122
- func internalLinkDeps (metadata MetaData , depMap map [string ]* MetaData , roots * map [string ]struct {}) MetaData { //nolint:all
123
- linked := metadata //nolint:all
144
+ func internalLinkDeps (metadata * MetaData , depMap map [string ]* MetaData , roots * map [string ]struct {}) * MetaData {
145
+ linked := copyMetaData ( metadata )
124
146
depPatterns := parseLibraryDeps (metadata .Bin )
125
147
for _ , pattern := range depPatterns {
126
148
delete (* roots , pattern )
127
- connectedDep := internalLinkDeps (* depMap [pattern ], depMap , roots ) //nolint:all
128
- linked .Deps = append (linked .Deps , & connectedDep )
149
+ connectedDep := internalLinkDeps (depMap [pattern ], depMap , roots )
150
+ linked .Deps = append (linked .Deps , connectedDep )
129
151
}
130
- return linked //nolint:all
152
+ return linked
131
153
}
132
154
133
155
func testLinkCase (tcInput linkTestCaseInput ) error {
0 commit comments