From fc6947b081a7e2e649f12ed9f6e86942733a3970 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Wed, 20 Jan 2016 16:51:48 -0800 Subject: [PATCH] Make get only accessor compatible with writable property in type relationships --- src/compiler/checker.ts | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0f880cd17f9..465411e0c68 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10412,19 +10412,13 @@ namespace ts { } function isReadonlySymbol(symbol: Symbol): boolean { - if (symbol.flags & SymbolFlags.Property) { - return symbol === undefinedSymbol || (getDeclarationFlagsFromSymbol(symbol) & NodeFlags.Readonly) !== 0; - } - if (symbol.flags & SymbolFlags.Accessor) { - return !(symbol.flags & SymbolFlags.SetAccessor); - } - return false; + return symbol.flags & SymbolFlags.Property && (getDeclarationFlagsFromSymbol(symbol) & NodeFlags.Readonly) !== 0; } function isConstantSymbol(symbol: Symbol): boolean { - if (symbol.flags & SymbolFlags.Variable) { - return (getDeclarationFlagsFromSymbol(symbol) & NodeFlags.Const) !== 0; - } + return symbol === undefinedSymbol || + symbol.flags & SymbolFlags.Variable && (getDeclarationFlagsFromSymbol(symbol) & NodeFlags.Const) !== 0 || + symbol.flags & SymbolFlags.Accessor && !(symbol.flags & SymbolFlags.SetAccessor); } function checkReferenceExpression(expr: Expression, invalidReferenceMessage: DiagnosticMessage, constantVariableMessage: DiagnosticMessage): boolean { @@ -15723,7 +15717,6 @@ namespace ts { // Initialize special types globalArrayType = getGlobalType("Array", /*arity*/ 1); - globalReadonlyArrayType = getGlobalType("ReadonlyArray", /*arity*/ 1); globalObjectType = getGlobalType("Object"); globalFunctionType = getGlobalType("Function"); globalStringType = getGlobalType("String"); @@ -15768,8 +15761,10 @@ namespace ts { } anyArrayType = createArrayType(anyType); - anyReadonlyArrayType = globalReadonlyArrayType === emptyGenericType ? anyArrayType : - createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]); + + const symbol = getGlobalSymbol("ReadonlyArray", SymbolFlags.Type, /*diagnostic*/ undefined); + globalReadonlyArrayType = symbol && getTypeOfGlobalSymbol(symbol, /*arity*/ 1); + anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType; } function createInstantiatedPromiseLikeType(): ObjectType {