refactor(ivy): access component def through tData (#22771)
PR Close #22771
This commit is contained in:
		
							parent
							
								
									3b167be069
								
							
						
					
					
						commit
						e55bf8fa79
					
				| @ -462,15 +462,16 @@ export function elementStart( | ||||
|     ngDevMode && | ||||
|         assertNull(currentView.bindingStartIndex, 'elements should be created before any bindings'); | ||||
|     const isHostElement = typeof nameOrComponentType !== 'string'; | ||||
|     // MEGAMORPHIC: `ngComponentDef` is a megamorphic property access here.
 | ||||
|     // This is OK, since we will refactor this code and store the result in `TView.data`
 | ||||
|     // which means that we will be reading this value only once. We are trading clean/simple
 | ||||
|     // template
 | ||||
|     // code for slight startup(first run) performance. (No impact on subsequent runs)
 | ||||
|     // TODO(misko): refactor this to store the `ComponentDef` in `TView.data`.
 | ||||
|     const hostComponentDef = | ||||
|         isHostElement ? (nameOrComponentType as ComponentType<any>).ngComponentDef : null; | ||||
|     const name = isHostElement ? hostComponentDef !.tag : nameOrComponentType as string; | ||||
| 
 | ||||
|     let hostComponentDef: ComponentDef<any>|null = null; | ||||
|     let name = nameOrComponentType as string; | ||||
|     if (isHostElement) { | ||||
|       hostComponentDef = currentView.tView.firstTemplatePass ? | ||||
|           (nameOrComponentType as ComponentType<any>).ngComponentDef : | ||||
|           tData[index + 1] as ComponentDef<any>; | ||||
|       name = hostComponentDef !.tag; | ||||
|     } | ||||
| 
 | ||||
|     if (name === null) { | ||||
|       // TODO: future support for nameless components.
 | ||||
|       throw 'for now name is required'; | ||||
| @ -541,16 +542,12 @@ function hack_declareDirectives( | ||||
|     // TODO(mhevery): This assumes that the directives come in correct order, which
 | ||||
|     // is not guaranteed. Must be refactored to take it into account.
 | ||||
|     for (let i = 0; i < directiveTypes.length; i++) { | ||||
|       // MEGAMORPHIC: `ngDirectiveDef` is a megamorphic property access here.
 | ||||
|       // This is OK, since we will refactor this code and store the result in `TView.data`
 | ||||
|       // which means that we will be reading this value only once. We are trading clean/simple
 | ||||
|       // template
 | ||||
|       // code for slight startup(first run) performance. (No impact on subsequent runs)
 | ||||
|       // TODO(misko): refactor this to store the `DirectiveDef` in `TView.data`.
 | ||||
|       index++; | ||||
|       const directiveType = directiveTypes[i]; | ||||
|       const directiveDef = directiveType.ngDirectiveDef; | ||||
|       const directiveDef = currentView.tView.firstTemplatePass ? directiveType.ngDirectiveDef : | ||||
|                                                                  tData[index] as DirectiveDef<any>; | ||||
|       directiveCreate( | ||||
|           ++index, directiveDef.n(), directiveDef, hack_findQueryName(directiveDef, localRefs)); | ||||
|           index, directiveDef.n(), directiveDef, hack_findQueryName(directiveDef, localRefs)); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user