diff options
author | Maryam Ariyan <maryam.ariyan@microsoft.com> | 2018-06-07 12:40:40 -0700 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2018-06-07 12:40:40 -0700 |
commit | 56fe6435387089b6b219c52096cafd3c277478c6 (patch) | |
tree | 6293b4288cfc5e35b0f1f9813832c50a12a83de2 | |
parent | a51328304a95a1a5e0eb037883176dff248dc687 (diff) | |
download | coreclr-56fe6435387089b6b219c52096cafd3c277478c6.tar.gz coreclr-56fe6435387089b6b219c52096cafd3c277478c6.tar.bz2 coreclr-56fe6435387089b6b219c52096cafd3c277478c6.zip |
Moves CurrentSystemTimeZone, ICastable, RegistryView and RegistryValueKind to shared (#18337)
* Moves CurrentSystemTimeZone to shared completely
* Moves ICastable to shared
* Moves RegistryView and RegistryValueKind to shared
* Moves ICastableHelpers to its own file
14 files changed, 149 insertions, 115 deletions
diff --git a/src/System.Private.CoreLib/System.Private.CoreLib.csproj b/src/System.Private.CoreLib/System.Private.CoreLib.csproj index a6536c03f2..dd29c084af 100644 --- a/src/System.Private.CoreLib/System.Private.CoreLib.csproj +++ b/src/System.Private.CoreLib/System.Private.CoreLib.csproj @@ -118,10 +118,10 @@ <Import Project="$(MSBuildThisFileDirectory)..\..\clr.defines.targets" /> <!-- Sources --> <ItemGroup> + <Compile Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ICastableHelpers.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\RuntimeHelpers.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\TypeDependencyAttribute.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\jithelpers.cs" /> - <Compile Condition="'$(FeatureICastable)' == 'true'" Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ICastable.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\ConditionalWeakTable.cs" /> <Compile Include="$(BclSourcesRoot)\System\Runtime\CompilerServices\AsyncMethodBuilder.cs" /> </ItemGroup> @@ -310,7 +310,6 @@ <Compile Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.CoreClrOverrides.cs" /> <Compile Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.Defaults.cs" /> <Compile Include="$(BclSourcesRoot)\System\AppContext\AppContextDefaultValues.Defaults.Central.cs" /> - <Compile Include="$(BclSourcesRoot)\System\CurrentSystemTimeZone.Cache.cs" /> <Compile Include="$(BclSourcesRoot)\System\Object.cs" /> <Compile Include="$(BclSourcesRoot)\System\Array.cs" /> <Compile Include="$(BclSourcesRoot)\System\ThrowHelper.cs" /> @@ -541,8 +540,6 @@ <Compile Include="$(BclSourcesRoot)\Microsoft\Win32\Win32Native.cs" /> <Compile Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\Registry.cs" /> <Compile Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryKey.cs" /> - <Compile Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryValueKind.cs" /> - <Compile Condition="'$(FeatureWin32Registry)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\RegistryView.cs" /> <Compile Condition="'$(FeatureClassicCominterop)' == 'true'" Include="$(BclSourcesRoot)\Microsoft\Win32\OAVariantLib.cs" /> </ItemGroup> <ItemGroup> diff --git a/src/System.Private.CoreLib/shared/Interop/Windows/Kernel32/Interop.RegistryValues.cs b/src/System.Private.CoreLib/shared/Interop/Windows/Kernel32/Interop.RegistryValues.cs new file mode 100644 index 0000000000..8a4b84dccd --- /dev/null +++ b/src/System.Private.CoreLib/shared/Interop/Windows/Kernel32/Interop.RegistryValues.cs @@ -0,0 +1,21 @@ +// 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. + +internal partial class Interop +{ + internal partial class Kernel32 + { + internal partial class RegistryValues + { + internal const int REG_NONE = 0; // No value type + internal const int REG_SZ = 1; // Unicode nul terminated string + internal const int REG_EXPAND_SZ = 2; // Unicode nul terminated string + // (with environment variable references) + internal const int REG_BINARY = 3; // Free form binary + internal const int REG_DWORD = 4; // 32-bit number + internal const int REG_MULTI_SZ = 7; // Multiple Unicode strings + internal const int REG_QWORD = 11; // 64-bit number + } + } +} diff --git a/src/System.Private.CoreLib/shared/Interop/Windows/Kernel32/Interop.RegistryView.cs b/src/System.Private.CoreLib/shared/Interop/Windows/Kernel32/Interop.RegistryView.cs new file mode 100644 index 0000000000..2e67868928 --- /dev/null +++ b/src/System.Private.CoreLib/shared/Interop/Windows/Kernel32/Interop.RegistryView.cs @@ -0,0 +1,15 @@ +// 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. + +internal partial class Interop +{ + internal partial class Kernel32 + { + internal partial class RegistryView + { + internal const int KEY_WOW64_64KEY = 0x0100; + internal const int KEY_WOW64_32KEY = 0x0200; + } + } +} diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs new file mode 100644 index 0000000000..1d8d561a79 --- /dev/null +++ b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryValueKind.cs @@ -0,0 +1,24 @@ +// 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. + + +namespace Microsoft.Win32 +{ +#if REGISTRY_ASSEMBLY + public +#else + internal +#endif + enum RegistryValueKind + { + String = Interop.Kernel32.RegistryValues.REG_SZ, + ExpandString = Interop.Kernel32.RegistryValues.REG_EXPAND_SZ, + Binary = Interop.Kernel32.RegistryValues.REG_BINARY, + DWord = Interop.Kernel32.RegistryValues.REG_DWORD, + MultiString = Interop.Kernel32.RegistryValues.REG_MULTI_SZ, + QWord = Interop.Kernel32.RegistryValues.REG_QWORD, + Unknown = 0, // REG_NONE is defined as zero but BCL + None = unchecked((int)0xFFFFFFFF), // mistakenly overrode this value. + } // Now instead of using Interop.Kernel32.RegistryValues.REG_NONE we use "-1". +} diff --git a/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs new file mode 100644 index 0000000000..3cc4a78787 --- /dev/null +++ b/src/System.Private.CoreLib/shared/Microsoft/Win32/RegistryView.cs @@ -0,0 +1,20 @@ +// 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; + +namespace Microsoft.Win32 +{ +#if REGISTRY_ASSEMBLY + public +#else + internal +#endif + enum RegistryView + { + Default = 0, // 0x0000 operate on the default registry view + Registry64 = Interop.Kernel32.RegistryView.KEY_WOW64_64KEY, // 0x0100 operate on the 64-bit registry view + Registry32 = Interop.Kernel32.RegistryView.KEY_WOW64_32KEY, // 0x0200 operate on the 32-bit registry view + }; +} diff --git a/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems b/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems index 26dfbd82d5..98f9d1ebef 100644 --- a/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems +++ b/src/System.Private.CoreLib/shared/System.Private.CoreLib.Shared.projitems @@ -413,6 +413,7 @@ <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\FixedBufferAttribute.cs" /> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\FormattableStringFactory.cs" /> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\IAsyncStateMachine.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\ICastable.cs" /> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\IndexerNameAttribute.cs" /> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\INotifyCompletion.cs" /> <Compile Include="$(MSBuildThisFileDirectory)System\Runtime\CompilerServices\InternalsVisibleToAttribute.cs" /> @@ -724,18 +725,20 @@ <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.OutputDebugString.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.ReadFile_SafeHandle_IntPtr.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.ReadFile_SafeHandle_NativeOverlapped.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.RegistryValues.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.RegistryView.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.SECURITY_ATTRIBUTES.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.SecurityOptions.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.SetEndOfFile.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.SetEnvironmentVariable.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.SetThreadErrorMode.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.SetFilePointerEx.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.TimeZone.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.WideCharToMultiByte.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.WriteFile_SafeHandle_IntPtr.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.WriteFile_SafeHandle_NativeOverlapped.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Normaliz\Interop.Idna.cs" Condition="'$(EnableDummyGlobalizationImplementation)' != 'true'" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Normaliz\Interop.Normalization.cs" Condition="'$(EnableDummyGlobalizationImplementation)' != 'true'" /> - <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Kernel32\Interop.TimeZone.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\Ole32\Interop.CoCreateGuid.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\OleAut32\Interop.SysAllocStringLen.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Interop\Windows\OleAut32\Interop.SysFreeString.cs" /> @@ -743,6 +746,8 @@ <Compile Include="$(MSBuildThisFileDirectory)Internal\IO\File.Windows.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\SafeHandles\SafeFileHandle.Windows.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\SafeHandles\SafeFindHandle.Windows.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\RegistryView.cs" /> + <Compile Include="$(MSBuildThisFileDirectory)Microsoft\Win32\RegistryValueKind.cs" /> <Compile Include="$(MSBuildThisFileDirectory)System\Globalization\CalendarData.Windows.cs" Condition="'$(EnableDummyGlobalizationImplementation)' != 'true'" /> <Compile Include="$(MSBuildThisFileDirectory)System\Globalization\CompareInfo.Windows.cs" Condition="'$(EnableDummyGlobalizationImplementation)' != 'true'" /> <Compile Include="$(MSBuildThisFileDirectory)System\Globalization\CultureData.Windows.cs" Condition="'$(EnableDummyGlobalizationImplementation)' != 'true'" /> diff --git a/src/System.Private.CoreLib/shared/System/CurrentSystemTimeZone.cs b/src/System.Private.CoreLib/shared/System/CurrentSystemTimeZone.cs index bab6a92bf5..8327bd2f4a 100644 --- a/src/System.Private.CoreLib/shared/System/CurrentSystemTimeZone.cs +++ b/src/System.Private.CoreLib/shared/System/CurrentSystemTimeZone.cs @@ -17,12 +17,8 @@ ** ============================================================*/ -using System; -using System.Text; using System.Collections; using System.Globalization; -using System.Runtime.CompilerServices; -using System.Runtime.Versioning; namespace System { @@ -193,5 +189,29 @@ namespace System return new TimeSpan(TimeZone.CalculateUtcOffset(time, GetDaylightChanges(time.Year)).Ticks + m_ticksOffset); } } + + private DaylightTime GetCachedDaylightChanges(int year) + { + Object objYear = (Object)year; + + if (!m_CachedDaylightChanges.Contains(objYear)) + { + DaylightTime currentDaylightChanges = CreateDaylightChanges(year); + lock (m_CachedDaylightChanges) + { + if (!m_CachedDaylightChanges.Contains(objYear)) + { + m_CachedDaylightChanges.Add(objYear, currentDaylightChanges); + } + } + } + + return (DaylightTime)m_CachedDaylightChanges[objYear]; + } + + // The per-year information is cached in in this instance value. As a result it can + // be cleaned up by CultureInfo.ClearCachedData, which will clear the instance of this object + private readonly Hashtable m_CachedDaylightChanges = new Hashtable(); + } // class CurrentSystemTimeZone } diff --git a/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/ICastable.cs b/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ICastable.cs index e2b76ed973..37e77358ad 100644 --- a/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/ICastable.cs +++ b/src/System.Private.CoreLib/shared/System/Runtime/CompilerServices/ICastable.cs @@ -2,18 +2,15 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. - - -// -// Support for dynamic interface casting. Specifically implementing this interface on a type will allow the -// type to support interfaces (for the purposes of casting and interface dispatch) that do not appear in its -// interface map. -// - using System; namespace System.Runtime.CompilerServices { + /// <summary> + /// Support for dynamic interface casting. Specifically implementing this interface on a type will allow the + /// type to support interfaces (for the purposes of casting and interface dispatch) that do not appear in its + /// interface map. + /// </summary> public interface ICastable { // This is called if casting this object to the given interface type would otherwise fail. Casting @@ -61,22 +58,4 @@ namespace System.Runtime.CompilerServices // IsInstanceOfInterface. RuntimeTypeHandle GetImplType(RuntimeTypeHandle interfaceType); } - - /// <summary> - /// Helpers that allows VM to call into ICastable methods without having to deal with RuntimeTypeHandle. - /// RuntimeTypeHandle is a struct and is always passed in stack in x86, which our VM call helpers don't - /// particularly like. - /// </summary> - internal class ICastableHelpers - { - internal static bool IsInstanceOfInterface(ICastable castable, RuntimeType type, out Exception castError) - { - return castable.IsInstanceOfInterface(new RuntimeTypeHandle(type), out castError); - } - - internal static RuntimeType GetImplType(ICastable castable, RuntimeType interfaceType) - { - return castable.GetImplType(new RuntimeTypeHandle(interfaceType)).GetRuntimeType(); - } - } } diff --git a/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryKey.cs b/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryKey.cs index 1df495e447..f861e5f9b8 100644 --- a/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryKey.cs +++ b/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryKey.cs @@ -1121,7 +1121,12 @@ namespace Microsoft.Win32 } [Flags] - internal enum RegistryValueOptions +#if REGISTRY_ASSEMBLY + public +#else + internal +#endif + enum RegistryValueOptions { None = 0, DoNotExpandEnvironmentNames = 1 diff --git a/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryValueKind.cs b/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryValueKind.cs deleted file mode 100644 index 6e2a4f3b6e..0000000000 --- a/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryValueKind.cs +++ /dev/null @@ -1,20 +0,0 @@ -// 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. - - -namespace Microsoft.Win32 -{ - internal enum RegistryValueKind - { - String = Win32Native.REG_SZ, - ExpandString = Win32Native.REG_EXPAND_SZ, - Binary = Win32Native.REG_BINARY, - DWord = Win32Native.REG_DWORD, - MultiString = Win32Native.REG_MULTI_SZ, - QWord = Win32Native.REG_QWORD, - Unknown = 0, // REG_NONE is defined as zero but BCL - None = unchecked((int)0xFFFFFFFF), // mistakingly overrode this value. - } // Now instead of using Win32Native.REG_NONE we use "-1" and play games internally. -} - diff --git a/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryView.cs b/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryView.cs deleted file mode 100644 index e4158656a8..0000000000 --- a/src/System.Private.CoreLib/src/Microsoft/Win32/RegistryView.cs +++ /dev/null @@ -1,22 +0,0 @@ -// 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. - -// -// -// -// Implements Microsoft.Win32.RegistryView -// -// ====================================================================================== - -using System; - -namespace Microsoft.Win32 -{ - internal enum RegistryView - { - Default = 0, // 0x0000 operate on the default registry view - Registry64 = Win32Native.KEY_WOW64_64KEY, // 0x0100 operate on the 64-bit registry view - Registry32 = Win32Native.KEY_WOW64_32KEY, // 0x0200 operate on the 32-bit registry view - }; -} diff --git a/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs b/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs index 3545328f8a..9a2678fabd 100644 --- a/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs +++ b/src/System.Private.CoreLib/src/Microsoft/Win32/Win32Native.cs @@ -130,8 +130,6 @@ namespace Microsoft.Win32 KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE)); - internal const int KEY_WOW64_64KEY = 0x0100; // - internal const int KEY_WOW64_32KEY = 0x0200; // internal const int REG_OPTION_NON_VOLATILE = 0x0000; // (default) keys are persisted beyond reboot/unload internal const int REG_OPTION_VOLATILE = 0x0001; // All keys created by the function are volatile internal const int REG_OPTION_CREATE_LINK = 0x0002; // They key is a symbolic link diff --git a/src/System.Private.CoreLib/src/System/CurrentSystemTimeZone.Cache.cs b/src/System.Private.CoreLib/src/System/CurrentSystemTimeZone.Cache.cs deleted file mode 100644 index 744c697124..0000000000 --- a/src/System.Private.CoreLib/src/System/CurrentSystemTimeZone.Cache.cs +++ /dev/null @@ -1,35 +0,0 @@ -// 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.Collections; -using System.Globalization; - -namespace System -{ - internal partial class CurrentSystemTimeZone - { - private DaylightTime GetCachedDaylightChanges(int year) - { - Object objYear = (Object)year; - - if (!m_CachedDaylightChanges.Contains(objYear)) - { - DaylightTime currentDaylightChanges = CreateDaylightChanges(year); - lock (m_CachedDaylightChanges) - { - if (!m_CachedDaylightChanges.Contains(objYear)) - { - m_CachedDaylightChanges.Add(objYear, currentDaylightChanges); - } - } - } - - return (DaylightTime)m_CachedDaylightChanges[objYear]; - } - - // The per-year information is cached in in this instance value. As a result it can - // be cleaned up by CultureInfo.ClearCachedData, which will clear the instance of this object - private readonly Hashtable m_CachedDaylightChanges = new Hashtable(); - } -} diff --git a/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/ICastableHelpers.cs b/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/ICastableHelpers.cs new file mode 100644 index 0000000000..9343915f3e --- /dev/null +++ b/src/System.Private.CoreLib/src/System/Runtime/CompilerServices/ICastableHelpers.cs @@ -0,0 +1,27 @@ +// 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; + +namespace System.Runtime.CompilerServices +{ + + /// <summary> + /// Helpers that allows VM to call into ICastable methods without having to deal with RuntimeTypeHandle. + /// RuntimeTypeHandle is a struct and is always passed in stack in x86, which our VM call helpers don't + /// particularly like. + /// </summary> + internal class ICastableHelpers + { + internal static bool IsInstanceOfInterface(ICastable castable, RuntimeType type, out Exception castError) + { + return castable.IsInstanceOfInterface(new RuntimeTypeHandle(type), out castError); + } + + internal static RuntimeType GetImplType(ICastable castable, RuntimeType interfaceType) + { + return castable.GetImplType(new RuntimeTypeHandle(interfaceType)).GetRuntimeType(); + } + } +}
\ No newline at end of file |