File: methodimplattribute.cs

package info (click to toggle)
mono 6.8.0.105%2Bdfsg-3.3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,284,512 kB
  • sloc: cs: 11,172,132; xml: 2,850,069; ansic: 671,653; cpp: 122,091; perl: 59,366; javascript: 30,841; asm: 22,168; makefile: 20,093; sh: 15,020; python: 4,827; pascal: 925; sql: 859; sed: 16; php: 1
file content (78 lines) | stat: -rw-r--r-- 3,070 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
namespace System.Runtime.CompilerServices {
    
    using System;
    using System.Reflection;    
    
    // This Enum matchs the miImpl flags defined in corhdr.h. It is used to specify 
    // certain method properties.
    
    [Serializable]
    [Flags]
[System.Runtime.InteropServices.ComVisible(true)]
    public enum MethodImplOptions
    {
        Unmanaged          =   System.Reflection.MethodImplAttributes.Unmanaged,
        ForwardRef         =   System.Reflection.MethodImplAttributes.ForwardRef,
        PreserveSig        =   System.Reflection.MethodImplAttributes.PreserveSig,
        InternalCall       =   System.Reflection.MethodImplAttributes.InternalCall,
        Synchronized       =   System.Reflection.MethodImplAttributes.Synchronized,
        NoInlining         =   System.Reflection.MethodImplAttributes.NoInlining,
        [System.Runtime.InteropServices.ComVisible(false)]
        AggressiveInlining =   System.Reflection.MethodImplAttributes.AggressiveInlining,
        NoOptimization     =   System.Reflection.MethodImplAttributes.NoOptimization,
        // **** If you add something, update internal MethodImplAttribute(MethodImplAttributes methodImplAttributes)! ****
    }

    [Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
    public enum MethodCodeType
    {
        IL              =   System.Reflection.MethodImplAttributes.IL,
        Native          =   System.Reflection.MethodImplAttributes.Native,
        /// <internalonly/>
        OPTIL           =   System.Reflection.MethodImplAttributes.OPTIL,
        Runtime         =   System.Reflection.MethodImplAttributes.Runtime  
    }

    // Custom attribute to specify additional method properties.
[Serializable]
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor, Inherited = false)] 
[System.Runtime.InteropServices.ComVisible(true)]
    sealed public class MethodImplAttribute : Attribute  
    {    
        internal MethodImplOptions  _val;
        public   MethodCodeType     MethodCodeType;

        internal MethodImplAttribute(MethodImplAttributes methodImplAttributes)
        {
            MethodImplOptions all = 
                MethodImplOptions.Unmanaged | MethodImplOptions.ForwardRef | MethodImplOptions.PreserveSig | 
                MethodImplOptions.InternalCall | MethodImplOptions.Synchronized |
                MethodImplOptions.NoInlining | MethodImplOptions.AggressiveInlining |
                MethodImplOptions.NoOptimization;
            _val = ((MethodImplOptions)methodImplAttributes) & all;
        }
        
        public MethodImplAttribute(MethodImplOptions methodImplOptions)
        {
            _val = methodImplOptions;
        }
        
        public MethodImplAttribute(short value)
        {
            _val = (MethodImplOptions)value;
        }
        
        public MethodImplAttribute()
        {
        }
        
        public MethodImplOptions Value { get {return _val;} }   
    }

}