In tostruct0 and tofunargs we take a list of nodes, transform them into
a slice of Fields, set the fields on a type, then use the IterFields
iterator to iterate over the list again to see if any of them are
broken.
As we know the slice of fielde-we just created it-we can combine these two
interations into one pass over the fields.
Change-Id: I8b04c90fb32fd6c3b1752cfc607128a634ee06c5
Reviewed-on: https://go-review.googlesource.com/21350
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
var fields []*Field
for _, n := range l {
- fields = append(fields, structfield(n))
- }
- t.SetFields(fields)
-
- for f, it := IterFields(t); f != nil && !t.Broke; f = it.Next() {
+ f := structfield(n)
if f.Broke {
t.Broke = true
}
+ fields = append(fields, f)
}
+ t.SetFields(fields)
checkdupfields("field", t)
if n.Left != nil && n.Left.Class == PPARAM {
n.Left.Name.Param.Field = f
}
-
- fields = append(fields, f)
- }
- t.SetFields(fields)
-
- for f, it := IterFields(t); f != nil && !t.Broke; f = it.Next() {
if f.Broke {
t.Broke = true
}
+ fields = append(fields, f)
}
-
+ t.SetFields(fields)
return t
}