]> git.lizzy.rs Git - mt.git/commitdiff
Use sentinal correctly
authoranon5 <anon5clam@protonmail.com>
Tue, 23 Feb 2021 12:26:35 +0000 (12:26 +0000)
committeranon5 <anon5clam@protonmail.com>
Tue, 23 Feb 2021 12:26:35 +0000 (12:26 +0000)
inv.go

diff --git a/inv.go b/inv.go
index 5113ee39c62d75687a5a322f0fe3669307017d6e..309a9bf18b4ddef917779bbe75b7bc1bdf9700d5 100644 (file)
--- 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)
+       }
+}