@@ -6524,6 +6524,7 @@ namespace ts {
65246524 let targetStack: Type[];
65256525 let depth = 0;
65266526 let inferiority = 0;
6527+ const visited: Map<boolean> = {};
65276528 inferFromTypes(source, target);
65286529
65296530 function isInProcess(source: Type, target: Type) {
@@ -6653,6 +6654,12 @@ namespace ts {
66536654 return;
66546655 }
66556656
6657+ const key = source.id + "," + target.id;
6658+ if (hasProperty(visited, key)) {
6659+ return;
6660+ }
6661+ visited[key] = true;
6662+
66566663 if (depth === 0) {
66576664 sourceStack = [];
66586665 targetStack = [];
@@ -12051,6 +12058,9 @@ namespace ts {
1205112058 if (((node.flags & NodeFlags.AccessibilityModifier) !== (otherAccessor.flags & NodeFlags.AccessibilityModifier))) {
1205212059 error(node.name, Diagnostics.Getter_and_setter_accessors_do_not_agree_in_visibility);
1205312060 }
12061+ if (((node.flags & NodeFlags.Abstract) !== (otherAccessor.flags & NodeFlags.Abstract))) {
12062+ error(node.name, Diagnostics.Accessors_must_both_be_abstract_or_non_abstract);
12063+ }
1205412064
1205512065 const currentAccessorType = getAnnotatedAccessorType(node);
1205612066 const otherAccessorType = getAnnotatedAccessorType(otherAccessor);
@@ -12196,7 +12206,7 @@ namespace ts {
1219612206 forEach(overloads, o => {
1219712207 const deviation = getEffectiveDeclarationFlags(o, flagsToCheck) ^ canonicalFlags;
1219812208 if (deviation & NodeFlags.Export) {
12199- error(o.name, Diagnostics.Overload_signatures_must_all_be_exported_or_not_exported );
12209+ error(o.name, Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported );
1220012210 }
1220112211 else if (deviation & NodeFlags.Ambient) {
1220212212 error(o.name, Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient);
@@ -12205,7 +12215,7 @@ namespace ts {
1220512215 error(o.name || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected);
1220612216 }
1220712217 else if (deviation & NodeFlags.Abstract) {
12208- error(o.name, Diagnostics.Overload_signatures_must_all_be_abstract_or_not_abstract );
12218+ error(o.name, Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract );
1220912219 }
1221012220 });
1221112221 }
@@ -12250,7 +12260,7 @@ namespace ts {
1225012260 seen = c === node;
1225112261 }
1225212262 });
12253- // We may be here because of some extra junk between overloads that could not be parsed into a valid node.
12263+ // We may be here because of some extra nodes between overloads that could not be parsed into a valid node.
1225412264 // In this case the subsequent node is not really consecutive (.pos !== node.end), and we must ignore it here.
1225512265 if (subsequentNode && subsequentNode.pos === node.end) {
1225612266 if (subsequentNode.kind === node.kind) {
@@ -16498,8 +16508,11 @@ namespace ts {
1649816508 return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "abstract");
1649916509 }
1650016510 if (node.kind !== SyntaxKind.ClassDeclaration) {
16501- if (node.kind !== SyntaxKind.MethodDeclaration) {
16502- return grammarErrorOnNode(modifier, Diagnostics.abstract_modifier_can_only_appear_on_a_class_or_method_declaration);
16511+ if (node.kind !== SyntaxKind.MethodDeclaration &&
16512+ node.kind !== SyntaxKind.PropertyDeclaration &&
16513+ node.kind !== SyntaxKind.GetAccessor &&
16514+ node.kind !== SyntaxKind.SetAccessor) {
16515+ return grammarErrorOnNode(modifier, Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration);
1650316516 }
1650416517 if (!(node.parent.kind === SyntaxKind.ClassDeclaration && node.parent.flags & NodeFlags.Abstract)) {
1650516518 return grammarErrorOnNode(modifier, Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class);
@@ -16993,7 +17006,7 @@ namespace ts {
1699317006 else if (isInAmbientContext(accessor)) {
1699417007 return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_be_declared_in_an_ambient_context);
1699517008 }
16996- else if (accessor.body === undefined) {
17009+ else if (accessor.body === undefined && !(accessor.flags & NodeFlags.Abstract) ) {
1699717010 return grammarErrorAtPos(getSourceFileOfNode(accessor), accessor.end - 1, ";".length, Diagnostics._0_expected, "{");
1699817011 }
1699917012 else if (accessor.typeParameters) {
0 commit comments