@@ -304,17 +304,17 @@ let sigptrGetDouble bytes sigptr =
304
304
305
305
let sigptrGetZInt32 bytes sigptr =
306
306
let b0 , sigptr = sigptrGetByte bytes sigptr
307
- if b0 <= 0x7F uy then int b0, sigptr
307
+ if b0 <= 0x7F uy then struct ( int b0, sigptr)
308
308
elif b0 <= 0xBF uy then
309
309
let b0 = b0 &&& 0x7F uy
310
310
let b1 , sigptr = sigptrGetByte bytes sigptr
311
- ( int b0 <<< 8 ) ||| int b1, sigptr
311
+ struct (( int b0 <<< 8 ) ||| int b1, sigptr)
312
312
else
313
313
let b0 = b0 &&& 0x3F uy
314
314
let b1 , sigptr = sigptrGetByte bytes sigptr
315
315
let b2 , sigptr = sigptrGetByte bytes sigptr
316
316
let b3 , sigptr = sigptrGetByte bytes sigptr
317
- ( int b0 <<< 24 ) ||| ( int b1 <<< 16 ) ||| ( int b2 <<< 8 ) ||| int b3, sigptr
317
+ struct (( int b0 <<< 24 ) ||| ( int b1 <<< 16 ) ||| ( int b2 <<< 8 ) ||| int b3, sigptr)
318
318
319
319
let rec sigptrFoldAcc f n ( bytes : byte []) ( sigptr : int ) i acc =
320
320
if i < n then
@@ -326,6 +326,14 @@ let rec sigptrFoldAcc f n (bytes: byte[]) (sigptr: int) i acc =
326
326
let sigptrFold f n ( bytes : byte []) ( sigptr : int ) =
327
327
sigptrFoldAcc f n bytes sigptr 0 []
328
328
329
+ let sigptrFoldStruct f n ( bytes : byte []) ( sigptr : int ) =
330
+ let rec sigptrFoldAcc f n ( bytes : byte []) ( sigptr : int ) i acc =
331
+ if i < n then
332
+ let struct ( x , sp ) = f bytes sigptr
333
+ sigptrFoldAcc f n bytes sp ( i+ 1 ) ( x :: acc)
334
+ else
335
+ struct ( List.rev acc, sigptr)
336
+ sigptrFoldAcc f n bytes sigptr 0 []
329
337
330
338
let sigptrGetBytes n ( bytes : byte []) sigptr =
331
339
if checking && sigptr + n >= bytes.Length then
@@ -1825,7 +1833,7 @@ and seekReadMethods (ctxt: ILMetadataReader) numtypars midx1 midx2 =
1825
1833
yield seekReadMethod ctxt mdv numtypars i |])
1826
1834
1827
1835
and sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr =
1828
- let n , sigptr = sigptrGetZInt32 bytes sigptr
1836
+ let struct ( n , sigptr ) = sigptrGetZInt32 bytes sigptr
1829
1837
if ( n &&& 0x01 ) = 0x0 then (* Type Def *)
1830
1838
TaggedIndex( tdor_ TypeDef, ( n >>>& 2 )), sigptr
1831
1839
else (* Type Ref *)
@@ -1852,7 +1860,7 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr =
1852
1860
elif b0 = et_ WITH then
1853
1861
let b0 , sigptr = sigptrGetByte bytes sigptr
1854
1862
let tdorIdx , sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr
1855
- let n , sigptr = sigptrGetZInt32 bytes sigptr
1863
+ let struct ( n , sigptr ) = sigptrGetZInt32 bytes sigptr
1856
1864
let argtys , sigptr = sigptrFold ( sigptrGetTy ctxt numtypars) n bytes sigptr
1857
1865
seekReadTypeDefOrRef ctxt numtypars ( if b0 = et_ CLASS then AsObject else AsValue) argtys tdorIdx,
1858
1866
sigptr
@@ -1864,10 +1872,10 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr =
1864
1872
let tdorIdx , sigptr = sigptrGetTypeDefOrRefOrSpecIdx bytes sigptr
1865
1873
seekReadTypeDefOrRef ctxt numtypars AsValue List.empty tdorIdx, sigptr
1866
1874
elif b0 = et_ VAR then
1867
- let n , sigptr = sigptrGetZInt32 bytes sigptr
1875
+ let struct ( n , sigptr ) = sigptrGetZInt32 bytes sigptr
1868
1876
ILType.TypeVar ( uint16 n), sigptr
1869
1877
elif b0 = et_ MVAR then
1870
- let n , sigptr = sigptrGetZInt32 bytes sigptr
1878
+ let struct ( n , sigptr ) = sigptrGetZInt32 bytes sigptr
1871
1879
ILType.TypeVar ( uint16 ( n + numtypars)), sigptr
1872
1880
elif b0 = et_ BYREF then
1873
1881
let ty , sigptr = sigptrGetTy ctxt numtypars bytes sigptr
@@ -1880,11 +1888,11 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr =
1880
1888
mkILArr1DTy ty, sigptr
1881
1889
elif b0 = et_ ARRAY then
1882
1890
let ty , sigptr = sigptrGetTy ctxt numtypars bytes sigptr
1883
- let rank , sigptr = sigptrGetZInt32 bytes sigptr
1884
- let numSized , sigptr = sigptrGetZInt32 bytes sigptr
1885
- let sizes , sigptr = sigptrFold sigptrGetZInt32 numSized bytes sigptr
1886
- let numLoBounded , sigptr = sigptrGetZInt32 bytes sigptr
1887
- let lobounds , sigptr = sigptrFold sigptrGetZInt32 numLoBounded bytes sigptr
1891
+ let struct ( rank , sigptr ) = sigptrGetZInt32 bytes sigptr
1892
+ let struct ( numSized , sigptr ) = sigptrGetZInt32 bytes sigptr
1893
+ let struct ( sizes , sigptr ) = sigptrFoldStruct sigptrGetZInt32 numSized bytes sigptr
1894
+ let struct ( numLoBounded , sigptr ) = sigptrGetZInt32 bytes sigptr
1895
+ let struct ( lobounds , sigptr ) = sigptrFoldStruct sigptrGetZInt32 numLoBounded bytes sigptr
1888
1896
let shape =
1889
1897
let dim i =
1890
1898
( if i < numLoBounded then Some ( List.item i lobounds) else None),
@@ -1903,7 +1911,7 @@ and sigptrGetTy (ctxt: ILMetadataReader) numtypars bytes sigptr =
1903
1911
let ccByte , sigptr = sigptrGetByte bytes sigptr
1904
1912
let generic , cc = byteAsCallConv ccByte
1905
1913
if generic then failwith " fptr sig may not be generic"
1906
- let numparams , sigptr = sigptrGetZInt32 bytes sigptr
1914
+ let struct ( numparams , sigptr ) = sigptrGetZInt32 bytes sigptr
1907
1915
let retty , sigptr = sigptrGetTy ctxt numtypars bytes sigptr
1908
1916
let argtys , sigptr = sigptrFold ( sigptrGetTy ctxt numtypars) ( numparams) bytes sigptr
1909
1917
let typ =
@@ -1949,8 +1957,8 @@ and readBlobHeapAsMethodSigUncached ctxtH (BlobAsMethodSigIdx (numtypars, blobId
1949
1957
let sigptr = 0
1950
1958
let ccByte , sigptr = sigptrGetByte bytes sigptr
1951
1959
let generic , cc = byteAsCallConv ccByte
1952
- let genarity , sigptr = if generic then sigptrGetZInt32 bytes sigptr else 0x0 , sigptr
1953
- let numparams , sigptr = sigptrGetZInt32 bytes sigptr
1960
+ let struct ( genarity , sigptr ) = if generic then sigptrGetZInt32 bytes sigptr else 0x0 , sigptr
1961
+ let struct ( numparams , sigptr ) = sigptrGetZInt32 bytes sigptr
1954
1962
let retty , sigptr = sigptrGetTy ctxt numtypars bytes sigptr
1955
1963
let ( argtys , varargs ), _sigptr = sigptrGetArgTys ctxt numparams numtypars bytes sigptr []
1956
1964
generic, genarity, cc, retty, argtys, varargs
@@ -1984,7 +1992,7 @@ and readBlobHeapAsPropertySigUncached ctxtH (BlobAsPropSigIdx (numtypars, blobId
1984
1992
let hasthis = byteAsHasThis ccByte
1985
1993
let ccMaxked = ( ccByte &&& 0x0F uy)
1986
1994
if ccMaxked <> e_ IMAGE_ CEE_ CS_ CALLCONV_ PROPERTY then dprintn ( " warning: property sig was " + string ccMaxked+ " instead of CC_PROPERTY" )
1987
- let numparams , sigptr = sigptrGetZInt32 bytes sigptr
1995
+ let struct ( numparams , sigptr ) = sigptrGetZInt32 bytes sigptr
1988
1996
let retty , sigptr = sigptrGetTy ctxt numtypars bytes sigptr
1989
1997
let argtys , _sigptr = sigptrFold ( sigptrGetTy ctxt numtypars) ( numparams) bytes sigptr
1990
1998
hasthis, retty, argtys
@@ -1998,7 +2006,7 @@ and readBlobHeapAsLocalsSigUncached ctxtH (BlobAsLocalSigIdx (numtypars, blobIdx
1998
2006
let sigptr = 0
1999
2007
let ccByte , sigptr = sigptrGetByte bytes sigptr
2000
2008
if ccByte <> e_ IMAGE_ CEE_ CS_ CALLCONV_ LOCAL_ SIG then dprintn " warning: local sig was not CC_LOCAL"
2001
- let numlocals , sigptr = sigptrGetZInt32 bytes sigptr
2009
+ let struct ( numlocals , sigptr ) = sigptrGetZInt32 bytes sigptr
2002
2010
let localtys , _sigptr = sigptrFold ( sigptrGetLocal ctxt numtypars) ( numlocals) bytes sigptr
2003
2011
localtys
2004
2012
@@ -2051,7 +2059,7 @@ and seekReadMethodSpecAsMethodDataUncached ctxtH (MethodSpecAsMspecIdx (numtypar
2051
2059
let sigptr = 0
2052
2060
let ccByte , sigptr = sigptrGetByte bytes sigptr
2053
2061
if ccByte <> e_ IMAGE_ CEE_ CS_ CALLCONV_ GENERICINST then dprintn ( " warning: method inst ILCallingConv was " + string ccByte+ " instead of CC_GENERICINST" )
2054
- let numgpars , sigptr = sigptrGetZInt32 bytes sigptr
2062
+ let struct ( numgpars , sigptr ) = sigptrGetZInt32 bytes sigptr
2055
2063
let argtys , _sigptr = sigptrFold ( sigptrGetTy ctxt numtypars) numgpars bytes sigptr
2056
2064
argtys
2057
2065
VarArgMethodData( enclTy, cc, nm, argtys, varargs, retty, minst)
@@ -2950,47 +2958,47 @@ and sigptrGetILNativeType ctxt bytes sigptr =
2950
2958
elif ntbyte = 0x0 uy then ILNativeType.Empty, sigptr
2951
2959
elif ntbyte = nt_ CUSTOMMARSHALER then
2952
2960
// reading native type blob CM1, sigptr= "+string sigptr+ ", bytes.Length = "+string bytes.Length)
2953
- let guidLen , sigptr = sigptrGetZInt32 bytes sigptr
2961
+ let struct ( guidLen , sigptr ) = sigptrGetZInt32 bytes sigptr
2954
2962
// reading native type blob CM2, sigptr= "+string sigptr+", guidLen = "+string ( guidLen))
2955
2963
let guid , sigptr = sigptrGetBytes ( guidLen) bytes sigptr
2956
2964
// reading native type blob CM3, sigptr= "+string sigptr)
2957
- let nativeTypeNameLen , sigptr = sigptrGetZInt32 bytes sigptr
2965
+ let struct ( nativeTypeNameLen , sigptr ) = sigptrGetZInt32 bytes sigptr
2958
2966
// reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeNameLen = "+string ( nativeTypeNameLen))
2959
2967
let nativeTypeName , sigptr = sigptrGetString ( nativeTypeNameLen) bytes sigptr
2960
2968
// reading native type blob CM4, sigptr= "+string sigptr+", nativeTypeName = "+nativeTypeName)
2961
2969
// reading native type blob CM5, sigptr= "+string sigptr)
2962
- let custMarshallerNameLen , sigptr = sigptrGetZInt32 bytes sigptr
2970
+ let struct ( custMarshallerNameLen , sigptr ) = sigptrGetZInt32 bytes sigptr
2963
2971
// reading native type blob CM6, sigptr= "+string sigptr+", custMarshallerNameLen = "+string ( custMarshallerNameLen))
2964
2972
let custMarshallerName , sigptr = sigptrGetString ( custMarshallerNameLen) bytes sigptr
2965
2973
// reading native type blob CM7, sigptr= "+string sigptr+", custMarshallerName = "+custMarshallerName)
2966
- let cookieStringLen , sigptr = sigptrGetZInt32 bytes sigptr
2974
+ let struct ( cookieStringLen , sigptr ) = sigptrGetZInt32 bytes sigptr
2967
2975
// reading native type blob CM8, sigptr= "+string sigptr+", cookieStringLen = "+string ( cookieStringLen))
2968
2976
let cookieString , sigptr = sigptrGetBytes ( cookieStringLen) bytes sigptr
2969
2977
// reading native type blob CM9, sigptr= "+string sigptr)
2970
2978
ILNativeType.Custom ( guid, nativeTypeName, custMarshallerName, cookieString), sigptr
2971
2979
elif ntbyte = nt_ FIXEDSYSSTRING then
2972
- let i , sigptr = sigptrGetZInt32 bytes sigptr
2980
+ let struct ( i , sigptr ) = sigptrGetZInt32 bytes sigptr
2973
2981
ILNativeType.FixedSysString i, sigptr
2974
2982
elif ntbyte = nt_ FIXEDARRAY then
2975
- let i , sigptr = sigptrGetZInt32 bytes sigptr
2983
+ let struct ( i , sigptr ) = sigptrGetZInt32 bytes sigptr
2976
2984
ILNativeType.FixedArray i, sigptr
2977
2985
elif ntbyte = nt_ SAFEARRAY then
2978
2986
( if sigptr >= bytes.Length then
2979
2987
ILNativeType.SafeArray( ILNativeVariant.Empty, None), sigptr
2980
2988
else
2981
- let i , sigptr = sigptrGetZInt32 bytes sigptr
2989
+ let struct ( i , sigptr ) = sigptrGetZInt32 bytes sigptr
2982
2990
if sigptr >= bytes.Length then
2983
2991
ILNativeType.SafeArray ( int32AsILVariantType ctxt i, None), sigptr
2984
2992
else
2985
- let len , sigptr = sigptrGetZInt32 bytes sigptr
2993
+ let struct ( len , sigptr ) = sigptrGetZInt32 bytes sigptr
2986
2994
let s , sigptr = sigptrGetString ( len) bytes sigptr
2987
2995
ILNativeType.SafeArray ( int32AsILVariantType ctxt i, Some s), sigptr)
2988
2996
elif ntbyte = nt_ ARRAY then
2989
2997
if sigptr >= bytes.Length then
2990
2998
ILNativeType.Array( None, None), sigptr
2991
2999
else
2992
3000
let nt , sigptr =
2993
- let u , sigptr' = sigptrGetZInt32 bytes sigptr
3001
+ let struct ( u , sigptr' ) = sigptrGetZInt32 bytes sigptr
2994
3002
if ( u = int nt_ MAX) then
2995
3003
ILNativeType.Empty, sigptr'
2996
3004
else
@@ -2999,11 +3007,11 @@ and sigptrGetILNativeType ctxt bytes sigptr =
2999
3007
if sigptr >= bytes.Length then
3000
3008
ILNativeType.Array ( Some nt, None), sigptr
3001
3009
else
3002
- let pnum , sigptr = sigptrGetZInt32 bytes sigptr
3010
+ let struct ( pnum , sigptr ) = sigptrGetZInt32 bytes sigptr
3003
3011
if sigptr >= bytes.Length then
3004
3012
ILNativeType.Array ( Some nt, Some( pnum, None)), sigptr
3005
3013
else
3006
- let additive , sigptr =
3014
+ let struct ( additive , sigptr ) =
3007
3015
if sigptr >= bytes.Length then 0 , sigptr
3008
3016
else sigptrGetZInt32 bytes sigptr
3009
3017
ILNativeType.Array ( Some nt, Some( pnum, Some additive)), sigptr
0 commit comments