diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-08-06 14:55:21 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-08-10 14:16:09 +0000 |
commit | 18d2f78437d28987297148b63b99ceed6313a78a (patch) | |
tree | 845e016b002a123e394df43fcf88cf2dc7ee1fb6 /src/qml/jsruntime/qv4regexp.cpp | |
parent | 577630fe4a1f6a129239788080ff9e802118fd26 (diff) |
Update Yarr to the latest version from WebKit
Updated Yarr to a to commit
4d2a53d60487cb1f8b2a9a1e9f684af336fd7d2c in WebKit.
Adjusted the yarr code base to work with our older version of
wtf and masm.
Change-Id: I04b4593ece051e1d7aa087b87aa08c92595d1098
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/jsruntime/qv4regexp.cpp')
-rw-r--r-- | src/qml/jsruntime/qv4regexp.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/qml/jsruntime/qv4regexp.cpp b/src/qml/jsruntime/qv4regexp.cpp index e10493b879..89fd9fc233 100644 --- a/src/qml/jsruntime/qv4regexp.cpp +++ b/src/qml/jsruntime/qv4regexp.cpp @@ -41,6 +41,7 @@ #include "qv4engine_p.h" #include "qv4scopedvalue_p.h" #include <private/qv4mm_p.h> +#include <runtime/VM.h> using namespace QV4; @@ -100,16 +101,24 @@ void Heap::RegExp::init(ExecutionEngine *engine, const QString &pattern, bool ig valid = false; - const char* error = nullptr; - JSC::Yarr::YarrPattern yarrPattern(WTF::String(pattern), ignoreCase, multiLine, &error); - if (error) + JSC::Yarr::ErrorCode error = JSC::Yarr::ErrorCode::NoError; + JSC::RegExpFlags flags = JSC::NoFlags; + if (ignoreCase) + flags = static_cast<JSC::RegExpFlags>(flags | JSC::FlagIgnoreCase); + if (multiline) + flags = static_cast<JSC::RegExpFlags>(flags | JSC::FlagMultiline); + if (global) + flags = static_cast<JSC::RegExpFlags>(flags | JSC::FlagGlobal); + + JSC::Yarr::YarrPattern yarrPattern(WTF::String(pattern), flags, error); + if (error != JSC::Yarr::ErrorCode::NoError) return; subPatternCount = yarrPattern.m_numSubpatterns; #if ENABLE(YARR_JIT) if (!yarrPattern.m_containsBackreferences && engine->canJIT()) { jitCode = new JSC::Yarr::YarrCodeBlock; - JSC::JSGlobalData dummy(internalClass->engine->regExpAllocator); - JSC::Yarr::jitCompile(yarrPattern, JSC::Yarr::Char16, &dummy, *jitCode); + JSC::VM *vm = static_cast<JSC::VM *>(engine); + JSC::Yarr::jitCompile(yarrPattern, JSC::Yarr::Char16, vm, *jitCode); } #else Q_UNUSED(engine) @@ -118,8 +127,7 @@ void Heap::RegExp::init(ExecutionEngine *engine, const QString &pattern, bool ig valid = true; return; } - OwnPtr<JSC::Yarr::BytecodePattern> p = JSC::Yarr::byteCompile(yarrPattern, internalClass->engine->bumperPointerAllocator); - byteCode = p.take(); + byteCode = JSC::Yarr::byteCompile(yarrPattern, internalClass->engine->bumperPointerAllocator).release(); if (byteCode) valid = true; } |