/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/CSharp/Portable/Compilation/CSharpDeterministicKeyBuilder.cs
65 строк
2 KB
Jan Jones
Unsafe evolution: require unsafe for some pointer operations (#81240)
24 ноя 2025, 15:49
Не верифицирован
24 ноя 2025, 15:49
dd9ddec
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Linq; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CSharp { internal sealed class CSharpDeterministicKeyBuilder : DeterministicKeyBuilder { internal static readonly CSharpDeterministicKeyBuilder Instance = new(); private CSharpDeterministicKeyBuilder() { } protected override void WriteCompilationOptionsCore(JsonWriter writer, CompilationOptions options) { if (options is not CSharpCompilationOptions csharpOptions) { throw new ArgumentException(null, nameof(options)); } base.WriteCompilationOptionsCore(writer, options); writer.Write("unsafe", csharpOptions.AllowUnsafe); writer.Write("memorySafetyRules", csharpOptions.MemorySafetyRules); writer.Write("topLevelBinderFlags", csharpOptions.TopLevelBinderFlags); writer.WriteKey("usings"); writer.WriteArrayStart(); foreach (var name in csharpOptions.Usings) { writer.Write(name); } writer.WriteArrayEnd(); } protected override void WriteParseOptionsCore(JsonWriter writer, ParseOptions parseOptions) { if (parseOptions is not CSharpParseOptions csharpOptions) { throw new ArgumentException(null, nameof(parseOptions)); } base.WriteParseOptionsCore(writer, parseOptions); writer.Write("languageVersion", csharpOptions.LanguageVersion); writer.Write("specifiedLanguageVersion", csharpOptions.SpecifiedLanguageVersion); writer.WriteKey("preprocessorSymbols"); writer.WriteArrayStart(); // Even though tools like the command line parser don't explicitly order the symbols // here the order doesn't actually impact determinism. foreach (var symbol in csharpOptions.PreprocessorSymbols.OrderBy(StringComparer.Ordinal)) { writer.Write(symbol); } writer.WriteArrayEnd(); } } }