github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/engine/wazevo/ssa/signature.go (about) 1 package ssa 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 // Signature is a function prototype. 9 type Signature struct { 10 // ID is a unique identifier for this signature used to lookup. 11 ID SignatureID 12 // Params and Results are the types of the parameters and results of the function. 13 Params, Results []Type 14 15 // used is true if this is used by the currently-compiled function. 16 // Debugging only. 17 used bool 18 } 19 20 // String implements fmt.Stringer. 21 func (s *Signature) String() string { 22 str := strings.Builder{} 23 str.WriteString(s.ID.String()) 24 str.WriteString(": ") 25 if len(s.Params) > 0 { 26 for _, typ := range s.Params { 27 str.WriteString(typ.String()) 28 } 29 } else { 30 str.WriteByte('v') 31 } 32 str.WriteByte('_') 33 if len(s.Results) > 0 { 34 for _, typ := range s.Results { 35 str.WriteString(typ.String()) 36 } 37 } else { 38 str.WriteByte('v') 39 } 40 return str.String() 41 } 42 43 // SignatureID is an unique identifier used to lookup. 44 type SignatureID int 45 46 // String implements fmt.Stringer. 47 func (s SignatureID) String() string { 48 return fmt.Sprintf("sig%d", s) 49 }