Ignore:
Timestamp:
Dec 19, 2017, 11:16:21 AM (7 years ago)
Author:
Yusuke Suzuki
Message:

[YARR] Yarr should return ErrorCode instead of error messages (const char*)
https://bugs.webkit.org/show_bug.cgi?id=180966

Reviewed by Mark Lam.

Source/JavaScriptCore:

Currently, Yarr returns const char*` for an error message when needed.
But it is easier to handle error status if Yarr returns an error code
instead of const char*.

In this patch, we introduce Yarr::ErrorCode. Yarr returns it instead of
const char*. std::expected<void, Yarr::ErrorCode> would be appropriate
for the Yarr API interface. But it requires substantial changes removing
ErrorCode::NoError, so this patch just uses the current Yarr::ErrorCode as
a first step.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • Sources.txt:
  • inspector/ContentSearchUtilities.cpp:

(Inspector::ContentSearchUtilities::findMagicComment):

  • parser/ASTBuilder.h:

(JSC::ASTBuilder::createRegExp):

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::parsePrimaryExpression):

  • parser/SyntaxChecker.h:

(JSC::SyntaxChecker::createRegExp):

  • runtime/RegExp.cpp:

(JSC::RegExp::RegExp):
(JSC::RegExp::byteCodeCompileIfNecessary):
(JSC::RegExp::compile):
(JSC::RegExp::compileMatchOnly):

  • runtime/RegExp.h:
  • yarr/RegularExpression.cpp:

(JSC::Yarr::RegularExpression::Private::Private):
(JSC::Yarr::RegularExpression::Private::compile):

  • yarr/YarrErrorCode.cpp: Added.

(JSC::Yarr::errorMessage):

  • yarr/YarrErrorCode.h: Copied from Source/JavaScriptCore/yarr/YarrSyntaxChecker.h.

(JSC::Yarr::hasError):

  • yarr/YarrParser.h:

(JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):
(JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
(JSC::Yarr::Parser::Parser):
(JSC::Yarr::Parser::isIdentityEscapeAnError):
(JSC::Yarr::Parser::parseEscape):
(JSC::Yarr::Parser::parseCharacterClass):
(JSC::Yarr::Parser::parseParenthesesBegin):
(JSC::Yarr::Parser::parseParenthesesEnd):
(JSC::Yarr::Parser::parseQuantifier):
(JSC::Yarr::Parser::parseTokens):
(JSC::Yarr::Parser::parse):
(JSC::Yarr::Parser::tryConsumeUnicodeEscape):
(JSC::Yarr::Parser::tryConsumeUnicodePropertyExpression):
(JSC::Yarr::parse):

  • yarr/YarrPattern.cpp:

(JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
(JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):
(JSC::Yarr::YarrPatternConstructor::setupOffsets):
(JSC::Yarr::YarrPattern::compile):
(JSC::Yarr::YarrPattern::YarrPattern):
(JSC::Yarr::YarrPattern::errorMessage): Deleted.

  • yarr/YarrPattern.h:

(JSC::Yarr::YarrPattern::reset):

  • yarr/YarrSyntaxChecker.cpp:

(JSC::Yarr::checkSyntax):

  • yarr/YarrSyntaxChecker.h:

Source/WebCore:

Remove unnecessary String creation.

No behavior change.

  • contentextensions/URLFilterParser.cpp:

(WebCore::ContentExtensions::URLFilterParser::addPattern):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/runtime/RegExp.cpp

    r226011 r226128  
    215215    , m_patternString(patternString)
    216216    , m_flags(flags)
    217     , m_constructionError(0)
    218     , m_numSubpatterns(0)
    219 #if ENABLE(REGEXP_TRACING)
    220     , m_rtMatchOnlyTotalSubjectStringLen(0.0)
    221     , m_rtMatchTotalSubjectStringLen(0.0)
    222     , m_rtMatchOnlyCallCount(0)
    223     , m_rtMatchOnlyFoundCount(0)
    224     , m_rtMatchCallCount(0)
    225     , m_rtMatchFoundCount(0)
    226 #endif
    227217{
    228218}
     
    231221{
    232222    Base::finishCreation(vm);
    233     Yarr::YarrPattern pattern(m_patternString, m_flags, &m_constructionError, vm.stackLimit());
     223    Yarr::YarrPattern pattern(m_patternString, m_flags, m_constructionErrorCode, vm.stackLimit());
    234224    if (!isValid())
    235225        m_state = ParseError;
     
    283273        return;
    284274
    285     Yarr::YarrPattern pattern(m_patternString, m_flags, &m_constructionError, vm->stackLimit());
    286     if (m_constructionError) {
     275    Yarr::YarrPattern pattern(m_patternString, m_flags, m_constructionErrorCode, vm->stackLimit());
     276    if (hasError(m_constructionErrorCode)) {
    287277        RELEASE_ASSERT_NOT_REACHED();
    288278#if COMPILER_QUIRK(CONSIDERS_UNREACHABLE_CODE)
     
    300290    ConcurrentJSLocker locker(m_lock);
    301291   
    302     Yarr::YarrPattern pattern(m_patternString, m_flags, &m_constructionError, vm->stackLimit());
    303     if (m_constructionError) {
     292    Yarr::YarrPattern pattern(m_patternString, m_flags, m_constructionErrorCode, vm->stackLimit());
     293    if (hasError(m_constructionErrorCode)) {
    304294        RELEASE_ASSERT_NOT_REACHED();
    305295#if COMPILER_QUIRK(CONSIDERS_UNREACHABLE_CODE)
     
    356346    ConcurrentJSLocker locker(m_lock);
    357347   
    358     Yarr::YarrPattern pattern(m_patternString, m_flags, &m_constructionError, vm->stackLimit());
    359     if (m_constructionError) {
     348    Yarr::YarrPattern pattern(m_patternString, m_flags, m_constructionErrorCode, vm->stackLimit());
     349    if (hasError(m_constructionErrorCode)) {
    360350        RELEASE_ASSERT_NOT_REACHED();
    361351#if COMPILER_QUIRK(CONSIDERS_UNREACHABLE_CODE)
Note: See TracChangeset for help on using the changeset viewer.