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