コード例 #1
0
void SegmentedString::advanceAndUpdateLineNumberSlowCase()
{
    if (m_pushedChar1) {
        m_pushedChar1 = m_pushedChar2;
        m_pushedChar2 = 0;

        if (m_pushedChar1) {
            m_currentChar = m_pushedChar1;
            return;
        }

        updateAdvanceFunctionPointers();
    } else if (m_currentString.m_length) {
        if (m_currentString.getCurrentChar() == '\n' && m_currentString.doNotExcludeLineNumbers()) {
            ++m_currentLine;
            // Plus 1 because numberOfCharactersConsumed value hasn't incremented yet; it does with m_length decrement below.
            m_numberOfCharactersConsumedPriorToCurrentLine = numberOfCharactersConsumed() + 1;
        }
        if (--m_currentString.m_length == 0)
            advanceSubstring();
        else
            m_currentString.incrementAndGetCurrentChar(); // Only need the ++
    } else if (!isComposite()) {
        m_currentString.clear();
        m_empty = true;
        m_fastPathFlags = NoFastPath;
        m_advanceFunc = &SegmentedString::advanceEmpty;
        m_advanceAndUpdateLineNumberFunc = &SegmentedString::advanceEmpty;
    }

    m_currentChar = m_currentString.m_length ? m_currentString.getCurrentChar() : 0;
}
コード例 #2
0
ファイル: SegmentedString.cpp プロジェクト: ollie314/chromium
void SegmentedString::advanceAndUpdateLineNumberSlowCase() {
  if (m_currentString.length()) {
    if (m_currentString.getCurrentChar() == '\n' &&
        m_currentString.doNotExcludeLineNumbers()) {
      ++m_currentLine;
      // Plus 1 because numberOfCharactersConsumed value hasn't incremented yet;
      // it does with length() decrement below.
      m_numberOfCharactersConsumedPriorToCurrentLine =
          numberOfCharactersConsumed() + 1;
    }
    m_currentString.decrementLength();
    if (!m_currentString.length())
      advanceSubstring();
    else
      m_currentString.incrementAndGetCurrentChar();  // Only need the ++
  } else if (!isComposite()) {
    m_currentString.clear();
    m_empty = true;
    m_fastPathFlags = NoFastPath;
    m_advanceFunc = &SegmentedString::advanceEmpty;
    m_advanceAndUpdateLineNumberFunc = &SegmentedString::advanceEmpty;
  }

  m_currentChar =
      m_currentString.length() ? m_currentString.getCurrentChar() : 0;
}
コード例 #3
0
ファイル: SegmentedString.cpp プロジェクト: ollie314/chromium
void SegmentedString::setCurrentPosition(OrdinalNumber line,
                                         OrdinalNumber columnAftreProlog,
                                         int prologLength) {
  m_currentLine = line.zeroBasedInt();
  m_numberOfCharactersConsumedPriorToCurrentLine =
      numberOfCharactersConsumed() + prologLength -
      columnAftreProlog.zeroBasedInt();
}
コード例 #4
0
ファイル: SegmentedString.cpp プロジェクト: ollie314/chromium
void SegmentedString::advanceAndUpdateLineNumber16() {
  ASSERT(m_currentString.getCurrentChar() == m_currentChar);
  if (m_currentChar == '\n') {
    ++m_currentLine;
    m_numberOfCharactersConsumedPriorToCurrentLine =
        numberOfCharactersConsumed() + 1;
  }
  decrementAndCheckLength();
  m_currentChar = m_currentString.incrementAndGetCurrentChar16();
}
コード例 #5
0
void SegmentedString::advanceSlowCase(int& lineNumber)
{
    if (m_pushedChar1) {
        m_pushedChar1 = m_pushedChar2;
        m_pushedChar2 = 0;
    } else if (m_currentString.m_current) {
        if (*m_currentString.m_current++ == '\n' && m_currentString.doNotExcludeLineNumbers()) {
            ++lineNumber;
            ++m_currentLine;
            // Plus 1 because numberOfCharactersConsumed value hasn't incremented yet; it does with m_length decrement below.
            m_numberOfCharactersConsumedPriorToCurrentLine = numberOfCharactersConsumed() + 1;
        }
        if (--m_currentString.m_length == 0)
            advanceSubstring();
    }
    m_currentChar = m_pushedChar1 ? &m_pushedChar1 : m_currentString.m_current;
}
コード例 #6
0
ファイル: SegmentedString.cpp プロジェクト: eocanha/webkit
void SegmentedString::pushBack(String&& string)
{
    // We never create a substring for an empty string.
    ASSERT(string.length());

    // The new substring we will create won't have the doNotExcludeLineNumbers set appropriately.
    // That was lost when the characters were consumed before pushing them back. But this does
    // not matter, because clients never use this for newlines. Catch that with this assertion.
    ASSERT(!string.contains('\n'));

    // The characters in the string must be previously consumed characters from this segmented string.
    ASSERT(string.length() <= numberOfCharactersConsumed());

    m_numberOfCharactersConsumedPriorToCurrentSubstring += m_currentSubstring.numberOfCharactersConsumed();
    if (m_currentSubstring.length)
        m_otherSubstrings.prepend(WTFMove(m_currentSubstring));
    m_currentSubstring = WTFMove(string);
    m_numberOfCharactersConsumedPriorToCurrentSubstring -= m_currentSubstring.length;
    m_currentCharacter = m_currentSubstring.currentCharacter();
    updateAdvanceFunctionPointers();
}
コード例 #7
0
OrdinalNumber SegmentedString::currentColumn() const
{
    int zeroBasedColumn = numberOfCharactersConsumed() - m_numberOfCharactersConsumedPriorToCurrentLine;
    return OrdinalNumber::fromZeroBasedInt(zeroBasedColumn);
}