| 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()) |
| } |