break
}
- if funarg := t.StructType().Funarg; funarg != FunargNone {
- open, close := '(', ')'
- if funarg == FunargTparams {
- open, close = '[', ']'
- }
- b.WriteByte(byte(open))
+ if t.StructType().ParamTuple {
+ b.WriteByte('(')
fieldVerb := 'v'
switch mode {
case fmtTypeID, fmtTypeIDName, fmtGo:
if i != 0 {
b.WriteString(", ")
}
- fldconv(b, f, fieldVerb, mode, visited, funarg)
+ fldconv(b, f, fieldVerb, mode, visited, true)
}
- b.WriteByte(byte(close))
+ b.WriteByte(')')
} else {
b.WriteString("struct {")
for i, f := range t.Fields() {
b.WriteByte(';')
}
b.WriteByte(' ')
- fldconv(b, f, 'L', mode, visited, funarg)
+ fldconv(b, f, 'L', mode, visited, false)
}
if t.NumFields() != 0 {
b.WriteByte(' ')
}
}
-func fldconv(b *bytes.Buffer, f *Field, verb rune, mode fmtMode, visited map[*Type]int, funarg Funarg) {
+func fldconv(b *bytes.Buffer, f *Field, verb rune, mode fmtMode, visited map[*Type]int, isParam bool) {
if f == nil {
b.WriteString("<T>")
return
}
if s != nil {
- if funarg != FunargNone {
+ if isParam {
name = fmt.Sprint(f.Nname)
} else if verb == 'L' {
name = s.Name
tconv2(b, f.Type, 0, mode, visited)
}
- if verb != 'S' && funarg == FunargNone && f.Note != "" {
+ if verb != 'S' && !isParam && f.Note != "" {
b.WriteString(" ")
b.WriteString(strconv.Quote(f.Note))
}
// Map links such structs back to their map type.
Map *Type
- Funarg Funarg // type of function arguments for arg struct
+ ParamTuple bool // whether this struct is actually a tuple of signature parameters
}
-// Funarg records the kind of function argument
-type Funarg uint8
-
-const (
- FunargNone Funarg = iota
- FunargRcvr // receiver
- FunargParams // input parameters
- FunargResults // output results
- FunargTparams // type params
-)
-
// StructType returns t's extra struct-specific fields.
func (t *Type) StructType() *Struct {
t.wantEtype(TSTRUCT)
// IsFuncArgStruct reports whether t is a struct representing function parameters or results.
func (t *Type) IsFuncArgStruct() bool {
- return t.kind == TSTRUCT && t.extra.(*Struct).Funarg != FunargNone
+ return t.kind == TSTRUCT && t.extra.(*Struct).ParamTuple
}
// Methods returns a pointer to the base methods (excluding embedding) for type t.
t := newType(TFUNC)
ft := t.funcType()
- funargs := func(fields []*Field, funarg Funarg) *Type {
+ funargs := func(fields []*Field) *Type {
s := NewStruct(fields)
- s.StructType().Funarg = funarg
+ s.StructType().ParamTuple = true
return s
}
}
unzeroFieldOffsets(params)
unzeroFieldOffsets(results)
- ft.Receiver = funargs(recvs, FunargRcvr)
- ft.Params = funargs(params, FunargParams)
- ft.Results = funargs(results, FunargResults)
+ ft.Receiver = funargs(recvs)
+ ft.Params = funargs(params)
+ ft.Results = funargs(results)
if fieldsHasShape(recvs) || fieldsHasShape(params) || fieldsHasShape(results) {
t.SetHasShape(true)
}