diff --git a/modules/@angular/core/src/view/element.ts b/modules/@angular/core/src/view/element.ts index 7e6e9b474b..1daed8bad4 100644 --- a/modules/@angular/core/src/view/element.ts +++ b/modules/@angular/core/src/view/element.ts @@ -199,29 +199,17 @@ function renderEventHandlerClosure(view: ViewData, index: number, eventName: str export function checkAndUpdateElementInline( view: ViewData, def: NodeDef, v0: any, v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any, v9: any) { - // Note: fallthrough is intended! - switch (def.bindings.length) { - case 10: - checkAndUpdateElementValue(view, def, 9, v9); - case 9: - checkAndUpdateElementValue(view, def, 8, v8); - case 8: - checkAndUpdateElementValue(view, def, 7, v7); - case 7: - checkAndUpdateElementValue(view, def, 6, v6); - case 6: - checkAndUpdateElementValue(view, def, 5, v5); - case 5: - checkAndUpdateElementValue(view, def, 4, v4); - case 4: - checkAndUpdateElementValue(view, def, 3, v3); - case 3: - checkAndUpdateElementValue(view, def, 2, v2); - case 2: - checkAndUpdateElementValue(view, def, 1, v1); - case 1: - checkAndUpdateElementValue(view, def, 0, v0); - } + const bindLen = def.bindings.length; + if (bindLen > 0) checkAndUpdateElementValue(view, def, 0, v0); + if (bindLen > 1) checkAndUpdateElementValue(view, def, 1, v1); + if (bindLen > 2) checkAndUpdateElementValue(view, def, 2, v2); + if (bindLen > 3) checkAndUpdateElementValue(view, def, 3, v3); + if (bindLen > 4) checkAndUpdateElementValue(view, def, 4, v4); + if (bindLen > 5) checkAndUpdateElementValue(view, def, 5, v5); + if (bindLen > 6) checkAndUpdateElementValue(view, def, 6, v6); + if (bindLen > 7) checkAndUpdateElementValue(view, def, 7, v7); + if (bindLen > 8) checkAndUpdateElementValue(view, def, 8, v8); + if (bindLen > 9) checkAndUpdateElementValue(view, def, 9, v9); } export function checkAndUpdateElementDynamic(view: ViewData, def: NodeDef, values: any[]) { diff --git a/modules/@angular/core/src/view/provider.ts b/modules/@angular/core/src/view/provider.ts index 00416124f4..494148cb29 100644 --- a/modules/@angular/core/src/view/provider.ts +++ b/modules/@angular/core/src/view/provider.ts @@ -175,29 +175,17 @@ export function checkAndUpdateDirectiveInline( const providerData = asProviderData(view, def.index); const directive = providerData.instance; let changes: SimpleChanges; - // Note: fallthrough is intended! - switch (def.bindings.length) { - case 10: - changes = checkAndUpdateProp(view, providerData, def, 9, v9, changes); - case 9: - changes = checkAndUpdateProp(view, providerData, def, 8, v8, changes); - case 8: - changes = checkAndUpdateProp(view, providerData, def, 7, v7, changes); - case 7: - changes = checkAndUpdateProp(view, providerData, def, 6, v6, changes); - case 6: - changes = checkAndUpdateProp(view, providerData, def, 5, v5, changes); - case 5: - changes = checkAndUpdateProp(view, providerData, def, 4, v4, changes); - case 4: - changes = checkAndUpdateProp(view, providerData, def, 3, v3, changes); - case 3: - changes = checkAndUpdateProp(view, providerData, def, 2, v2, changes); - case 2: - changes = checkAndUpdateProp(view, providerData, def, 1, v1, changes); - case 1: - changes = checkAndUpdateProp(view, providerData, def, 0, v0, changes); - } + const bindLen = def.bindings.length; + if (bindLen > 0) changes = checkAndUpdateProp(view, providerData, def, 0, v0, changes); + if (bindLen > 1) changes = checkAndUpdateProp(view, providerData, def, 1, v1, changes); + if (bindLen > 2) changes = checkAndUpdateProp(view, providerData, def, 2, v2, changes); + if (bindLen > 3) changes = checkAndUpdateProp(view, providerData, def, 3, v3, changes); + if (bindLen > 4) changes = checkAndUpdateProp(view, providerData, def, 4, v4, changes); + if (bindLen > 5) changes = checkAndUpdateProp(view, providerData, def, 5, v5, changes); + if (bindLen > 6) changes = checkAndUpdateProp(view, providerData, def, 6, v6, changes); + if (bindLen > 7) changes = checkAndUpdateProp(view, providerData, def, 7, v7, changes); + if (bindLen > 8) changes = checkAndUpdateProp(view, providerData, def, 8, v8, changes); + if (bindLen > 9) changes = checkAndUpdateProp(view, providerData, def, 9, v9, changes); if (changes) { directive.ngOnChanges(changes); } diff --git a/modules/@angular/core/src/view/pure_expression.ts b/modules/@angular/core/src/view/pure_expression.ts index 46cddd82c5..a47f893e71 100644 --- a/modules/@angular/core/src/view/pure_expression.ts +++ b/modules/@angular/core/src/view/pure_expression.ts @@ -72,29 +72,17 @@ export function checkAndUpdatePureExpressionInline( v7: any, v8: any, v9: any) { const bindings = def.bindings; let changed = false; - // Note: fallthrough is intended! - switch (bindings.length) { - case 10: - if (checkAndUpdateBinding(view, def, 9, v9)) changed = true; - case 9: - if (checkAndUpdateBinding(view, def, 8, v8)) changed = true; - case 8: - if (checkAndUpdateBinding(view, def, 7, v7)) changed = true; - case 7: - if (checkAndUpdateBinding(view, def, 6, v6)) changed = true; - case 6: - if (checkAndUpdateBinding(view, def, 5, v5)) changed = true; - case 5: - if (checkAndUpdateBinding(view, def, 4, v4)) changed = true; - case 4: - if (checkAndUpdateBinding(view, def, 3, v3)) changed = true; - case 3: - if (checkAndUpdateBinding(view, def, 2, v2)) changed = true; - case 2: - if (checkAndUpdateBinding(view, def, 1, v1)) changed = true; - case 1: - if (checkAndUpdateBinding(view, def, 0, v0)) changed = true; - } + const bindLen = bindings.length; + if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0)) changed = true; + if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1)) changed = true; + if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2)) changed = true; + if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3)) changed = true; + if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4)) changed = true; + if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5)) changed = true; + if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6)) changed = true; + if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7)) changed = true; + if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8)) changed = true; + if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9)) changed = true; const data = asPureExpressionData(view, def.index); if (changed) { @@ -102,88 +90,62 @@ export function checkAndUpdatePureExpressionInline( switch (def.pureExpression.type) { case PureExpressionType.Array: value = new Array(bindings.length); - // Note: fallthrough is intended! - switch (bindings.length) { - case 10: - value[9] = v9; - case 9: - value[8] = v8; - case 8: - value[7] = v7; - case 7: - value[6] = v6; - case 6: - value[5] = v5; - case 5: - value[4] = v4; - case 4: - value[3] = v3; - case 3: - value[2] = v2; - case 2: - value[1] = v1; - case 1: - value[0] = v0; - } + if (bindLen > 0) value[0] = v0; + if (bindLen > 1) value[1] = v1; + if (bindLen > 2) value[2] = v2; + if (bindLen > 3) value[3] = v3; + if (bindLen > 4) value[4] = v4; + if (bindLen > 5) value[5] = v5; + if (bindLen > 6) value[6] = v6; + if (bindLen > 7) value[7] = v7; + if (bindLen > 8) value[8] = v8; + if (bindLen > 9) value[9] = v9; break; case PureExpressionType.Object: value = {}; - // Note: fallthrough is intended! - switch (bindings.length) { - case 10: - value[bindings[9].name] = v9; - case 9: - value[bindings[8].name] = v8; - case 8: - value[bindings[7].name] = v7; - case 7: - value[bindings[6].name] = v6; - case 6: - value[bindings[5].name] = v5; - case 5: - value[bindings[4].name] = v4; - case 4: - value[bindings[3].name] = v3; - case 3: - value[bindings[2].name] = v2; - case 2: - value[bindings[1].name] = v1; - case 1: - value[bindings[0].name] = v0; - } + if (bindLen > 0) value[bindings[0].name] = v0; + if (bindLen > 1) value[bindings[1].name] = v1; + if (bindLen > 2) value[bindings[2].name] = v2; + if (bindLen > 3) value[bindings[3].name] = v3; + if (bindLen > 4) value[bindings[4].name] = v4; + if (bindLen > 5) value[bindings[5].name] = v5; + if (bindLen > 6) value[bindings[6].name] = v6; + if (bindLen > 7) value[bindings[7].name] = v7; + if (bindLen > 8) value[bindings[8].name] = v8; + if (bindLen > 9) value[bindings[9].name] = v9; break; case PureExpressionType.Pipe: const pipe = v0; - switch (bindings.length) { - case 10: - value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8, v9); - break; - case 9: - value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8); - break; - case 8: - value = pipe.transform(v1, v2, v3, v4, v5, v6, v7); - break; - case 7: - value = pipe.transform(v1, v2, v3, v4, v5, v6); - break; - case 6: - value = pipe.transform(v1, v2, v3, v4, v5); - break; - case 5: - value = pipe.transform(v1, v2, v3, v4); - break; - case 4: - value = pipe.transform(v1, v2, v3); - break; - case 3: - value = pipe.transform(v1, v2); + switch (bindLen) { + case 1: + value = pipe.transform(v0); break; case 2: value = pipe.transform(v1); break; - case 1: - value = pipe.transform(v0); + case 3: + value = pipe.transform(v1, v2); + break; + case 4: + value = pipe.transform(v1, v2, v3); + break; + case 5: + value = pipe.transform(v1, v2, v3, v4); + break; + case 6: + value = pipe.transform(v1, v2, v3, v4, v5); + break; + case 7: + value = pipe.transform(v1, v2, v3, v4, v5, v6); + break; + case 8: + value = pipe.transform(v1, v2, v3, v4, v5, v6, v7); + break; + case 9: + value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8); + break; + case 10: + value = pipe.transform(v1, v2, v3, v4, v5, v6, v7, v8, v9); break; } break; diff --git a/modules/@angular/core/src/view/text.ts b/modules/@angular/core/src/view/text.ts index 84b3ac31fa..ef8056ae71 100644 --- a/modules/@angular/core/src/view/text.ts +++ b/modules/@angular/core/src/view/text.ts @@ -67,58 +67,32 @@ export function createText(view: ViewData, renderHost: any, def: NodeDef): TextD export function checkAndUpdateTextInline( view: ViewData, def: NodeDef, v0: any, v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any, v9: any) { - const bindings = def.bindings; let changed = false; - // Note: fallthrough is intended! - switch (bindings.length) { - case 10: - if (checkAndUpdateBinding(view, def, 9, v9)) changed = true; - case 9: - if (checkAndUpdateBinding(view, def, 8, v8)) changed = true; - case 8: - if (checkAndUpdateBinding(view, def, 7, v7)) changed = true; - case 7: - if (checkAndUpdateBinding(view, def, 6, v6)) changed = true; - case 6: - if (checkAndUpdateBinding(view, def, 5, v5)) changed = true; - case 5: - if (checkAndUpdateBinding(view, def, 4, v4)) changed = true; - case 4: - if (checkAndUpdateBinding(view, def, 3, v3)) changed = true; - case 3: - if (checkAndUpdateBinding(view, def, 2, v2)) changed = true; - case 2: - if (checkAndUpdateBinding(view, def, 1, v1)) changed = true; - case 1: - if (checkAndUpdateBinding(view, def, 0, v0)) changed = true; - } + const bindings = def.bindings; + const bindLen = bindings.length; + if (bindLen > 0 && checkAndUpdateBinding(view, def, 0, v0)) changed = true; + if (bindLen > 1 && checkAndUpdateBinding(view, def, 1, v1)) changed = true; + if (bindLen > 2 && checkAndUpdateBinding(view, def, 2, v2)) changed = true; + if (bindLen > 3 && checkAndUpdateBinding(view, def, 3, v3)) changed = true; + if (bindLen > 4 && checkAndUpdateBinding(view, def, 4, v4)) changed = true; + if (bindLen > 5 && checkAndUpdateBinding(view, def, 5, v5)) changed = true; + if (bindLen > 6 && checkAndUpdateBinding(view, def, 6, v6)) changed = true; + if (bindLen > 7 && checkAndUpdateBinding(view, def, 7, v7)) changed = true; + if (bindLen > 8 && checkAndUpdateBinding(view, def, 8, v8)) changed = true; + if (bindLen > 9 && checkAndUpdateBinding(view, def, 9, v9)) changed = true; if (changed) { - let value = ''; - // Note: fallthrough is intended! - switch (bindings.length) { - case 10: - value = _addInterpolationPart(v9, bindings[9]); - case 9: - value = _addInterpolationPart(v8, bindings[8]) + value; - case 8: - value = _addInterpolationPart(v7, bindings[7]) + value; - case 7: - value = _addInterpolationPart(v6, bindings[6]) + value; - case 6: - value = _addInterpolationPart(v5, bindings[5]) + value; - case 5: - value = _addInterpolationPart(v4, bindings[4]) + value; - case 4: - value = _addInterpolationPart(v3, bindings[3]) + value; - case 3: - value = _addInterpolationPart(v2, bindings[2]) + value; - case 2: - value = _addInterpolationPart(v1, bindings[1]) + value; - case 1: - value = _addInterpolationPart(v0, bindings[0]) + value; - } - value = def.text.prefix + value; + let value = def.text.prefix; + if (bindLen > 0) value += _addInterpolationPart(v0, bindings[0]); + if (bindLen > 1) value += _addInterpolationPart(v1, bindings[1]); + if (bindLen > 2) value += _addInterpolationPart(v2, bindings[2]); + if (bindLen > 3) value += _addInterpolationPart(v3, bindings[3]); + if (bindLen > 4) value += _addInterpolationPart(v4, bindings[4]); + if (bindLen > 5) value += _addInterpolationPart(v5, bindings[5]); + if (bindLen > 6) value += _addInterpolationPart(v6, bindings[6]); + if (bindLen > 7) value += _addInterpolationPart(v7, bindings[7]); + if (bindLen > 8) value += _addInterpolationPart(v8, bindings[8]); + if (bindLen > 9) value += _addInterpolationPart(v9, bindings[9]); const renderNode = asTextData(view, def.index).renderText; view.renderer.setValue(renderNode, value); } diff --git a/modules/@angular/core/src/view/view.ts b/modules/@angular/core/src/view/view.ts index 61e6f32f7a..5cfa69ca57 100644 --- a/modules/@angular/core/src/view/view.ts +++ b/modules/@angular/core/src/view/view.ts @@ -431,29 +431,17 @@ function checkNoChangesNodeInline( view: ViewData, nodeIndex: number, v0: any, v1: any, v2: any, v3: any, v4: any, v5: any, v6: any, v7: any, v8: any, v9: any): void { const nodeDef = view.def.nodes[nodeIndex]; - // Note: fallthrough is intended! - switch (nodeDef.bindings.length) { - case 10: - checkBindingNoChanges(view, nodeDef, 9, v9); - case 9: - checkBindingNoChanges(view, nodeDef, 8, v8); - case 8: - checkBindingNoChanges(view, nodeDef, 7, v7); - case 7: - checkBindingNoChanges(view, nodeDef, 6, v6); - case 6: - checkBindingNoChanges(view, nodeDef, 5, v5); - case 5: - checkBindingNoChanges(view, nodeDef, 4, v4); - case 4: - checkBindingNoChanges(view, nodeDef, 3, v3); - case 3: - checkBindingNoChanges(view, nodeDef, 2, v2); - case 2: - checkBindingNoChanges(view, nodeDef, 1, v1); - case 1: - checkBindingNoChanges(view, nodeDef, 0, v0); - } + const bindLen = nodeDef.bindings.length; + if (bindLen > 0) checkBindingNoChanges(view, nodeDef, 0, v0); + if (bindLen > 1) checkBindingNoChanges(view, nodeDef, 1, v1); + if (bindLen > 2) checkBindingNoChanges(view, nodeDef, 2, v2); + if (bindLen > 3) checkBindingNoChanges(view, nodeDef, 3, v3); + if (bindLen > 4) checkBindingNoChanges(view, nodeDef, 4, v4); + if (bindLen > 5) checkBindingNoChanges(view, nodeDef, 5, v5); + if (bindLen > 6) checkBindingNoChanges(view, nodeDef, 6, v6); + if (bindLen > 7) checkBindingNoChanges(view, nodeDef, 7, v7); + if (bindLen > 8) checkBindingNoChanges(view, nodeDef, 8, v8); + if (bindLen > 9) checkBindingNoChanges(view, nodeDef, 9, v9); return nodeDef.type === NodeType.PureExpression ? asPureExpressionData(view, nodeIndex).value : undefined; } diff --git a/modules/tsconfig.json b/modules/tsconfig.json index 1fffb05ba1..26e4004c7c 100644 --- a/modules/tsconfig.json +++ b/modules/tsconfig.json @@ -8,8 +8,7 @@ "moduleResolution": "node", "outDir": "../dist/all/", "noImplicitAny": true, - // Attention: This is only set to false for @angular/core. - "noFallthroughCasesInSwitch": false, + "noFallthroughCasesInSwitch": true, "paths": { "selenium-webdriver": ["../node_modules/@types/selenium-webdriver/index.d.ts"], "rxjs/*": ["../node_modules/rxjs/*"],