Skip to content

Commit 3e745e6

Browse files
committed
Simplify flags propagation logic
1 parent b579566 commit 3e745e6

File tree

1 file changed

+7
-10
lines changed

1 file changed

+7
-10
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18354,7 +18354,6 @@ namespace ts {
1835418354
let propertiesTable: SymbolTable;
1835518355
let propertiesArray: Symbol[] = [];
1835618356
let spread: Type = emptyObjectType;
18357-
let propagatedFlags: ObjectFlags = 0;
1835818357

1835918358
const contextualType = getApparentTypeOfContextualType(node);
1836018359
const contextualTypeHasPattern = contextualType && contextualType.pattern &&
@@ -18364,7 +18363,7 @@ namespace ts {
1836418363
const isInJavascript = isInJSFile(node) && !isInJsonFile(node);
1836518364
const enumTag = getJSDocEnumTag(node);
1836618365
const isJSObjectLiteral = !contextualType && isInJavascript && !enumTag;
18367-
let objectFlags: ObjectFlags = 0;
18366+
let objectFlags: ObjectFlags = freshObjectLiteralFlag;
1836818367
let patternWithComputedProperties = false;
1836918368
let hasComputedStringProperty = false;
1837018369
let hasComputedNumberProperty = false;
@@ -18392,7 +18391,7 @@ namespace ts {
1839218391
checkTypeAssignableTo(type, getTypeFromTypeNode(enumTag.typeExpression), memberDecl);
1839318392
}
1839418393
}
18395-
objectFlags |= getObjectFlags(type);
18394+
objectFlags |= getObjectFlags(type) & ObjectFlags.PropagatingFlags;
1839618395
const nameType = computedNameType && isTypeUsableAsPropertyName(computedNameType) ? computedNameType : undefined;
1839718396
const prop = nameType ?
1839818397
createSymbol(SymbolFlags.Property | member.flags, getPropertyNameFromType(nameType), checkFlags | CheckFlags.Late) :
@@ -18440,19 +18439,18 @@ namespace ts {
1844018439
checkExternalEmitHelpers(memberDecl, ExternalEmitHelpers.Assign);
1844118440
}
1844218441
if (propertiesArray.length > 0) {
18443-
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags | ObjectFlags.FreshLiteral, inConstContext);
18442+
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, objectFlags, inConstContext);
1844418443
propertiesArray = [];
1844518444
propertiesTable = createSymbolTable();
1844618445
hasComputedStringProperty = false;
1844718446
hasComputedNumberProperty = false;
18448-
objectFlags = 0;
1844918447
}
1845018448
const type = checkExpression(memberDecl.expression);
1845118449
if (!isValidSpreadType(type)) {
1845218450
error(memberDecl, Diagnostics.Spread_types_may_only_be_created_from_object_types);
1845318451
return errorType;
1845418452
}
18455-
spread = getSpreadType(spread, type, node.symbol, propagatedFlags | ObjectFlags.FreshLiteral, inConstContext);
18453+
spread = getSpreadType(spread, type, node.symbol, objectFlags, inConstContext);
1845618454
offset = i + 1;
1845718455
continue;
1845818456
}
@@ -18502,7 +18500,7 @@ namespace ts {
1850218500

1850318501
if (spread !== emptyObjectType) {
1850418502
if (propertiesArray.length > 0) {
18505-
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, propagatedFlags | ObjectFlags.FreshLiteral, inConstContext);
18503+
spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, objectFlags, inConstContext);
1850618504
}
1850718505
return spread;
1850818506
}
@@ -18513,7 +18511,7 @@ namespace ts {
1851318511
const stringIndexInfo = hasComputedStringProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, IndexKind.String) : undefined;
1851418512
const numberIndexInfo = hasComputedNumberProperty ? getObjectLiteralIndexInfo(node, offset, propertiesArray, IndexKind.Number) : undefined;
1851518513
const result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo);
18516-
result.objectFlags |= ObjectFlags.ObjectLiteral | ObjectFlags.ContainsObjectLiteral | freshObjectLiteralFlag | objectFlags & ObjectFlags.PropagatingFlags;
18514+
result.objectFlags |= objectFlags | ObjectFlags.ObjectLiteral | ObjectFlags.ContainsObjectLiteral;
1851718515
if (isJSObjectLiteral) {
1851818516
result.objectFlags |= ObjectFlags.JSLiteral;
1851918517
}
@@ -18523,7 +18521,6 @@ namespace ts {
1852318521
if (inDestructuringPattern) {
1852418522
result.pattern = node;
1852518523
}
18526-
propagatedFlags |= result.objectFlags & ObjectFlags.PropagatingFlags;
1852718524
return result;
1852818525
}
1852918526
}
@@ -18710,7 +18707,7 @@ namespace ts {
1871018707
function createJsxAttributesType() {
1871118708
objectFlags |= freshObjectLiteralFlag;
1871218709
const result = createAnonymousType(attributes.symbol, attributesTable, emptyArray, emptyArray, /*stringIndexInfo*/ undefined, /*numberIndexInfo*/ undefined);
18713-
result.objectFlags |= ObjectFlags.ObjectLiteral | ObjectFlags.ContainsObjectLiteral | objectFlags;
18710+
result.objectFlags |= objectFlags | ObjectFlags.ObjectLiteral | ObjectFlags.ContainsObjectLiteral;
1871418711
return result;
1871518712
}
1871618713
}

0 commit comments

Comments
 (0)