@@ -75,7 +75,57 @@ export function endBatch() {
7575}
7676
7777export namespace Link {
78- export let pool : Link | undefined = undefined ;
78+ let pool : Link | undefined = undefined ;
79+
80+ export function get ( dep : Link [ 'dep' ] , sub : Link [ 'sub' ] , nextDep : Link | undefined ) {
81+ if ( pool !== undefined ) {
82+ const newLink = pool ;
83+ pool = newLink . nextDep ;
84+ newLink . nextDep = nextDep ;
85+ newLink . dep = dep ;
86+ newLink . sub = sub ;
87+ newLink . trackId = sub . trackId ;
88+ return newLink ;
89+ } else {
90+ return {
91+ dep,
92+ sub,
93+ trackId : sub . trackId ,
94+ nextDep : nextDep ,
95+ prevSub : undefined ,
96+ nextSub : undefined ,
97+ } ;
98+ }
99+ }
100+
101+ export function release ( link : Link ) {
102+ const dep = link . dep ;
103+ const nextSub = link . nextSub ;
104+ const prevSub = link . prevSub ;
105+
106+ if ( nextSub !== undefined ) {
107+ nextSub . prevSub = prevSub ;
108+ }
109+ if ( prevSub !== undefined ) {
110+ prevSub . nextSub = nextSub ;
111+ }
112+
113+ if ( nextSub === undefined ) {
114+ dep . subsTail = prevSub ;
115+ }
116+ if ( prevSub === undefined ) {
117+ dep . subs = nextSub ;
118+ }
119+
120+ // @ts -ignore
121+ link . dep = undefined ;
122+ // @ts -ignore
123+ link . sub = undefined ;
124+ link . prevSub = undefined ;
125+ link . nextSub = undefined ;
126+ link . nextDep = pool ;
127+ pool = link ;
128+ }
79129}
80130
81131export namespace Dependency {
@@ -89,25 +139,7 @@ export namespace Dependency {
89139 : sub . deps ;
90140
91141 if ( old === undefined || old . dep !== dep ) {
92- let newLink : Link ;
93-
94- if ( Link . pool !== undefined ) {
95- newLink = Link . pool ;
96- Link . pool = newLink . nextDep ;
97- newLink . nextDep = old ;
98- newLink . dep = dep ;
99- newLink . sub = sub ;
100- newLink . trackId = sub . trackId ;
101- } else {
102- newLink = {
103- dep,
104- sub,
105- trackId : sub . trackId ,
106- nextDep : old ,
107- prevSub : undefined ,
108- nextSub : undefined ,
109- } ;
110- }
142+ const newLink = Link . get ( dep , sub , old ) ;
111143
112144 if ( depsTail === undefined ) {
113145 sub . deps = newLink ;
@@ -403,34 +435,9 @@ export namespace Subscriber {
403435
404436 export function clearDependencies ( link : Link ) {
405437 do {
406- const nextDep = link . nextDep ;
407438 const dep = link . dep ;
408- const nextSub = link . nextSub ;
409- const prevSub = link . prevSub ;
410-
411- if ( nextSub !== undefined ) {
412- nextSub . prevSub = prevSub ;
413- }
414- if ( prevSub !== undefined ) {
415- prevSub . nextSub = nextSub ;
416- }
417-
418- if ( nextSub === undefined ) {
419- dep . subsTail = prevSub ;
420- }
421- if ( prevSub === undefined ) {
422- dep . subs = nextSub ;
423- }
424-
425- // @ts -ignore
426- link . dep = undefined ;
427- // @ts -ignore
428- link . sub = undefined ;
429- link . prevSub = undefined ;
430- link . nextSub = undefined ;
431- link . nextDep = Link . pool ;
432- Link . pool = link ;
433-
439+ const nextDep = link . nextDep ;
440+ Link . release ( link ) ;
434441 if ( dep . subs === undefined && 'deps' in dep ) {
435442 dep . dirtyLevel = DirtyLevels . Released ;
436443 if ( dep . deps !== undefined ) {
@@ -441,7 +448,6 @@ export namespace Subscriber {
441448 continue ;
442449 }
443450 }
444-
445451 link = nextDep ! ;
446452 } while ( link !== undefined ) ;
447453 }
0 commit comments