@@ -538,27 +538,31 @@ export function checkDirty(deps: Link): boolean {
538
538
if ( dep . update ( ) ) {
539
539
propagate ( dep . subs ! )
540
540
let dirty = true
541
- while ( stack > 0 ) {
542
- stack --
543
- const sub = deps . sub as IComputed
544
- const subSubs = sub . subs !
545
- const prevLink = subSubs . prevSub !
546
- subSubs . prevSub = undefined
547
- if ( dirty ) {
548
- if ( sub . update ( ) ) {
549
- propagate ( subSubs )
550
- deps = prevLink
551
- dirty = true
552
- continue
541
+ if ( stack > 0 ) {
542
+ let sub = deps . sub as IComputed
543
+ do {
544
+ stack --
545
+ const subSubs = sub . subs !
546
+ const prevLink = subSubs . prevSub !
547
+ subSubs . prevSub = undefined
548
+ if ( dirty ) {
549
+ if ( sub . update ( ) ) {
550
+ propagate ( subSubs )
551
+ deps = prevLink
552
+ sub = prevLink . sub as IComputed
553
+ dirty = true
554
+ continue
555
+ }
556
+ } else {
557
+ sub . dirtyLevel = DirtyLevels . None
553
558
}
554
- } else {
555
- sub . dirtyLevel = DirtyLevels . None
556
- }
557
- deps = prevLink . nextDep !
558
- if ( deps !== undefined ) {
559
- continue top
560
- }
561
- dirty = false
559
+ deps = prevLink . nextDep !
560
+ if ( deps !== undefined ) {
561
+ continue top
562
+ }
563
+ dirty = false
564
+ sub = prevLink . sub as IComputed
565
+ } while ( stack > 0 )
562
566
}
563
567
return dirty
564
568
}
@@ -568,27 +572,31 @@ export function checkDirty(deps: Link): boolean {
568
572
const nextDep = deps . nextDep !
569
573
if ( nextDep === undefined ) {
570
574
let dirty = false
571
- while ( stack > 0 ) {
572
- stack --
573
- const sub = deps . sub as IComputed
574
- const subSubs = sub . subs !
575
- const prevLink = subSubs . prevSub !
576
- subSubs . prevSub = undefined
577
- if ( dirty ) {
578
- if ( sub . update ( ) ) {
579
- propagate ( subSubs )
580
- deps = prevLink
581
- dirty = true
582
- continue
575
+ if ( stack > 0 ) {
576
+ let sub = deps . sub as IComputed
577
+ do {
578
+ stack --
579
+ const subSubs = sub . subs !
580
+ const prevLink = subSubs . prevSub !
581
+ subSubs . prevSub = undefined
582
+ if ( dirty ) {
583
+ if ( sub . update ( ) ) {
584
+ propagate ( subSubs )
585
+ deps = prevLink
586
+ sub = prevLink . sub as IComputed
587
+ dirty = true
588
+ continue
589
+ }
590
+ } else {
591
+ sub . dirtyLevel = DirtyLevels . None
583
592
}
584
- } else {
585
- sub . dirtyLevel = DirtyLevels . None
586
- }
587
- deps = prevLink . nextDep !
588
- if ( deps !== undefined ) {
589
- continue top
590
- }
591
- dirty = false
593
+ deps = prevLink . nextDep !
594
+ if ( deps !== undefined ) {
595
+ continue top
596
+ }
597
+ sub = prevLink . sub as IComputed
598
+ dirty = false
599
+ } while ( stack > 0 )
592
600
}
593
601
return dirty
594
602
}
0 commit comments