@@ -1915,29 +1915,31 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1915
1915
// unions such that they are given low type IDs and occur first in the sorted list of union constituents.
1916
1916
// We can then just examine the first constituent(s) of a union to check for their presence.
1917
1917
1918
+ var seenIntrinsicNames = new Set<string>();
1919
+
1918
1920
var anyType = createIntrinsicType(TypeFlags.Any, "any");
1919
- var autoType = createIntrinsicType(TypeFlags.Any, "any", ObjectFlags.NonInferrableType);
1920
- var wildcardType = createIntrinsicType(TypeFlags.Any, "any");
1921
- var blockedStringType = createIntrinsicType(TypeFlags.Any, "any");
1921
+ var autoType = createIntrinsicType(TypeFlags.Any, "any", ObjectFlags.NonInferrableType, "auto" );
1922
+ var wildcardType = createIntrinsicType(TypeFlags.Any, "any", /*objectFlags*/ undefined, "wildcard" );
1923
+ var blockedStringType = createIntrinsicType(TypeFlags.Any, "any", /*objectFlags*/ undefined, "blocked string" );
1922
1924
var errorType = createIntrinsicType(TypeFlags.Any, "error");
1923
1925
var unresolvedType = createIntrinsicType(TypeFlags.Any, "unresolved");
1924
- var nonInferrableAnyType = createIntrinsicType(TypeFlags.Any, "any", ObjectFlags.ContainsWideningType);
1926
+ var nonInferrableAnyType = createIntrinsicType(TypeFlags.Any, "any", ObjectFlags.ContainsWideningType, "non-inferrable" );
1925
1927
var intrinsicMarkerType = createIntrinsicType(TypeFlags.Any, "intrinsic");
1926
1928
var unknownType = createIntrinsicType(TypeFlags.Unknown, "unknown");
1927
- var nonNullUnknownType = createIntrinsicType(TypeFlags.Unknown, "unknown");
1929
+ var nonNullUnknownType = createIntrinsicType(TypeFlags.Unknown, "unknown", /*objectFlags*/ undefined, "non-null" );
1928
1930
var undefinedType = createIntrinsicType(TypeFlags.Undefined, "undefined");
1929
- var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(TypeFlags.Undefined, "undefined", ObjectFlags.ContainsWideningType);
1930
- var missingType = createIntrinsicType(TypeFlags.Undefined, "undefined");
1931
+ var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(TypeFlags.Undefined, "undefined", ObjectFlags.ContainsWideningType, "widening" );
1932
+ var missingType = createIntrinsicType(TypeFlags.Undefined, "undefined", /*objectFlags*/ undefined, "missing" );
1931
1933
var undefinedOrMissingType = exactOptionalPropertyTypes ? missingType : undefinedType;
1932
- var optionalType = createIntrinsicType(TypeFlags.Undefined, "undefined");
1934
+ var optionalType = createIntrinsicType(TypeFlags.Undefined, "undefined", /*objectFlags*/ undefined, "optional" );
1933
1935
var nullType = createIntrinsicType(TypeFlags.Null, "null");
1934
- var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(TypeFlags.Null, "null", ObjectFlags.ContainsWideningType);
1936
+ var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(TypeFlags.Null, "null", ObjectFlags.ContainsWideningType, "widening" );
1935
1937
var stringType = createIntrinsicType(TypeFlags.String, "string");
1936
1938
var numberType = createIntrinsicType(TypeFlags.Number, "number");
1937
1939
var bigintType = createIntrinsicType(TypeFlags.BigInt, "bigint");
1938
- var falseType = createIntrinsicType(TypeFlags.BooleanLiteral, "false") as FreshableIntrinsicType;
1940
+ var falseType = createIntrinsicType(TypeFlags.BooleanLiteral, "false", /*objectFlags*/ undefined, "fresh" ) as FreshableIntrinsicType;
1939
1941
var regularFalseType = createIntrinsicType(TypeFlags.BooleanLiteral, "false") as FreshableIntrinsicType;
1940
- var trueType = createIntrinsicType(TypeFlags.BooleanLiteral, "true") as FreshableIntrinsicType;
1942
+ var trueType = createIntrinsicType(TypeFlags.BooleanLiteral, "true", /*objectFlags*/ undefined, "fresh" ) as FreshableIntrinsicType;
1941
1943
var regularTrueType = createIntrinsicType(TypeFlags.BooleanLiteral, "true") as FreshableIntrinsicType;
1942
1944
trueType.regularType = regularTrueType;
1943
1945
trueType.freshType = trueType;
@@ -1951,9 +1953,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1951
1953
var esSymbolType = createIntrinsicType(TypeFlags.ESSymbol, "symbol");
1952
1954
var voidType = createIntrinsicType(TypeFlags.Void, "void");
1953
1955
var neverType = createIntrinsicType(TypeFlags.Never, "never");
1954
- var silentNeverType = createIntrinsicType(TypeFlags.Never, "never", ObjectFlags.NonInferrableType);
1955
- var implicitNeverType = createIntrinsicType(TypeFlags.Never, "never");
1956
- var unreachableNeverType = createIntrinsicType(TypeFlags.Never, "never");
1956
+ var silentNeverType = createIntrinsicType(TypeFlags.Never, "never", ObjectFlags.NonInferrableType, "silent" );
1957
+ var implicitNeverType = createIntrinsicType(TypeFlags.Never, "never", /*objectFlags*/ undefined, "implicit" );
1958
+ var unreachableNeverType = createIntrinsicType(TypeFlags.Never, "never", /*objectFlags*/ undefined, "unreachable" );
1957
1959
var nonPrimitiveType = createIntrinsicType(TypeFlags.NonPrimitive, "object");
1958
1960
var stringOrNumberType = getUnionType([stringType, numberType]);
1959
1961
var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]);
@@ -1964,7 +1966,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1964
1966
1965
1967
var restrictiveMapper: TypeMapper = makeFunctionTypeMapper(t => t.flags & TypeFlags.TypeParameter ? getRestrictiveTypeParameter(t as TypeParameter) : t, () => "(restrictive mapper)");
1966
1968
var permissiveMapper: TypeMapper = makeFunctionTypeMapper(t => t.flags & TypeFlags.TypeParameter ? wildcardType : t, () => "(permissive mapper)");
1967
- var uniqueLiteralType = createIntrinsicType(TypeFlags.Never, "never"); // `uniqueLiteralType` is a special `never` flagged by union reduction to behave as a literal
1969
+ var uniqueLiteralType = createIntrinsicType(TypeFlags.Never, "never", /*objectFlags*/ undefined, "unique literal" ); // `uniqueLiteralType` is a special `never` flagged by union reduction to behave as a literal
1968
1970
var uniqueLiteralMapper: TypeMapper = makeFunctionTypeMapper(t => t.flags & TypeFlags.TypeParameter ? uniqueLiteralType : t, () => "(unique literal mapper)"); // replace all type parameters with the unique literal type (disregarding constraints)
1969
1971
var outofbandVarianceMarkerHandler: ((onlyUnreliable: boolean) => void) | undefined;
1970
1972
var reportUnreliableMapper = makeFunctionTypeMapper(t => {
@@ -5680,13 +5682,23 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5680
5682
return new Type(checker, flags);
5681
5683
}
5682
5684
5683
- function createIntrinsicType(kind: TypeFlags, intrinsicName: string, objectFlags = ObjectFlags.None): IntrinsicType {
5685
+ function createIntrinsicType(kind: TypeFlags, intrinsicName: string, objectFlags = ObjectFlags.None, debugIntrinsicName?: string): IntrinsicType {
5686
+ checkIntrinsicName(intrinsicName, debugIntrinsicName);
5684
5687
const type = createType(kind) as IntrinsicType;
5685
5688
type.intrinsicName = intrinsicName;
5689
+ type.debugIntrinsicName = debugIntrinsicName;
5686
5690
type.objectFlags = objectFlags | ObjectFlags.CouldContainTypeVariablesComputed | ObjectFlags.IsGenericTypeComputed | ObjectFlags.IsUnknownLikeUnionComputed | ObjectFlags.IsNeverIntersectionComputed;
5687
5691
return type;
5688
5692
}
5689
5693
5694
+ function checkIntrinsicName(name: string, debug: string | undefined) {
5695
+ const key = `${name},${debug ?? ""}`;
5696
+ if (seenIntrinsicNames.has(key)) {
5697
+ Debug.fail(`Duplicate intrinsic type name ${name}${debug ? ` (${debug})` : ""}; you may need to pass a name to createIntrinsicType.`);
5698
+ }
5699
+ seenIntrinsicNames.add(key);
5700
+ }
5701
+
5690
5702
function createObjectType(objectFlags: ObjectFlags, symbol?: Symbol): ObjectType {
5691
5703
const type = createTypeWithSymbol(TypeFlags.Object, symbol!) as ObjectType;
5692
5704
type.objectFlags = objectFlags;
@@ -15660,7 +15672,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
15660
15672
const id = getAliasId(symbol, typeArguments);
15661
15673
let errorType = errorTypes.get(id);
15662
15674
if (!errorType) {
15663
- errorType = createIntrinsicType(TypeFlags.Any, "error");
15675
+ errorType = createIntrinsicType(TypeFlags.Any, "error", /*objectFlags*/ undefined, `alias ${id}` );
15664
15676
errorType.aliasSymbol = symbol;
15665
15677
errorType.aliasTypeArguments = typeArguments;
15666
15678
errorTypes.set(id, errorType);
0 commit comments