aboutsummaryrefslogtreecommitdiffstats
path: root/prog/validation.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-05-05 10:13:04 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-05-05 10:13:04 +0200
commit9dfb5efa91fc0f051a1ddc88ace2867bb6b32275 (patch)
tree6957d2852c869a559d1127d297d80ffc191ae292 /prog/validation.go
parent5ca897bd501e4b9a3a1b130bc9ec95243a4804a0 (diff)
prog: simplify code
Now that we don't have ReturnArg and only ResultArg's refer to other ResultArg's we can remove ArgUser/ArgUsed and devirtualize lots of code.
Diffstat (limited to 'prog/validation.go')
-rw-r--r--prog/validation.go14
1 files changed, 6 insertions, 8 deletions
diff --git a/prog/validation.go b/prog/validation.go
index 6dd44bc86..f6e0780fd 100644
--- a/prog/validation.go
+++ b/prog/validation.go
@@ -50,11 +50,9 @@ func (p *Prog) validateCall(ctx *validCtx, c *Call) error {
if c.Ret == nil {
return fmt.Errorf("syscall %v: return value is absent", c.Meta.Name)
}
- if ret, ok := c.Ret.(*ResultArg); !ok {
- return fmt.Errorf("syscall %v: return value has wrong kind %v", c.Meta.Name, c.Ret)
- } else if ret.Type() != nil && ret.Type().Dir() != DirOut {
+ if c.Ret.Type() != nil && c.Ret.Type().Dir() != DirOut {
return fmt.Errorf("syscall %v: return value %v is not output", c.Meta.Name, c.Ret)
- } else if ret.Res != nil || ret.Val != 0 || ret.OpDiv != 0 || ret.OpAdd != 0 {
+ } else if c.Ret.Res != nil || c.Ret.Val != 0 || c.Ret.OpDiv != 0 || c.Ret.OpAdd != 0 {
return fmt.Errorf("syscall %v: return value %v is not empty", c.Meta.Name, c.Ret)
}
if c.Meta.Ret != nil {
@@ -78,8 +76,8 @@ func validateArg(ctx *validCtx, c *Call, arg Arg) error {
c.Meta.Name, arg)
}
ctx.args[arg] = true
- if used, ok := arg.(ArgUsed); ok {
- for u := range *used.Used() {
+ if used, ok := arg.(*ResultArg); ok {
+ for u := range used.uses {
if u == nil {
return fmt.Errorf("syscall %v: nil reference in uses for arg %+v",
c.Meta.Name, arg)
@@ -305,9 +303,9 @@ func validateArg(ctx *validCtx, c *Call, arg Arg) error {
return fmt.Errorf("syscall %v: result arg %v references out-of-tree result: %#v -> %#v",
c.Meta.Name, a.Type().Name(), arg, a.Res)
}
- if !(*a.Res.(ArgUsed).Used())[arg] {
+ if !a.Res.uses[a] {
return fmt.Errorf("syscall %v: result arg '%v' has broken link (%+v)",
- c.Meta.Name, a.Type().Name(), *a.Res.(ArgUsed).Used())
+ c.Meta.Name, a.Type().Name(), a.Res.uses)
}
default:
return fmt.Errorf("syscall %v: unknown arg '%v' kind",