aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-12 18:08:41 +0900
committerOphestra <cat@gensokyo.uk>2026-03-12 18:08:41 +0900
commitfaac5c4a839e81323760a9a6cd09407f769eef10 (patch)
treec524de485b45456c40b289d5628316e250b52773
parent620062cca92b6241c15f96f86a9c6f0f7882ecca (diff)
internal/rosa: store artifact results in struct
This is cleaner and makes adding additional values easier. Signed-off-by: Ophestra <cat@gensokyo.uk>
-rw-r--r--internal/rosa/all.go26
1 files changed, 15 insertions, 11 deletions
diff --git a/internal/rosa/all.go b/internal/rosa/all.go
index 8817fb02..d1116e88 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] }
-// Load returns the resulting [pkg.Artifact] of [PArtifact].
-func (t Toolchain) Load(p PArtifact) pkg.Artifact {
+// construct constructs a [pkg.Artifact] corresponding to a [PArtifact] once.
+func (t Toolchain) construct(p PArtifact) {
artifactsOnce[t][p].Do(func() {
- artifacts[t][p], versions[t][p] = artifactsM[p].f(t)
+ artifacts[t][p].a, artifacts[t][p].v = artifactsM[p].f(t)
})
- return artifacts[t][p]
+}
+
+// Load returns the resulting [pkg.Artifact] of [PArtifact].
+func (t Toolchain) Load(p PArtifact) pkg.Artifact {
+ 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.