6
6
* found in the LICENSE file at https://angular.io/license
7
7
*/
8
8
9
- import { bindingUpdated , bindingUpdated2 , bindingUpdated4 , updateBinding , getBinding , getCreationMode , getTView , bindingUpdated3 , } from './instructions' ;
9
+ import { bindingUpdated , bindingUpdated2 , bindingUpdated4 , updateBinding , getBinding , getCreationMode , bindingUpdated3 , getBindingRoot , getTView , } from './instructions' ;
10
10
11
11
/**
12
12
* Bindings for pure functions are stored after regular bindings.
13
13
*
14
- * ----------------------------------------------------------------------------
15
- * | LNodes / local refs / pipes ... | regular bindings / interpolations | pure function bindings
16
- * ----------------------------------------------------------------------------
17
- * ^
18
- * TView.bindingStartIndex
14
+ * |--------consts--------|----------------vars----------------|------ hostVars (dir1) ------|
15
+ * ---------------------------------------------------------------------------------------------
16
+ * | nodes / refs / pipes | bindings | pure function bindings | host bindings | host slots |
17
+ * ---------------------------------------------------------------------------------------------
18
+ * ^ ^
19
+ * TView.bindingStartIndex TView.hostBindingStartIndex
19
20
*
20
- * Pure function instructions are given an offset from TView.bindingStartIndex.
21
- * Adding the offset to TView.bindingStartIndex gives the first index where the bindings
22
- * are stored.
21
+ * Pure function instructions are given an offset from the binding root. Adding the offset to the
22
+ * binding root gives the first index where the bindings are stored. In component views, the binding
23
+ * root is the bindingStartIndex. In host bindings, the binding root is the hostBindingStartIndex +
24
+ * any hostVars in directives evaluated before it.
23
25
*/
24
26
25
27
/**
@@ -33,7 +35,7 @@ import {bindingUpdated, bindingUpdated2, bindingUpdated4, updateBinding, getBind
33
35
*/
34
36
export function pureFunction0 < T > ( slotOffset : number , pureFn : ( ) => T , thisArg ?: any ) : T {
35
37
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
36
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
38
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
37
39
return getCreationMode ( ) ?
38
40
updateBinding ( bindingIndex , thisArg ? pureFn . call ( thisArg ) : pureFn ( ) ) :
39
41
getBinding ( bindingIndex ) ;
@@ -52,7 +54,7 @@ export function pureFunction0<T>(slotOffset: number, pureFn: () => T, thisArg?:
52
54
export function pureFunction1 (
53
55
slotOffset : number , pureFn : ( v : any ) => any , exp : any , thisArg ?: any ) : any {
54
56
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
55
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
57
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
56
58
return bindingUpdated ( bindingIndex , exp ) ?
57
59
updateBinding ( bindingIndex + 1 , thisArg ? pureFn . call ( thisArg , exp ) : pureFn ( exp ) ) :
58
60
getBinding ( bindingIndex + 1 ) ;
@@ -73,7 +75,7 @@ export function pureFunction2(
73
75
slotOffset : number , pureFn : ( v1 : any , v2 : any ) => any , exp1 : any , exp2 : any ,
74
76
thisArg ?: any ) : any {
75
77
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
76
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
78
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
77
79
return bindingUpdated2 ( bindingIndex , exp1 , exp2 ) ?
78
80
updateBinding (
79
81
bindingIndex + 2 , thisArg ? pureFn . call ( thisArg , exp1 , exp2 ) : pureFn ( exp1 , exp2 ) ) :
@@ -96,7 +98,7 @@ export function pureFunction3(
96
98
slotOffset : number , pureFn : ( v1 : any , v2 : any , v3 : any ) => any , exp1 : any , exp2 : any , exp3 : any ,
97
99
thisArg ?: any ) : any {
98
100
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
99
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
101
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
100
102
return bindingUpdated3 ( bindingIndex , exp1 , exp2 , exp3 ) ?
101
103
updateBinding (
102
104
bindingIndex + 3 ,
@@ -121,7 +123,7 @@ export function pureFunction4(
121
123
slotOffset : number , pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any ) => any , exp1 : any , exp2 : any ,
122
124
exp3 : any , exp4 : any , thisArg ?: any ) : any {
123
125
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
124
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
126
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
125
127
return bindingUpdated4 ( bindingIndex , exp1 , exp2 , exp3 , exp4 ) ?
126
128
updateBinding (
127
129
bindingIndex + 4 ,
@@ -147,7 +149,7 @@ export function pureFunction5(
147
149
slotOffset : number , pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any ) => any , exp1 : any ,
148
150
exp2 : any , exp3 : any , exp4 : any , exp5 : any , thisArg ?: any ) : any {
149
151
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
150
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
152
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
151
153
const different = bindingUpdated4 ( bindingIndex , exp1 , exp2 , exp3 , exp4 ) ;
152
154
return bindingUpdated ( bindingIndex + 4 , exp5 ) || different ?
153
155
updateBinding (
@@ -175,7 +177,7 @@ export function pureFunction6(
175
177
slotOffset : number , pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any , v6 : any ) => any ,
176
178
exp1 : any , exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , thisArg ?: any ) : any {
177
179
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
178
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
180
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
179
181
const different = bindingUpdated4 ( bindingIndex , exp1 , exp2 , exp3 , exp4 ) ;
180
182
return bindingUpdated2 ( bindingIndex + 4 , exp5 , exp6 ) || different ?
181
183
updateBinding (
@@ -205,7 +207,7 @@ export function pureFunction7(
205
207
pureFn : ( v1 : any , v2 : any , v3 : any , v4 : any , v5 : any , v6 : any , v7 : any ) => any , exp1 : any ,
206
208
exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , exp7 : any , thisArg ?: any ) : any {
207
209
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
208
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
210
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
209
211
let different = bindingUpdated4 ( bindingIndex , exp1 , exp2 , exp3 , exp4 ) ;
210
212
return bindingUpdated3 ( bindingIndex + 4 , exp5 , exp6 , exp7 ) || different ?
211
213
updateBinding (
@@ -238,7 +240,7 @@ export function pureFunction8(
238
240
exp1 : any , exp2 : any , exp3 : any , exp4 : any , exp5 : any , exp6 : any , exp7 : any , exp8 : any ,
239
241
thisArg ?: any ) : any {
240
242
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
241
- const bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
243
+ const bindingIndex = getBindingRoot ( ) + slotOffset ;
242
244
const different = bindingUpdated4 ( bindingIndex , exp1 , exp2 , exp3 , exp4 ) ;
243
245
return bindingUpdated4 ( bindingIndex + 4 , exp5 , exp6 , exp7 , exp8 ) || different ?
244
246
updateBinding (
@@ -264,7 +266,7 @@ export function pureFunction8(
264
266
export function pureFunctionV (
265
267
slotOffset : number , pureFn : ( ...v : any [ ] ) => any , exps : any [ ] , thisArg ?: any ) : any {
266
268
// TODO(kara): use bindingRoot instead of bindingStartIndex when implementing host bindings
267
- let bindingIndex = getTView ( ) . bindingStartIndex + slotOffset ;
269
+ let bindingIndex = getBindingRoot ( ) + slotOffset ;
268
270
let different = false ;
269
271
for ( let i = 0 ; i < exps . length ; i ++ ) {
270
272
bindingUpdated ( bindingIndex ++ , exps [ i ] ) && ( different = true ) ;
0 commit comments