summaryrefslogtreecommitdiff
path: root/src/classlibnative
diff options
context:
space:
mode:
authorStephen Toub <stoub@microsoft.com>2017-11-15 18:18:20 -0500
committerStephen Toub <stoub@microsoft.com>2017-11-18 17:59:07 -0500
commit523ee2d35552f6ab6ff9228da2a9d7cfe51e4b57 (patch)
treeab7d91b37884b6a879d954f08e4133b2b85589a5 /src/classlibnative
parent7f0eb6109c8572e15c5a263c864f53fb2442baf3 (diff)
downloadcoreclr-523ee2d35552f6ab6ff9228da2a9d7cfe51e4b57.tar.gz
coreclr-523ee2d35552f6ab6ff9228da2a9d7cfe51e4b57.tar.bz2
coreclr-523ee2d35552f6ab6ff9228da2a9d7cfe51e4b57.zip
Remove now dead code from managed parsing/formatting.
- Remove dead "bigNumber" code. - Remove custom wcslen function. Use String's. - Delete dead fcalls from runtime. FormatInt32, FormatUInt32, FormatInt64, and FormatUInt64 are no longer needed. Delete them and many of the helpers used only by them.
Diffstat (limited to 'src/classlibnative')
-rw-r--r--src/classlibnative/bcltype/number.cpp558
-rw-r--r--src/classlibnative/bcltype/number.h4
2 files changed, 0 insertions, 562 deletions
diff --git a/src/classlibnative/bcltype/number.cpp b/src/classlibnative/bcltype/number.cpp
index c45260d05b..e399c82f63 100644
--- a/src/classlibnative/bcltype/number.cpp
+++ b/src/classlibnative/bcltype/number.cpp
@@ -113,24 +113,6 @@ L2: dec ecx
}
}
-unsigned int Int64DivMod1E9(unsigned __int64* value)
-{
- LIMITED_METHOD_CONTRACT
-
- _asm {
- mov ebx,value
- mov ecx,1000000000
- xor edx,edx
- mov eax,[ebx+4]
- div ecx
- mov [ebx+4],eax
- mov eax,[ebx]
- div ecx
- mov [ebx],eax
- mov eax,edx
- }
-}
-
#pragma warning(default:4035)
#else // _TARGET_X86_ && !FEATURE_PAL
@@ -863,20 +845,6 @@ wchar_t* COMNumber::Int32ToDecChars(__in wchar_t* p, unsigned int value, int dig
}
return p;
}
-
-unsigned int Int64DivMod1E9(unsigned __int64* value)
-{
- LIMITED_METHOD_CONTRACT
- _ASSERTE(value != NULL);
-
- unsigned int rem = (unsigned int)(*value % 1000000000);
- *value /= 1000000000;
- return rem;
-}
-
-
-
-
#endif // _TARGET_X86_ && !FEATURE_PAL
#if defined(_MSC_VER) && defined(_TARGET_X86_)
@@ -906,284 +874,6 @@ inline wchar* GetDigitsBuffer(NUMBER* number)
#pragma optimize("", on) // Go back to command line default optimizations
#endif
-LPCWSTR MatchChars(LPCWSTR p, LPCWSTR str)
-{
- LIMITED_METHOD_CONTRACT
- _ASSERTE(p != NULL && str != NULL);
-
- if (!*str) return 0;
- for (; *str; p++, str++)
- {
- if (*p != *str) //We only hurt the failure case
- {
- if ((*str == 0xA0) && (*p == 0x20)) // This fix is for French or Kazakh cultures. Since a user cannot type 0xA0 as a
- // space character we use 0x20 space character instead to mean the same.
- continue;
- return 0;
- }
- }
- return p;
-}
-
-wchar* Int32ToHexChars(__in wchar* p, unsigned int value, int hexBase, int digits)
-{
- LIMITED_METHOD_CONTRACT
- _ASSERTE(p != NULL);
-
- while (--digits >= 0 || value != 0) {
- unsigned char digit = static_cast<unsigned char>(value & 0xF);
- *--p = static_cast<wchar>(digit + (digit < 10? '0': hexBase));
- value >>= 4;
- }
- return p;
-}
-
-STRINGREF Int32ToDecStr(int value, int digits, STRINGREF sNegative)
-{
- CONTRACTL {
- THROWS;
- INJECT_FAULT(COMPlusThrowOM());
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- CQuickBytes buf;
-
- if (digits < 1) digits = 1;
-
- UINT maxDigitsLength = (digits > 15) ? digits : 15; // Since an int32 can have maximum of 10 chars as a String
- UINT bufferLength = (maxDigitsLength > 100) ? maxDigitsLength : 100;
- int negLength = 0;
- wchar* src = NULL;
-
- if (value < 0) {
- _ASSERTE(sNegative != NULL);
- src = sNegative->GetBuffer();
- _ASSERTE(src != NULL);
- negLength = sNegative->GetStringLength();
- if ((UINT) negLength > bufferLength - maxDigitsLength) {
- bufferLength = (UINT) negLength + maxDigitsLength;
- }
- }
-
- wchar *buffer = (wchar*)buf.AllocThrows(bufferLength * sizeof(WCHAR));
- wchar* p = COMNumber::Int32ToDecChars(buffer + bufferLength, value >= 0? value: -value, digits);
- _ASSERTE(p != NULL);
- if (value < 0) {
- for (int i =negLength - 1; i >= 0; i--)
- {
- *(--p) = *(src+i);
- }
- }
-
- _ASSERTE(buffer + bufferLength - p >=0 && buffer <= p);
- return StringObject::NewString(p, (int)(buffer + bufferLength - p));
-}
-
-STRINGREF UInt32ToDecStr(unsigned int value, int digits)
-{
- WRAPPER_NO_CONTRACT
-
- wchar buffer[100];
- if (digits < 1) digits = 1;
- wchar* p = COMNumber::Int32ToDecChars(buffer + 100, value, digits);
- _ASSERTE(p != NULL && p >= buffer && p < (buffer + 100));
- return StringObject::NewString(p, (int) (buffer + 100 - p));
-}
-
-STRINGREF Int32ToHexStr(unsigned int value, int hexBase, int digits)
-{
- WRAPPER_NO_CONTRACT
-
- wchar buffer[100];
- if (digits < 1) digits = 1;
- wchar* p = Int32ToHexChars(buffer + 100, value, hexBase, digits);
- return StringObject::NewString(p, (int) (buffer + 100 - p));
-}
-
-void Int32ToNumber(int value, NUMBER* number)
-{
- WRAPPER_NO_CONTRACT
- _ASSERTE(number != NULL);
-
- wchar buffer[INT32_PRECISION+1];
- number->precision = INT32_PRECISION;
- if (value >= 0) {
- number->sign = 0;
- }
- else {
- number->sign = 1;
- value = -value;
- }
- wchar* p = COMNumber::Int32ToDecChars(buffer + INT32_PRECISION, value, 0);
- _ASSERTE(p != NULL);
- int i = (int) (buffer + INT32_PRECISION - p);
- number->scale = i;
- wchar* dst = number->digits;
- _ASSERTE(dst != NULL);
- while (--i >= 0) *dst++ = *p++;
- *dst = 0;
-
-
-}
-
-void UInt32ToNumber(unsigned int value, NUMBER* number)
-{
- WRAPPER_NO_CONTRACT
- _ASSERTE(number != NULL);
-
- wchar buffer[UINT32_PRECISION+1];
- number->precision = UINT32_PRECISION;
- number->sign = 0;
- wchar* p = COMNumber::Int32ToDecChars(buffer + UINT32_PRECISION, value, 0);
- _ASSERT(p != NULL);
- int i = (int) (buffer + UINT32_PRECISION - p);
- number->scale = i;
- wchar* dst = number->digits;
- _ASSERT(dst != NULL);
- while (--i >= 0) *dst++ = *p++;
- *dst = 0;
-}
-
-
-
-
-#define LO32(x) ((unsigned int)(x))
-#define HI32(x) ((unsigned int)(((x) & UI64(0xFFFFFFFF00000000)) >> 32))
-
-STRINGREF Int64ToDecStr(__int64 value, int digits, STRINGREF sNegative)
-{
- CONTRACTL {
- THROWS;
- INJECT_FAULT(COMPlusThrowOM());
- GC_TRIGGERS;
- MODE_COOPERATIVE;
- } CONTRACTL_END;
-
- CQuickBytes buf;
-
- if (digits < 1) digits = 1;
- int sign = HI32(value);
-
- // digits as specified in the format string can be at most 99.
- UINT maxDigitsLength = (digits > 20) ? digits : 20;
- UINT bufferLength = (maxDigitsLength > 100) ? maxDigitsLength : 100;
-
- if (sign < 0) {
- value = -value;
- _ASSERTE(sNegative);
- int negLength = sNegative->GetStringLength();
- if ((UINT) negLength > bufferLength - maxDigitsLength) {
- bufferLength = negLength + maxDigitsLength;
- }
- }
-
- wchar *buffer = (wchar*)buf.AllocThrows(bufferLength * sizeof(WCHAR));
- wchar* p = buffer + bufferLength;
- while (HI32(value)) {
- p = COMNumber::Int32ToDecChars(p, Int64DivMod1E9((unsigned __int64*)&value), 9);
- _ASSERTE(p != NULL);
- digits -= 9;
- }
- p = COMNumber::Int32ToDecChars(p, LO32(value), digits);
- _ASSERTE(p != NULL);
- if (sign < 0) {
- wchar* src = sNegative->GetBuffer();
- _ASSERTE(src != NULL);
- for (int i =sNegative->GetStringLength() - 1; i >= 0; i--)
- {
- *(--p) = *(src+i);
- }
- }
- return StringObject::NewString(p, (int) (buffer + bufferLength - p));
-}
-
-STRINGREF UInt64ToDecStr(unsigned __int64 value, int digits)
-{
- WRAPPER_NO_CONTRACT
-
- wchar buffer[100];
- if (digits < 1) digits = 1;
- wchar* p = buffer + 100;
- while (HI32(value)) {
- p = COMNumber::Int32ToDecChars(p, Int64DivMod1E9(&value), 9);
- _ASSERTE(p != NULL);
- digits -= 9;
- }
- p = COMNumber::Int32ToDecChars(p, LO32(value), digits);
- _ASSERTE(p != NULL && p >= buffer && p < (buffer + 100));
- return StringObject::NewString(p, (int) (buffer + 100 - p));
-}
-
-STRINGREF Int64ToHexStr(unsigned __int64 value, int hexBase, int digits)
-{
- WRAPPER_NO_CONTRACT
-
- wchar buffer[100];
- wchar* p;
- if (HI32(value)) {
- Int32ToHexChars(buffer + 100, LO32(value), hexBase, 8);
- p = Int32ToHexChars(buffer + 100 - 8, HI32(value), hexBase, digits - 8);
- }
- else {
- if (digits < 1) digits = 1;
- p = Int32ToHexChars(buffer + 100, LO32(value), hexBase, digits);
- }
- _ASSERTE(p != NULL && p >= buffer && p < (buffer + 100));
- return StringObject::NewString(p, (int) (buffer + 100 - p));
-}
-
-void Int64ToNumber(__int64 value, NUMBER* number)
-{
- WRAPPER_NO_CONTRACT
-
- wchar buffer[INT64_PRECISION+1];
- number->precision = INT64_PRECISION;
- if (value >= 0) {
- number->sign = 0;
- }
- else {
- number->sign = 1;
- value = -value;
- }
- wchar* p = buffer + INT64_PRECISION;
- while (HI32(value)) {
- p = COMNumber::Int32ToDecChars(p, Int64DivMod1E9((unsigned __int64*)&value), 9);
- _ASSERTE(p != NULL);
- }
- p = COMNumber::Int32ToDecChars(p, LO32(value), 0);
- _ASSERTE(p != NULL);
- int i = (int) (buffer + INT64_PRECISION - p);
- number->scale = i;
- wchar* dst = number->digits;
- _ASSERTE(dst != NULL);
- while (--i >= 0) *dst++ = *p++;
- *dst = 0;
-
-}
-
-void UInt64ToNumber(unsigned __int64 value, NUMBER* number)
-{
- WRAPPER_NO_CONTRACT
-
- wchar buffer[UINT64_PRECISION+1];
- number->precision = UINT64_PRECISION;
- number->sign = 0;
- wchar* p = buffer + UINT64_PRECISION;
- while (HI32(value)) {
- p = COMNumber::Int32ToDecChars(p, Int64DivMod1E9(&value), 9);
- _ASSERTE(p != NULL);
- }
- p = COMNumber::Int32ToDecChars(p, LO32(value), 0);
- _ASSERTE(p != NULL);
- int i = (int) (buffer + UINT64_PRECISION - p);
- number->scale = i;
- wchar* dst = number->digits;
- _ASSERTE(dst != NULL);
- while (--i >= 0) *dst++ = *p++;
- *dst = 0;
-
-}
void RoundNumber(NUMBER* number, int pos)
{
@@ -2578,254 +2268,6 @@ lExit: ;
}
FCIMPLEND
-FCIMPL3(Object*, COMNumber::FormatInt32, INT32 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE)
-{
- FCALL_CONTRACT;
-
- wchar fmt;
- int digits;
-
- struct _gc
- {
- STRINGREF refFormat;
- NUMFMTREF refNumFmt;
- STRINGREF refRetString;
- } gc;
-
- gc.refFormat = (STRINGREF)formatUNSAFE;
- gc.refNumFmt = (NUMFMTREF)numfmtUNSAFE;
- gc.refRetString = NULL;
-
- HELPER_METHOD_FRAME_BEGIN_RET_PROTECT(gc);
-
-
- if (gc.refNumFmt == 0) COMPlusThrowArgumentNull(W("NumberFormatInfo"));
- fmt = ParseFormatSpecifier(gc.refFormat, &digits);
-
- //ANDing fmt with FFDF has the effect of uppercasing the character because
- //we've removed the bit that marks lower-case.
- switch (fmt & 0xFFDF) {
- case 'G':
- if (digits > 0)
- {
- NUMBER number;
- Int32ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
- // fall through
- case 'D':
- gc.refRetString = Int32ToDecStr(value, digits, gc.refNumFmt->sNegative);
- break;
- case 'X':
- //The fmt-(X-A+10) has the effect of dictating whether we produce uppercase
- //or lowercase hex numbers for a-f. 'X' as the fmt code produces uppercase. 'x'
- //as the format code produces lowercase.
- gc.refRetString = Int32ToHexStr(value, fmt - ('X' - 'A' + 10), digits);
- break;
- default:
- NUMBER number;
- Int32ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
-
- }
-
- HELPER_METHOD_FRAME_END();
-
- return OBJECTREFToObject(gc.refRetString);
-}
-FCIMPLEND
-
-FCIMPL3(Object*, COMNumber::FormatUInt32, UINT32 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE)
-{
- FCALL_CONTRACT;
-
- wchar fmt;
- int digits;
-
- struct _gc
- {
- STRINGREF refFormat;
- NUMFMTREF refNumFmt;
- STRINGREF refRetString;
- } gc;
-
- gc.refFormat = (STRINGREF)formatUNSAFE;
- gc.refNumFmt = (NUMFMTREF)numfmtUNSAFE;
- gc.refRetString = NULL;
-
- HELPER_METHOD_FRAME_BEGIN_RET_PROTECT(gc);
-
-
- if (gc.refNumFmt == 0) COMPlusThrowArgumentNull(W("NumberFormatInfo"));
- fmt = ParseFormatSpecifier(gc.refFormat, &digits);
- switch (fmt & 0xFFDF)
- {
- case 'G':
- if (digits > 0)
- {
- NUMBER number;
- UInt32ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
- // fall through
- case 'D':
- gc.refRetString = UInt32ToDecStr(value, digits);
- break;
- case 'X':
- gc.refRetString = Int32ToHexStr(value, fmt - ('X' - 'A' + 10), digits);
- break;
- default:
- NUMBER number;
- UInt32ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
-
- HELPER_METHOD_FRAME_END();
-
- return OBJECTREFToObject(gc.refRetString);
-}
-FCIMPLEND
-
-FCIMPL3_VII(Object*, COMNumber::FormatInt64, INT64 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE)
-{
- FCALL_CONTRACT;
-
- wchar fmt;
- int digits;
-
- struct _gc
- {
- STRINGREF refFormat;
- NUMFMTREF refNumFmt;
- STRINGREF refRetString;
- } gc;
-
- gc.refFormat = ObjectToSTRINGREF(formatUNSAFE);
- gc.refNumFmt = (NUMFMTREF)numfmtUNSAFE;
- gc.refRetString = NULL;
-
- HELPER_METHOD_FRAME_BEGIN_RET_PROTECT(gc);
-
-
- if (gc.refNumFmt == 0) COMPlusThrowArgumentNull(W("NumberFormatInfo"));
- fmt = ParseFormatSpecifier(gc.refFormat, &digits);
- switch (fmt & 0xFFDF)
- {
- case 'G':
- if (digits > 0)
- {
- NUMBER number;
- Int64ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
- // fall through
- case 'D':
- gc.refRetString = Int64ToDecStr(value, digits, gc.refNumFmt->sNegative);
- break;
- case 'X':
- gc.refRetString = Int64ToHexStr(value, fmt - ('X' - 'A' + 10), digits);
- break;
- default:
- NUMBER number;
- Int64ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
- HELPER_METHOD_FRAME_END();
-
- return OBJECTREFToObject(gc.refRetString);
-}
-FCIMPLEND
-
-FCIMPL3_VII(Object*, COMNumber::FormatUInt64, UINT64 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE)
-{
- FCALL_CONTRACT;
-
- wchar fmt;
- int digits;
-
- struct _gc
- {
- STRINGREF refFormat;
- NUMFMTREF refNumFmt;
- STRINGREF refRetString;
- } gc;
-
- gc.refFormat = ObjectToSTRINGREF(formatUNSAFE);
- gc.refNumFmt = (NUMFMTREF)numfmtUNSAFE;
- gc.refRetString = NULL;
-
- HELPER_METHOD_FRAME_BEGIN_RET_PROTECT(gc);
-
- if (gc.refNumFmt == 0) COMPlusThrowArgumentNull(W("NumberFormatInfo"));
- fmt = ParseFormatSpecifier(gc.refFormat, &digits);
- switch (fmt & 0xFFDF) {
- case 'G':
- if (digits > 0)
- {
- NUMBER number;
- UInt64ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
- // fall through
- case 'D':
- gc.refRetString = UInt64ToDecStr(value, digits);
- break;
- case 'X':
- gc.refRetString = Int64ToHexStr(value, fmt - ('X' - 'A' + 10), digits);
- break;
- default:
- NUMBER number;
- UInt64ToNumber(value, &number);
- if (fmt != 0) {
- gc.refRetString = NumberToString(&number, fmt, digits, gc.refNumFmt);
- break;
- }
- gc.refRetString = NumberToStringFormat(&number, gc.refFormat, gc.refNumFmt);
- break;
- }
-
- HELPER_METHOD_FRAME_END();
-
- return OBJECTREFToObject(gc.refRetString);
-}
-FCIMPLEND
-
-
FCIMPL2(FC_BOOL_RET, COMNumber::NumberBufferToDecimal, BYTE* number, DECIMAL* value)
{
FCALL_CONTRACT;
diff --git a/src/classlibnative/bcltype/number.h b/src/classlibnative/bcltype/number.h
index 7b5efc4485..77f902fb41 100644
--- a/src/classlibnative/bcltype/number.h
+++ b/src/classlibnative/bcltype/number.h
@@ -34,10 +34,6 @@ public:
static FCDECL3_VII(Object*, FormatDecimal, FC_DECIMAL value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
static FCDECL3_VII(Object*, FormatDouble, double value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
static FCDECL3_VII(Object*, FormatSingle, float value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
- static FCDECL3(Object*, FormatInt32, INT32 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
- static FCDECL3(Object*, FormatUInt32, UINT32 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
- static FCDECL3_VII(Object*, FormatInt64, INT64 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
- static FCDECL3_VII(Object*, FormatUInt64, UINT64 value, StringObject* formatUNSAFE, NumberFormatInfo* numfmtUNSAFE);
static FCDECL2(FC_BOOL_RET, NumberBufferToDecimal, BYTE* number, DECIMAL* value);
static FCDECL2(FC_BOOL_RET, NumberBufferToDouble, BYTE* number, double* value);