@@ -22,7 +22,7 @@ let notifyIndex = 0;
2222let queuedLength = 0 ;
2323let activeSub : ReactiveNode | undefined ;
2424
25- const queued : ( Effect | EffectScope | undefined ) [ ] = [ ] ;
25+ const queued : ( Effect | undefined ) [ ] = [ ] ;
2626const {
2727 link,
2828 unlink,
@@ -37,16 +37,16 @@ const {
3737 return updateSignal ( node as Signal ) ;
3838 }
3939 } ,
40- notify ( effect : Effect | EffectScope ) {
40+ notify ( effect : Effect ) {
4141 let flags = effect . flags ;
4242 let insertIndex = queuedLength ;
4343 let firstInsertedIndex = insertIndex ;
4444
4545 do {
46- effect . flags = flags & ~ ( 2 satisfies ReactiveFlags . Watching ) | 64 /* Queued */ ;
46+ effect . flags = flags & ~ ( 2 satisfies ReactiveFlags . Watching ) ;
4747 queued [ insertIndex ++ ] = effect ;
48- effect = effect . subs ?. sub as Effect | EffectScope ;
49- if ( effect === undefined || ( flags = effect . flags ) & 64 /* Queued */ ) {
48+ effect = effect . subs ?. sub as Effect ;
49+ if ( effect === undefined || ! ( ( flags = effect . flags ) & 2 satisfies ReactiveFlags . Watching ) ) {
5050 break ;
5151 }
5252 } while ( true ) ;
@@ -204,15 +204,13 @@ function updateSignal(s: Signal): boolean {
204204 return s . currentValue !== ( s . currentValue = s . pendingValue ) ;
205205}
206206
207- function run ( e : Effect | EffectScope , flags : ReactiveFlags ) : void {
207+ function run ( e : Effect ) : void {
208+ let flags = e . flags ;
208209 if (
209210 flags & 16 satisfies ReactiveFlags . Dirty
210211 || (
211212 flags & 32 satisfies ReactiveFlags . Pending
212- && (
213- checkDirty ( e . deps ! , e )
214- || ( e . flags = flags & ~ ( 32 satisfies ReactiveFlags . Pending ) , false )
215- )
213+ && checkDirty ( e . deps ! , e )
216214 )
217215 ) {
218216 ++ cycle ;
@@ -226,14 +224,16 @@ function run(e: Effect | EffectScope, flags: ReactiveFlags): void {
226224 e . flags &= ~ ( 4 satisfies ReactiveFlags . RecursedCheck ) ;
227225 purgeDeps ( e ) ;
228226 }
227+ } else {
228+ e . flags = 2 satisfies ReactiveFlags . Watching ;
229229 }
230230}
231231
232232function flush ( ) : void {
233233 while ( notifyIndex < queuedLength ) {
234234 const effect = queued [ notifyIndex ] ! ;
235235 queued [ notifyIndex ++ ] = undefined ;
236- run ( effect , effect . flags &= ~ ( 64 /* Queued */ ) ) ;
236+ run ( effect ) ;
237237 }
238238 notifyIndex = 0 ;
239239 queuedLength = 0 ;
0 commit comments