Ignore:
Timestamp:
Dec 20, 2017, 5:58:28 PM (7 years ago)
Author:
Yusuke Suzuki
Message:

[JSC] Do not check isValid() in op_new_regexp
https://bugs.webkit.org/show_bug.cgi?id=180970

Reviewed by Saam Barati.

JSTests:

  • stress/regexp-syntax-error-invalid-flags.js: Added.

(shouldThrow):

Source/JavaScriptCore:

We should not check isValid() inside op_new_regexp.
This simplifies the semantics of NewRegexp node in DFG.

  • bytecompiler/NodesCodegen.cpp:

(JSC::RegExpNode::emitBytecode):

  • dfg/DFGMayExit.cpp:
  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileNewRegexp):

  • ftl/FTLLowerDFGToB3.cpp:

(JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):

  • jit/JITOperations.cpp:
  • llint/LLIntSlowPaths.cpp:

(JSC::LLInt::LLINT_SLOW_PATH_DECL):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r225799 r226209  
    142142{
    143143    if (dst == generator.ignoredResult())
    144         return 0;
    145     return generator.emitNewRegExp(generator.finalDestination(dst), RegExp::create(*generator.vm(), m_pattern.string(), regExpFlags(m_flags.string())));
     144        return nullptr;
     145    RegExp* regExp = RegExp::create(*generator.vm(), m_pattern.string(), regExpFlags(m_flags.string()));
     146    if (regExp->isValid())
     147        return generator.emitNewRegExp(generator.finalDestination(dst), regExp);
     148    const char* messageCharacters = regExp->errorMessage();
     149    const Identifier& message = generator.parserArena().identifierArena().makeIdentifier(generator.vm(), bitwise_cast<const LChar*>(messageCharacters), strlen(messageCharacters));
     150    generator.emitThrowStaticError(ErrorType::SyntaxError, message);
     151    return generator.emitLoad(generator.finalDestination(dst), jsUndefined());
    146152}
    147153
Note: See TracChangeset for help on using the changeset viewer.