mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-11 22:43:47 +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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
|
@ -35,6 +36,26 @@ type linkTestCase struct {
|
||||||
overrides map[string]common.Address
|
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 {
|
func makeLinkTestCase(input map[rune][]rune, overrides map[rune]common.Address) *linkTestCase {
|
||||||
codes := make(map[string]string)
|
codes := make(map[string]string)
|
||||||
libCodes := make(map[string]string)
|
libCodes := make(map[string]string)
|
||||||
|
|
@ -103,14 +124,15 @@ func linkDeps(deps map[string]*MetaData) []*MetaData {
|
||||||
roots[pattern] = struct{}{}
|
roots[pattern] = struct{}{}
|
||||||
}
|
}
|
||||||
|
|
||||||
connectedDeps := make(map[string]MetaData)
|
connectedDeps := make(map[string]*MetaData)
|
||||||
for pattern, dep := range deps {
|
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 {
|
for pattern := range roots {
|
||||||
dep := connectedDeps[pattern] //nolint:all
|
dep := connectedDeps[pattern]
|
||||||
rootMetadatas = append(rootMetadatas, &dep)
|
rootMetadatas = append(rootMetadatas, dep)
|
||||||
}
|
}
|
||||||
return rootMetadatas
|
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
|
// 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
|
// map if they were referenced as dependencies. It returns a new MetaData object which is the linked version of metadata
|
||||||
// parameter.
|
// parameter.
|
||||||
func internalLinkDeps(metadata MetaData, depMap map[string]*MetaData, roots *map[string]struct{}) MetaData { //nolint:all
|
func internalLinkDeps(metadata *MetaData, depMap map[string]*MetaData, roots *map[string]struct{}) *MetaData {
|
||||||
linked := metadata //nolint:all
|
linked := copyMetaData(metadata)
|
||||||
depPatterns := parseLibraryDeps(metadata.Bin)
|
depPatterns := parseLibraryDeps(metadata.Bin)
|
||||||
for _, pattern := range depPatterns {
|
for _, pattern := range depPatterns {
|
||||||
delete(*roots, pattern)
|
delete(*roots, pattern)
|
||||||
connectedDep := internalLinkDeps(*depMap[pattern], depMap, roots) //nolint:all
|
connectedDep := internalLinkDeps(depMap[pattern], depMap, roots)
|
||||||
linked.Deps = append(linked.Deps, &connectedDep)
|
linked.Deps = append(linked.Deps, connectedDep)
|
||||||
}
|
}
|
||||||
return linked //nolint:all
|
return linked
|
||||||
}
|
}
|
||||||
|
|
||||||
func testLinkCase(tcInput linkTestCaseInput) error {
|
func testLinkCase(tcInput linkTestCaseInput) error {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue