1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 
5 using global::System;
6 using global::System.Reflection;
7 using global::System.Collections.Generic;
8 
9 using global::Internal.Runtime.Augments;
10 
11 using global::Internal.Reflection.Core;
12 using global::Internal.Reflection.Core.Execution;
13 using global::Internal.Reflection.Execution.MethodInvokers;
14 
15 using global::System.Runtime.CompilerServices;
16 using global::System.Runtime.InteropServices;
17 
18 using global::Internal.Runtime;
19 
20 using Debug = System.Diagnostics.Debug;
21 
22 namespace Internal.Reflection.Execution
23 {
24     internal sealed partial class ExecutionEnvironmentImplementation : ExecutionEnvironment
25     {
26         private struct DynamicInvokeMapEntry
27         {
28             public const uint IsImportMethodFlag = 0x40000000;
29             public const uint InstantiationDetailIndexMask = 0x3FFFFFFF;
30         }
31 
32         private struct VirtualInvokeTableEntry
33         {
34             public const int GenericVirtualMethod = 1;
35             public const int FlagsMask = 1;
36         }
37 
38         private static class FieldAccessFlags
39         {
40             public const int RemoteStaticFieldRVA = unchecked((int)0x80000000);
41         }
42 
43         /// <summary>
44         /// This structure describes one static field in an external module. It is represented
45         /// by an indirection cell pointer and an offset within the cell - the final address
46         /// of the static field is essentially *IndirectionCell + Offset.
47         /// </summary>
48         [StructLayout(LayoutKind.Sequential)]
49         private struct RemoteStaticFieldDescriptor
50         {
51             public unsafe IntPtr* IndirectionCell;
52             public int Offset;
53         }
54     }
55 }
56