@@ -74,11 +74,10 @@ func RegisterExtras[
74
74
// The [ExtraPayloads] that we returns is based on [HPtr,BPtr,SA], not
75
75
// [H,B,SA] so our constructors MUST match that. This guarantees that calls to
76
76
// the [HeaderHooks] and [BodyHooks] methods will never be performed on a nil pointer.
77
- newHeader : pseudo .NewConstructor [H ]().NewPointer , // i.e. non-nil HPtr
78
- newBody : pseudo .NewConstructor [B ]().NewPointer , // i.e. non-nil BPtr
79
- newStateAccount : pseudo .NewConstructor [SA ]().Zero ,
80
- cloneStateAccount : extra .cloneStateAccount ,
81
- hooks : extra ,
77
+ newHeader : pseudo .NewConstructor [H ]().NewPointer , // i.e. non-nil HPtr
78
+ newBody : pseudo .NewConstructor [B ]().NewPointer , // i.e. non-nil BPtr
79
+ newStateAccount : pseudo .NewConstructor [SA ]().Zero ,
80
+ hooks : extra ,
82
81
})
83
82
return extra
84
83
}
@@ -96,29 +95,17 @@ func TestOnlyClearRegisteredExtras() {
96
95
var registeredExtras register.AtMostOnce [* extraConstructors ]
97
96
98
97
type extraConstructors struct {
99
- stateAccountType string
100
- newHeader func () * pseudo.Type
101
- newBody func () * pseudo.Type
102
- newStateAccount func () * pseudo.Type
103
- cloneStateAccount func (* StateAccountExtra ) * StateAccountExtra
104
- hooks interface {
98
+ stateAccountType string
99
+ newHeader func () * pseudo.Type
100
+ newBody func () * pseudo.Type
101
+ newStateAccount func () * pseudo.Type
102
+ hooks interface {
105
103
hooksFromHeader (* Header ) HeaderHooks
106
104
hooksFromBody (* Body ) BodyHooks
105
+ cloneStateAccount (* StateAccountExtra ) * StateAccountExtra
107
106
}
108
107
}
109
108
110
- func (h * Header ) extraPayload () * pseudo.Type {
111
- return extraPayloadOrSetDefault (& h .extra , func (c * extraConstructors ) * pseudo.Type {
112
- return c .newHeader ()
113
- })
114
- }
115
-
116
- func (b * Body ) extraPayload () * pseudo.Type {
117
- return extraPayloadOrSetDefault (& b .extra , func (c * extraConstructors ) * pseudo.Type {
118
- return c .newBody ()
119
- })
120
- }
121
-
122
109
func extraPayloadOrSetDefault (field * * pseudo.Type , construct func (* extraConstructors ) * pseudo.Type ) * pseudo.Type {
123
110
r := registeredExtras
124
111
if ! r .Registered () {
@@ -131,6 +118,18 @@ func extraPayloadOrSetDefault(field **pseudo.Type, construct func(*extraConstruc
131
118
return * field
132
119
}
133
120
121
+ func (h * Header ) extraPayload () * pseudo.Type {
122
+ return extraPayloadOrSetDefault (& h .extra , func (c * extraConstructors ) * pseudo.Type {
123
+ return c .newHeader ()
124
+ })
125
+ }
126
+
127
+ func (b * Body ) extraPayload () * pseudo.Type {
128
+ return extraPayloadOrSetDefault (& b .extra , func (c * extraConstructors ) * pseudo.Type {
129
+ return c .newBody ()
130
+ })
131
+ }
132
+
134
133
// hooks returns the [Header]'s registered [HeaderHooks], if any, otherwise a
135
134
// [NOOPHeaderHooks] suitable for running default behaviour.
136
135
func (h * Header ) hooks () HeaderHooks {
@@ -154,7 +153,7 @@ func (e *StateAccountExtra) clone() *StateAccountExtra {
154
153
case ! r .Registered (), e == nil :
155
154
return nil
156
155
default :
157
- return r .Get ().cloneStateAccount (e )
156
+ return r .Get ().hooks . cloneStateAccount (e )
158
157
}
159
158
}
160
159
0 commit comments