mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-28 07:36:44 +00:00
accounts/abi/bind/v2: remove instances copying of MetaData in contract linking test
This commit is contained in:
parent
47784b98b1
commit
a4480b2db3
1 changed files with 32 additions and 10 deletions
|
|
@ -19,6 +19,7 @@ package bind
|
|||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
|
|
@ -35,6 +36,26 @@ type linkTestCase struct {
|
|||
overrides map[string]common.Address
|
||||
}
|
||||
|
||||
func copyMetaData(m *MetaData) *MetaData {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
var deps []*MetaData
|
||||
if len(m.Deps) > 0 {
|
||||
for _, dep := range m.Deps {
|
||||
deps = append(deps, copyMetaData(dep))
|
||||
}
|
||||
}
|
||||
|
||||
return &MetaData{
|
||||
Bin: m.Bin,
|
||||
ABI: m.ABI,
|
||||
Deps: deps,
|
||||
Pattern: m.Pattern,
|
||||
mu: sync.Mutex{},
|
||||
parsedABI: m.parsedABI,
|
||||
}
|
||||
}
|
||||
|
||||
func makeLinkTestCase(input map[rune][]rune, overrides map[rune]common.Address) *linkTestCase {
|
||||
codes := make(map[string]string)
|
||||
libCodes := make(map[string]string)
|
||||
|
|
@ -103,14 +124,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
|
|||
roots[pattern] = struct{}{}
|
||||
}
|
||||
|
||||
connectedDeps := make(map[string]MetaData)
|
||||
connectedDeps := make(map[string]*MetaData)
|
||||
for pattern, dep := range deps {
|
||||
connectedDeps[pattern] = internalLinkDeps(*dep, deps, &roots) //nolint:all
|
||||
connectedDeps[pattern] = internalLinkDeps(dep, deps, &roots)
|
||||
}
|
||||
rootMetadatas := []*MetaData{}
|
||||
|
||||
var rootMetadatas []*MetaData
|
||||
for pattern := range roots {
|
||||
dep := connectedDeps[pattern] //nolint:all
|
||||
rootMetadatas = append(rootMetadatas, &dep)
|
||||
dep := connectedDeps[pattern]
|
||||
rootMetadatas = append(rootMetadatas, dep)
|
||||
}
|
||||
return rootMetadatas
|
||||
}
|
||||
|
|
@ -119,15 +141,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
|
|||
// given the depMap (map of solidity link pattern to contract metadata object), deleting contract entries from the roots
|
||||
// map if they were referenced as dependencies. It returns a new MetaData object which is the linked version of metadata
|
||||
// parameter.
|
||||
func internalLinkDeps(metadata MetaData, depMap map[string]*MetaData, roots *map[string]struct{}) MetaData { //nolint:all
|
||||
linked := metadata //nolint:all
|
||||
func internalLinkDeps(metadata *MetaData, depMap map[string]*MetaData, roots *map[string]struct{}) *MetaData {
|
||||
linked := copyMetaData(metadata)
|
||||
depPatterns := parseLibraryDeps(metadata.Bin)
|
||||
for _, pattern := range depPatterns {
|
||||
delete(*roots, pattern)
|
||||
connectedDep := internalLinkDeps(*depMap[pattern], depMap, roots) //nolint:all
|
||||
linked.Deps = append(linked.Deps, &connectedDep)
|
||||
connectedDep := internalLinkDeps(depMap[pattern], depMap, roots)
|
||||
linked.Deps = append(linked.Deps, connectedDep)
|
||||
}
|
||||
return linked //nolint:all
|
||||
return linked
|
||||
}
|
||||
|
||||
func testLinkCase(tcInput linkTestCaseInput) error {
|
||||
|
|
|
|||
Loading…
Reference in a new issue