diff --git a/src/Compilers/CSharp/Portable/Lowering/AsyncRewriter/AwaitExpressionSpiller.cs b/src/Compilers/CSharp/Portable/Lowering/AsyncRewriter/AwaitExpressionSpiller.cs index a2a68c64b3307ddcca4c07838345478bb7c264b3..66b63983c7945683f708405f4cfb8f7ab9074c7a 100644 --- a/src/Compilers/CSharp/Portable/Lowering/AsyncRewriter/AwaitExpressionSpiller.cs +++ b/src/Compilers/CSharp/Portable/Lowering/AsyncRewriter/AwaitExpressionSpiller.cs @@ -384,7 +384,7 @@ private BoundStatement UpdateStatement(BoundSpillSequenceBuilder builder, BoundS // - `RefKind.In` (specified with no modifiers and matched an 'In' parameter) // // It is allowed to spill ordinary `In` arguments by value if reference-preserving spilling is not possible. - // The "strct" ones do not permit implicit copying, so the same situation should result in an error. + // The "strict" ones do not permit implicit copying, so the same situation should result in an error. if (refKind != RefKind.None && refKind != RefKind.In) { Debug.Assert(call.Method.RefKind != RefKind.None); @@ -401,7 +401,7 @@ private BoundStatement UpdateStatement(BoundSpillSequenceBuilder builder, BoundS // - `RefKind.In` (specified with no modifiers and matched an 'In' parameter) // // It is allowed to spill ordinary `In` arguments by value if reference-preserving spilling is not possible. - // The "strct" ones do not permit implicit copying, so the same situation should result in an error. + // The "strict" ones do not permit implicit copying, so the same situation should result in an error. if (refKind != RefKind.None && refKind != RefKind.RefReadOnly) { Debug.Assert(conditional.IsByRef); diff --git a/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Call.cs b/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Call.cs index 3ea2d24b8934a62b9918a14c03bd899d4ca222d3..eeed1530d9d4a8a3198bec9198aebcec45600a57 100644 --- a/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Call.cs +++ b/src/Compilers/CSharp/Portable/Lowering/LocalRewriter/LocalRewriter_Call.cs @@ -526,7 +526,7 @@ private static ImmutableArray GetEffectiveArgumentRefKinds(ImmutableArr } } - refKindsBuilder[i] = argRefKind == RefKind.None? paramRefKind: RefKindExtensions.StrictIn; + refKindsBuilder[i] = argRefKind == RefKind.None ? paramRefKind : RefKindExtensions.StrictIn; } } diff --git a/src/Compilers/Core/Portable/Symbols/RefKind.cs b/src/Compilers/Core/Portable/Symbols/RefKind.cs index c2121eb2998298c0a13e92a09b704d3946cd4dbe..8deb463cff7088bdb7891600ed1c00b75905c6ef 100644 --- a/src/Compilers/Core/Portable/Symbols/RefKind.cs +++ b/src/Compilers/Core/Portable/Symbols/RefKind.cs @@ -34,6 +34,10 @@ public enum RefKind : byte /// Indicates a "ref readonly" return type. /// RefReadOnly = 3, + + // NOTE: There is an additional value of this enum type - RefKindExtensions.StrictIn == RefKind.In + 1 + // It is used internally during lowering. + // Consider that when adding values or changing this enum in some other way. } internal static class RefKindExtensions @@ -55,7 +59,7 @@ internal static string ToArgumentDisplayString(this RefKind kind) { case RefKind.Out: return "out"; case RefKind.Ref: return "ref"; - case RefKind.RefReadOnly: return "in"; + case RefKind.In: return "in"; default: throw ExceptionUtilities.UnexpectedValue(kind); } } @@ -75,6 +79,6 @@ internal static string ToParameterPrefix(this RefKind kind) // used internally to track `In` arguments that were specified with `In` modifier // as opposed to those that were specified with no modifiers and matched `In` parameter // There is at least one kind of anlysis that cares about this distinction - async stack spilling - internal const RefKind StrictIn = (RefKind)(RefKind.In + 1); + internal const RefKind StrictIn = RefKind.In + 1; } }