Skip to content

Commit f05ecec

Browse files
committed
Refactoring a bit more
1 parent 58d6156 commit f05ecec

File tree

2 files changed

+25
-28
lines changed

2 files changed

+25
-28
lines changed

src/compiler/checker.ts

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2195,7 +2195,7 @@ namespace ts {
21952195
writePunctuation(writer, SyntaxKind.DotToken);
21962196
appendSymbolNameOnly(type.symbol, writer);
21972197
}
2198-
else if (getObjectFlags(type) & (ObjectFlags.Class | ObjectFlags.Interface) || type.flags & (TypeFlags.Enum | TypeFlags.TypeParameter)) {
2198+
else if (getObjectFlags(type) & ObjectFlags.ClassOrInterface || type.flags & (TypeFlags.Enum | TypeFlags.TypeParameter)) {
21992199
// The specified symbol flags need to be reinterpreted as type flags
22002200
buildSymbolDisplay(type.symbol, writer, enclosingDeclaration, SymbolFlags.Type, SymbolFormatFlags.None, nextFlags);
22012201
}
@@ -3705,7 +3705,7 @@ namespace ts {
37053705
if (baseType === unknownType) {
37063706
return;
37073707
}
3708-
if (!(getObjectFlags(getTargetType(baseType)) & (ObjectFlags.Class | ObjectFlags.Interface))) {
3708+
if (!(getObjectFlags(getTargetType(baseType)) & ObjectFlags.ClassOrInterface)) {
37093709
error(baseTypeNode.expression, Diagnostics.Base_constructor_return_type_0_is_not_a_class_or_interface_type, typeToString(baseType));
37103710
return;
37113711
}
@@ -3741,7 +3741,7 @@ namespace ts {
37413741
for (const node of getInterfaceBaseTypeNodes(<InterfaceDeclaration>declaration)) {
37423742
const baseType = getTypeFromTypeNode(node);
37433743
if (baseType !== unknownType) {
3744-
if (getObjectFlags(getTargetType(baseType)) & (ObjectFlags.Class | ObjectFlags.Interface)) {
3744+
if (getObjectFlags(getTargetType(baseType)) & ObjectFlags.ClassOrInterface) {
37453745
if (type !== baseType && !hasBaseType(<InterfaceType>baseType, type)) {
37463746
if (type.resolvedBaseTypes === emptyArray) {
37473747
type.resolvedBaseTypes = [<ObjectType>baseType];
@@ -4373,7 +4373,7 @@ namespace ts {
43734373
if ((<ObjectType>type).objectFlags & ObjectFlags.Reference) {
43744374
resolveTypeReferenceMembers(<TypeReference>type);
43754375
}
4376-
else if ((<ObjectType>type).objectFlags & (ObjectFlags.Class | ObjectFlags.Interface)) {
4376+
else if ((<ObjectType>type).objectFlags & ObjectFlags.ClassOrInterface) {
43774377
resolveClassOrInterfaceMembers(<InterfaceType>type);
43784378
}
43794379
else if ((<ObjectType>type).objectFlags & ObjectFlags.Anonymous) {
@@ -8575,10 +8575,6 @@ namespace ts {
85758575
return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType]));
85768576
}
85778577

8578-
function isEvolvingArrayType(type: Type) {
8579-
return !!(getObjectFlags(type) & ObjectFlags.EvolvingArray);
8580-
}
8581-
85828578
function createFinalArrayType(elementType: Type) {
85838579
return elementType.flags & TypeFlags.Never ?
85848580
autoArrayType :
@@ -8593,18 +8589,18 @@ namespace ts {
85938589
}
85948590

85958591
function finalizeEvolvingArrayType(type: Type): Type {
8596-
return isEvolvingArrayType(type) ? getFinalArrayType(<EvolvingArrayType>type) : type;
8592+
return getObjectFlags(type) & ObjectFlags.EvolvingArray ? getFinalArrayType(<EvolvingArrayType>type) : type;
85978593
}
85988594

85998595
function getElementTypeOfEvolvingArrayType(type: Type) {
8600-
return isEvolvingArrayType(type) ? (<EvolvingArrayType>type).elementType : neverType;
8596+
return getObjectFlags(type) & ObjectFlags.EvolvingArray ? (<EvolvingArrayType>type).elementType : neverType;
86018597
}
86028598

86038599
function isEvolvingArrayTypeList(types: Type[]) {
86048600
let hasEvolvingArrayType = false;
86058601
for (const t of types) {
86068602
if (!(t.flags & TypeFlags.Never)) {
8607-
if (!isEvolvingArrayType(t)) {
8603+
if (!(getObjectFlags(t) & ObjectFlags.EvolvingArray)) {
86088604
return false;
86098605
}
86108606
hasEvolvingArrayType = true;
@@ -8655,7 +8651,7 @@ namespace ts {
86558651
// we give type 'any[]' to 'x' instead of using the type determined by control flow analysis such that operations
86568652
// on empty arrays are possible without implicit any errors and new element types can be inferred without
86578653
// type mismatch errors.
8658-
const resultType = isEvolvingArrayType(evolvedType) && isEvolvingArrayOperationTarget(reference) ? anyArrayType : finalizeEvolvingArrayType(evolvedType);
8654+
const resultType = getObjectFlags(evolvedType) & ObjectFlags.EvolvingArray && isEvolvingArrayOperationTarget(reference) ? anyArrayType : finalizeEvolvingArrayType(evolvedType);
86598655
if (reference.parent.kind === SyntaxKind.NonNullExpression && getTypeWithFacts(resultType, TypeFacts.NEUndefinedOrNull).flags & TypeFlags.Never) {
86608656
return declaredType;
86618657
}
@@ -8768,7 +8764,7 @@ namespace ts {
87688764
if (isMatchingReference(reference, getReferenceCandidate(expr))) {
87698765
const flowType = getTypeAtFlowNode(flow.antecedent);
87708766
const type = getTypeFromFlowType(flowType);
8771-
if (isEvolvingArrayType(type)) {
8767+
if (getObjectFlags(type) & ObjectFlags.EvolvingArray) {
87728768
let evolvedType = <EvolvingArrayType>type;
87738769
if (node.kind === SyntaxKind.CallExpression) {
87748770
for (const arg of (<CallExpression>node).arguments) {
@@ -11249,7 +11245,7 @@ namespace ts {
1124911245
}
1125011246

1125111247
// TODO: why is the first part of this check here?
11252-
if (!(getObjectFlags(getTargetType(type)) & (ObjectFlags.Class | ObjectFlags.Interface) && hasBaseType(<InterfaceType>type, enclosingClass))) {
11248+
if (!(getObjectFlags(getTargetType(type)) & ObjectFlags.ClassOrInterface && hasBaseType(<InterfaceType>type, enclosingClass))) {
1125311249
error(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1, symbolToString(prop), typeToString(enclosingClass));
1125411250
return false;
1125511251
}
@@ -17174,8 +17170,8 @@ namespace ts {
1717417170
if (produceDiagnostics) {
1717517171
const t = getTypeFromTypeNode(typeRefNode);
1717617172
if (t !== unknownType) {
17177-
const declaredType = (getObjectFlags(t) & ObjectFlags.Reference) ? (<TypeReference>t).target : t;
17178-
if (getObjectFlags(declaredType) & (ObjectFlags.Class | ObjectFlags.Interface)) {
17173+
const declaredType = getObjectFlags(t) & ObjectFlags.Reference ? (<TypeReference>t).target : t;
17174+
if (getObjectFlags(declaredType) & ObjectFlags.ClassOrInterface) {
1717917175
checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(t, type.thisType), node.name || node, Diagnostics.Class_0_incorrectly_implements_interface_1);
1718017176
}
1718117177
else {

src/compiler/types.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2655,18 +2655,6 @@ namespace ts {
26552655

26562656
export type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression;
26572657

2658-
export const enum ObjectFlags {
2659-
Class = 1 << 0, // Class
2660-
Interface = 1 << 1, // Interface
2661-
Reference = 1 << 2, // Generic type reference
2662-
Tuple = 1 << 3, // Synthesized generic tuple type
2663-
Anonymous = 1 << 4, // Anonymous
2664-
Instantiated = 1 << 5, // Instantiated anonymous type
2665-
ObjectLiteral = 1 << 6, // Originates in an object literal
2666-
EvolvingArray = 1 << 7, // Evolving array type
2667-
ObjectLiteralPatternWithComputedProperties = 1 << 8, // Object literal pattern with computed properties
2668-
}
2669-
26702658
// Properties common to all types
26712659
export interface Type {
26722660
flags: TypeFlags; // Flags
@@ -2701,6 +2689,19 @@ namespace ts {
27012689
baseType: EnumType & UnionType; // Base enum type
27022690
}
27032691

2692+
export const enum ObjectFlags {
2693+
Class = 1 << 0, // Class
2694+
Interface = 1 << 1, // Interface
2695+
Reference = 1 << 2, // Generic type reference
2696+
Tuple = 1 << 3, // Synthesized generic tuple type
2697+
Anonymous = 1 << 4, // Anonymous
2698+
Instantiated = 1 << 5, // Instantiated anonymous type
2699+
ObjectLiteral = 1 << 6, // Originates in an object literal
2700+
EvolvingArray = 1 << 7, // Evolving array type
2701+
ObjectLiteralPatternWithComputedProperties = 1 << 8, // Object literal pattern with computed properties
2702+
ClassOrInterface = Class | Interface
2703+
}
2704+
27042705
// Object types (TypeFlags.ObjectType)
27052706
export interface ObjectType extends Type {
27062707
objectFlags: ObjectFlags;

0 commit comments

Comments
 (0)