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  }