diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-12-14 17:05:33 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2017-12-17 11:39:14 +0100 |
| commit | dcfdc02b77d45a5cdf12273fb6cb0227e5cc6e4c (patch) | |
| tree | 3c8057bd67b947ccdaf6c9d239cdf68b4c7304be /prog/encodingexec.go | |
| parent | 9c21f3116fc2059a66c2cff309a303933daf8934 (diff) | |
prog: minor refactoring around arguments
Introduce isUsed(arg) helper, use it in several places.
Move method definitions closer to their types.
Simplify presence check for ArgUsed.Used() in several places.
Diffstat (limited to 'prog/encodingexec.go')
| -rw-r--r-- | prog/encodingexec.go | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/prog/encodingexec.go b/prog/encodingexec.go index 937f3c322..c8855ebd6 100644 --- a/prog/encodingexec.go +++ b/prog/encodingexec.go @@ -94,8 +94,7 @@ func (p *Prog) SerializeForExec(buffer []byte, pid int) (int, error) { foreachArg(c, func(arg, _ Arg, _ *[]Arg) { if a, ok := arg.(*PointerArg); ok && a.Res != nil { foreachSubargOffset(a.Res, func(arg1 Arg, offset uint64) { - used, ok := arg1.(ArgUsed) - if (ok && len(*used.Used()) != 0) || csumUses[arg1] { + if isUsed(arg1) || csumUses[arg1] { w.args[arg1] = argInfo{Addr: p.Target.physicalAddr(arg) + offset} } if _, ok := arg1.(*GroupArg); ok { @@ -164,13 +163,13 @@ func (p *Prog) SerializeForExec(buffer []byte, pid int) (int, error) { for _, arg := range c.Args { w.writeArg(arg, pid, csumMap) } - if len(*c.Ret.(ArgUsed).Used()) != 0 { + if isUsed(c.Ret) { w.args[c.Ret] = argInfo{Idx: instrSeq} } instrSeq++ // Generate copyout instructions that persist interesting return values. foreachArg(c, func(arg, base Arg, _ *[]Arg) { - if used, ok := arg.(ArgUsed); !ok || len(*used.Used()) == 0 { + if !isUsed(arg) { return } switch arg.(type) { |
