@@ -127,7 +127,12 @@ impl<T: 'static> Deref for MemoRef<T> {
127
127
NodeKind :: Derived ( self . derived_node_id ) ,
128
128
revision. time_updated ,
129
129
) ;
130
- let mut any_ref: & dyn Any = value;
130
+ if self . projectors_len == 0 {
131
+ return value
132
+ . downcast_ref :: < T > ( )
133
+ . expect ( "MemoRef: projector chain produced unexpected type" ) ;
134
+ }
135
+ let mut any_ref = value;
131
136
let len = self . projectors_len as usize ;
132
137
for step in & self . projectors [ ..len] {
133
138
any_ref = ( step) ( any_ref) ;
@@ -146,12 +151,11 @@ impl<T: 'static, E: 'static + Clone> MemoRef<Result<T, E>> {
146
151
db : self . db ,
147
152
derived_node_id : self . derived_node_id ,
148
153
projectors : self . projectors ,
149
- projectors_len : self . projectors_len ,
154
+ projectors_len : self . projectors_len + 1 ,
150
155
phantom : PhantomData ,
151
156
} ;
152
- let idx = next . projectors_len as usize ;
157
+ let idx = self . projectors_len as usize ;
153
158
next. projectors [ idx] = step_result_ok :: < T , E > ;
154
- next. projectors_len += 1 ;
155
159
Ok ( next)
156
160
}
157
161
Err ( err) => Err ( err. clone ( ) ) ,
@@ -167,12 +171,11 @@ impl<T: 'static> MemoRef<Option<T>> {
167
171
db : self . db ,
168
172
derived_node_id : self . derived_node_id ,
169
173
projectors : self . projectors ,
170
- projectors_len : self . projectors_len ,
174
+ projectors_len : self . projectors_len + 1 ,
171
175
phantom : PhantomData ,
172
176
} ;
173
- let idx = next . projectors_len as usize ;
177
+ let idx = self . projectors_len as usize ;
174
178
next. projectors [ idx] = step_option_some :: < T > ;
175
- next. projectors_len += 1 ;
176
179
Some ( next)
177
180
}
178
181
None => None ,
@@ -186,23 +189,21 @@ impl<T0: 'static, T1: 'static> MemoRef<(T0, T1)> {
186
189
db : self . db ,
187
190
derived_node_id : self . derived_node_id ,
188
191
projectors : self . projectors ,
189
- projectors_len : self . projectors_len ,
192
+ projectors_len : self . projectors_len + 1 ,
190
193
phantom : PhantomData ,
191
194
} ;
192
- let idx = left . projectors_len as usize ;
195
+ let idx = self . projectors_len as usize ;
193
196
left. projectors [ idx] = step_tuple_0 :: < T0 , T1 > ;
194
- left. projectors_len += 1 ;
195
197
196
198
let mut right = MemoRef :: < T1 > {
197
199
db : self . db ,
198
200
derived_node_id : self . derived_node_id ,
199
201
projectors : self . projectors ,
200
- projectors_len : self . projectors_len ,
202
+ projectors_len : self . projectors_len + 1 ,
201
203
phantom : PhantomData ,
202
204
} ;
203
- let idx = right . projectors_len as usize ;
205
+ let idx = self . projectors_len as usize ;
204
206
right. projectors [ idx] = step_tuple_1 :: < T0 , T1 > ;
205
- right. projectors_len += 1 ;
206
207
207
208
( left, right)
208
209
}
0 commit comments