Skip to content

Commit d63dc75

Browse files
authored
Allow readonly modifier for instance operators (#78151)
1 parent baea40e commit d63dc75

File tree

2 files changed

+1063
-0
lines changed

2 files changed

+1063
-0
lines changed

src/Compilers/CSharp/Portable/Symbols/Source/SourceUserDefinedOperatorSymbolBase.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,11 @@ protected static DeclarationModifiers MakeDeclarationModifiers(MethodKind method
254254
allowedModifiers &= ~DeclarationModifiers.Static;
255255
}
256256

257+
if (containingType.IsStructType() && (isIncrementDecrement || isCompoundAssignment))
258+
{
259+
allowedModifiers |= DeclarationModifiers.ReadOnly;
260+
}
261+
257262
var result = ModifierUtils.MakeAndCheckNonTypeMemberModifiers(
258263
isOrdinaryMethod: false, isForInterfaceMember: inInterface,
259264
syntax.Modifiers, defaultAccess, allowedModifiers, location, diagnostics, modifierErrors: out _, hasExplicitAccessModifier: out _);
@@ -320,6 +325,12 @@ protected static DeclarationModifiers MakeDeclarationModifiers(MethodKind method
320325
diagnostics.Add(ErrorCode.ERR_BadMemberFlag, location, ModifierUtils.ConvertSingleModifierToSyntaxText(DeclarationModifiers.New));
321326
result &= ~DeclarationModifiers.New;
322327
}
328+
329+
if ((result & DeclarationModifiers.ReadOnly) != 0)
330+
{
331+
diagnostics.Add(ErrorCode.ERR_BadMemberFlag, location, ModifierUtils.ConvertSingleModifierToSyntaxText(DeclarationModifiers.ReadOnly));
332+
result &= ~DeclarationModifiers.ReadOnly;
333+
}
323334
}
324335

325336
if (isExplicitInterfaceImplementation)

0 commit comments

Comments
 (0)