Skip to content

Commit a4480b2

Browse files
committed
accounts/abi/bind/v2: remove instances copying of MetaData in contract linking test
1 parent 47784b9 commit a4480b2

File tree

1 file changed

+32
-10
lines changed

1 file changed

+32
-10
lines changed

accounts/abi/bind/v2/dep_tree_test.go

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package bind
1919
import (
2020
"fmt"
2121
"regexp"
22+
"sync"
2223
"testing"
2324

2425
"github.com/ethereum/go-ethereum/common"
@@ -35,6 +36,26 @@ type linkTestCase struct {
3536
overrides map[string]common.Address
3637
}
3738

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+
3859
func makeLinkTestCase(input map[rune][]rune, overrides map[rune]common.Address) *linkTestCase {
3960
codes := make(map[string]string)
4061
libCodes := make(map[string]string)
@@ -103,14 +124,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
103124
roots[pattern] = struct{}{}
104125
}
105126

106-
connectedDeps := make(map[string]MetaData)
127+
connectedDeps := make(map[string]*MetaData)
107128
for pattern, dep := range deps {
108-
connectedDeps[pattern] = internalLinkDeps(*dep, deps, &roots) //nolint:all
129+
connectedDeps[pattern] = internalLinkDeps(dep, deps, &roots)
109130
}
110-
rootMetadatas := []*MetaData{}
131+
132+
var rootMetadatas []*MetaData
111133
for pattern := range roots {
112-
dep := connectedDeps[pattern] //nolint:all
113-
rootMetadatas = append(rootMetadatas, &dep)
134+
dep := connectedDeps[pattern]
135+
rootMetadatas = append(rootMetadatas, dep)
114136
}
115137
return rootMetadatas
116138
}
@@ -119,15 +141,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
119141
// given the depMap (map of solidity link pattern to contract metadata object), deleting contract entries from the roots
120142
// map if they were referenced as dependencies. It returns a new MetaData object which is the linked version of metadata
121143
// 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)
124146
depPatterns := parseLibraryDeps(metadata.Bin)
125147
for _, pattern := range depPatterns {
126148
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)
129151
}
130-
return linked //nolint:all
152+
return linked
131153
}
132154

133155
func testLinkCase(tcInput linkTestCaseInput) error {

0 commit comments

Comments
 (0)