diff options
Diffstat (limited to 'src/System.Private.CoreLib/shared/System/Number.NumberBuffer.cs')
-rw-r--r-- | src/System.Private.CoreLib/shared/System/Number.NumberBuffer.cs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/System.Private.CoreLib/shared/System/Number.NumberBuffer.cs b/src/System.Private.CoreLib/shared/System/Number.NumberBuffer.cs index 2316f99bd..1730cf18f 100644 --- a/src/System.Private.CoreLib/shared/System/Number.NumberBuffer.cs +++ b/src/System.Private.CoreLib/shared/System/Number.NumberBuffer.cs @@ -15,17 +15,27 @@ namespace System [StructLayout(LayoutKind.Sequential, Pack = 1)] internal unsafe ref struct NumberBuffer // needs to match layout of NUMBER in coreclr's src/classlibnative/bcltype/number.h { - public int precision; - public int scale; - private int _sign; - private DigitsAndNullTerminator _digits; - private char* _allDigits; + public int precision; // 0 + public int scale; // 4 + private int _sign; // 8 + private NumberBufferKind _kind; // 12 + private char* _allDigits; // 16 + private DigitsAndNullTerminator _digits; // 20 or 24 public bool sign { get => _sign != 0; set => _sign = value ? 1 : 0; } public char* digits => (char*)Unsafe.AsPointer(ref _digits); + public NumberBufferKind kind { get => _kind; set => _kind = value; } [StructLayout(LayoutKind.Sequential, Size = (NumberMaxDigits + 1) * sizeof(char))] private struct DigitsAndNullTerminator { } } + + internal enum NumberBufferKind // needs to match NUMBER_KIND in coreclr's src/classlibnative/bcltype/number.h + { + Unknown = 0, + Integer = 1, + Decimal = 2, + Double = 3 + } } } |