csharpfftfsharpintegrationinterpolationlinear-algebramathdifferentiationmatrixnumericsrandomregressionstatisticsmathnet
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1005 lines
30 KiB
1005 lines
30 KiB
// (c) Microsoft Corporation 2005-2009.
|
|
|
|
|
|
module Microsoft.FSharp.Compiler.AbstractIL.Internal.BinaryConstants
|
|
|
|
open Internal.Utilities
|
|
open Microsoft.FSharp.Compiler.AbstractIL
|
|
open Microsoft.FSharp.Compiler.AbstractIL.IL
|
|
open Microsoft.FSharp.Compiler.AbstractIL.Internal
|
|
open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
|
|
|
|
type table = Table of int
|
|
let tag_of_table (Table n) = n
|
|
|
|
let tab_Module = Table 0
|
|
let tab_TypeRef = Table 1
|
|
let tab_TypeDef = Table 2
|
|
let tab_FieldPtr = Table 3
|
|
let tab_Field = Table 4
|
|
let tab_MethodPtr = Table 5
|
|
let tab_Method = Table 6
|
|
let tab_ParamPtr = Table 7
|
|
let tab_Param = Table 8
|
|
let tab_InterfaceImpl = Table 9
|
|
let tab_MemberRef = Table 10
|
|
let tab_Constant = Table 11
|
|
let tab_CustomAttribute = Table 12
|
|
let tab_FieldMarshal = Table 13
|
|
let tab_Permission = Table 14
|
|
let tab_ClassLayout = Table 15
|
|
let tab_FieldLayout = Table 16
|
|
let tab_StandAloneSig = Table 17
|
|
let tab_EventMap = Table 18
|
|
let tab_EventPtr = Table 19
|
|
let tab_Event = Table 20
|
|
let tab_PropertyMap = Table 21
|
|
let tab_PropertyPtr = Table 22
|
|
let tab_Property = Table 23
|
|
let tab_MethodSemantics = Table 24
|
|
let tab_MethodImpl = Table 25
|
|
let tab_ModuleRef = Table 26
|
|
let tab_TypeSpec = Table 27
|
|
let tab_ImplMap = Table 28
|
|
let tab_FieldRVA = Table 29
|
|
let tab_ENCLog = Table 30
|
|
let tab_ENCMap = Table 31
|
|
let tab_Assembly = Table 32
|
|
let tab_AssemblyProcessor = Table 33
|
|
let tab_AssemblyOS = Table 34
|
|
let tab_AssemblyRef = Table 35
|
|
let tab_AssemblyRefProcessor = Table 36
|
|
let tab_AssemblyRefOS = Table 37
|
|
let tab_File = Table 38
|
|
let tab_ExportedType = Table 39
|
|
let tab_ManifestResource = Table 40
|
|
let tab_Nested = Table 41
|
|
let tab_GenericParam = Table 42
|
|
let tab_MethodSpec = Table 43
|
|
let tab_GenericParamConstraint = Table 44
|
|
|
|
let tab_UserStrings = Table 0x70 (* Special encoding of embedded UserString tokens - See 1.9 Partition III *)
|
|
|
|
(* Sorted bit-vector as stored by CLR V1: 00fa 0133 0002 0000 *)
|
|
(* But what does this mean? The ECMA spec does not say! *)
|
|
(* Metainfo -schema reports sorting as shown below. *)
|
|
(* But some sorting, e.g. EventMap does not seem to show *)
|
|
|
|
(* Which tables are sorted and by which column *)
|
|
let sorted_table_info =
|
|
[ (tab_InterfaceImpl,0);
|
|
(tab_Constant, 1);
|
|
(tab_CustomAttribute, 0);
|
|
(tab_FieldMarshal, 0);
|
|
(tab_Permission, 1);
|
|
(tab_ClassLayout, 2);
|
|
(tab_FieldLayout, 1);
|
|
(tab_MethodSemantics, 2);
|
|
(tab_MethodImpl, 0);
|
|
(tab_ImplMap, 1);
|
|
(tab_FieldRVA, 1);
|
|
(tab_Nested, 0);
|
|
(tab_GenericParam, 2);
|
|
(tab_GenericParamConstraint, 0); ]
|
|
|
|
type typeDefOrRef_tag = TypeDefOrRefOrSpecTag of int32
|
|
let tdor_TypeDef = TypeDefOrRefOrSpecTag 0x00
|
|
let tdor_TypeRef = TypeDefOrRefOrSpecTag 0x01
|
|
let tdor_TypeSpec = TypeDefOrRefOrSpecTag 0x2
|
|
let mkTypeDefOrRefOrSpecTag x =
|
|
match x with
|
|
| 0x00 -> tdor_TypeDef // nb. avoid reallocation
|
|
| 0x01 -> tdor_TypeRef
|
|
| 0x02 -> tdor_TypeSpec
|
|
| _ -> invalid_arg "mkTypeDefOrRefOrSpecTag"
|
|
|
|
type hasConstant_tag = HasConstantTag of int32
|
|
let hc_FieldDef = HasConstantTag 0x0
|
|
let hc_ParamDef = HasConstantTag 0x1
|
|
let hc_Property = HasConstantTag 0x2
|
|
|
|
let mkHasConstantTag x =
|
|
match x with
|
|
| 0x00l -> hc_FieldDef
|
|
| 0x01l -> hc_ParamDef
|
|
| 0x02l -> hc_Property
|
|
| _ -> invalid_arg "mkHasConstantTag"
|
|
|
|
type hasCustomAttribute_tag = HasCustomAttributeTag of int32
|
|
let hca_MethodDef = HasCustomAttributeTag 0x0
|
|
let hca_FieldDef = HasCustomAttributeTag 0x1
|
|
let hca_TypeRef = HasCustomAttributeTag 0x2
|
|
let hca_TypeDef = HasCustomAttributeTag 0x3
|
|
let hca_ParamDef = HasCustomAttributeTag 0x4
|
|
let hca_InterfaceImpl = HasCustomAttributeTag 0x5
|
|
let hca_MemberRef = HasCustomAttributeTag 0x6
|
|
let hca_Module = HasCustomAttributeTag 0x7
|
|
let hca_Permission = HasCustomAttributeTag 0x8
|
|
let hca_Property = HasCustomAttributeTag 0x9
|
|
let hca_Event = HasCustomAttributeTag 0xa
|
|
let hca_StandAloneSig = HasCustomAttributeTag 0xb
|
|
let hca_ModuleRef = HasCustomAttributeTag 0xc
|
|
let hca_TypeSpec = HasCustomAttributeTag 0xd
|
|
let hca_Assembly = HasCustomAttributeTag 0xe
|
|
let hca_AssemblyRef = HasCustomAttributeTag 0xf
|
|
let hca_File = HasCustomAttributeTag 0x10
|
|
let hca_ExportedType = HasCustomAttributeTag 0x11
|
|
let hca_ManifestResource = HasCustomAttributeTag 0x12
|
|
let hca_GenericParam = HasCustomAttributeTag 0x13
|
|
let hca_GenericParamConstraint = HasCustomAttributeTag 0x14
|
|
let hca_MethodSpec = HasCustomAttributeTag 0x15
|
|
|
|
let mkHasCustomAttributeTag x =
|
|
match x with
|
|
| 0x00 -> hca_MethodDef
|
|
| 0x01 -> hca_FieldDef
|
|
| 0x02 -> hca_TypeRef
|
|
| 0x03 -> hca_TypeDef
|
|
| 0x04 -> hca_ParamDef
|
|
| 0x05 -> hca_InterfaceImpl
|
|
| 0x06 -> hca_MemberRef
|
|
| 0x07 -> hca_Module
|
|
| 0x08 -> hca_Permission
|
|
| 0x09 -> hca_Property
|
|
| 0x0a -> hca_Event
|
|
| 0x0b -> hca_StandAloneSig
|
|
| 0x0c -> hca_ModuleRef
|
|
| 0x0d -> hca_TypeSpec
|
|
| 0x0e -> hca_Assembly
|
|
| 0x0f -> hca_AssemblyRef
|
|
| 0x10 -> hca_File
|
|
| 0x11 -> hca_ExportedType
|
|
| 0x12 -> hca_ManifestResource
|
|
| 0x13 -> hca_GenericParam
|
|
| 0x14 -> hca_GenericParamConstraint
|
|
| 0x15 -> hca_MethodSpec
|
|
| _ -> HasCustomAttributeTag x
|
|
|
|
type hasFieldMarshal_tag = HasFieldMarshalTag of int32
|
|
let hfm_FieldDef = HasFieldMarshalTag 0x00
|
|
let hfm_ParamDef = HasFieldMarshalTag 0x01
|
|
|
|
let mkHasFieldMarshalTag x =
|
|
match x with
|
|
| 0x00 -> hfm_FieldDef
|
|
| 0x01 -> hfm_ParamDef
|
|
| _ -> HasFieldMarshalTag x
|
|
|
|
type hasDeclSecurity_tag = HasDeclSecurityTag of int32
|
|
let hds_TypeDef = HasDeclSecurityTag 0x00
|
|
let hds_MethodDef = HasDeclSecurityTag 0x01
|
|
let hds_Assembly = HasDeclSecurityTag 0x02
|
|
|
|
let mkHasDeclSecurityTag x =
|
|
match x with
|
|
| 0x00 -> hds_TypeDef
|
|
| 0x01 -> hds_MethodDef
|
|
| 0x02 -> hds_Assembly
|
|
| _ -> HasDeclSecurityTag x
|
|
|
|
type memberRefParent_tag = MemberRefParentTag of int32
|
|
let mrp_TypeRef = MemberRefParentTag 0x01
|
|
let mrp_ModuleRef = MemberRefParentTag 0x02
|
|
let mrp_MethodDef = MemberRefParentTag 0x03
|
|
let mrp_TypeSpec = MemberRefParentTag 0x04
|
|
|
|
let mkMemberRefParentTag x =
|
|
match x with
|
|
| 0x01 -> mrp_TypeRef
|
|
| 0x02 -> mrp_ModuleRef
|
|
| 0x03 -> mrp_MethodDef
|
|
| 0x04 -> mrp_TypeSpec
|
|
| _ -> MemberRefParentTag x
|
|
|
|
type hasSemantics_tag = HasSemanticsTag of int32
|
|
let hs_Event = HasSemanticsTag 0x00
|
|
let hs_Property = HasSemanticsTag 0x01
|
|
|
|
let mkHasSemanticsTag x =
|
|
match x with
|
|
| 0x00 -> hs_Event
|
|
| 0x01 -> hs_Property
|
|
| _ -> HasSemanticsTag x
|
|
|
|
type methodDefOrRef_tag = MethodDefOrRefTag of int32
|
|
let mdor_MethodDef = MethodDefOrRefTag 0x00
|
|
let mdor_MemberRef = MethodDefOrRefTag 0x01
|
|
let mdor_MethodSpec = MethodDefOrRefTag 0x02
|
|
|
|
let mkMethodDefOrRefTag x =
|
|
match x with
|
|
| 0x00 -> mdor_MethodDef
|
|
| 0x01 -> mdor_MemberRef
|
|
| 0x02 -> mdor_MethodSpec
|
|
| _ -> MethodDefOrRefTag x
|
|
|
|
type memberForwarded_tag = MemberForwardedTag of int32
|
|
let mf_FieldDef = MemberForwardedTag 0x00
|
|
let mf_MethodDef = MemberForwardedTag 0x01
|
|
|
|
let mkMemberForwardedTag x =
|
|
match x with
|
|
| 0x00 -> mf_FieldDef
|
|
| 0x01 -> mf_MethodDef
|
|
| _ -> MemberForwardedTag x
|
|
|
|
type implementation_tag = ImplementationTag of int32
|
|
let i_File = ImplementationTag 0x00
|
|
let i_AssemblyRef = ImplementationTag 0x01
|
|
let i_ExportedType = ImplementationTag 0x02
|
|
|
|
let mkImplementationTag x =
|
|
match x with
|
|
| 0x00 -> i_File
|
|
| 0x01 -> i_AssemblyRef
|
|
| 0x02 -> i_ExportedType
|
|
| _ -> ImplementationTag x
|
|
|
|
type customAttributeType_tag = CustomAttributeTypeTag of int32
|
|
let cat_MethodDef = CustomAttributeTypeTag 0x02
|
|
let cat_MemberRef = CustomAttributeTypeTag 0x03
|
|
|
|
let mkCustomAttributeTypeTag x =
|
|
match x with
|
|
| 0x02 -> cat_MethodDef
|
|
| 0x03 -> cat_MemberRef
|
|
| _ -> CustomAttributeTypeTag x
|
|
|
|
type resolutionScope_tag = ResolutionScopeTag of int32
|
|
let rs_Module = ResolutionScopeTag 0x00
|
|
let rs_ModuleRef = ResolutionScopeTag 0x01
|
|
let rs_AssemblyRef = ResolutionScopeTag 0x02
|
|
let rs_TypeRef = ResolutionScopeTag 0x03
|
|
|
|
let mkResolutionScopeTag x =
|
|
match x with
|
|
| 0x00 -> rs_Module
|
|
| 0x01 -> rs_ModuleRef
|
|
| 0x02 -> rs_AssemblyRef
|
|
| 0x03 -> rs_TypeRef
|
|
| _ -> ResolutionScopeTag x
|
|
|
|
type typeOrMethodDef_tag = TypeOrMethodDefTag of int32
|
|
let tomd_TypeDef = TypeOrMethodDefTag 0x00
|
|
let tomd_MethodDef = TypeOrMethodDefTag 0x01
|
|
|
|
let mkTypeOrMethodDefTag x =
|
|
match x with
|
|
| 0x00 -> tomd_TypeDef
|
|
| 0x01 -> tomd_MethodDef
|
|
| _ -> TypeOrMethodDefTag x
|
|
|
|
let et_END = 0x00
|
|
let et_VOID = 0x01
|
|
let et_BOOLEAN = 0x02
|
|
let et_CHAR = 0x03
|
|
let et_I1 = 0x04
|
|
let et_U1 = 0x05
|
|
let et_I2 = 0x06
|
|
let et_U2 = 0x07
|
|
let et_I4 = 0x08
|
|
let et_U4 = 0x09
|
|
let et_I8 = 0x0a
|
|
let et_U8 = 0x0b
|
|
let et_R4 = 0x0c
|
|
let et_R8 = 0x0d
|
|
let et_STRING = 0x0e
|
|
let et_PTR = 0x0f
|
|
let et_BYREF = 0x10
|
|
let et_VALUETYPE = 0x11
|
|
let et_CLASS = 0x12
|
|
let et_VAR = 0x13
|
|
let et_ARRAY = 0x14
|
|
let et_WITH = 0x15
|
|
let et_TYPEDBYREF = 0x16
|
|
let et_I = 0x18
|
|
let et_U = 0x19
|
|
let et_FNPTR = 0x1B
|
|
let et_OBJECT = 0x1C
|
|
let et_SZARRAY = 0x1D
|
|
let et_MVAR = 0x1e
|
|
let et_CMOD_REQD = 0x1F
|
|
let et_CMOD_OPT = 0x20
|
|
|
|
let et_SENTINEL = 0x41 (* sentinel for varargs *)
|
|
let et_PINNED = 0x45
|
|
|
|
|
|
let i_nop = 0x00
|
|
let i_break = 0x01
|
|
let i_ldarg_0 = 0x02
|
|
let i_ldarg_1 = 0x03
|
|
let i_ldarg_2 = 0x04
|
|
let i_ldarg_3 = 0x05
|
|
let i_ldloc_0 = 0x06
|
|
let i_ldloc_1 = 0x07
|
|
let i_ldloc_2 = 0x08
|
|
let i_ldloc_3 = 0x09
|
|
let i_stloc_0 = 0x0a
|
|
let i_stloc_1 = 0x0b
|
|
let i_stloc_2 = 0x0c
|
|
let i_stloc_3 = 0x0d
|
|
let i_ldarg_s = 0x0e
|
|
let i_ldarga_s = 0x0f
|
|
let i_starg_s = 0x10
|
|
let i_ldloc_s = 0x11
|
|
let i_ldloca_s = 0x12
|
|
let i_stloc_s = 0x13
|
|
let i_ldnull = 0x14
|
|
let i_ldc_i4_m1 = 0x15
|
|
let i_ldc_i4_0 = 0x16
|
|
let i_ldc_i4_1 = 0x17
|
|
let i_ldc_i4_2 = 0x18
|
|
let i_ldc_i4_3 = 0x19
|
|
let i_ldc_i4_4 = 0x1a
|
|
let i_ldc_i4_5 = 0x1b
|
|
let i_ldc_i4_6 = 0x1c
|
|
let i_ldc_i4_7 = 0x1d
|
|
let i_ldc_i4_8 = 0x1e
|
|
let i_ldc_i4_s = 0x1f
|
|
let i_ldc_i4 = 0x20
|
|
let i_ldc_i8 = 0x21
|
|
let i_ldc_r4 = 0x22
|
|
let i_ldc_r8 = 0x23
|
|
let i_dup = 0x25
|
|
let i_pop = 0x26
|
|
let i_jmp = 0x27
|
|
let i_call = 0x28
|
|
let i_calli = 0x29
|
|
let i_ret = 0x2a
|
|
let i_br_s = 0x2b
|
|
let i_brfalse_s = 0x2c
|
|
let i_brtrue_s = 0x2d
|
|
let i_beq_s = 0x2e
|
|
let i_bge_s = 0x2f
|
|
let i_bgt_s = 0x30
|
|
let i_ble_s = 0x31
|
|
let i_blt_s = 0x32
|
|
let i_bne_un_s = 0x33
|
|
let i_bge_un_s = 0x34
|
|
let i_bgt_un_s = 0x35
|
|
let i_ble_un_s = 0x36
|
|
let i_blt_un_s = 0x37
|
|
let i_br = 0x38
|
|
let i_brfalse = 0x39
|
|
let i_brtrue = 0x3a
|
|
let i_beq = 0x3b
|
|
let i_bge = 0x3c
|
|
let i_bgt = 0x3d
|
|
let i_ble = 0x3e
|
|
let i_blt = 0x3f
|
|
let i_bne_un = 0x40
|
|
let i_bge_un = 0x41
|
|
let i_bgt_un = 0x42
|
|
let i_ble_un = 0x43
|
|
let i_blt_un = 0x44
|
|
let i_switch = 0x45
|
|
let i_ldind_i1 = 0x46
|
|
let i_ldind_u1 = 0x47
|
|
let i_ldind_i2 = 0x48
|
|
let i_ldind_u2 = 0x49
|
|
let i_ldind_i4 = 0x4a
|
|
let i_ldind_u4 = 0x4b
|
|
let i_ldind_i8 = 0x4c
|
|
let i_ldind_i = 0x4d
|
|
let i_ldind_r4 = 0x4e
|
|
let i_ldind_r8 = 0x4f
|
|
let i_ldind_ref = 0x50
|
|
let i_stind_ref = 0x51
|
|
let i_stind_i1 = 0x52
|
|
let i_stind_i2 = 0x53
|
|
let i_stind_i4 = 0x54
|
|
let i_stind_i8 = 0x55
|
|
let i_stind_r4 = 0x56
|
|
let i_stind_r8 = 0x57
|
|
let i_add = 0x58
|
|
let i_sub = 0x59
|
|
let i_mul = 0x5a
|
|
let i_div = 0x5b
|
|
let i_div_un = 0x5c
|
|
let i_rem = 0x5d
|
|
let i_rem_un = 0x5e
|
|
let i_and = 0x5f
|
|
let i_or = 0x60
|
|
let i_xor = 0x61
|
|
let i_shl = 0x62
|
|
let i_shr = 0x63
|
|
let i_shr_un = 0x64
|
|
let i_neg = 0x65
|
|
let i_not = 0x66
|
|
let i_conv_i1 = 0x67
|
|
let i_conv_i2 = 0x68
|
|
let i_conv_i4 = 0x69
|
|
let i_conv_i8 = 0x6a
|
|
let i_conv_r4 = 0x6b
|
|
let i_conv_r8 = 0x6c
|
|
let i_conv_u4 = 0x6d
|
|
let i_conv_u8 = 0x6e
|
|
let i_callvirt = 0x6f
|
|
let i_cpobj = 0x70
|
|
let i_ldobj = 0x71
|
|
let i_ldstr = 0x72
|
|
let i_newobj = 0x73
|
|
let i_castclass = 0x74
|
|
let i_isinst = 0x75
|
|
let i_conv_r_un = 0x76
|
|
let i_unbox = 0x79
|
|
let i_throw = 0x7a
|
|
let i_ldfld = 0x7b
|
|
let i_ldflda = 0x7c
|
|
let i_stfld = 0x7d
|
|
let i_ldsfld = 0x7e
|
|
let i_ldsflda = 0x7f
|
|
let i_stsfld = 0x80
|
|
let i_stobj = 0x81
|
|
let i_conv_ovf_i1_un= 0x82
|
|
let i_conv_ovf_i2_un= 0x83
|
|
let i_conv_ovf_i4_un= 0x84
|
|
let i_conv_ovf_i8_un= 0x85
|
|
let i_conv_ovf_u1_un= 0x86
|
|
let i_conv_ovf_u2_un= 0x87
|
|
let i_conv_ovf_u4_un= 0x88
|
|
let i_conv_ovf_u8_un= 0x89
|
|
let i_conv_ovf_i_un = 0x8a
|
|
let i_conv_ovf_u_un = 0x8b
|
|
let i_box = 0x8c
|
|
let i_newarr = 0x8d
|
|
let i_ldlen = 0x8e
|
|
let i_ldelema = 0x8f
|
|
let i_ldelem_i1 = 0x90
|
|
let i_ldelem_u1 = 0x91
|
|
let i_ldelem_i2 = 0x92
|
|
let i_ldelem_u2 = 0x93
|
|
let i_ldelem_i4 = 0x94
|
|
let i_ldelem_u4 = 0x95
|
|
let i_ldelem_i8 = 0x96
|
|
let i_ldelem_i = 0x97
|
|
let i_ldelem_r4 = 0x98
|
|
let i_ldelem_r8 = 0x99
|
|
let i_ldelem_ref = 0x9a
|
|
let i_stelem_i = 0x9b
|
|
let i_stelem_i1 = 0x9c
|
|
let i_stelem_i2 = 0x9d
|
|
let i_stelem_i4 = 0x9e
|
|
let i_stelem_i8 = 0x9f
|
|
let i_stelem_r4 = 0xa0
|
|
let i_stelem_r8 = 0xa1
|
|
let i_stelem_ref = 0xa2
|
|
let i_conv_ovf_i1 = 0xb3
|
|
let i_conv_ovf_u1 = 0xb4
|
|
let i_conv_ovf_i2 = 0xb5
|
|
let i_conv_ovf_u2 = 0xb6
|
|
let i_conv_ovf_i4 = 0xb7
|
|
let i_conv_ovf_u4 = 0xb8
|
|
let i_conv_ovf_i8 = 0xb9
|
|
let i_conv_ovf_u8 = 0xba
|
|
let i_refanyval = 0xc2
|
|
let i_ckfinite = 0xc3
|
|
let i_mkrefany = 0xc6
|
|
let i_ldtoken = 0xd0
|
|
let i_conv_u2 = 0xd1
|
|
let i_conv_u1 = 0xd2
|
|
let i_conv_i = 0xd3
|
|
let i_conv_ovf_i = 0xd4
|
|
let i_conv_ovf_u = 0xd5
|
|
let i_add_ovf = 0xd6
|
|
let i_add_ovf_un = 0xd7
|
|
let i_mul_ovf = 0xd8
|
|
let i_mul_ovf_un = 0xd9
|
|
let i_sub_ovf = 0xda
|
|
let i_sub_ovf_un = 0xdb
|
|
let i_endfinally = 0xdc
|
|
let i_leave = 0xdd
|
|
let i_leave_s = 0xde
|
|
let i_stind_i = 0xdf
|
|
let i_conv_u = 0xe0
|
|
let i_arglist = 0xfe00
|
|
let i_ceq = 0xfe01
|
|
let i_cgt = 0xfe02
|
|
let i_cgt_un = 0xfe03
|
|
let i_clt = 0xfe04
|
|
let i_clt_un = 0xfe05
|
|
let i_ldftn = 0xfe06
|
|
let i_ldvirtftn = 0xfe07
|
|
let i_ldarg = 0xfe09
|
|
let i_ldarga = 0xfe0a
|
|
let i_starg = 0xfe0b
|
|
let i_ldloc = 0xfe0c
|
|
let i_ldloca = 0xfe0d
|
|
let i_stloc = 0xfe0e
|
|
let i_localloc = 0xfe0f
|
|
let i_endfilter = 0xfe11
|
|
let i_unaligned = 0xfe12
|
|
let i_volatile = 0xfe13
|
|
let i_constrained = 0xfe16
|
|
let i_readonly = 0xfe1e
|
|
let i_tail = 0xfe14
|
|
let i_initobj = 0xfe15
|
|
let i_cpblk = 0xfe17
|
|
let i_initblk = 0xfe18
|
|
let i_rethrow = 0xfe1a
|
|
let i_sizeof = 0xfe1c
|
|
let i_refanytype = 0xfe1d
|
|
|
|
let i_ldelem_any = 0xa3
|
|
let i_stelem_any = 0xa4
|
|
let i_unbox_any = 0xa5
|
|
|
|
let mk_ldc i = (((mk_ldc_i32 (i))))
|
|
let noarg_instrs = lazy
|
|
[
|
|
i_ldc_i4_0, mk_ldc 0;
|
|
i_ldc_i4_1, mk_ldc 1;
|
|
i_ldc_i4_2, mk_ldc 2;
|
|
i_ldc_i4_3, mk_ldc 3;
|
|
i_ldc_i4_4, mk_ldc 4;
|
|
i_ldc_i4_5, mk_ldc 5;
|
|
i_ldc_i4_6, mk_ldc 6;
|
|
i_ldc_i4_7, mk_ldc 7;
|
|
i_ldc_i4_8, mk_ldc 8;
|
|
i_ldc_i4_m1, mk_ldc (0-1);
|
|
0x0a, (I_stloc (uint16 ( 0)));
|
|
0x0b, (I_stloc (uint16 ( 1)));
|
|
0x0c, (I_stloc (uint16 ( 2)));
|
|
0x0d, (I_stloc (uint16 ( 3)));
|
|
0x06, (I_ldloc (uint16 ( 0)));
|
|
0x07, (I_ldloc (uint16 ( 1)));
|
|
0x08, (I_ldloc (uint16 ( 2)));
|
|
0x09, (I_ldloc (uint16 ( 3)));
|
|
0x02, (I_ldarg (uint16 ( 0)));
|
|
0x03, (I_ldarg (uint16 ( 1)));
|
|
0x04, (I_ldarg (uint16 ( 2)));
|
|
0x05, (I_ldarg (uint16 ( 3)));
|
|
0x2a, (I_ret);
|
|
0x58, (I_arith AI_add);
|
|
0xd6, (I_arith AI_add_ovf);
|
|
0xd7, (I_arith AI_add_ovf_un);
|
|
0x5f, (I_arith AI_and);
|
|
0x5b, (I_arith AI_div);
|
|
0x5c, (I_arith AI_div_un);
|
|
0xfe01, (I_arith AI_ceq);
|
|
0xfe02, (I_arith AI_cgt );
|
|
0xfe03, (I_arith AI_cgt_un);
|
|
0xfe04, (I_arith AI_clt);
|
|
0xfe05, (I_arith AI_clt_un);
|
|
0x67, (I_arith (AI_conv DT_I1));
|
|
0x68, (I_arith (AI_conv DT_I2));
|
|
0x69, (I_arith (AI_conv DT_I4));
|
|
0x6a, (I_arith (AI_conv DT_I8));
|
|
0xd3, (I_arith (AI_conv DT_I));
|
|
0x6b, (I_arith (AI_conv DT_R4));
|
|
0x6c, (I_arith (AI_conv DT_R8));
|
|
0xd2, (I_arith (AI_conv DT_U1));
|
|
0xd1, (I_arith (AI_conv DT_U2));
|
|
0x6d, (I_arith (AI_conv DT_U4));
|
|
0x6e, (I_arith (AI_conv DT_U8));
|
|
0xe0, (I_arith (AI_conv DT_U));
|
|
0x76, (I_arith (AI_conv DT_R));
|
|
0xb3, (I_arith (AI_conv_ovf DT_I1));
|
|
0xb5, (I_arith (AI_conv_ovf DT_I2));
|
|
0xb7, (I_arith (AI_conv_ovf DT_I4));
|
|
0xb9, (I_arith (AI_conv_ovf DT_I8));
|
|
0xd4, (I_arith (AI_conv_ovf DT_I));
|
|
0xb4, (I_arith (AI_conv_ovf DT_U1));
|
|
0xb6, (I_arith (AI_conv_ovf DT_U2));
|
|
0xb8, (I_arith (AI_conv_ovf DT_U4));
|
|
0xba, (I_arith (AI_conv_ovf DT_U8));
|
|
0xd5, (I_arith (AI_conv_ovf DT_U));
|
|
0x82, (I_arith (AI_conv_ovf_un DT_I1));
|
|
0x83, (I_arith (AI_conv_ovf_un DT_I2));
|
|
0x84, (I_arith (AI_conv_ovf_un DT_I4));
|
|
0x85, (I_arith (AI_conv_ovf_un DT_I8));
|
|
0x8a, (I_arith (AI_conv_ovf_un DT_I));
|
|
0x86, (I_arith (AI_conv_ovf_un DT_U1));
|
|
0x87, (I_arith (AI_conv_ovf_un DT_U2));
|
|
0x88, (I_arith (AI_conv_ovf_un DT_U4));
|
|
0x89, (I_arith (AI_conv_ovf_un DT_U8));
|
|
0x8b, (I_arith (AI_conv_ovf_un DT_U));
|
|
0x9c, (I_stelem DT_I1);
|
|
0x9d, (I_stelem DT_I2);
|
|
0x9e, (I_stelem DT_I4);
|
|
0x9f, (I_stelem DT_I8);
|
|
0xa0, (I_stelem DT_R4);
|
|
0xa1, (I_stelem DT_R8);
|
|
0x9b, (I_stelem DT_I);
|
|
0xa2, (I_stelem DT_REF);
|
|
0x90, (I_ldelem DT_I1);
|
|
0x92, (I_ldelem DT_I2);
|
|
0x94, (I_ldelem DT_I4);
|
|
0x96, (I_ldelem DT_I8);
|
|
0x91, (I_ldelem DT_U1);
|
|
0x93, (I_ldelem DT_U2);
|
|
0x95, (I_ldelem DT_U4);
|
|
0x98, (I_ldelem DT_R4);
|
|
0x99, (I_ldelem DT_R8);
|
|
0x97, (I_ldelem DT_I);
|
|
0x9a, (I_ldelem DT_REF);
|
|
0x5a, (I_arith AI_mul );
|
|
0xd8, (I_arith AI_mul_ovf);
|
|
0xd9, (I_arith AI_mul_ovf_un);
|
|
0x5d, (I_arith AI_rem );
|
|
0x5e, (I_arith AI_rem_un );
|
|
0x62, (I_arith AI_shl );
|
|
0x63, (I_arith AI_shr );
|
|
0x64, (I_arith AI_shr_un);
|
|
0x59, (I_arith AI_sub );
|
|
0xda, (I_arith AI_sub_ovf);
|
|
0xdb, (I_arith AI_sub_ovf_un);
|
|
0x61, (I_arith AI_xor);
|
|
0x60, (I_arith AI_or);
|
|
0x65, (I_arith AI_neg);
|
|
0x66, (I_arith AI_not);
|
|
i_ldnull, (I_arith AI_ldnull);
|
|
i_dup, (I_arith AI_dup);
|
|
i_pop, (I_arith AI_pop);
|
|
i_ckfinite, (I_arith AI_ckfinite);
|
|
i_nop, (I_arith AI_nop);
|
|
i_break, (I_break);
|
|
i_arglist, (I_arglist);
|
|
i_endfilter, (I_endfilter);
|
|
i_endfinally, I_endfinally;
|
|
i_refanytype, (I_refanytype);
|
|
i_localloc, (I_localloc);
|
|
i_throw, (I_throw);
|
|
i_ldlen, (I_ldlen);
|
|
i_rethrow, (I_rethrow);
|
|
];;
|
|
|
|
let is_noarg_instr i =
|
|
match i with
|
|
| I_arith (AI_ldc (DT_I4, NUM_I4 n)) when (-1) <= n && n <= 8 -> true
|
|
| I_stloc n | I_ldloc n | I_ldarg n when n <= 3us -> true
|
|
| I_ret
|
|
| I_arith AI_add
|
|
| I_arith AI_add_ovf
|
|
| I_arith AI_add_ovf_un
|
|
| I_arith AI_and
|
|
| I_arith AI_div
|
|
| I_arith AI_div_un
|
|
| I_arith AI_ceq
|
|
| I_arith AI_cgt
|
|
| I_arith AI_cgt_un
|
|
| I_arith AI_clt
|
|
| I_arith AI_clt_un
|
|
| I_arith (AI_conv DT_I1)
|
|
| I_arith (AI_conv DT_I2)
|
|
| I_arith (AI_conv DT_I4)
|
|
| I_arith (AI_conv DT_I8)
|
|
| I_arith (AI_conv DT_I)
|
|
| I_arith (AI_conv DT_R4)
|
|
| I_arith (AI_conv DT_R8)
|
|
| I_arith (AI_conv DT_U1)
|
|
| I_arith (AI_conv DT_U2)
|
|
| I_arith (AI_conv DT_U4)
|
|
| I_arith (AI_conv DT_U8)
|
|
| I_arith (AI_conv DT_U)
|
|
| I_arith (AI_conv DT_R)
|
|
| I_arith (AI_conv_ovf DT_I1)
|
|
| I_arith (AI_conv_ovf DT_I2)
|
|
| I_arith (AI_conv_ovf DT_I4)
|
|
| I_arith (AI_conv_ovf DT_I8)
|
|
| I_arith (AI_conv_ovf DT_I)
|
|
| I_arith (AI_conv_ovf DT_U1)
|
|
| I_arith (AI_conv_ovf DT_U2)
|
|
| I_arith (AI_conv_ovf DT_U4)
|
|
| I_arith (AI_conv_ovf DT_U8)
|
|
| I_arith (AI_conv_ovf DT_U)
|
|
| I_arith (AI_conv_ovf_un DT_I1)
|
|
| I_arith (AI_conv_ovf_un DT_I2)
|
|
| I_arith (AI_conv_ovf_un DT_I4)
|
|
| I_arith (AI_conv_ovf_un DT_I8)
|
|
| I_arith (AI_conv_ovf_un DT_I)
|
|
| I_arith (AI_conv_ovf_un DT_U1)
|
|
| I_arith (AI_conv_ovf_un DT_U2)
|
|
| I_arith (AI_conv_ovf_un DT_U4)
|
|
| I_arith (AI_conv_ovf_un DT_U8)
|
|
| I_arith (AI_conv_ovf_un DT_U)
|
|
| I_stelem DT_I1
|
|
| I_stelem DT_I2
|
|
| I_stelem DT_I4
|
|
| I_stelem DT_I8
|
|
| I_stelem DT_R4
|
|
| I_stelem DT_R8
|
|
| I_stelem DT_I
|
|
| I_stelem DT_REF
|
|
| I_ldelem DT_I1
|
|
| I_ldelem DT_I2
|
|
| I_ldelem DT_I4
|
|
| I_ldelem DT_I8
|
|
| I_ldelem DT_U1
|
|
| I_ldelem DT_U2
|
|
| I_ldelem DT_U4
|
|
| I_ldelem DT_R4
|
|
| I_ldelem DT_R8
|
|
| I_ldelem DT_I
|
|
| I_ldelem DT_REF
|
|
| I_arith AI_mul
|
|
| I_arith AI_mul_ovf
|
|
| I_arith AI_mul_ovf_un
|
|
| I_arith AI_rem
|
|
| I_arith AI_rem_un
|
|
| I_arith AI_shl
|
|
| I_arith AI_shr
|
|
| I_arith AI_shr_un
|
|
| I_arith AI_sub
|
|
| I_arith AI_sub_ovf
|
|
| I_arith AI_sub_ovf_un
|
|
| I_arith AI_xor
|
|
| I_arith AI_or
|
|
| I_arith AI_neg
|
|
| I_arith AI_not
|
|
| I_arith AI_ldnull
|
|
| I_arith AI_dup
|
|
| I_arith AI_pop
|
|
| I_arith AI_ckfinite
|
|
| I_arith AI_nop
|
|
| I_break
|
|
| I_arglist
|
|
| I_endfilter
|
|
| I_endfinally
|
|
| I_refanytype
|
|
| I_localloc
|
|
| I_throw
|
|
| I_ldlen
|
|
| I_rethrow -> true
|
|
| _ -> false
|
|
|
|
let brcmp_map = lazy
|
|
(Dictionary.of_list
|
|
[ BI_beq , i_beq
|
|
; BI_bgt , i_bgt
|
|
; BI_bgt_un , i_bgt_un
|
|
; BI_bge , i_bge
|
|
; BI_bge_un , i_bge_un
|
|
; BI_ble , i_ble
|
|
; BI_ble_un , i_ble_un
|
|
; BI_blt , i_blt
|
|
; BI_blt_un , i_blt_un
|
|
; BI_bne_un , i_bne_un
|
|
; BI_brfalse , i_brfalse
|
|
; BI_brtrue , i_brtrue ])
|
|
|
|
let brcmp_smap = lazy
|
|
(Dictionary.of_list
|
|
[ BI_beq , i_beq_s
|
|
; BI_bgt , i_bgt_s
|
|
; BI_bgt_un , i_bgt_un_s
|
|
; BI_bge , i_bge_s
|
|
; BI_bge_un , i_bge_un_s
|
|
; BI_ble , i_ble_s
|
|
; BI_ble_un , i_ble_un_s
|
|
; BI_blt , i_blt_s
|
|
; BI_blt_un , i_blt_un_s
|
|
; BI_bne_un , i_bne_un_s
|
|
; BI_brfalse , i_brfalse_s
|
|
; BI_brtrue , i_brtrue_s ])
|
|
|
|
(* From corhdr.h *)
|
|
|
|
let nt_VOID = 0x1
|
|
let nt_BOOLEAN = 0x2
|
|
let nt_I1 = 0x3
|
|
let nt_U1 = 0x4
|
|
let nt_I2 = 0x5
|
|
let nt_U2 = 0x6
|
|
let nt_I4 = 0x7
|
|
let nt_U4 = 0x8
|
|
let nt_I8 = 0x9
|
|
let nt_U8 = 0xa
|
|
let nt_R4 = 0xb
|
|
let nt_R8 = 0xc
|
|
let nt_SYSCHAR = 0xd
|
|
let nt_VARIANT = 0xe
|
|
let nt_CURRENCY = 0xf
|
|
let nt_PTR = 0x10
|
|
let nt_DECIMAL = 0x11
|
|
let nt_DATE = 0x12
|
|
let nt_BSTR = 0x13
|
|
let nt_LPSTR = 0x14
|
|
let nt_LPWSTR = 0x15
|
|
let nt_LPTSTR = 0x16
|
|
let nt_FIXEDSYSSTRING = 0x17
|
|
let nt_OBJECTREF = 0x18
|
|
let nt_IUNKNOWN = 0x19
|
|
let nt_IDISPATCH = 0x1a
|
|
let nt_STRUCT = 0x1b
|
|
let nt_INTF = 0x1c
|
|
let nt_SAFEARRAY = 0x1d
|
|
let nt_FIXEDARRAY = 0x1e
|
|
let nt_INT = 0x1f
|
|
let nt_UINT = 0x20
|
|
let nt_NESTEDSTRUCT = 0x21
|
|
let nt_BYVALSTR = 0x22
|
|
let nt_ANSIBSTR = 0x23
|
|
let nt_TBSTR = 0x24
|
|
let nt_VARIANTBOOL = 0x25
|
|
let nt_FUNC = 0x26
|
|
let nt_ASANY = 0x28
|
|
let nt_ARRAY = 0x2a
|
|
let nt_LPSTRUCT = 0x2b
|
|
let nt_CUSTOMMARSHALER = 0x2c
|
|
let nt_ERROR = 0x2d
|
|
let nt_MAX = 0x50
|
|
|
|
(* From c:/clrenv.i386/Crt/Inc/i386/hs.h *)
|
|
|
|
let vt_EMPTY = 0
|
|
let vt_NULL = 1
|
|
let vt_I2 = 2
|
|
let vt_I4 = 3
|
|
let vt_R4 = 4
|
|
let vt_R8 = 5
|
|
let vt_CY = 6
|
|
let vt_DATE = 7
|
|
let vt_BSTR = 8
|
|
let vt_DISPATCH = 9
|
|
let vt_ERROR = 10
|
|
let vt_BOOL = 11
|
|
let vt_VARIANT = 12
|
|
let vt_UNKNOWN = 13
|
|
let vt_DECIMAL = 14
|
|
let vt_I1 = 16
|
|
let vt_UI1 = 17
|
|
let vt_UI2 = 18
|
|
let vt_UI4 = 19
|
|
let vt_I8 = 20
|
|
let vt_UI8 = 21
|
|
let vt_INT = 22
|
|
let vt_UINT = 23
|
|
let vt_VOID = 24
|
|
let vt_HRESULT = 25
|
|
let vt_PTR = 26
|
|
let vt_SAFEARRAY = 27
|
|
let vt_CARRAY = 28
|
|
let vt_USERDEFINED = 29
|
|
let vt_LPSTR = 30
|
|
let vt_LPWSTR = 31
|
|
let vt_RECORD = 36
|
|
let vt_FILETIME = 64
|
|
let vt_BLOB = 65
|
|
let vt_STREAM = 66
|
|
let vt_STORAGE = 67
|
|
let vt_STREAMED_OBJECT = 68
|
|
let vt_STORED_OBJECT = 69
|
|
let vt_BLOB_OBJECT = 70
|
|
let vt_CF = 71
|
|
let vt_CLSID = 72
|
|
let vt_VECTOR = 0x1000
|
|
let vt_ARRAY = 0x2000
|
|
let vt_BYREF = 0x4000
|
|
|
|
|
|
let native_type_map =
|
|
lazy [ nt_CURRENCY , NativeType_currency
|
|
; nt_BSTR , (* COM interop *) NativeType_bstr
|
|
; nt_LPSTR , NativeType_lpstr
|
|
; nt_LPWSTR , NativeType_lpwstr
|
|
; nt_LPTSTR, NativeType_lptstr
|
|
; nt_IUNKNOWN , (* COM interop *) NativeType_iunknown
|
|
; nt_IDISPATCH , (* COM interop *) NativeType_idsipatch
|
|
; nt_BYVALSTR , NativeType_byvalstr
|
|
; nt_TBSTR , NativeType_tbstr
|
|
; nt_LPSTRUCT , NativeType_lpstruct
|
|
; nt_INTF , (* COM interop *) NativeType_interface
|
|
; nt_STRUCT , NativeType_struct
|
|
; nt_ERROR , (* COM interop *) NativeType_error
|
|
; nt_VOID , NativeType_void
|
|
; nt_BOOLEAN , NativeType_bool
|
|
; nt_I1 , NativeType_int8
|
|
; nt_I2 , NativeType_int16
|
|
; nt_I4 , NativeType_int32
|
|
; nt_I8, NativeType_int64
|
|
; nt_R4 , NativeType_float32
|
|
; nt_R8 , NativeType_float64
|
|
; nt_U1 , NativeType_unsigned_int8
|
|
; nt_U2 , NativeType_unsigned_int16
|
|
; nt_U4 , NativeType_unsigned_int32
|
|
; nt_U8, NativeType_unsigned_int64
|
|
; nt_INT , NativeType_int
|
|
; nt_UINT, NativeType_unsigned_int
|
|
; nt_ANSIBSTR, (* COM interop *) NativeType_ansi_bstr
|
|
; nt_VARIANTBOOL, (* COM interop *) NativeType_variant_bool
|
|
; nt_FUNC , NativeType_method
|
|
; nt_ASANY, NativeType_as_any ]
|
|
|
|
let native_type_rmap = lazy (List.map (fun (x,y) -> (y,x)) (Lazy.force native_type_map))
|
|
|
|
let variant_type_map =
|
|
lazy [ VariantType_empty , vt_EMPTY
|
|
; VariantType_null , vt_NULL
|
|
; VariantType_variant , vt_VARIANT
|
|
; VariantType_currency , vt_CY
|
|
; VariantType_decimal , vt_DECIMAL
|
|
; VariantType_date , vt_DATE
|
|
; VariantType_bstr , vt_BSTR
|
|
; VariantType_lpstr , vt_LPSTR
|
|
; VariantType_lpwstr , vt_LPWSTR
|
|
; VariantType_iunknown , vt_UNKNOWN
|
|
; VariantType_idispatch , vt_DISPATCH
|
|
; VariantType_safearray , vt_SAFEARRAY
|
|
; VariantType_error , vt_ERROR
|
|
; VariantType_hresult , vt_HRESULT
|
|
; VariantType_carray , vt_CARRAY
|
|
; VariantType_userdefined , vt_USERDEFINED
|
|
; VariantType_record , vt_RECORD
|
|
; VariantType_filetime , vt_FILETIME
|
|
; VariantType_blob , vt_BLOB
|
|
; VariantType_stream , vt_STREAM
|
|
; VariantType_storage , vt_STORAGE
|
|
; VariantType_streamed_object , vt_STREAMED_OBJECT
|
|
; VariantType_stored_object , vt_STORED_OBJECT
|
|
; VariantType_blob_object , vt_BLOB_OBJECT
|
|
; VariantType_cf , vt_CF
|
|
; VariantType_clsid , vt_CLSID
|
|
; VariantType_void , vt_VOID
|
|
; VariantType_bool , vt_BOOL
|
|
; VariantType_int8 , vt_I1
|
|
; VariantType_int16 , vt_I2
|
|
; VariantType_int32 , vt_I4
|
|
; VariantType_int64 , vt_I8
|
|
; VariantType_float32 , vt_R4
|
|
; VariantType_float64 , vt_R8
|
|
; VariantType_unsigned_int8 , vt_UI1
|
|
; VariantType_unsigned_int16 , vt_UI2
|
|
; VariantType_unsigned_int32 , vt_UI4
|
|
; VariantType_unsigned_int64 , vt_UI8
|
|
; VariantType_ptr , vt_PTR
|
|
; VariantType_int , vt_INT
|
|
; VariantType_unsigned_int , vt_UINT ]
|
|
|
|
let variant_type_rmap = lazy (List.map (fun (x,y) -> (y,x)) (Lazy.force variant_type_map))
|
|
|
|
let secaction_map =
|
|
lazy
|
|
[ SecAction_request , 0x0001
|
|
; SecAction_demand , 0x0002
|
|
; SecAction_assert , 0x0003
|
|
; SecAction_deny , 0x0004
|
|
; SecAction_permitonly , 0x0005
|
|
; SecAction_linkcheck , 0x0006
|
|
; SecAction_inheritcheck , 0x0007
|
|
; SecAction_reqmin , 0x0008
|
|
; SecAction_reqopt , 0x0009
|
|
; SecAction_reqrefuse , 0x000a
|
|
; SecAction_prejitgrant , 0x000b
|
|
; SecAction_prejitdeny , 0x000c
|
|
; SecAction_noncasdemand , 0x000d
|
|
; SecAction_noncaslinkdemand , 0x000e
|
|
; SecAction_noncasinheritance , 0x000f
|
|
; SecAction_linkdemandchoice , 0x0010
|
|
; SecAction_inheritancedemandchoice , 0x0011
|
|
; SecAction_demandchoice , 0x0012 ]
|
|
|
|
let secaction_rmap = lazy (List.map (fun (x,y) -> (y,x)) (Lazy.force secaction_map))
|
|
|
|
let e_CorILMethod_TinyFormat = 0x02
|
|
let e_CorILMethod_FatFormat = 0x03
|
|
let e_CorILMethod_FormatMask = 0x03
|
|
let e_CorILMethod_MoreSects = 0x08
|
|
let e_CorILMethod_InitLocals = 0x10
|
|
|
|
|
|
let e_CorILMethod_Sect_EHTable = 0x1
|
|
let e_CorILMethod_Sect_FatFormat = 0x40
|
|
let e_CorILMethod_Sect_MoreSects = 0x80
|
|
|
|
let e_COR_ILEXCEPTION_CLAUSE_EXCEPTION = 0x0
|
|
let e_COR_ILEXCEPTION_CLAUSE_FILTER = 0x1
|
|
let e_COR_ILEXCEPTION_CLAUSE_FINALLY = 0x2
|
|
let e_COR_ILEXCEPTION_CLAUSE_FAULT = 0x4
|
|
|
|
let e_IMAGE_CEE_CS_CALLCONV_FASTCALL = 0x04
|
|
let e_IMAGE_CEE_CS_CALLCONV_STDCALL = 0x02
|
|
let e_IMAGE_CEE_CS_CALLCONV_THISCALL = 0x03
|
|
let e_IMAGE_CEE_CS_CALLCONV_CDECL = 0x01
|
|
let e_IMAGE_CEE_CS_CALLCONV_VARARG = 0x05
|
|
let e_IMAGE_CEE_CS_CALLCONV_FIELD = 0x06
|
|
let e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG = 0x07
|
|
let e_IMAGE_CEE_CS_CALLCONV_PROPERTY = 0x08
|
|
|
|
let e_IMAGE_CEE_CS_CALLCONV_GENERICINST = 0x0a
|
|
let e_IMAGE_CEE_CS_CALLCONV_GENERIC = 0x10
|
|
let e_IMAGE_CEE_CS_CALLCONV_INSTANCE = 0x20
|
|
let e_IMAGE_CEE_CS_CALLCONV_INSTANCE_EXPLICIT = 0x40
|
|
|
|
|
|
|