"reflect"
)
-type sentinal struct {
- err error
-}
-
-func (s *sentinal) ret(err error) {
- s.err = err
- panic(s)
-}
-
type Inv []NamedInvList
type NamedInvList struct {
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
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)
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)
+ }
+}