From d7f5fc8fcf1c083029588217303324a145c20650 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Tue, 1 Nov 2016 09:09:40 -0700 Subject: [PATCH] Get literal type only once --- src/compiler/checker.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2d05e16ef82..326d84278be 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -16882,7 +16882,8 @@ namespace ts { let firstDefaultClause: CaseOrDefaultClause; let hasDuplicateDefaultClause = false; - let expressionType = checkExpression(node.expression); + const expressionType = checkExpression(node.expression); + const expressionIsLiteral = isLiteralType(expressionType); forEach(node.caseBlock.clauses, clause => { // Grammar check for duplicate default clauses, skip if we already report duplicate default clause if (clause.kind === SyntaxKind.DefaultClause && !hasDuplicateDefaultClause) { @@ -16905,14 +16906,14 @@ namespace ts { // to or from the type of the 'switch' expression. let caseType = checkExpression(caseClause.expression); const caseIsLiteral = isLiteralType(caseType); - const expressionIsLiteral = isLiteralType(expressionType); + let literalExpressionType = expressionType; if (!caseIsLiteral || !expressionIsLiteral) { caseType = caseIsLiteral ? getBaseTypeOfLiteralType(caseType) : caseType; - expressionType = expressionIsLiteral ? getBaseTypeOfLiteralType(expressionType) : expressionType; + literalExpressionType = getBaseTypeOfLiteralType(expressionType); } - if (!isTypeEqualityComparableTo(expressionType, caseType)) { + if (!isTypeEqualityComparableTo(literalExpressionType, caseType)) { // expressionType is not comparable to caseType, try the reversed check and report errors if it fails - checkTypeComparableTo(caseType, expressionType, caseClause.expression, /*headMessage*/ undefined); + checkTypeComparableTo(caseType, literalExpressionType, caseClause.expression, /*headMessage*/ undefined); } } forEach(clause.statements, checkSourceElement);