Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>2018-05-13 00:26:26 +0300
committerGitHub <noreply@github.com>2018-05-13 00:26:26 +0300
commita16b75649dae806edec55088f70cace3b4c6afd0 (patch)
treeab77cdfa4361ab104f717aee6a9b79e662d7846f /src/ILCompiler.Compiler
parent4b8f729561121ce50ba79e3ae613f12ab3f40e17 (diff)
parent12361f7a61260cfd2998da65b0aafe686b87b82a (diff)
Merge pull request #5799 from MichalStrehovsky/appContext
Diffstat (limited to 'src/ILCompiler.Compiler')
-rw-r--r--src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.Sorting.cs22
-rw-r--r--src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.cs83
-rw-r--r--src/ILCompiler.Compiler/src/ILCompiler.Compiler.csproj2
3 files changed, 107 insertions, 0 deletions
diff --git a/src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.Sorting.cs b/src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.Sorting.cs
new file mode 100644
index 000000000..67a2b612c
--- /dev/null
+++ b/src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.Sorting.cs
@@ -0,0 +1,22 @@
+// 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 Internal.TypeSystem;
+
+using Debug = System.Diagnostics.Debug;
+
+namespace Internal.IL.Stubs.StartupCode
+{
+ partial class AppContextInitializerMethod
+ {
+ protected override int ClassCode => 15749517;
+
+ protected override int CompareToImpl(MethodDesc other, TypeSystemComparer comparer)
+ {
+ // Should be a singleton
+ Debug.Assert(this == other);
+ return 0;
+ }
+ }
+}
diff --git a/src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.cs b/src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.cs
new file mode 100644
index 000000000..2c2d3a51a
--- /dev/null
+++ b/src/ILCompiler.Compiler/src/IL/Stubs/StartupCode/AppContextInitializerMethod.cs
@@ -0,0 +1,83 @@
+// 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.Generic;
+
+using Internal.TypeSystem;
+
+namespace Internal.IL.Stubs.StartupCode
+{
+ public sealed partial class AppContextInitializerMethod : ILStubMethod
+ {
+ private TypeDesc _owningType;
+ private MethodSignature _signature;
+ private IReadOnlyCollection<string> _switches;
+
+ public AppContextInitializerMethod(TypeDesc owningType, IEnumerable<string> switches)
+ {
+ _owningType = owningType;
+ _switches = new List<string>(switches);
+ }
+
+ public override TypeSystemContext Context
+ {
+ get
+ {
+ return _owningType.Context;
+ }
+ }
+
+ public override TypeDesc OwningType
+ {
+ get
+ {
+ return _owningType;
+ }
+ }
+
+ public override string Name
+ {
+ get
+ {
+ return "SetAppContextSwitches";
+ }
+ }
+
+ public override MethodIL EmitIL()
+ {
+ ILEmitter emitter = new ILEmitter();
+ ILCodeStream codeStream = emitter.NewCodeStream();
+
+ MetadataType appContextType = Context.SystemModule.GetKnownType("System", "AppContext");
+ MethodDesc setSwitchMethod = appContextType.GetKnownMethod("SetSwitch", null);
+ ILToken setSwitchToken = emitter.NewToken(setSwitchMethod);
+
+ foreach (string switchName in _switches)
+ {
+ codeStream.Emit(ILOpcode.ldstr, emitter.NewToken(switchName));
+ codeStream.EmitLdc(1);
+ codeStream.Emit(ILOpcode.call, setSwitchToken);
+ }
+
+ codeStream.Emit(ILOpcode.ret);
+
+ return emitter.Link(this);
+ }
+
+ public override MethodSignature Signature
+ {
+ get
+ {
+ if (_signature == null)
+ {
+ _signature = new MethodSignature(MethodSignatureFlags.Static, 0,
+ Context.GetWellKnownType(WellKnownType.Void),
+ TypeDesc.EmptyTypes);
+ }
+
+ return _signature;
+ }
+ }
+ }
+}
diff --git a/src/ILCompiler.Compiler/src/ILCompiler.Compiler.csproj b/src/ILCompiler.Compiler/src/ILCompiler.Compiler.csproj
index 9744fa933..b86472d82 100644
--- a/src/ILCompiler.Compiler/src/ILCompiler.Compiler.csproj
+++ b/src/ILCompiler.Compiler/src/ILCompiler.Compiler.csproj
@@ -352,6 +352,8 @@
<Compile Include="Compiler\WindowsNodeMangler.cs" />
<Compile Include="IL\ILImporter.Scanner.cs" />
<Compile Include="IL\Stubs\PInvokeILProvider.cs" />
+ <Compile Include="IL\Stubs\StartupCode\AppContextInitializerMethod.cs" />
+ <Compile Include="IL\Stubs\StartupCode\AppContextInitializerMethod.Sorting.cs" />
<Compile Include="IL\Stubs\StartupCode\StartupCodeMainMethod.cs" />
<Compile Include="IL\Stubs\StartupCode\StartupCodeMainMethod.Sorting.cs" />
<Compile Include="IL\Stubs\StartupCode\NativeLibraryStartupMethod.cs" />