| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package addrs | |
| import ( | |
| "fmt" | |
| ) | |
| // LocalValue is the address of a local value. | |
| type LocalValue struct { | |
| referenceable | |
| Name string | |
| } | |
| func (v LocalValue) String() string { | |
| return "local." + v.Name | |
| } | |
| func (v LocalValue) UniqueKey() UniqueKey { | |
| return v // A LocalValue is its own UniqueKey | |
| } | |
| func (v LocalValue) uniqueKeySigil() {} | |
| // Absolute converts the receiver into an absolute address within the given | |
| // module instance. | |
| func (v LocalValue) Absolute(m ModuleInstance) AbsLocalValue { | |
| return AbsLocalValue{ | |
| Module: m, | |
| LocalValue: v, | |
| } | |
| } | |
| // AbsLocalValue is the absolute address of a local value within a module instance. | |
| type AbsLocalValue struct { | |
| Module ModuleInstance | |
| LocalValue LocalValue | |
| } | |
| // LocalValue returns the absolute address of a local value of the given | |
| // name within the receiving module instance. | |
| func (m ModuleInstance) LocalValue(name string) AbsLocalValue { | |
| return AbsLocalValue{ | |
| Module: m, | |
| LocalValue: LocalValue{ | |
| Name: name, | |
| }, | |
| } | |
| } | |
| func (v AbsLocalValue) String() string { | |
| if len(v.Module) == 0 { | |
| return v.LocalValue.String() | |
| } | |
| return fmt.Sprintf("%s.%s", v.Module.String(), v.LocalValue.String()) | |
| } | |
| func (v AbsLocalValue) UniqueKey() UniqueKey { | |
| return absLocalValueKey{ | |
| moduleKey: v.Module.UniqueKey(), | |
| valueKey: v.LocalValue.UniqueKey(), | |
| } | |
| } | |
| type absLocalValueKey struct { | |
| moduleKey UniqueKey | |
| valueKey UniqueKey | |
| } | |
| // uniqueKeySigil implements UniqueKey. | |
| func (absLocalValueKey) uniqueKeySigil() {} |