@@ -17,8 +17,9 @@ import {bindingUpdated, bindingUpdated2, bindingUpdated4, checkAndUpdateBinding,
17
17
* @param pureFn Function that returns a value
18
18
* @returns value
19
19
*/
20
- export function pureFunction0 < T > ( pureFn : ( ) => T ) : T {
21
- return getCreationMode ( ) ? checkAndUpdateBinding ( pureFn ( ) ) : consumeBinding ( ) ;
20
+ export function pureFunction0 < T > ( pureFn : ( ) => T , thisArg ?: any ) : T {
21
+ return getCreationMode ( ) ? checkAndUpdateBinding ( thisArg ? pureFn . call ( thisArg ) : pureFn ( ) ) :
22
+ consumeBinding ( ) ;
22
23
}
23
24
24
25
/**
@@ -29,8 +30,10 @@ export function pureFunction0<T>(pureFn: () => T): T {
29
30
* @param exp Updated expression value
30
31
* @returns Updated value
31
32
*/
32
- export function pureFunction1 ( pureFn : ( v : any ) => any , exp : any ) : any {
33
- return bindingUpdated ( exp ) ? checkAndUpdateBinding ( pureFn ( exp ) ) : consumeBinding ( ) ;
33
+ export function pureFunction1 ( pureFn : ( v : any ) => any , exp : any , thisArg ?: any ) : any {
34
+ return bindingUpdated ( exp ) ?
35
+ checkAndUpdateBinding ( thisArg ? pureFn . call ( thisArg , exp ) : pureFn ( exp ) ) :
36
+ consumeBinding ( ) ;
34
37
}
35
38
36
39
/**
@@ -42,8 +45,11 @@ export function pureFunction1(pureFn: (v: any) => any, exp: any): any {
42
45
* @param exp2
43
46
* @returns Updated value
44
47
*/
45
- export function pureFunction2 ( pureFn : ( v1 : any , v2 : any ) => any , exp1 : any , exp2 : any ) : any {
46
- return bindingUpdated2 ( exp1 , exp2 ) ? checkAndUpdateBinding ( pureFn ( exp1 , exp2 ) ) : consumeBinding ( ) ;
48
+ export function pureFunction2 (
49
+ pureFn : ( v1 : any , v2 : any ) => any , exp1 : any , exp2 : any , thisArg ?: any ) : any {
50
+ return bindingUpdated2 ( exp1 , exp2 ) ?
51
+ checkAndUpdateBinding ( thisArg ? pureFn . call ( thisArg , exp1 , exp2 ) : pureFn ( exp1 , exp2 ) ) :
52
+ consumeBinding ( ) ;
47
53
}
48
54
49
55
/**
@@ -57,10 +63,13 @@ export function pureFunction2(pureFn: (v1: any, v2: any) => any, exp1: any, exp2
57
63
* @returns Updated value
58
64
*/
59
65
export function pureFunction3 (
60
- pureFn : ( v1 : any , v2 : any , v3 : any ) => any , exp1 : any , exp2 : any , exp3 : any ) : any {
66
+ pureFn : ( v1 : any , v2 : any , v3 : any ) => any , exp1 : any , exp2 : any , exp3 : any ,
67
+ thisArg ?: any ) : any {
61
68
const different = bindingUpdated2 ( exp1 , exp2 ) ;
62
- return bindingUpdated ( exp3 ) || different ? checkAndUpdateBinding ( pureFn ( exp1 , exp2 , exp3 ) ) :
63
- consumeBinding ( ) ;
69
+ return bindingUpdated ( exp3 ) || different ?
70
+ checkAndUpdateBinding (
71
+ thisArg ? pureFn . call ( thisArg , exp1 , exp2 , exp3 ) : pureFn ( exp1 , exp2 , exp3 ) ) :
72
+ consumeBinding ( ) ;
64
73
}
65
74
66
75
/**
@@ -75,10 +84,11 @@ export function pureFunction3(
75
84
* @returns Updated value
76
85
*/
77
86
export function pureFunction4 (
78
- pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any ) => any , exp1 : any , exp2 : any , exp3 : any ,
79
- exp4 : any ) : any {
87
+ pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any ) => any , exp1 : any , exp2 : any , exp3 : any , exp4 : any ,
88
+ thisArg ? : any ) : any {
80
89
return bindingUpdated4 ( exp1 , exp2 , exp3 , exp4 ) ?
81
- checkAndUpdateBinding ( pureFn ( exp1 , exp2 , exp3 , exp4 ) ) :
90
+ checkAndUpdateBinding (
91
+ thisArg ? pureFn . call ( thisArg , exp1 , exp2 , exp3 , exp4 ) : pureFn ( exp1 , exp2 , exp3 , exp4 ) ) :
82
92
consumeBinding ( ) ;
83
93
}
84
94
@@ -96,10 +106,12 @@ export function pureFunction4(
96
106
*/
97
107
export function pureFunction5 (
98
108
pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any ) => any , exp1 : any , exp2 : any , exp3 : any ,
99
- exp4 : any , exp5 : any ) : any {
109
+ exp4 : any , exp5 : any , thisArg ?: any ) : any {
100
110
const different = bindingUpdated4 ( exp1 , exp2 , exp3 , exp4 ) ;
101
111
return bindingUpdated ( exp5 ) || different ?
102
- checkAndUpdateBinding ( pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 ) ) :
112
+ checkAndUpdateBinding (
113
+ thisArg ? pureFn . call ( thisArg , exp1 , exp2 , exp3 , exp4 , exp5 ) :
114
+ pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 ) ) :
103
115
consumeBinding ( ) ;
104
116
}
105
117
@@ -118,10 +130,12 @@ export function pureFunction5(
118
130
*/
119
131
export function pureFunction6 (
120
132
pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any , v6 : any ) => any , exp1 : any , exp2 : any ,
121
- exp3 : any , exp4 : any , exp5 : any , exp6 : any ) : any {
133
+ exp3 : any , exp4 : any , exp5 : any , exp6 : any , thisArg ?: any ) : any {
122
134
const different = bindingUpdated4 ( exp1 , exp2 , exp3 , exp4 ) ;
123
135
return bindingUpdated2 ( exp5 , exp6 ) || different ?
124
- checkAndUpdateBinding ( pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 , exp6 ) ) :
136
+ checkAndUpdateBinding (
137
+ thisArg ? pureFn . call ( thisArg , exp1 , exp2 , exp3 , exp4 , exp5 , exp6 ) :
138
+ pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 , exp6 ) ) :
125
139
consumeBinding ( ) ;
126
140
}
127
141
@@ -141,11 +155,13 @@ export function pureFunction6(
141
155
*/
142
156
export function pureFunction7 (
143
157
pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any , v6 : any , v7 : any ) => any , exp1 : any ,
144
- exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , exp7 : any ) : any {
158
+ exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , exp7 : any , thisArg ?: any ) : any {
145
159
let different = bindingUpdated4 ( exp1 , exp2 , exp3 , exp4 ) ;
146
160
different = bindingUpdated2 ( exp5 , exp6 ) || different ;
147
161
return bindingUpdated ( exp7 ) || different ?
148
- checkAndUpdateBinding ( pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 , exp6 , exp7 ) ) :
162
+ checkAndUpdateBinding (
163
+ thisArg ? pureFn . call ( thisArg , exp1 , exp2 , exp3 , exp4 , exp5 , exp6 , exp7 ) :
164
+ pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 , exp6 , exp7 ) ) :
149
165
consumeBinding ( ) ;
150
166
}
151
167
@@ -166,10 +182,13 @@ export function pureFunction7(
166
182
*/
167
183
export function pureFunction8 (
168
184
pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any , v6 : any , v7 : any , v8 : any ) => any ,
169
- exp1 : any , exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , exp7 : any , exp8 : any ) : any {
185
+ exp1 : any , exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , exp7 : any , exp8 : any ,
186
+ thisArg ?: any ) : any {
170
187
const different = bindingUpdated4 ( exp1 , exp2 , exp3 , exp4 ) ;
171
188
return bindingUpdated4 ( exp5 , exp6 , exp7 , exp8 ) || different ?
172
- checkAndUpdateBinding ( pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 , exp6 , exp7 , exp8 ) ) :
189
+ checkAndUpdateBinding (
190
+ thisArg ? pureFn . call ( thisArg , exp1 , exp2 , exp3 , exp4 , exp5 , exp6 , exp7 , exp8 ) :
191
+ pureFn ( exp1 , exp2 , exp3 , exp4 , exp5 , exp6 , exp7 , exp8 ) ) :
173
192
consumeBinding ( ) ;
174
193
}
175
194
@@ -184,11 +203,11 @@ export function pureFunction8(
184
203
* @param exp An array of binding values
185
204
* @returns Updated value
186
205
*/
187
- export function pureFunctionV ( pureFn : ( ...v : any [ ] ) => any , exps : any [ ] ) : any {
206
+ export function pureFunctionV ( pureFn : ( ...v : any [ ] ) => any , exps : any [ ] , thisArg ?: any ) : any {
188
207
let different = false ;
189
208
190
209
for ( let i = 0 ; i < exps . length ; i ++ ) {
191
210
bindingUpdated ( exps [ i ] ) && ( different = true ) ;
192
211
}
193
- return different ? checkAndUpdateBinding ( pureFn . apply ( null , exps ) ) : consumeBinding ( ) ;
212
+ return different ? checkAndUpdateBinding ( pureFn . apply ( thisArg , exps ) ) : consumeBinding ( ) ;
194
213
}
0 commit comments