@@ -424,8 +424,7 @@ function infinite_loop_guard() {
424
424
function flush_queued_root_effects ( root_effects ) {
425
425
for ( var i = 0 ; i < root_effects . length ; i ++ ) {
426
426
var signal = root_effects [ i ] ;
427
- var effects = get_nested_effects ( signal , RENDER_EFFECT | EFFECT ) ;
428
- flush_queued_effects ( effects ) ;
427
+ flush_nested_effects ( signal , RENDER_EFFECT | EFFECT ) ;
429
428
}
430
429
}
431
430
@@ -438,24 +437,13 @@ function flush_queued_effects(effects) {
438
437
if ( length === 0 ) return ;
439
438
440
439
infinite_loop_guard ( ) ;
441
- var previously_flushing_effect = is_flushing_effect ;
442
- is_flushing_effect = true ;
443
-
444
- try {
445
- for ( var i = 0 ; i < length ; i ++ ) {
446
- var signal = effects [ i ] ;
440
+ for ( var i = 0 ; i < length ; i ++ ) {
441
+ var effect = effects [ i ] ;
447
442
448
- if ( ( signal . f & ( DESTROYED | INERT ) ) === 0 ) {
449
- if ( check_dirtiness ( signal ) ) {
450
- execute_effect ( signal ) ;
451
- }
452
- }
443
+ if ( ( effect . f & ( DESTROYED | INERT ) ) === 0 && check_dirtiness ( effect ) ) {
444
+ execute_effect ( effect ) ;
453
445
}
454
- } finally {
455
- is_flushing_effect = previously_flushing_effect ;
456
446
}
457
-
458
- effects . length = 0 ;
459
447
}
460
448
461
449
function process_microtask ( ) {
@@ -512,77 +500,57 @@ export function schedule_effect(signal) {
512
500
* @param {import('./types.js').Effect } effect
513
501
* @param {number } filter_flags
514
502
* @param {boolean } shallow
515
- * @param {import('./types.js').Effect[] } collected_render
516
503
* @param {import('./types.js').Effect[] } collected_user
517
504
* @returns {void }
518
505
*/
519
- function recursively_collect_effects (
520
- effect ,
521
- filter_flags ,
522
- shallow ,
523
- collected_render ,
524
- collected_user
525
- ) {
506
+ function recursively_process_effects ( effect , filter_flags , shallow , collected_user ) {
526
507
var effects = effect . effects ;
527
508
if ( effects === null ) return ;
528
509
529
- var render = [ ] ;
530
510
var user = [ ] ;
531
511
532
512
for ( var i = 0 ; i < effects . length ; i ++ ) {
533
513
var child = effects [ i ] ;
534
514
var flags = child . f ;
515
+ var is_inactive = ( flags & ( DESTROYED | INERT ) ) !== 0 ;
516
+ if ( is_inactive ) continue ;
535
517
var is_branch = flags & BRANCH_EFFECT ;
518
+ var is_clean = ( flags & CLEAN ) !== 0 ;
536
519
537
520
if ( is_branch ) {
538
521
// Skip this branch if it's clean
539
- if ( ( flags & CLEAN ) !== 0 ) continue ;
522
+ if ( is_clean ) continue ;
540
523
set_signal_status ( child , CLEAN ) ;
541
524
}
542
525
543
526
if ( ( flags & RENDER_EFFECT ) !== 0 ) {
544
527
if ( is_branch ) {
545
528
if ( shallow ) continue ;
546
- recursively_collect_effects ( child , filter_flags , false , collected_render , collected_user ) ;
529
+ recursively_process_effects ( child , filter_flags , false , collected_user ) ;
547
530
} else {
548
- render . push ( child ) ;
531
+ if ( check_dirtiness ( child ) ) {
532
+ execute_effect ( child ) ;
533
+ }
534
+ recursively_process_effects ( child , filter_flags , false , collected_user ) ;
549
535
}
550
536
} else if ( ( flags & EFFECT ) !== 0 ) {
551
- if ( is_branch ) {
537
+ if ( is_branch || is_clean ) {
552
538
if ( shallow ) continue ;
553
- recursively_collect_effects ( child , filter_flags , false , collected_render , collected_user ) ;
539
+ recursively_process_effects ( child , filter_flags , false , collected_user ) ;
554
540
} else {
555
541
user . push ( child ) ;
556
542
}
557
543
}
558
544
}
559
545
560
- if ( render . length > 0 ) {
561
- if ( ( filter_flags & RENDER_EFFECT ) !== 0 ) {
562
- collected_render . push ( ...render ) ;
563
- }
564
-
565
- if ( ! shallow ) {
566
- for ( i = 0 ; i < render . length ; i ++ ) {
567
- recursively_collect_effects (
568
- render [ i ] ,
569
- filter_flags ,
570
- false ,
571
- collected_render ,
572
- collected_user
573
- ) ;
574
- }
575
- }
576
- }
577
-
578
546
if ( user . length > 0 ) {
579
547
if ( ( filter_flags & EFFECT ) !== 0 ) {
580
548
collected_user . push ( ...user ) ;
581
549
}
582
550
583
551
if ( ! shallow ) {
584
552
for ( i = 0 ; i < user . length ; i ++ ) {
585
- recursively_collect_effects ( user [ i ] , filter_flags , false , collected_render , collected_user ) ;
553
+ recursively_process_effects ( user [ i ] , filter_flags , false , collected_user ) ;
586
554
}
587
555
}
588
556
}
@@ -597,35 +565,36 @@ function recursively_collect_effects(
597
565
* @param {import('./types.js').Effect } effect
598
566
* @param {number } filter_flags
599
567
* @param {boolean } [shallow]
600
- * @returns {import('./types.js').Effect[] }
568
+ * @returns {void }
601
569
*/
602
- function get_nested_effects ( effect , filter_flags , shallow = false ) {
603
- /**
604
- * @type {import("./types.js").Effect[] }
605
- */
606
- var render_effects = [ ] ;
607
- /**
608
- * @type {import("./types.js").Effect[] }
609
- */
570
+ function flush_nested_effects ( effect , filter_flags , shallow = false ) {
571
+ /** @type {import('#client').Effect[] } */
610
572
var user_effects = [ ] ;
611
- // When working with custom-elements, the root effects might not have a root
612
- if ( effect . effects === null && ( effect . f & BRANCH_EFFECT ) === 0 ) {
613
- return [ effect ] ;
573
+
574
+ var previously_flushing_effect = is_flushing_effect ;
575
+ is_flushing_effect = true ;
576
+
577
+ try {
578
+ // When working with custom elements, the root effects might not have a root
579
+ if ( effect . effects === null && ( effect . f & BRANCH_EFFECT ) === 0 ) {
580
+ flush_queued_effects ( [ effect ] ) ;
581
+ } else {
582
+ recursively_process_effects ( effect , filter_flags , shallow , user_effects ) ;
583
+ flush_queued_effects ( user_effects ) ;
584
+ }
585
+ } finally {
586
+ is_flushing_effect = previously_flushing_effect ;
614
587
}
615
- recursively_collect_effects ( effect , filter_flags , shallow , render_effects , user_effects ) ;
616
- return [ ...render_effects , ...user_effects ] ;
617
588
}
618
589
619
590
/**
620
591
* @param {import('./types.js').Effect } effect
621
592
* @returns {void }
622
593
*/
623
594
export function flush_local_render_effects ( effect ) {
624
- /**
625
- * @type {import("./types.js").Effect[] }
626
- */
627
- var render_effects = get_nested_effects ( effect , RENDER_EFFECT , true ) ;
628
- flush_queued_effects ( render_effects ) ;
595
+ // We are entering a new flush sequence, so ensure counter is reset.
596
+ flush_count = 0 ;
597
+ flush_nested_effects ( effect , RENDER_EFFECT , true ) ;
629
598
}
630
599
631
600
/**
0 commit comments