diff options
| author | Necip Fazil Yildiran <necip@google.com> | 2020-08-10 14:43:38 +0000 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-08-13 13:50:25 +0200 |
| commit | f5442bde55872d703f184f8617329f706bad8149 (patch) | |
| tree | 14e121020d6aacd857b80351f01546818f19a74b /prog/encoding.go | |
| parent | ee7cb8b69583db417b187b53f4765c3a403cd4cf (diff) | |
pkg, prog: add per-field direction attribute
Diffstat (limited to 'prog/encoding.go')
| -rw-r--r-- | prog/encoding.go | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/prog/encoding.go b/prog/encoding.go index 6dd2a2582..ba3d607b5 100644 --- a/prog/encoding.go +++ b/prog/encoding.go @@ -584,9 +584,9 @@ func (p *parser) parseArgStruct(typ Type, dir Dir) (Arg, error) { } field := t1.Fields[i] if IsPad(field.Type) { - inner = append(inner, MakeConstArg(field.Type, dir, 0)) + inner = append(inner, MakeConstArg(field.Type, field.Dir(dir), 0)) } else { - arg, err := p.parseArg(field.Type, dir) + arg, err := p.parseArg(field.Type, field.Dir(dir)) if err != nil { return nil, err } @@ -602,7 +602,7 @@ func (p *parser) parseArgStruct(typ Type, dir Dir) (Arg, error) { if !IsPad(field.Type) { p.strictFailf("missing struct %v fields %v/%v", typ.Name(), len(inner), len(t1.Fields)) } - inner = append(inner, field.Type.DefaultArg(dir)) + inner = append(inner, field.Type.DefaultArg(field.Dir(dir))) } return MakeGroupArg(typ, dir, inner), nil } @@ -645,11 +645,14 @@ func (p *parser) parseArgUnion(typ Type, dir Dir) (Arg, error) { } p.Parse('@') name := p.Ident() - var optType Type + var ( + optType Type + optDir Dir + ) index := -1 for i, field := range t1.Fields { if name == field.Name { - optType, index = field.Type, i + optType, index, optDir = field.Type, i, field.Dir(dir) break } } @@ -661,12 +664,12 @@ func (p *parser) parseArgUnion(typ Type, dir Dir) (Arg, error) { if p.Char() == '=' { p.Parse('=') var err error - opt, err = p.parseArg(optType, dir) + opt, err = p.parseArg(optType, optDir) if err != nil { return nil, err } } else { - opt = optType.DefaultArg(dir) + opt = optType.DefaultArg(optDir) } return MakeUnionArg(typ, dir, opt, index), nil } |
