Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 586ac55

Browse filesBrowse files
committed
Fix finishFlow function and rename to finishFlowLabel
1 parent df62fa0 commit 586ac55
Copy full SHA for 586ac55

1 file changed

+26-29Lines changed: 26 additions & 29 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/binder.ts‎

Copy file name to clipboardExpand all lines: src/compiler/binder.ts
+26-29Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -676,16 +676,13 @@ namespace ts {
676676
};
677677
}
678678

679-
function finishFlow(flow: FlowNode): FlowNode {
680-
while (flow.kind === FlowKind.Label) {
681-
const antecedents = (<FlowLabel>flow).antecedents;
682-
if (!antecedents) {
683-
return unreachableFlow;
684-
}
685-
if (antecedents.length > 1) {
686-
break;
687-
}
688-
flow = antecedents[0];
679+
function finishFlowLabel(flow: FlowLabel): FlowNode {
680+
const antecedents = flow.antecedents;
681+
if (!antecedents) {
682+
return unreachableFlow;
683+
}
684+
if (antecedents.length === 1) {
685+
return antecedents[0];
689686
}
690687
return flow;
691688
}
@@ -760,10 +757,10 @@ namespace ts {
760757
addAntecedent(preWhileLabel, currentFlow);
761758
currentFlow = preWhileLabel;
762759
bindCondition(node.expression, preBodyLabel, postWhileLabel);
763-
currentFlow = finishFlow(preBodyLabel);
760+
currentFlow = finishFlowLabel(preBodyLabel);
764761
bindIterativeStatement(node.statement, postWhileLabel, preWhileLabel);
765762
addAntecedent(preWhileLabel, currentFlow);
766-
currentFlow = finishFlow(postWhileLabel);
763+
currentFlow = finishFlowLabel(postWhileLabel);
767764
}
768765

769766
function bindDoStatement(node: DoStatement): void {
@@ -774,9 +771,9 @@ namespace ts {
774771
currentFlow = preDoLabel;
775772
bindIterativeStatement(node.statement, postDoLabel, preConditionLabel);
776773
addAntecedent(preConditionLabel, currentFlow);
777-
currentFlow = finishFlow(preConditionLabel);
774+
currentFlow = finishFlowLabel(preConditionLabel);
778775
bindCondition(node.expression, preDoLabel, postDoLabel);
779-
currentFlow = finishFlow(postDoLabel);
776+
currentFlow = finishFlowLabel(postDoLabel);
780777
}
781778

782779
function bindForStatement(node: ForStatement): void {
@@ -787,11 +784,11 @@ namespace ts {
787784
addAntecedent(preLoopLabel, currentFlow);
788785
currentFlow = preLoopLabel;
789786
bindCondition(node.condition, preBodyLabel, postLoopLabel);
790-
currentFlow = finishFlow(preBodyLabel);
787+
currentFlow = finishFlowLabel(preBodyLabel);
791788
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
792789
bind(node.incrementor);
793790
addAntecedent(preLoopLabel, currentFlow);
794-
currentFlow = finishFlow(postLoopLabel);
791+
currentFlow = finishFlowLabel(postLoopLabel);
795792
}
796793

797794
function bindForInOrForOfStatement(node: ForInStatement | ForOfStatement): void {
@@ -807,21 +804,21 @@ namespace ts {
807804
}
808805
bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel);
809806
addAntecedent(preLoopLabel, currentFlow);
810-
currentFlow = finishFlow(postLoopLabel);
807+
currentFlow = finishFlowLabel(postLoopLabel);
811808
}
812809

813810
function bindIfStatement(node: IfStatement): void {
814811
const thenLabel = createFlowLabel();
815812
const elseLabel = createFlowLabel();
816813
const postIfLabel = createFlowLabel();
817814
bindCondition(node.expression, thenLabel, elseLabel);
818-
currentFlow = finishFlow(thenLabel);
815+
currentFlow = finishFlowLabel(thenLabel);
819816
bind(node.thenStatement);
820817
addAntecedent(postIfLabel, currentFlow);
821-
currentFlow = finishFlow(elseLabel);
818+
currentFlow = finishFlowLabel(elseLabel);
822819
bind(node.elseStatement);
823820
addAntecedent(postIfLabel, currentFlow);
824-
currentFlow = finishFlow(postIfLabel);
821+
currentFlow = finishFlowLabel(postIfLabel);
825822
}
826823

827824
function bindReturnOrThrow(node: ReturnStatement | ThrowStatement): void {
@@ -880,7 +877,7 @@ namespace ts {
880877
currentFlow = preTryFlow;
881878
bind(node.finallyBlock);
882879
}
883-
currentFlow = finishFlow(postFinallyLabel);
880+
currentFlow = finishFlowLabel(postFinallyLabel);
884881
}
885882

886883
function bindSwitchStatement(node: SwitchStatement): void {
@@ -898,7 +895,7 @@ namespace ts {
898895
}
899896
currentBreakTarget = saveBreakTarget;
900897
preSwitchCaseFlow = savePreSwitchCaseFlow;
901-
currentFlow = finishFlow(postSwitchLabel);
898+
currentFlow = finishFlowLabel(postSwitchLabel);
902899
}
903900

904901
function bindCaseBlock(node: CaseBlock): void {
@@ -913,7 +910,7 @@ namespace ts {
913910
const preCaseLabel = createFlowLabel();
914911
addAntecedent(preCaseLabel, preSwitchCaseFlow);
915912
addAntecedent(preCaseLabel, currentFlow);
916-
currentFlow = finishFlow(preCaseLabel);
913+
currentFlow = finishFlowLabel(preCaseLabel);
917914
}
918915
bind(clause);
919916
if (currentFlow.kind !== FlowKind.Unreachable && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) {
@@ -953,7 +950,7 @@ namespace ts {
953950
file.bindDiagnostics.push(createDiagnosticForNode(node.label, Diagnostics.Unused_label));
954951
}
955952
addAntecedent(postStatementLabel, currentFlow);
956-
currentFlow = finishFlow(postStatementLabel);
953+
currentFlow = finishFlowLabel(postStatementLabel);
957954
}
958955

959956
function bindDestructuringTargetFlow(node: Expression) {
@@ -999,7 +996,7 @@ namespace ts {
999996
else {
1000997
bindCondition(node.left, trueTarget, preRightLabel);
1001998
}
1002-
currentFlow = finishFlow(preRightLabel);
999+
currentFlow = finishFlowLabel(preRightLabel);
10031000
bind(node.operatorToken);
10041001
bindCondition(node.right, trueTarget, falseTarget);
10051002
}
@@ -1024,7 +1021,7 @@ namespace ts {
10241021
if (isTopLevelLogicalExpression(node)) {
10251022
const postExpressionLabel = createFlowLabel();
10261023
bindLogicalExpression(node, postExpressionLabel, postExpressionLabel);
1027-
currentFlow = finishFlow(postExpressionLabel);
1024+
currentFlow = finishFlowLabel(postExpressionLabel);
10281025
}
10291026
else {
10301027
bindLogicalExpression(node, currentTrueTarget, currentFalseTarget);
@@ -1043,13 +1040,13 @@ namespace ts {
10431040
const falseLabel = createFlowLabel();
10441041
const postExpressionLabel = createFlowLabel();
10451042
bindCondition(node.condition, trueLabel, falseLabel);
1046-
currentFlow = finishFlow(trueLabel);
1043+
currentFlow = finishFlowLabel(trueLabel);
10471044
bind(node.whenTrue);
10481045
addAntecedent(postExpressionLabel, currentFlow);
1049-
currentFlow = finishFlow(falseLabel);
1046+
currentFlow = finishFlowLabel(falseLabel);
10501047
bind(node.whenFalse);
10511048
addAntecedent(postExpressionLabel, currentFlow);
1052-
currentFlow = finishFlow(postExpressionLabel);
1049+
currentFlow = finishFlowLabel(postExpressionLabel);
10531050
}
10541051

10551052
function bindInitializedVariableFlow(node: VariableDeclaration | BindingElement) {

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.