Skip to content

Commit a9336ba

Browse files
committed
Revert "Use declared type for references in unreachable code"
This reverts commit 436339d.
1 parent 436339d commit a9336ba

1 file changed

Lines changed: 4 additions & 12 deletions

File tree

src/compiler/checker.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -671,7 +671,6 @@ namespace ts {
671671
const silentNeverType = createIntrinsicType(TypeFlags.Never, "never");
672672
const nonInferrableType = createIntrinsicType(TypeFlags.Never, "never", ObjectFlags.NonInferrableType);
673673
const implicitNeverType = createIntrinsicType(TypeFlags.Never, "never");
674-
const unreachableNeverType = createIntrinsicType(TypeFlags.Never, "never");
675674
const nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object");
676675
const stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
677676
const keyofConstraintType = keyofStringsOnly ? stringType : stringNumberSymbolType;
@@ -17009,7 +17008,7 @@ namespace ts {
1700917008
// on empty arrays are possible without implicit any errors and new element types can be inferred without
1701017009
// type mismatch errors.
1701117010
const resultType = getObjectFlags(evolvedType) & ObjectFlags.EvolvingArray && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType);
17012-
if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === SyntaxKind.NonNullExpression && getTypeWithFacts(resultType, TypeFacts.NEUndefinedOrNull).flags & TypeFlags.Never) {
17011+
if (reference.parent && reference.parent.kind === SyntaxKind.NonNullExpression && getTypeWithFacts(resultType, TypeFacts.NEUndefinedOrNull).flags & TypeFlags.Never) {
1701317012
return declaredType;
1701417013
}
1701517014
return resultType;
@@ -17145,11 +17144,8 @@ namespace ts {
1714517144
// Assignments only narrow the computed type if the declared type is a union type. Thus, we
1714617145
// only need to evaluate the assigned type if the declared type is a union type.
1714717146
if (isMatchingReference(reference, node)) {
17148-
const flowType = getTypeAtFlowNode(flow.antecedent);
17149-
if (flowType === unreachableNeverType) {
17150-
return flowType;
17151-
}
1715217147
if (getAssignmentTargetKind(node) === AssignmentKind.Compound) {
17148+
const flowType = getTypeAtFlowNode(flow.antecedent);
1715317149
return createFlowType(getBaseTypeOfLiteralType(getTypeFromFlowType(flowType)), isIncomplete(flowType));
1715417150
}
1715517151
if (declaredType === autoType || declaredType === autoArrayType) {
@@ -17169,16 +17165,12 @@ namespace ts {
1716917165
// reference 'x.y.z', we may be at an assignment to 'x.y' or 'x'. In that case,
1717017166
// return the declared type.
1717117167
if (containsMatchingReference(reference, node)) {
17172-
const flowType = getTypeAtFlowNode(flow.antecedent);
17173-
if (flowType === unreachableNeverType) {
17174-
return flowType;
17175-
}
1717617168
// A matching dotted name might also be an expando property on a function *expression*,
1717717169
// in which case we continue control flow analysis back to the function's declaration
1717817170
if (isVariableDeclaration(node) && (isInJSFile(node) || isVarConst(node))) {
1717917171
const init = getDeclaredExpandoInitializer(node);
1718017172
if (init && (init.kind === SyntaxKind.FunctionExpression || init.kind === SyntaxKind.ArrowFunction)) {
17181-
return flowType;
17173+
return getTypeAtFlowNode(flow.antecedent);
1718217174
}
1718317175
}
1718417176
return declaredType;
@@ -17217,7 +17209,7 @@ namespace ts {
1721717209
return narrowedType === type ? flowType : createFlowType(narrowedType, isIncomplete(flowType));
1721817210
}
1721917211
if (getReturnTypeOfSignature(signature).flags & TypeFlags.Never) {
17220-
return unreachableNeverType;
17212+
return neverType;
1722117213
}
1722217214
}
1722317215
return undefined;

0 commit comments

Comments
 (0)