}
buf := make([]byte, 0, 64)
- if t.IsFuncArgStruct() {
+ if funarg := t.StructType().Funarg; funarg != types.FunargNone {
buf = append(buf, '(')
var flag1 FmtFlag
switch mode {
if i != 0 {
buf = append(buf, ", "...)
}
- buf = append(buf, fldconv(f, flag1, mode, depth)...)
+ buf = append(buf, fldconv(f, flag1, mode, depth, funarg)...)
}
buf = append(buf, ')')
} else {
buf = append(buf, ';')
}
buf = append(buf, ' ')
- buf = append(buf, fldconv(f, FmtLong, mode, depth)...)
+ buf = append(buf, fldconv(f, FmtLong, mode, depth, funarg)...)
}
if t.NumFields() != 0 {
buf = append(buf, ' ')
return tconv(t, 0, mode, depth)
}
-func fldconv(f *types.Field, flag FmtFlag, mode fmtMode, depth int) string {
+func fldconv(f *types.Field, flag FmtFlag, mode fmtMode, depth int, funarg types.Funarg) string {
if f == nil {
return "<T>"
}
}
if s != nil && f.Embedded == 0 {
- if f.Funarg != types.FunargNone {
+ if funarg != types.FunargNone {
name = asNode(f.Nname).modeString(mode)
} else if flag&FmtLong != 0 {
name = mode.Sprintf("%0S", s)
str = name + " " + typ
}
- if flag&FmtShort == 0 && f.Funarg == types.FunargNone && f.Note != "" {
+ if flag&FmtShort == 0 && funarg == types.FunargNone && f.Note != "" {
str += " " + strconv.Quote(f.Note)
}
func nodarg(t interface{}, fp int) *Node {
var n *Node
- var funarg types.Funarg
switch t := t.(type) {
default:
Fatalf("bad nodarg %T(%v)", t, t)
if !t.IsFuncArgStruct() {
Fatalf("nodarg: bad type %v", t)
}
- funarg = t.StructType().Funarg
// Build fake variable name for whole arg struct.
n = newname(lookup(".args"))
n.Xoffset = first.Offset
case *types.Field:
- funarg = t.Funarg
if fp == 1 {
// NOTE(rsc): This should be using t.Nname directly,
// except in the case where t.Nname.Sym is the blank symbol and
n.Sym = lookup("__")
}
- switch fp {
- default:
- Fatalf("bad fp")
-
- case 0: // preparing arguments for call
- n.Op = OINDREGSP
- n.Xoffset += Ctxt.FixedFrameSize()
-
- case 1: // reading arguments inside call
- n.SetClass(PPARAM)
- if funarg == types.FunargResults {
- n.SetClass(PPARAMOUT)
- }
+ if fp != 0 {
+ Fatalf("bad fp: %v", fp)
}
+ // preparing arguments for call
+ n.Op = OINDREGSP
+ n.Xoffset += Ctxt.FixedFrameSize()
n.SetTypecheck(1)
n.SetAddrtaken(true) // keep optimizers at bay
return n