summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/mkserialize/mkserialize.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/mkserialize/mkserialize.go b/internal/mkserialize/mkserialize.go
index 4535aaa..f5dbeb4 100644
--- a/internal/mkserialize/mkserialize.go
+++ b/internal/mkserialize/mkserialize.go
@@ -200,8 +200,13 @@ func genSerialize(t types.Type, expr string, pos token.Pos, doc *ast.CommentGrou
lenhdr = types.Typ[types.Uint32]
case "//mt:opt":
fmt.Println("if err := pcall(func() {")
- defer fmt.Println("}); err != nil && err != io.EOF",
- "{ chk(err) }")
+ defer func() {
+ fmt.Println("}); err != nil && err != io.EOF {")
+ fmt.Println("if _, ok := err.(rudp.TrailingDataError); ok {")
+ fmt.Println("defer chk(err)")
+ fmt.Println("} else { chk(err) }")
+ fmt.Println("}")
+ }()
default:
pragma = false
}
@@ -267,7 +272,9 @@ func genSerialize(t types.Type, expr string, pos token.Pos, doc *ast.CommentGrou
fmt.Println("}); err != nil",
`{`,
`if err == io.EOF { chk(io.EOF) };`,
+ `if _, ok := err.(rudp.TrailingDataError); ok { defer chk(err) } else {`,
`chk(fmt.Errorf("%s: %w", `+strconv.Quote(t.String())+`, err))`,
+ `}`,
`}`)
case *types.Struct:
st := pos2node(pos)[0].(*ast.StructType)