Skip to content

Commit f8c8655

Browse files
committed
Better name for deferred mapped type:ReverseMapped
1 parent 0834732 commit f8c8655

File tree

4 files changed

+34
-30
lines changed

4 files changed

+34
-30
lines changed

src/compiler/checker.ts

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ namespace ts {
339339
const jsObjectLiteralIndexInfo = createIndexInfo(anyType, /*isReadonly*/ false);
340340

341341
const globals = createSymbolTable();
342-
const deferredInferenceCache = createMap<Type | undefined>();
342+
const reverseMappedCache = createMap<Type | undefined>();
343343
let ambientModulesCache: Symbol[] | undefined;
344344
/**
345345
* List of every ambient module with a "*" wildcard.
@@ -2861,7 +2861,7 @@ namespace ts {
28612861
typeElements.push(<ConstructSignatureDeclaration>signatureToSignatureDeclarationHelper(signature, SyntaxKind.ConstructSignature, context));
28622862
}
28632863
if (resolvedType.stringIndexInfo) {
2864-
const indexInfo = resolvedType.objectFlags & ObjectFlags.Deferred ?
2864+
const indexInfo = resolvedType.objectFlags & ObjectFlags.ReverseMapped ?
28652865
createIndexInfo(anyType, resolvedType.stringIndexInfo.isReadonly, resolvedType.stringIndexInfo.declaration) :
28662866
resolvedType.stringIndexInfo;
28672867
typeElements.push(indexInfoToIndexSignatureDeclarationHelper(indexInfo, IndexKind.String, context));
@@ -2876,7 +2876,7 @@ namespace ts {
28762876
}
28772877

28782878
for (const propertySymbol of properties) {
2879-
const propertyType = getCheckFlags(propertySymbol) & CheckFlags.Deferred ? anyType : getTypeOfSymbol(propertySymbol);
2879+
const propertyType = getCheckFlags(propertySymbol) & CheckFlags.ReverseMapped ? anyType : getTypeOfSymbol(propertySymbol);
28802880
const saveEnclosingDeclaration = context.enclosingDeclaration;
28812881
context.enclosingDeclaration = undefined;
28822882
const propertyName = symbolToName(propertySymbol, context, SymbolFlags.Value, /*expectsIdentifier*/ true);
@@ -3685,7 +3685,7 @@ namespace ts {
36853685
writePunctuation(writer, SyntaxKind.SemicolonToken);
36863686
writer.writeLine();
36873687
}
3688-
const stringIndexInfo = resolved.objectFlags & ObjectFlags.Deferred && resolved.stringIndexInfo ?
3688+
const stringIndexInfo = resolved.objectFlags & ObjectFlags.ReverseMapped && resolved.stringIndexInfo ?
36893689
createIndexInfo(anyType, resolved.stringIndexInfo.isReadonly, resolved.stringIndexInfo.declaration) :
36903690
resolved.stringIndexInfo;
36913691
buildIndexSignatureDisplay(stringIndexInfo, writer, IndexKind.String, enclosingDeclaration, globalFlags, symbolStack);
@@ -3699,7 +3699,7 @@ namespace ts {
36993699
writer.reportPrivateInBaseOfClassExpression(symbolName(p));
37003700
}
37013701
}
3702-
const t = getCheckFlags(p) & CheckFlags.Deferred ? anyType : getTypeOfSymbol(p);
3702+
const t = getCheckFlags(p) & CheckFlags.ReverseMapped ? anyType : getTypeOfSymbol(p);
37033703
if (p.flags & (SymbolFlags.Function | SymbolFlags.Method) && !getPropertiesOfObjectType(t).length) {
37043704
const signatures = getSignaturesOfType(t, SignatureKind.Call);
37053705
for (const signature of signatures) {
@@ -4907,8 +4907,8 @@ namespace ts {
49074907
if (getCheckFlags(symbol) & CheckFlags.Instantiated) {
49084908
return getTypeOfInstantiatedSymbol(symbol);
49094909
}
4910-
if (getCheckFlags(symbol) & CheckFlags.Deferred) {
4911-
return inferDeferredMappedType((symbol as DeferredTransientSymbol).propertyType, (symbol as DeferredTransientSymbol).mappedType);
4910+
if (getCheckFlags(symbol) & CheckFlags.ReverseMapped) {
4911+
return getTypeOfReverseMappedSymbol(symbol as ReverseMappedSymbol);
49124912
}
49134913
if (symbol.flags & (SymbolFlags.Variable | SymbolFlags.Property)) {
49144914
return getTypeOfVariableOrParameterOrProperty(symbol);
@@ -6120,15 +6120,15 @@ namespace ts {
61206120
}
61216121
}
61226122

6123-
function resolveDeferredMappedTypeMembers(type: DeferredMappedType) {
6123+
function resolveReverseMappedTypeMembers(type: ReverseMappedType) {
61246124
const indexInfo = getIndexInfoOfType(type.source, IndexKind.String);
61256125
const readonlyMask = type.mappedType.declaration.readonlyToken ? false : true;
61266126
const optionalMask = type.mappedType.declaration.questionToken ? 0 : SymbolFlags.Optional;
6127-
const stringIndexInfo = indexInfo && createIndexInfo(inferDeferredMappedType(indexInfo.type, type.mappedType), readonlyMask && indexInfo.isReadonly);
6127+
const stringIndexInfo = indexInfo && createIndexInfo(inferReverseMappedType(indexInfo.type, type.mappedType), readonlyMask && indexInfo.isReadonly);
61286128
const members = createSymbolTable();
61296129
for (const prop of getPropertiesOfType(type.source)) {
6130-
const checkFlags = CheckFlags.Deferred | (readonlyMask && isReadonlySymbol(prop) ? CheckFlags.Readonly : 0);
6131-
const inferredProp = createSymbol(SymbolFlags.Property | prop.flags & optionalMask, prop.escapedName, checkFlags) as DeferredTransientSymbol;
6130+
const checkFlags = CheckFlags.ReverseMapped | (readonlyMask && isReadonlySymbol(prop) ? CheckFlags.Readonly : 0);
6131+
const inferredProp = createSymbol(SymbolFlags.Property | prop.flags & optionalMask, prop.escapedName, checkFlags) as ReverseMappedSymbol;
61326132
inferredProp.declarations = prop.declarations;
61336133
inferredProp.propertyType = getTypeOfSymbol(prop);
61346134
inferredProp.mappedType = type.mappedType;
@@ -6276,8 +6276,8 @@ namespace ts {
62766276
else if ((<ObjectType>type).objectFlags & ObjectFlags.ClassOrInterface) {
62776277
resolveClassOrInterfaceMembers(<InterfaceType>type);
62786278
}
6279-
else if ((<DeferredMappedType>type).objectFlags & ObjectFlags.Deferred) {
6280-
resolveDeferredMappedTypeMembers(type as DeferredMappedType);
6279+
else if ((<ReverseMappedType>type).objectFlags & ObjectFlags.ReverseMapped) {
6280+
resolveReverseMappedTypeMembers(type as ReverseMappedType);
62816281
}
62826282
else if ((<ObjectType>type).objectFlags & ObjectFlags.Anonymous) {
62836283
resolveAnonymousTypeMembers(<AnonymousType>type);
@@ -11307,16 +11307,16 @@ namespace ts {
1130711307
*/
1130811308
function inferTypeForHomomorphicMappedType(source: Type, target: MappedType): Type {
1130911309
const key = source.id + "," + target.id;
11310-
if (deferredInferenceCache.has(key)) {
11311-
return deferredInferenceCache.get(key);
11310+
if (reverseMappedCache.has(key)) {
11311+
return reverseMappedCache.get(key);
1131211312
}
11313-
deferredInferenceCache.set(key, undefined);
11314-
const type = createDeferredMappedType(source, target);
11315-
deferredInferenceCache.set(key, type);
11313+
reverseMappedCache.set(key, undefined);
11314+
const type = createReverseMappedType(source, target);
11315+
reverseMappedCache.set(key, type);
1131611316
return type;
1131711317
}
1131811318

11319-
function createDeferredMappedType(source: Type, target: MappedType) {
11319+
function createReverseMappedType(source: Type, target: MappedType) {
1132011320
const properties = getPropertiesOfType(source);
1132111321
if (properties.length === 0 && !getIndexInfoOfType(source, IndexKind.String)) {
1132211322
return undefined;
@@ -11328,13 +11328,17 @@ namespace ts {
1132811328
return undefined;
1132911329
}
1133011330
}
11331-
const deferred = createObjectType(ObjectFlags.Deferred | ObjectFlags.Anonymous, /*symbol*/ undefined) as DeferredMappedType;
11332-
deferred.source = source;
11333-
deferred.mappedType = target;
11334-
return deferred;
11331+
const reversed = createObjectType(ObjectFlags.ReverseMapped | ObjectFlags.Anonymous, /*symbol*/ undefined) as ReverseMappedType;
11332+
reversed.source = source;
11333+
reversed.mappedType = target;
11334+
return reversed;
1133511335
}
1133611336

11337-
function inferDeferredMappedType(sourceType: Type, target: MappedType): Type {
11337+
function getTypeOfReverseMappedSymbol(symbol: ReverseMappedSymbol) {
11338+
return inferReverseMappedType(symbol.propertyType, symbol.mappedType);
11339+
}
11340+
11341+
function inferReverseMappedType(sourceType: Type, target: MappedType): Type {
1133811342
const typeParameter = <TypeParameter>getIndexedAccessType((<IndexType>getConstraintTypeFromMappedType(target)).type, getTypeParameterFromMappedType(target));
1133911343
const templateType = getTemplateTypeFromMappedType(target);
1134011344
const inference = createInferenceInfo(typeParameter);

src/compiler/types.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3251,7 +3251,7 @@ namespace ts {
32513251
ContainsPrivate = 1 << 8, // Synthetic property with private constituent(s)
32523252
ContainsStatic = 1 << 9, // Synthetic property with static constituent(s)
32533253
Late = 1 << 10, // Late-bound symbol for a computed property with a dynamic name
3254-
Deferred = 1 << 11, // Deferred inferred property of homomorphic mapped type.
3254+
ReverseMapped = 1 << 11, // property of reverse-inferred homomorphic mapped type.
32553255
Synthetic = SyntheticProperty | SyntheticMethod
32563256
}
32573257

@@ -3262,7 +3262,7 @@ namespace ts {
32623262
}
32633263

32643264
/* @internal */
3265-
export interface DeferredTransientSymbol extends TransientSymbol {
3265+
export interface ReverseMappedSymbol extends TransientSymbol {
32663266
propertyType: Type;
32673267
mappedType: MappedType;
32683268
}
@@ -3501,7 +3501,7 @@ namespace ts {
35013501
EvolvingArray = 1 << 8, // Evolving array type
35023502
ObjectLiteralPatternWithComputedProperties = 1 << 9, // Object literal pattern with computed properties
35033503
ContainsSpread = 1 << 10, // Object literal contains spread operation
3504-
Deferred = 1 << 11, // Object contains a deferred inferred property
3504+
ReverseMapped = 1 << 11, // Object contains a property from a reverse-mapped type
35053505
ClassOrInterface = Class | Interface
35063506
}
35073507

@@ -3610,7 +3610,7 @@ namespace ts {
36103610
}
36113611

36123612
/* @internal */
3613-
export interface DeferredMappedType extends ObjectType {
3613+
export interface ReverseMappedType extends ObjectType {
36143614
source: Type;
36153615
mappedType: MappedType;
36163616
}

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2066,7 +2066,7 @@ declare namespace ts {
20662066
EvolvingArray = 256,
20672067
ObjectLiteralPatternWithComputedProperties = 512,
20682068
ContainsSpread = 1024,
2069-
Deferred = 2048,
2069+
ReverseMapped = 2048,
20702070
ClassOrInterface = 3,
20712071
}
20722072
interface ObjectType extends Type {

tests/baselines/reference/api/typescript.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2066,7 +2066,7 @@ declare namespace ts {
20662066
EvolvingArray = 256,
20672067
ObjectLiteralPatternWithComputedProperties = 512,
20682068
ContainsSpread = 1024,
2069-
Deferred = 2048,
2069+
ReverseMapped = 2048,
20702070
ClassOrInterface = 3,
20712071
}
20722072
interface ObjectType extends Type {

0 commit comments

Comments
 (0)