aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime/qv4regexp.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-08-06 14:55:21 +0200
committerLars Knoll <lars.knoll@qt.io>2018-08-10 14:16:09 +0000
commit18d2f78437d28987297148b63b99ceed6313a78a (patch)
tree845e016b002a123e394df43fcf88cf2dc7ee1fb6 /src/qml/jsruntime/qv4regexp.cpp
parent577630fe4a1f6a129239788080ff9e802118fd26 (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.cpp22
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;
}