aboutsummaryrefslogtreecommitdiffstats
path: root/prog/rand.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-05-01 17:19:27 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-05-02 12:16:06 +0200
commit58da4c35b15200b7279f18ea15bc8644618aae78 (patch)
tree412d59572c980c4eb582d6d0e187eb6ec32345c9 /prog/rand.go
parentbc734e7ada413654f1b7d948b2a857260a52dd9c (diff)
prog: introduce Field type
Remvoe FieldName from Type and add a separate Field type that holds field name. Use Field for struct fields, union options and syscalls arguments, only these really have names. Reduces size of sys/linux/gen/amd64.go from 5665583 to 5201321 (-8.2%). Allows to not create new type for squashed any pointer. But main advantages will follow, e.g. removing StructDesc, using TypeRef in Arg, etc. Update #1580
Diffstat (limited to 'prog/rand.go')
-rw-r--r--prog/rand.go15
1 files changed, 8 insertions, 7 deletions
diff --git a/prog/rand.go b/prog/rand.go
index 603996114..135469fe7 100644
--- a/prog/rand.go
+++ b/prog/rand.go
@@ -601,15 +601,15 @@ func (target *Target) DataMmapProg() *Prog {
}
}
-func (r *randGen) generateArgs(s *state, types []Type, dir Dir) ([]Arg, []*Call) {
+func (r *randGen) generateArgs(s *state, fields []Field, dir Dir) ([]Arg, []*Call) {
var calls []*Call
- args := make([]Arg, len(types))
+ args := make([]Arg, len(fields))
// Generate all args. Size args have the default value 0 for now.
- for i, typ := range types {
- arg, calls1 := r.generateArg(s, typ, dir)
+ for i, field := range fields {
+ arg, calls1 := r.generateArg(s, field.Type, dir)
if arg == nil {
- panic(fmt.Sprintf("generated arg is nil for type '%v', types: %+v", typ.Name(), types))
+ panic(fmt.Sprintf("generated arg is nil for field '%v', fields: %+v", field.Type.Name(), fields))
}
args[i] = arg
calls = append(calls, calls1...)
@@ -797,9 +797,10 @@ func (a *StructType) generate(r *randGen, s *state, dir Dir) (arg Arg, calls []*
}
func (a *UnionType) generate(r *randGen, s *state, dir Dir) (arg Arg, calls []*Call) {
- optType := a.Fields[r.Intn(len(a.Fields))]
+ index := r.Intn(len(a.Fields))
+ optType := a.Fields[index].Type
opt, calls := r.generateArg(s, optType, dir)
- return MakeUnionArg(a, dir, opt), calls
+ return MakeUnionArg(a, dir, opt, index), calls
}
func (a *PtrType) generate(r *randGen, s *state, dir Dir) (arg Arg, calls []*Call) {