diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-05-05 10:13:04 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-05-05 10:13:04 +0200 |
| commit | 9dfb5efa91fc0f051a1ddc88ace2867bb6b32275 (patch) | |
| tree | 6957d2852c869a559d1127d297d80ffc191ae292 /prog/validation.go | |
| parent | 5ca897bd501e4b9a3a1b130bc9ec95243a4804a0 (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.go | 14 |
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", |
