aboutsummaryrefslogtreecommitdiffstats
path: root/prog/encodingexec.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-12-14 17:05:33 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-12-17 11:39:14 +0100
commitdcfdc02b77d45a5cdf12273fb6cb0227e5cc6e4c (patch)
tree3c8057bd67b947ccdaf6c9d239cdf68b4c7304be /prog/encodingexec.go
parent9c21f3116fc2059a66c2cff309a303933daf8934 (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.go7
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) {