diff --git a/internal/rosa/all.go b/internal/rosa/all.go index 8817fb0..d1116e8 100644 --- a/internal/rosa/all.go +++ b/internal/rosa/all.go @@ -256,9 +256,10 @@ var ( artifactsM [PresetEnd]Metadata // artifacts stores the result of Metadata.f. - artifacts [_toolchainEnd][len(artifactsM)]pkg.Artifact - // versions stores the version of [PArtifact]. - versions [_toolchainEnd][len(artifactsM)]string + artifacts [_toolchainEnd][len(artifactsM)]struct { + a pkg.Artifact + v string + } // artifactsOnce is for lazy initialisation of artifacts. artifactsOnce [_toolchainEnd][len(artifactsM)]sync.Once ) @@ -266,20 +267,23 @@ var ( // GetMetadata returns [Metadata] of a [PArtifact]. func GetMetadata(p PArtifact) *Metadata { return &artifactsM[p] } +// construct constructs a [pkg.Artifact] corresponding to a [PArtifact] once. +func (t Toolchain) construct(p PArtifact) { + artifactsOnce[t][p].Do(func() { + artifacts[t][p].a, artifacts[t][p].v = artifactsM[p].f(t) + }) +} + // Load returns the resulting [pkg.Artifact] of [PArtifact]. func (t Toolchain) Load(p PArtifact) pkg.Artifact { - artifactsOnce[t][p].Do(func() { - artifacts[t][p], versions[t][p] = artifactsM[p].f(t) - }) - return artifacts[t][p] + t.construct(p) + return artifacts[t][p].a } // Version returns the version string of [PArtifact]. func (t Toolchain) Version(p PArtifact) string { - artifactsOnce[t][p].Do(func() { - artifacts[t][p], versions[t][p] = artifactsM[p].f(t) - }) - return versions[t][p] + t.construct(p) + return artifacts[t][p].v } // ResolveName returns a [PArtifact] by name.