examples/returns: demonstrate return types

This commit is contained in:
Michael McLoughlin
2018-12-27 21:38:17 -08:00
parent 51524702ba
commit 023324a4ec
7 changed files with 175 additions and 1 deletions

View File

@@ -73,10 +73,13 @@ func (s *Signature) init() {
// Result offsets.
vs = tuplevars(r)
resultsoffsets := Sizes.Offsetsof(vs)
var resultssize int64
if n := len(vs); n > 0 {
resultssize = resultsoffsets[n-1] + Sizes.Sizeof(vs[n-1].Type())
}
for i := range resultsoffsets {
resultsoffsets[i] += paramssize
}
resultssize := Sizes.Sizeof(types.NewStruct(vs, nil))
s.results = newTuple(r, resultsoffsets, resultssize, "ret")
}

View File

@@ -102,6 +102,7 @@ func TestSignatureSizes(t *testing.T) {
{"func()", 0},
{"func(uint64) uint64", 16},
{"func([7]byte) byte", 9},
{"func(uint64, uint64) (uint64, uint64)", 32},
}
for _, c := range cases {
s, err := ParseSignature(c.Expr)