@@ -64,13 +64,13 @@ out pcchValue
64
64
FieldAttributes staticLiteralField = FieldAttributes . Static | FieldAttributes . HasDefault | FieldAttributes . Literal ;
65
65
if ( ( m_fieldAttributes & staticLiteralField ) == staticLiteralField )
66
66
{
67
- m_value = ParseDefaultValue ( declaringType , ppvSigBlob , ppvRawValue ) ;
67
+ m_value = ParseDefaultValue ( declaringType , ppvSigBlob , ppvRawValue , pcchValue ) ;
68
68
}
69
69
// [Xamarin] Expression evaluator.
70
70
MetadataHelperFunctionsExtensions . GetCustomAttribute ( m_importer , m_fieldToken , typeof ( DebuggerBrowsableAttribute ) ) ;
71
71
}
72
72
73
- private static object ParseDefaultValue ( MetadataType declaringType , IntPtr ppvSigBlob , IntPtr ppvRawValue )
73
+ private static object ParseDefaultValue ( MetadataType declaringType , IntPtr ppvSigBlob , IntPtr ppvRawValue , int rawValueSize )
74
74
{
75
75
IntPtr ppvSigTemp = ppvSigBlob ;
76
76
CorCallingConvention callingConv = MetadataHelperFunctions . CorSigUncompressCallingConv ( ref ppvSigTemp ) ;
@@ -94,7 +94,7 @@ private static object ParseDefaultValue(MetadataType declaringType, IntPtr ppvSi
94
94
}
95
95
}
96
96
}
97
-
97
+
98
98
switch ( elementType )
99
99
{
100
100
case CorElementType . ELEMENT_TYPE_CHAR :
@@ -117,10 +117,21 @@ private static object ParseDefaultValue(MetadataType declaringType, IntPtr ppvSi
117
117
return ( ulong ) Marshal . ReadInt64 ( ppvRawValue ) ;
118
118
case CorElementType . ELEMENT_TYPE_I :
119
119
return Marshal . ReadIntPtr ( ppvRawValue ) ;
120
- case CorElementType . ELEMENT_TYPE_U :
120
+ case CorElementType . ELEMENT_TYPE_STRING :
121
+ return Marshal . PtrToStringAuto ( ppvRawValue , rawValueSize ) ;
121
122
case CorElementType . ELEMENT_TYPE_R4 :
123
+ unsafe {
124
+ return * ( float * ) ppvRawValue . ToPointer ( ) ;
125
+ }
122
126
case CorElementType . ELEMENT_TYPE_R8 :
123
- // Technically U and the floating-point ones are options in the CLI, but not in the CLS or C#, so these are NYI
127
+ unsafe {
128
+ return * ( double * ) ppvRawValue . ToPointer ( ) ;
129
+ }
130
+ case CorElementType . ELEMENT_TYPE_BOOLEAN :
131
+ unsafe {
132
+ return * ( bool * ) ppvRawValue . ToPointer ( ) ;
133
+ }
134
+
124
135
default :
125
136
return null ;
126
137
}
0 commit comments