From 01053f26be694cad073d2243728b7ab40365e1f3 Mon Sep 17 00:00:00 2001 From: anon5 Date: Tue, 23 Feb 2021 12:26:35 +0000 Subject: [PATCH] Use sentinal correctly --- inv.go | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/inv.go b/inv.go index 5113ee3..309a9bf 100644 --- a/inv.go +++ b/inv.go @@ -6,15 +6,6 @@ import ( "reflect" ) -type sentinal struct { - err error -} - -func (s *sentinal) ret(err error) { - s.err = err - panic(s) -} - type Inv []NamedInvList type NamedInvList struct { @@ -46,12 +37,7 @@ func (i Inv) Serialize(w io.Writer) error { func (i *Inv) Deserialize(r io.Reader) (err error) { s := new(sentinal) - defer func() { - r := recover() - if r, ok := r.(sentinal); ok { - err = r.err - } - }() + defer s.recover(&err) old := *i *i = nil @@ -119,12 +105,7 @@ func (l InvList) Serialize(w io.Writer) error { func (i *InvList) Deserialize(r io.Reader) (err error) { s := new(sentinal) - defer func() { - r := recover() - if r, ok := r.(sentinal); ok { - err = r.err - } - }() + defer s.recover(&err) if _, err := fmt.Fscanf(r, "Width %d\n", &i.Width); err != nil { s.ret(err) @@ -190,3 +171,20 @@ func readCmdLn(r io.Reader, cmds map[string]interface{}) error { return nil } + +type sentinal struct { + err error +} + +func (s *sentinal) ret(err error) { + s.err = err + panic(s) +} + +func (s *sentinal) recover(p *error) { + if r := recover(); r == s { + *p = s.err + } else { + panic(r) + } +} -- 2.44.0