Skip to content

Commit a0120c6

Browse files
committed
tmp-revert
1 parent bad9182 commit a0120c6

File tree

1 file changed

+35
-41
lines changed

1 file changed

+35
-41
lines changed

packages/reactivity/src/system.ts

+35-41
Original file line numberDiff line numberDiff line change
@@ -74,52 +74,43 @@ export function link(dep: Dependency, sub: Subscriber): Link | undefined {
7474
return linkNewDep(dep, sub, nextDep, currentDep)
7575
}
7676

77-
export function propagate(current: Link): void {
78-
let next = current.nextSub
79-
let branchs: OneWayLink<Link | undefined> | undefined
80-
let branchDepth = 0
77+
export function propagate(link: Link): void {
8178
let targetFlag = SubscriberFlags.Dirty
79+
let subs = link
80+
let stack = 0
8281

8382
top: do {
84-
const sub = current.sub
83+
const sub = link.sub
8584
const subFlags = sub.flags
8685

87-
let shouldNotify = false
88-
8986
if (
90-
!(
87+
(!(
9188
subFlags &
9289
(SubscriberFlags.Tracking |
9390
SubscriberFlags.Recursed |
9491
SubscriberFlags.Propagated)
95-
)
96-
) {
97-
sub.flags = subFlags | targetFlag
98-
shouldNotify = true
99-
} else if (
100-
subFlags & SubscriberFlags.Recursed &&
101-
!(subFlags & SubscriberFlags.Tracking)
92+
) &&
93+
((sub.flags = subFlags | targetFlag), true)) ||
94+
(subFlags & SubscriberFlags.Recursed &&
95+
!(subFlags & SubscriberFlags.Tracking) &&
96+
((sub.flags = (subFlags & ~SubscriberFlags.Recursed) | targetFlag),
97+
true)) ||
98+
(!(subFlags & SubscriberFlags.Propagated) &&
99+
isValidLink(link, sub) &&
100+
((sub.flags = subFlags | SubscriberFlags.Recursed | targetFlag),
101+
(sub as Dependency).subs !== undefined))
102102
) {
103-
sub.flags = (subFlags & ~SubscriberFlags.Recursed) | targetFlag
104-
shouldNotify = true
105-
} else if (
106-
!(subFlags & SubscriberFlags.Propagated) &&
107-
isValidLink(current, sub)
108-
) {
109-
sub.flags = subFlags | SubscriberFlags.Recursed | targetFlag
110-
shouldNotify = (sub as Dependency).subs !== undefined
111-
}
112-
113-
if (shouldNotify) {
114103
const subSubs = (sub as Dependency).subs
115104
if (subSubs !== undefined) {
116-
current = subSubs
117105
if (subSubs.nextSub !== undefined) {
118-
branchs = { target: next, linked: branchs }
119-
++branchDepth
120-
next = current.nextSub
106+
subSubs.prevSub = subs
107+
link = subs = subSubs
108+
targetFlag = SubscriberFlags.PendingComputed
109+
++stack
110+
} else {
111+
link = subSubs
112+
targetFlag = SubscriberFlags.PendingComputed
121113
}
122-
targetFlag = SubscriberFlags.PendingComputed
123114
continue
124115
}
125116
if (subFlags & SubscriberFlags.Effect) {
@@ -130,25 +121,28 @@ export function propagate(current: Link): void {
130121
} else if (
131122
!(subFlags & targetFlag) &&
132123
subFlags & SubscriberFlags.Propagated &&
133-
isValidLink(current, sub)
124+
isValidLink(link, sub)
134125
) {
135126
sub.flags = subFlags | targetFlag
136127
}
137128

138-
if ((current = next!) !== undefined) {
139-
next = current.nextSub
140-
targetFlag = branchDepth
129+
if ((link = subs.nextSub!) !== undefined) {
130+
subs = link
131+
targetFlag = stack
141132
? SubscriberFlags.PendingComputed
142133
: SubscriberFlags.Dirty
143134
continue
144135
}
145136

146-
while (branchDepth--) {
147-
current = branchs!.target!
148-
branchs = branchs!.linked
149-
if (current !== undefined) {
150-
next = current.nextSub
151-
targetFlag = branchDepth
137+
while (stack) {
138+
--stack
139+
const dep = subs.dep
140+
const depSubs = dep.subs!
141+
subs = depSubs.prevSub!
142+
depSubs.prevSub = undefined
143+
if ((link = subs.nextSub!) !== undefined) {
144+
subs = link
145+
targetFlag = stack
152146
? SubscriberFlags.PendingComputed
153147
: SubscriberFlags.Dirty
154148
continue top

0 commit comments

Comments
 (0)