From 01c96868697163cbb4f6f7135a882d14eeaa31e8 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 18 Jan 2016 17:35:10 -0800 Subject: [PATCH] Allow 'readonly' only on property and index signature declarations --- src/compiler/checker.ts | 9 +++------ src/compiler/diagnosticMessages.json | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 9fcf951ce83..937065cd559 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10378,7 +10378,7 @@ namespace ts { } function isReadonlySymbol(symbol: Symbol): boolean { - if (symbol.flags & (SymbolFlags.Property | SymbolFlags.Method)) { + if (symbol.flags & SymbolFlags.Property) { return symbol === undefinedSymbol || (getDeclarationFlagsFromSymbol(symbol) & NodeFlags.Readonly) !== 0; } if (symbol.flags & SymbolFlags.Accessor) { @@ -15786,11 +15786,8 @@ namespace ts { if (flags & NodeFlags.Readonly) { return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "readonly"); } - else if (flags & NodeFlags.Async) { - return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "readonly", "async"); - } - else if (node.parent.kind === SyntaxKind.ModuleBlock || node.parent.kind === SyntaxKind.SourceFile) { - return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_module_element, "readonly"); + else if (node.kind !== SyntaxKind.PropertyDeclaration && node.kind !== SyntaxKind.PropertySignature && node.kind !== SyntaxKind.IndexSignature) { + return grammarErrorOnNode(modifier, Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); } flags |= NodeFlags.Readonly; lastReadonly = modifier; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 6599a35f494..fc4aae4ed30 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -67,6 +67,10 @@ "category": "Error", "code": 1023 }, + "'readonly' modifier can only appear on a property declaration or index signature.": { + "category": "Error", + "code": 1024 + }, "Accessibility modifier already seen.": { "category": "Error", "code": 1028