Skip to content

Commit cf7b2d4

Browse files
authored
Bring #31486 and #31586 into release-3.5 (#31634)
* Defer union or intersection property type normalization (#31486) * Defer union or intersection property type normalization * Accept moved span * Update user baselines (#31615) * Cache widened types (#31586) * Cache widened types * Fix lint * Accept LKG
1 parent ff7f239 commit cf7b2d4

28 files changed

+1460
-222
lines changed

lib/tsc.js

Lines changed: 84 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30321,7 +30321,19 @@ var ts;
3032130321
}
3032230322
return anyType;
3032330323
}
30324+
function getTypeOfSymbolWithDeferredType(symbol) {
30325+
var links = getSymbolLinks(symbol);
30326+
if (!links.type) {
30327+
ts.Debug.assertDefined(links.deferralParent);
30328+
ts.Debug.assertDefined(links.deferralConstituents);
30329+
links.type = links.deferralParent.flags & 1048576 ? getUnionType(links.deferralConstituents) : getIntersectionType(links.deferralConstituents);
30330+
}
30331+
return links.type;
30332+
}
3032430333
function getTypeOfSymbol(symbol) {
30334+
if (ts.getCheckFlags(symbol) & 65536) {
30335+
return getTypeOfSymbolWithDeferredType(symbol);
30336+
}
3032530337
if (ts.getCheckFlags(symbol) & 1) {
3032630338
return getTypeOfInstantiatedSymbol(symbol);
3032730339
}
@@ -32062,7 +32074,14 @@ var ts;
3206232074
}
3206332075
result.declarations = declarations;
3206432076
result.nameType = nameType;
32065-
result.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes);
32077+
if (propTypes.length > 2) {
32078+
result.checkFlags |= 65536;
32079+
result.deferralParent = containingType;
32080+
result.deferralConstituents = propTypes;
32081+
}
32082+
else {
32083+
result.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes);
32084+
}
3206632085
return result;
3206732086
}
3206832087
function getUnionOrIntersectionProperty(type, name) {
@@ -35596,8 +35615,8 @@ var ts;
3559635615
}
3559735616
return false;
3559835617
}
35599-
function isIgnoredJsxProperty(source, sourceProp, targetMemberType) {
35600-
return ts.getObjectFlags(source) & 4096 && !(isUnhyphenatedJsxName(sourceProp.escapedName) || targetMemberType);
35618+
function isIgnoredJsxProperty(source, sourceProp) {
35619+
return ts.getObjectFlags(source) & 4096 && !isUnhyphenatedJsxName(sourceProp.escapedName);
3560135620
}
3560235621
function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer) {
3560335622
var errorInfo;
@@ -36546,6 +36565,43 @@ var ts;
3654636565
}
3654736566
return result || properties;
3654836567
}
36568+
function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors) {
36569+
var targetIsOptional = strictNullChecks && !!(ts.getCheckFlags(targetProp) & 48);
36570+
var source = getTypeOfSourceProperty(sourceProp);
36571+
if (ts.getCheckFlags(targetProp) & 65536 && !getSymbolLinks(targetProp).type) {
36572+
var links = getSymbolLinks(targetProp);
36573+
ts.Debug.assertDefined(links.deferralParent);
36574+
ts.Debug.assertDefined(links.deferralConstituents);
36575+
var unionParent = !!(links.deferralParent.flags & 1048576);
36576+
var result_6 = unionParent ? 0 : -1;
36577+
var targetTypes = links.deferralConstituents;
36578+
for (var _i = 0, targetTypes_3 = targetTypes; _i < targetTypes_3.length; _i++) {
36579+
var targetType = targetTypes_3[_i];
36580+
var related = isRelatedTo(source, targetType, false, undefined, !unionParent);
36581+
if (!unionParent) {
36582+
if (!related) {
36583+
return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
36584+
}
36585+
result_6 &= related;
36586+
}
36587+
else {
36588+
if (related) {
36589+
return related;
36590+
}
36591+
}
36592+
}
36593+
if (unionParent && !result_6 && targetIsOptional) {
36594+
result_6 = isRelatedTo(source, undefinedType);
36595+
}
36596+
if (unionParent && !result_6 && reportErrors) {
36597+
return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
36598+
}
36599+
return result_6;
36600+
}
36601+
else {
36602+
return isRelatedTo(source, addOptionality(getTypeOfSymbol(targetProp), targetIsOptional), reportErrors);
36603+
}
36604+
}
3654936605
function propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors) {
3655036606
var sourcePropFlags = ts.getDeclarationModifierFlagsFromSymbol(sourceProp);
3655136607
var targetPropFlags = ts.getDeclarationModifierFlagsFromSymbol(targetProp);
@@ -36583,7 +36639,7 @@ var ts;
3658336639
}
3658436640
return 0;
3658536641
}
36586-
var related = isRelatedTo(getTypeOfSourceProperty(sourceProp), addOptionality(getTypeOfSymbol(targetProp), !!(ts.getCheckFlags(targetProp) & 48)), reportErrors);
36642+
var related = isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors);
3658736643
if (!related) {
3658836644
if (reportErrors) {
3658936645
reportError(ts.Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp));
@@ -36684,9 +36740,6 @@ var ts;
3668436740
if (!(targetProp.flags & 4194304)) {
3668536741
var sourceProp = getPropertyOfType(source, targetProp.escapedName);
3668636742
if (sourceProp && sourceProp !== targetProp) {
36687-
if (isIgnoredJsxProperty(source, sourceProp, getTypeOfSymbol(targetProp))) {
36688-
continue;
36689-
}
3669036743
var related = propertyRelatedTo(source, target, sourceProp, targetProp, getTypeOfSymbol, reportErrors);
3669136744
if (!related) {
3669236745
return 0;
@@ -36805,7 +36858,7 @@ var ts;
3680536858
var result = -1;
3680636859
for (var _i = 0, _a = getPropertiesOfObjectType(source); _i < _a.length; _i++) {
3680736860
var prop = _a[_i];
36808-
if (isIgnoredJsxProperty(source, prop, undefined)) {
36861+
if (isIgnoredJsxProperty(source, prop)) {
3680936862
continue;
3681036863
}
3681136864
if (prop.nameType && prop.nameType.flags & 8192) {
@@ -37494,23 +37547,31 @@ var ts;
3749437547
}
3749537548
function getWidenedTypeWithContext(type, context) {
3749637549
if (ts.getObjectFlags(type) & 393216) {
37550+
if (context === undefined && type.widened) {
37551+
return type.widened;
37552+
}
37553+
var result = void 0;
3749737554
if (type.flags & 98304) {
37498-
return anyType;
37555+
result = anyType;
3749937556
}
37500-
if (isObjectLiteralType(type)) {
37501-
return getWidenedTypeOfObjectLiteral(type, context);
37557+
else if (isObjectLiteralType(type)) {
37558+
result = getWidenedTypeOfObjectLiteral(type, context);
3750237559
}
37503-
if (type.flags & 1048576) {
37560+
else if (type.flags & 1048576) {
3750437561
var unionContext_1 = context || createWideningContext(undefined, undefined, type.types);
3750537562
var widenedTypes = ts.sameMap(type.types, function (t) { return t.flags & 98304 ? t : getWidenedTypeWithContext(t, unionContext_1); });
37506-
return getUnionType(widenedTypes, ts.some(widenedTypes, isEmptyObjectType) ? 2 : 1);
37563+
result = getUnionType(widenedTypes, ts.some(widenedTypes, isEmptyObjectType) ? 2 : 1);
37564+
}
37565+
else if (type.flags & 2097152) {
37566+
result = getIntersectionType(ts.sameMap(type.types, getWidenedType));
3750737567
}
37508-
if (type.flags & 2097152) {
37509-
return getIntersectionType(ts.sameMap(type.types, getWidenedType));
37568+
else if (isArrayType(type) || isTupleType(type)) {
37569+
result = createTypeReference(type.target, ts.sameMap(type.typeArguments, getWidenedType));
3751037570
}
37511-
if (isArrayType(type) || isTupleType(type)) {
37512-
return createTypeReference(type.target, ts.sameMap(type.typeArguments, getWidenedType));
37571+
if (result && context === undefined) {
37572+
type.widened = result;
3751337573
}
37574+
return result || type;
3751437575
}
3751537576
return type;
3751637577
}
@@ -45984,10 +46045,10 @@ var ts;
4598446045
case 249:
4598546046
case 252:
4598646047
case 251:
45987-
var result_6 = 0;
46048+
var result_7 = 0;
4598846049
var target = resolveAlias(getSymbolOfNode(d));
45989-
ts.forEach(target.declarations, function (d) { result_6 |= getDeclarationSpaces(d); });
45990-
return result_6;
46050+
ts.forEach(target.declarations, function (d) { result_7 |= getDeclarationSpaces(d); });
46051+
return result_7;
4599146052
case 238:
4599246053
case 187:
4599346054
case 240:
@@ -73263,13 +73324,13 @@ var ts;
7326373324
}
7326473325
var oldSourceFile = oldProgram && oldProgram.getSourceFile(containingFile);
7326573326
if (oldSourceFile !== file && file.resolvedModules) {
73266-
var result_7 = [];
73327+
var result_8 = [];
7326773328
for (var _i = 0, moduleNames_1 = moduleNames; _i < moduleNames_1.length; _i++) {
7326873329
var moduleName = moduleNames_1[_i];
7326973330
var resolvedModule = file.resolvedModules.get(moduleName);
73270-
result_7.push(resolvedModule);
73331+
result_8.push(resolvedModule);
7327173332
}
73272-
return result_7;
73333+
return result_8;
7327373334
}
7327473335
var unknownModuleNames;
7327573336
var result;

0 commit comments

Comments
 (0)