Skip to content
This repository has been archived by the owner on Oct 15, 2020. It is now read-only.

Commit

Permalink
[Merge chakra-core/ChakraCore@8dbf8e4721] [MERGE #4035 @rhuanjl] Opti…
Browse files Browse the repository at this point in the history
…mise xplat UtcTimeFromStrCore

Merge pull request #4035 from rhuanjl:fastXplatDateFromString

Added a fast path for standard ascii characters to PAL_tolower

Resolves chakra-core/ChakraCore#4008
  • Loading branch information
chakrabot committed Oct 26, 2017
1 parent 51d838b commit 559f7cf
Showing 1 changed file with 50 additions and 34 deletions.
84 changes: 50 additions & 34 deletions deps/chakrashim/core/pal/src/cruntime/wchar.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -885,51 +885,67 @@ char16_t
__cdecl
PAL_towlower( char16_t c )
{
#if HAVE_COREFOUNDATION
PERF_ENTRY(towlower);
ENTRY("towlower (c=%d)\n", c);
if (!PAL_iswlower(c))
{
CFMutableStringRef cfString = CFStringCreateMutable(
kCFAllocatorDefault, 1);
if (cfString != NULL)
if(c < 128)
{//fast path for ascii characters
if(c >= 'A' && c <= 'Z')
{
CFStringAppendCharacters(cfString, (const UniChar*)&c, 1);
CFStringLowercase(cfString, NULL);
c = CFStringGetCharacterAtIndex(cfString, 0);
CFRelease(cfString);
c += ('a' - 'A');
PERF_EXIT(towlower);
LOGEXIT("towlower returns int %d\n", c );
return c;
}
else
{
PERF_EXIT(towlower);
LOGEXIT("towlower returns int %d\n", c );
return c;
}
}
LOGEXIT("towlower returns int %d\n", c );
PERF_EXIT(towlower);
return c;
#else /* HAVE_COREFOUNDATION */
UnicodeDataRec dataRec;

PERF_ENTRY(towlower);
ENTRY("towlower (c=%d)\n", c);

if (!GetUnicodeData(c, &dataRec))
else
{
TRACE( "Unable to retrieve unicode data for the character %c.\n", c );
#if HAVE_COREFOUNDATION
if (!PAL_iswlower(c))
{
CFMutableStringRef cfString = CFStringCreateMutable(
kCFAllocatorDefault, 1);
if (cfString != NULL)
{
CFStringAppendCharacters(cfString, (const UniChar*)&c, 1);
CFStringLowercase(cfString, NULL);
c = CFStringGetCharacterAtIndex(cfString, 0);
CFRelease(cfString);
}
}
LOGEXIT("towlower returns int %d\n", c );
PERF_EXIT(towlower);
return c;
}
#else /* HAVE_COREFOUNDATION */
UnicodeDataRec dataRec;

if ( (dataRec.C1_TYPE_FLAGS & C1_LOWER) || (dataRec.nOpposingCase == 0 ))
{
LOGEXIT("towlower returns int %d\n", c );
PERF_EXIT(towlower);
return c;
}
else
{
LOGEXIT("towlower returns int %d\n", dataRec.nOpposingCase );
PERF_EXIT(towlower);
return dataRec.nOpposingCase;
if (!GetUnicodeData(c, &dataRec))
{
TRACE( "Unable to retrieve unicode data for the character %c.\n", c );
LOGEXIT("towlower returns int %d\n", c );
PERF_EXIT(towlower);
return c;
}

if ( (dataRec.C1_TYPE_FLAGS & C1_LOWER) || (dataRec.nOpposingCase == 0 ))
{
LOGEXIT("towlower returns int %d\n", c );
PERF_EXIT(towlower);
return c;
}
else
{
LOGEXIT("towlower returns int %d\n", dataRec.nOpposingCase );
PERF_EXIT(towlower);
return dataRec.nOpposingCase;
}
#endif /* HAVE_COREFOUNDATION */
}
#endif /* HAVE_COREFOUNDATION */
}


Expand Down

0 comments on commit 559f7cf

Please sign in to comment.