⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243950 in webkit


Ignore:
Timestamp:
Apr 5, 2019, 3:08:26 PM (7 years ago)
Author:
Alan Coon
Message:

Revert r243642. rdar://problem/49654398

Location:
tags/Safari-608.1.15/Source/JavaScriptCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • tags/Safari-608.1.15/Source/JavaScriptCore/ChangeLog

    r243949 r243950  
     12019-04-05  Kocsen Chung  <kocsen_chung@apple.com>
     2
     3        Revert r243642. rdar://problem/49654398
     4
    152019-04-05  Kocsen Chung  <kocsen_chung@apple.com>
    26
  • tags/Safari-608.1.15/Source/JavaScriptCore/runtime/RegExp.cpp

    r243642 r243950  
    386386        interpreterOffsetVector[j] = -1;
    387387
    388     interpreterResult = Yarr::interpret(m_regExpBytecode.get(), s, startOffset, reinterpret_cast<unsigned*>(interpreterOffsetVector));
     388    interpreterResult = Yarr::interpret(m_regExpBytecode.get(), s, startOffset, interpreterOffsetVector);
    389389
    390390    if (jitResult != interpreterResult)
     
    403403
    404404        if (jitResult != interpreterResult) {
    405             dataLogF("    JIT result = %d, interpreted result = %d\n", jitResult, interpreterResult);
     405            dataLogF("    JIT result = %d, blah interpreted result = %d\n", jitResult, interpreterResult);
    406406            differences--;
    407407        } else {
  • tags/Safari-608.1.15/Source/JavaScriptCore/runtime/RegExpInlines.h

    r243642 r243950  
    182182
    183183#if ENABLE(YARR_JIT_DEBUG)
    184         if (m_state == JITCode) {
    185             byteCodeCompileIfNecessary(&vm);
    186             matchCompareWithInterpreter(s, startOffset, offsetVector, result);
    187         }
     184        matchCompareWithInterpreter(s, startOffset, offsetVector, result);
    188185#endif
    189186    } else
  • tags/Safari-608.1.15/Source/JavaScriptCore/yarr/YarrInterpreter.cpp

    r243642 r243950  
    429429        return invert ? !match : match;
    430430    }
    431    
    432     bool checkCharacterClassDontAdvanceInputForNonBMP(CharacterClass* characterClass, unsigned negativeInputOffset)
    433     {
    434         int readCharacter = characterClass->hasOnlyNonBMPCharacters() ? input.readSurrogatePairChecked(negativeInputOffset) :  input.readChecked(negativeInputOffset);
    435         return testCharacterClass(characterClass, readCharacter);
    436     }
    437431
    438432    bool tryConsumeBackReference(int matchBegin, int matchEnd, unsigned negativeInputOffset)
     
    565559        case QuantifierFixedCount: {
    566560            if (unicode) {
    567                 CharacterClass* charClass = term.atom.characterClass;
    568561                backTrack->begin = input.getPos();
    569562                unsigned matchAmount = 0;
    570563                for (matchAmount = 0; matchAmount < term.atom.quantityMaxCount; ++matchAmount) {
    571                     if (term.invert()) {
    572                         if (!checkCharacterClass(charClass, term.invert(), term.inputPosition - matchAmount)) {
    573                             input.setPos(backTrack->begin);
    574                             return false;
    575                         }
    576                     } else {
    577                         unsigned matchOffset = matchAmount * (charClass->hasOnlyNonBMPCharacters() ? 2 : 1);
    578                         if (!checkCharacterClassDontAdvanceInputForNonBMP(charClass, term.inputPosition - matchOffset)) {
    579                             input.setPos(backTrack->begin);
    580                             return false;
    581                         }
     564                    if (!checkCharacterClass(term.atom.characterClass, term.invert(), term.inputPosition - matchAmount)) {
     565                        input.setPos(backTrack->begin);
     566                        return false;
    582567                    }
    583568                }
  • tags/Safari-608.1.15/Source/JavaScriptCore/yarr/YarrJIT.cpp

    r243949 r243950  
    7373    static const RegisterID initialStart = ARM64Registers::x11;
    7474    static const RegisterID supplementaryPlanesBase = ARM64Registers::x12;
    75     static const RegisterID leadingSurrogateTag = ARM64Registers::x13;
    76     static const RegisterID trailingSurrogateTag = ARM64Registers::x14;
    77     static const RegisterID endOfStringAddress = ARM64Registers::x15;
     75    static const RegisterID surrogateTagMask = ARM64Registers::x13;
     76    static const RegisterID leadingSurrogateTag = ARM64Registers::x14;
     77    static const RegisterID trailingSurrogateTag = ARM64Registers::x15;
    7878
    7979    static const RegisterID returnRegister = ARM64Registers::x0;
    8080    static const RegisterID returnRegister2 = ARM64Registers::x1;
    8181
    82     const TrustedImm32 surrogateTagMask = TrustedImm32(0xfffffc00);
    8382#define HAVE_INITIAL_START_REG
    8483#define JIT_UNICODE_EXPRESSIONS
     
    145144    static const RegisterID regUnicodeInputAndTrail = X86Registers::r13;
    146145    static const RegisterID leadingSurrogateTag = X86Registers::r14;
    147     static const RegisterID endOfStringAddress = X86Registers::r15;
     146    static const RegisterID trailingSurrogateTag = X86Registers::r15;
    148147
    149148    static const RegisterID returnRegister = X86Registers::eax;
     
    151150
    152151    const TrustedImm32 supplementaryPlanesBase = TrustedImm32(0x10000);
    153     const TrustedImm32 trailingSurrogateTag = TrustedImm32(0xdc00);
    154152    const TrustedImm32 surrogateTagMask = TrustedImm32(0xfffffc00);
    155153#define HAVE_INITIAL_START_REG
     
    322320            if ((term.type == PatternTerm::TypeCharacterClass)
    323321                && (term.quantityType == QuantifierFixedCount)
    324                 && (!m_decodeSurrogatePairs || (term.characterClass->hasOneCharacterSize() && !term.m_invert))
     322                && (!m_decodeSurrogatePairs || (!term.characterClass->m_hasNonBMPCharacters && !term.m_invert))
    325323                && (nextTerm.type == PatternTerm::TypePatternCharacter)
    326324                && (nextTerm.quantityType == QuantifierFixedCount)) {
     
    386384            return;
    387385        }
    388 
    389386        JumpList unicodeFail;
    390387        if (charClass->m_matchesUnicode.size() || charClass->m_rangesUnicode.size()) {
     
    451448            unicodeFail.link(this);
    452449    }
    453 
    454 #ifdef JIT_UNICODE_EXPRESSIONS
    455     void advanceIndexAfterCharacterClassTermMatch(const PatternTerm* term, JumpList& failures, const RegisterID character)
    456     {
    457         ASSERT(term->type == PatternTerm::TypeCharacterClass);
    458 
    459         if (term->characterClass->hasOneCharacterSize() && !term->invert())
    460             add32(TrustedImm32(term->characterClass->hasNonBMPCharacters() ? 2 : 1), index);
    461         else {
    462             add32(TrustedImm32(1), index);
    463             failures.append(atEndOfInput());
    464             Jump isBMPChar = branch32(LessThan, character, supplementaryPlanesBase);
    465             add32(TrustedImm32(1), index);
    466             isBMPChar.link(this);
    467         }
    468     }
    469 #endif
    470450
    471451    // Jumps if input not available; will have (incorrectly) incremented already!
     
    541521
    542522        JumpList notUnicode;
    543 
    544523        load16Unaligned(regUnicodeInputAndTrail, resultReg);
    545524        and32(surrogateTagMask, resultReg, regT2);
    546525        notUnicode.append(branch32(NotEqual, regT2, leadingSurrogateTag));
    547526        addPtr(TrustedImm32(2), regUnicodeInputAndTrail);
    548         notUnicode.append(branchPtr(AboveOrEqual, regUnicodeInputAndTrail, endOfStringAddress));
     527        getEffectiveAddress(BaseIndex(input, length, TimesTwo), regT2);
     528        notUnicode.append(branch32(AboveOrEqual, regUnicodeInputAndTrail, regT2));
    549529        load16Unaligned(Address(regUnicodeInputAndTrail), regUnicodeInputAndTrail);
    550530        and32(surrogateTagMask, regUnicodeInputAndTrail, regT2);
     
    17551735        }
    17561736#ifdef JIT_UNICODE_EXPRESSIONS
    1757         if (m_decodeSurrogatePairs && (!term->characterClass->hasOneCharacterSize() || term->invert())) {
     1737        if (m_decodeSurrogatePairs) {
    17581738            Jump isBMPChar = branch32(LessThan, character, supplementaryPlanesBase);
    17591739            add32(TrustedImm32(1), index);
     
    17891769
    17901770        move(index, countRegister);
    1791 
    1792         Checked<unsigned> scaledMaxCount = term->quantityMaxCount;
    1793 
    1794 #ifdef JIT_UNICODE_EXPRESSIONS
    1795         if (m_decodeSurrogatePairs && term->characterClass->hasOnlyNonBMPCharacters() && !term->invert())
    1796             scaledMaxCount *= 2;
    1797 #endif
    1798         sub32(Imm32(scaledMaxCount.unsafeGet()), countRegister);
     1771        sub32(Imm32(term->quantityMaxCount.unsafeGet()), countRegister);
    17991772
    18001773        Label loop(this);
    18011774        JumpList matchDest;
    1802         readCharacter(m_checkedOffset - term->inputPosition - scaledMaxCount, character, countRegister);
     1775        readCharacter(m_checkedOffset - term->inputPosition - term->quantityMaxCount, character, countRegister);
    18031776        // If we are matching the "any character" builtin class we only need to read the
    18041777        // character and don't need to match as it will always succeed.
     
    18141787        }
    18151788
     1789        add32(TrustedImm32(1), countRegister);
    18161790#ifdef JIT_UNICODE_EXPRESSIONS
    18171791        if (m_decodeSurrogatePairs) {
    1818             if (term->characterClass->hasOneCharacterSize() && !term->invert())
    1819                 add32(TrustedImm32(term->characterClass->hasNonBMPCharacters() ? 2 : 1), countRegister);
    1820             else {
    1821                 add32(TrustedImm32(1), countRegister);
    1822                 Jump isBMPChar = branch32(LessThan, character, supplementaryPlanesBase);
    1823                 op.m_jumps.append(atEndOfInput());
    1824                 add32(TrustedImm32(1), countRegister);
    1825                 add32(TrustedImm32(1), index);
    1826                 isBMPChar.link(this);
    1827             }
    1828         } else
    1829 #endif
     1792            Jump isBMPChar = branch32(LessThan, character, supplementaryPlanesBase);
     1793            op.m_jumps.append(atEndOfInput());
    18301794            add32(TrustedImm32(1), countRegister);
     1795            add32(TrustedImm32(1), index);
     1796            isBMPChar.link(this);
     1797        }
     1798#endif
    18311799        branch32(NotEqual, countRegister, index).linkTo(loop, this);
    18321800    }
     
    18441812        const RegisterID countRegister = regT1;
    18451813
    1846         if (m_decodeSurrogatePairs && (!term->characterClass->hasOneCharacterSize() || term->invert()))
     1814        if (m_decodeSurrogatePairs)
    18471815            storeToFrame(index, term->frameLocation + BackTrackInfoCharacterClass::beginIndex());
    18481816        move(TrustedImm32(0), countRegister);
     
    18581826            JumpList matchDest;
    18591827            readCharacter(m_checkedOffset - term->inputPosition, character);
    1860             // If we are matching the "any character" builtin class for non-unicode patterns,
    1861             // we only need to read the character and don't need to match as it will always succeed.
     1828            // If we are matching the "any character" builtin class we only need to read the
     1829            // character and don't need to match as it will always succeed.
    18621830            if (!term->characterClass->m_anyCharacter) {
    18631831                matchCharacterClass(character, matchDest, term->characterClass);
     
    18671835        }
    18681836
     1837        add32(TrustedImm32(1), index);
    18691838#ifdef JIT_UNICODE_EXPRESSIONS
    1870         if (m_decodeSurrogatePairs)
    1871             advanceIndexAfterCharacterClassTermMatch(term, failures, character);
    1872         else
    1873 #endif
     1839        if (m_decodeSurrogatePairs) {
     1840            failures.append(atEndOfInput());
     1841            Jump isBMPChar = branch32(LessThan, character, supplementaryPlanesBase);
    18741842            add32(TrustedImm32(1), index);
     1843            isBMPChar.link(this);
     1844        }
     1845#endif
    18751846        add32(TrustedImm32(1), countRegister);
    18761847
     
    18981869        m_backtrackingState.append(branchTest32(Zero, countRegister));
    18991870        sub32(TrustedImm32(1), countRegister);
    1900         storeToFrame(countRegister, term->frameLocation + BackTrackInfoCharacterClass::matchAmountIndex());
    1901 
    19021871        if (!m_decodeSurrogatePairs)
    19031872            sub32(TrustedImm32(1), index);
    1904         else if (term->characterClass->hasOneCharacterSize() && !term->invert())
    1905             sub32(TrustedImm32(term->characterClass->hasNonBMPCharacters() ? 2 : 1), index);
    19061873        else {
     1874            const RegisterID character = regT0;
     1875
     1876            loadFromFrame(term->frameLocation + BackTrackInfoCharacterClass::beginIndex(), index);
    19071877            // Rematch one less
    1908             const RegisterID character = regT0;
    1909 
    1910             loadFromFrame(term->frameLocation + BackTrackInfoCharacterClass::beginIndex(), index);
     1878            storeToFrame(countRegister, term->frameLocation + BackTrackInfoCharacterClass::matchAmountIndex());
    19111879
    19121880            Label rematchLoop(this);
     
    19381906        move(TrustedImm32(0), countRegister);
    19391907        op.m_reentry = label();
    1940         if (m_decodeSurrogatePairs) {
    1941             if (!term->characterClass->hasOneCharacterSize() || term->invert())
    1942                 storeToFrame(index, term->frameLocation + BackTrackInfoCharacterClass::beginIndex());
    1943             storeToFrame(countRegister, term->frameLocation + BackTrackInfoCharacterClass::matchAmountIndex());
    1944         }
     1908        if (m_decodeSurrogatePairs)
     1909            storeToFrame(index, term->frameLocation + BackTrackInfoCharacterClass::beginIndex());
     1910        storeToFrame(countRegister, term->frameLocation + BackTrackInfoCharacterClass::matchAmountIndex());
    19451911    }
    19461912
     
    19571923        m_backtrackingState.link(this);
    19581924
    1959         if (m_decodeSurrogatePairs) {
    1960             if (!term->characterClass->hasOneCharacterSize() || term->invert())
    1961                 loadFromFrame(term->frameLocation + BackTrackInfoCharacterClass::beginIndex(), index);
    1962             loadFromFrame(term->frameLocation + BackTrackInfoCharacterClass::matchAmountIndex(), countRegister);
    1963         }
     1925        if (m_decodeSurrogatePairs)
     1926            loadFromFrame(term->frameLocation + BackTrackInfoCharacterClass::beginIndex(), index);
     1927        loadFromFrame(term->frameLocation + BackTrackInfoCharacterClass::matchAmountIndex(), countRegister);
    19641928
    19651929        nonGreedyFailures.append(atEndOfInput());
     
    19681932        JumpList matchDest;
    19691933        readCharacter(m_checkedOffset - term->inputPosition, character);
    1970         // If we are matching the "any character" builtin class for non-unicode patterns,
    1971         // we only need to read the character and don't need to match as it will always succeed.
     1934        // If we are matching the "any character" builtin class we only need to read the
     1935        // character and don't need to match as it will always succeed.
    19721936        if (term->invert() || !term->characterClass->m_anyCharacter) {
    19731937            matchCharacterClass(character, matchDest, term->characterClass);
     
    19811945        }
    19821946
     1947        add32(TrustedImm32(1), index);
    19831948#ifdef JIT_UNICODE_EXPRESSIONS
    1984         if (m_decodeSurrogatePairs)
    1985             advanceIndexAfterCharacterClassTermMatch(term, nonGreedyFailures, character);
    1986         else
    1987 #endif
     1949        if (m_decodeSurrogatePairs) {
     1950            nonGreedyFailures.append(atEndOfInput());
     1951            Jump isBMPChar = branch32(LessThan, character, supplementaryPlanesBase);
    19881952            add32(TrustedImm32(1), index);
     1953            isBMPChar.link(this);
     1954        }
     1955#endif
    19891956        add32(TrustedImm32(1), countRegister);
    19901957
     
    37343701
    37353702            move(TrustedImm32(0xd800), leadingSurrogateTag);
     3703            move(TrustedImm32(0xdc00), trailingSurrogateTag);
    37363704        }
    37373705        // The ABI doesn't guarantee the upper bits are zero on unsigned arguments, so clear them ourselves.
     
    37673735            pushPair(framePointerRegister, linkRegister);
    37683736            move(TrustedImm32(0x10000), supplementaryPlanesBase);
     3737            move(TrustedImm32(0xfffffc00), surrogateTagMask);
    37693738            move(TrustedImm32(0xd800), leadingSurrogateTag);
    37703739            move(TrustedImm32(0xdc00), trailingSurrogateTag);
     
    38473816        , m_decodeSurrogatePairs(m_charSize == Char16 && m_pattern.unicode())
    38483817        , m_unicodeIgnoreCase(m_pattern.unicode() && m_pattern.ignoreCase())
    3849         , m_fixedSizedAlternative(false)
    38503818        , m_canonicalMode(m_pattern.unicode() ? CanonicalMode::Unicode : CanonicalMode::UCS2)
    38513819#if ENABLE(YARR_JIT_ALL_PARENS_EXPRESSIONS)
     
    39013869        generateFailReturn();
    39023870        hasInput.link(this);
    3903 
    3904 #ifdef JIT_UNICODE_EXPRESSIONS
    3905         if (m_decodeSurrogatePairs)
    3906             getEffectiveAddress(BaseIndex(input, length, TimesTwo), endOfStringAddress);
    3907 #endif
    39083871
    39093872#if ENABLE(YARR_JIT_ALL_PARENS_EXPRESSIONS)
     
    42014164    bool m_decodeSurrogatePairs;
    42024165    bool m_unicodeIgnoreCase;
    4203     bool m_fixedSizedAlternative;
    42044166    CanonicalMode m_canonicalMode;
    42054167#if ENABLE(YARR_JIT_ALL_PARENS_EXPRESSIONS)
  • tags/Safari-608.1.15/Source/JavaScriptCore/yarr/YarrPattern.cpp

    r243642 r243950  
    4646    CharacterClassConstructor(bool isCaseInsensitive, CanonicalMode canonicalMode)
    4747        : m_isCaseInsensitive(isCaseInsensitive)
     48        , m_hasNonBMPCharacters(false)
    4849        , m_anyCharacter(false)
    49         , m_characterWidths(CharacterClassWidths::Unknown)
    5050        , m_canonicalMode(canonicalMode)
    5151    {
     
    5858        m_matchesUnicode.clear();
    5959        m_rangesUnicode.clear();
     60        m_hasNonBMPCharacters = false;
    6061        m_anyCharacter = false;
    61         m_characterWidths = CharacterClassWidths::Unknown;
    6262    }
    6363
     
    247247        characterClass->m_matchesUnicode.swap(m_matchesUnicode);
    248248        characterClass->m_rangesUnicode.swap(m_rangesUnicode);
     249        characterClass->m_hasNonBMPCharacters = hasNonBMPCharacters();
    249250        characterClass->m_anyCharacter = anyCharacter();
    250         characterClass->m_characterWidths = characterWidths();
    251 
     251
     252        m_hasNonBMPCharacters = false;
    252253        m_anyCharacter = false;
    253         m_characterWidths = CharacterClassWidths::Unknown;
    254254
    255255        return characterClass;
     
    267267        unsigned range = matches.size();
    268268
    269         m_characterWidths |= (U_IS_BMP(ch) ? CharacterClassWidths::HasBMPChars : CharacterClassWidths::HasNonBMPChars);
     269        if (!U_IS_BMP(ch))
     270            m_hasNonBMPCharacters = true;
    270271
    271272        // binary chop, find position to insert char.
     
    316317        size_t end = ranges.size();
    317318
    318         if (U_IS_BMP(lo))
    319             m_characterWidths |= CharacterClassWidths::HasBMPChars;
    320319        if (!U_IS_BMP(hi))
    321             m_characterWidths |= CharacterClassWidths::HasNonBMPChars;
     320            m_hasNonBMPCharacters = true;
    322321
    323322        // Simple linear scan - I doubt there are that many ranges anyway...
     
    410409    bool hasNonBMPCharacters()
    411410    {
    412         return m_characterWidths & CharacterClassWidths::HasNonBMPChars;
    413     }
    414 
    415     CharacterClassWidths characterWidths()
    416     {
    417         return m_characterWidths;
     411        return m_hasNonBMPCharacters;
    418412    }
    419413
     
    424418
    425419    bool m_isCaseInsensitive : 1;
     420    bool m_hasNonBMPCharacters : 1;
    426421    bool m_anyCharacter : 1;
    427     CharacterClassWidths m_characterWidths;
    428    
    429422    CanonicalMode m_canonicalMode;
    430423
     
    844837                    term.frameLocation = currentCallFrameSize;
    845838                    currentCallFrameSize += YarrStackSpaceForBackTrackInfoCharacterClass;
    846                     if (term.characterClass->hasOneCharacterSize() && !term.invert()) {
    847                         Checked<unsigned, RecordOverflow> tempCount = term.quantityMaxCount;
    848                         tempCount *= term.characterClass->hasNonBMPCharacters() ? 2 : 1;
    849                         if (tempCount.hasOverflowed())
    850                             return ErrorCode::OffsetTooLarge;
    851                         currentInputPosition += tempCount;
    852                     } else {
    853                         currentInputPosition += term.quantityMaxCount;
    854                         alternative->m_hasFixedSize = false;
    855                     }
     839                    currentInputPosition += term.quantityMaxCount;
     840                    alternative->m_hasFixedSize = false;
    856841                } else
    857842                    currentInputPosition += term.quantityMaxCount;
     
    13341319    case TypeCharacterClass:
    13351320        out.print("character class ");
    1336         out.printf("inputPosition %u ", inputPosition);
    13371321        dumpCharacterClass(out, thisPattern, characterClass);
    13381322        dumpQuantifier(out);
     
    14781462    characterClass->m_ranges.append(CharacterRange(0x00, 0x7f));
    14791463    characterClass->m_rangesUnicode.append(CharacterRange(0x0080, 0x10ffff));
    1480     characterClass->m_characterWidths = CharacterClassWidths::HasBothBMPAndNonBMP;
     1464    characterClass->m_hasNonBMPCharacters = true;
    14811465    characterClass->m_anyCharacter = true;
    14821466    return characterClass;
  • tags/Safari-608.1.15/Source/JavaScriptCore/yarr/YarrPattern.h

    r243642 r243950  
    5353};
    5454
    55 enum struct CharacterClassWidths : unsigned char {
    56     Unknown = 0x0,
    57     HasBMPChars = 0x1,
    58     HasNonBMPChars = 0x2,
    59     HasBothBMPAndNonBMP = HasBMPChars | HasNonBMPChars
    60 };
    61 
    62 inline CharacterClassWidths operator|(CharacterClassWidths lhs, CharacterClassWidths rhs)
    63 {
    64     return static_cast<CharacterClassWidths>(static_cast<unsigned>(lhs) | static_cast<unsigned>(rhs));
    65 }
    66 
    67 inline bool operator&(CharacterClassWidths lhs, CharacterClassWidths rhs)
    68 {
    69     return static_cast<unsigned>(lhs) & static_cast<unsigned>(rhs);
    70 }
    71 
    72 inline CharacterClassWidths& operator|=(CharacterClassWidths& lhs, CharacterClassWidths rhs)
    73 {
    74     lhs = lhs | rhs;
    75     return lhs;
    76 }
    77 
    7855struct CharacterClass {
    7956    WTF_MAKE_FAST_ALLOCATED;
     
    8461    CharacterClass()
    8562        : m_table(0)
    86         , m_characterWidths(CharacterClassWidths::Unknown)
     63        , m_hasNonBMPCharacters(false)
    8764        , m_anyCharacter(false)
    8865    {
     
    9067    CharacterClass(const char* table, bool inverted)
    9168        : m_table(table)
    92         , m_characterWidths(CharacterClassWidths::Unknown)
    9369        , m_tableInverted(inverted)
     70        , m_hasNonBMPCharacters(false)
    9471        , m_anyCharacter(false)
    9572    {
    9673    }
    97     CharacterClass(std::initializer_list<UChar32> matches, std::initializer_list<CharacterRange> ranges, std::initializer_list<UChar32> matchesUnicode, std::initializer_list<CharacterRange> rangesUnicode, CharacterClassWidths widths)
     74    CharacterClass(std::initializer_list<UChar32> matches, std::initializer_list<CharacterRange> ranges, std::initializer_list<UChar32> matchesUnicode, std::initializer_list<CharacterRange> rangesUnicode)
    9875        : m_matches(matches)
    9976        , m_ranges(ranges)
     
    10178        , m_rangesUnicode(rangesUnicode)
    10279        , m_table(0)
    103         , m_characterWidths(widths)
    10480        , m_tableInverted(false)
     81        , m_hasNonBMPCharacters(false)
    10582        , m_anyCharacter(false)
    10683    {
    10784    }
    10885
    109     bool hasNonBMPCharacters() { return m_characterWidths & CharacterClassWidths::HasNonBMPChars; }
    110 
    111     bool hasOneCharacterSize() { return m_characterWidths == CharacterClassWidths::HasBMPChars || m_characterWidths == CharacterClassWidths::HasNonBMPChars; }
    112     bool hasOnlyNonBMPCharacters() { return m_characterWidths == CharacterClassWidths::HasNonBMPChars; }
    113    
    11486    Vector<UChar32> m_matches;
    11587    Vector<CharacterRange> m_ranges;
     
    11890
    11991    const char* m_table;
    120     CharacterClassWidths m_characterWidths;
    12192    bool m_tableInverted : 1;
     93    bool m_hasNonBMPCharacters : 1;
    12294    bool m_anyCharacter : 1;
    12395};
     
    249221    }
    250222   
    251     bool invert() const
     223    bool invert()
    252224    {
    253225        return m_invert;
  • tags/Safari-608.1.15/Source/JavaScriptCore/yarr/create_regex_tables

    r243642 r243950  
    101101    else:
    102102        function += ("    auto characterClass = std::make_unique<CharacterClass>();\n")
    103     hasBMPCharacters = False
    104103    hasNonBMPCharacters = False
    105104    for (min, max) in ranges:
    106         if min < 0x10000:
    107             hasBMPCharacters = True
    108         if max >= 0x10000:
    109             hasNonBMPCharacters = True
    110105        if (min == max):
    111106            if (min > 127):
     
    118113        else:
    119114            function += ("    characterClass->m_ranges.append(CharacterRange(0x%02x, 0x%02x));\n" % (min, max))
    120     function += ("    characterClass->m_characterWidths = CharacterClassWidths::%s;\n" % (("Unknown", "HasBMPChars", "HasNonBMPChars", "HasBothBMPAndNonBMP")[int(hasNonBMPCharacters) * 2 + int(hasBMPCharacters)]))
     115        if max >= 0x10000:
     116            hasNonBMPCharacters = True
     117    function += ("    characterClass->m_hasNonBMPCharacters = %s;\n" % ("true" if hasNonBMPCharacters else "false"))
    121118    function += ("    return characterClass;\n")
    122119    function += ("}\n\n")
  • tags/Safari-608.1.15/Source/JavaScriptCore/yarr/generateYarrUnicodePropertyTables.py

    r243642 r243950  
    3636
    3737header = """/*
    38 * Copyright (C) 2017-2019 Apple Inc. All rights reserved.
     38* Copyright (C) 2017-2018 Apple Inc. All rights reserved.
    3939*
    4040* Redistribution and use in source and binary forms, with or without
     
    226226        self.aliases = []
    227227        self.index = len(PropertyData.allPropertyData)
    228         self.hasBMPCharacters = False
    229228        self.hasNonBMPCharacters = False
    230229        self.matches = []
     
    251250
    252251    def addMatch(self, codePoint):
    253         if codePoint <= MaxBMP:
    254             self.hasBMPCharacters = True
    255         else:
     252        if codePoint > MaxBMP:
    256253            self.hasNonBMPCharacters = True
    257254        if codePoint <= lastASCIICodePoint:
     
    285282
    286283    def addRange(self, lowCodePoint, highCodePoint):
    287         if lowCodePoint <= MaxBMP:
    288             self.hasBMPCharacters = True
    289284        if highCodePoint > MaxBMP:
    290285            self.hasNonBMPCharacters = True
     
    542537        file.write("        std::initializer_list<CharacterRange>(")
    543538        self.dumpMatchData(file, 4, self.unicodeRanges, lambda file, range: (file.write("{{{0:0=#6x}, {1:0=#6x}}}".format(range[0], range[1]))))
    544         file.write("),\n")
    545 
    546         file.write("        CharacterClassWidths::{});\n".format(("Unknown", "HasBMPChars", "HasNonBMPChars", "HasBothBMPAndNonBMP")[int(self.hasNonBMPCharacters) * 2 + int(self.hasBMPCharacters)]))
     539        file.write("));\n")
     540
     541        file.write("    characterClass->m_hasNonBMPCharacters = {};\n".format(("false", "true")[self.hasNonBMPCharacters]))
    547542        file.write("    return characterClass;\n}\n\n")
    548543
Note: See TracChangeset for help on using the changeset viewer.