Add YarrSyntaxChecker to test RegExp pattern and flag

Signed-off-by: Seonghyun Kim <sh8281.kim@samsung.com>
This commit is contained in:
Seonghyun Kim 2024-07-16 10:34:53 +09:00 committed by Hyukwoo Park
commit b3deb87407
9 changed files with 205 additions and 193 deletions

View file

@ -1984,7 +1984,11 @@ void Scanner::scanRegExp(Scanner::ScannerResult* token)
String* body = this->scanRegExpBody();
String* flags = this->scanRegExpFlags();
// const value = this->testRegExp(body.value, flags.value);
auto error = RegExpObject::checkRegExpSyntax(body, flags);
if (UNLIKELY(error)) {
ErrorHandler::throwError(this->index, this->lineNumber, this->index - this->lineStart + 1, error.value(), ErrorCode::SyntaxError);
}
ScanRegExpResult result;
result.body = body;

View file

@ -28,6 +28,7 @@
#include "Yarr.h"
#include "YarrPattern.h"
#include "YarrInterpreter.h"
#include "YarrSyntaxChecker.h"
namespace Escargot {
@ -578,6 +579,16 @@ Value RegExpObject::regexpFlagsValue(ExecutionState& state, Object* obj)
}
}
Optional<String*> RegExpObject::checkRegExpSyntax(String* pattern, String* flags)
{
JSC::Yarr::ErrorCode errorCode = JSC::Yarr::checkSyntax(pattern, flags);
if (errorCode != JSC::Yarr::ErrorCode::NoError) {
auto str = JSC::Yarr::errorMessage(errorCode);
return String::fromASCII(str, strlen(str));
}
return nullptr;
}
String* RegExpObject::computeRegExpOptionString(ExecutionState& state, Object* obj)
{
char flags[8] = { 0 };

View file

@ -173,6 +173,8 @@ public:
static String* computeRegExpOptionString(ExecutionState& state, Object* obj);
static String* regexpSourceValue(ExecutionState& state, Object* obj);
static Value regexpFlagsValue(ExecutionState& state, Object* obj);
// returns error string if there is error
static Optional<String*> checkRegExpSyntax(String* pattern, String* flags);
protected:
explicit RegExpObject(ExecutionState& state, Object* proto, bool hasLastIndex = true);

View file

@ -94,6 +94,24 @@ public:
constexpr iterator begin() const { return m_storage; }
constexpr iterator end() const { return 0; }
void add(OptionSet optionSet)
{
m_storage |= optionSet.m_storage;
}
void remove(OptionSet optionSet)
{
m_storage &= ~optionSet.m_storage;
}
void set(OptionSet optionSet, bool value)
{
if (value)
add(optionSet);
else
remove(optionSet);
}
constexpr bool contains(OptionSet optionSet) const
{
return m_storage & optionSet.m_storage;

61
third_party/yarr/YarrFlags.cpp vendored Normal file
View file

@ -0,0 +1,61 @@
/*
* Copyright (C) 2019 Sony Interactive Entertainment Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "WTFBridge.h"
#include "YarrFlags.h"
namespace JSC { namespace Yarr {
Optional<OptionSet<Flags>> parseFlags(StringView string)
{
OptionSet<Flags> flags;
for (size_t i = 0; i < string.length(); i ++) {
char16_t character = string[i];
switch (character) {
#define JSC_HANDLE_REGEXP_FLAG(key, name, lowerCaseName, _) \
case key: \
if (flags.contains(Flags::name)) \
return nullptr; \
flags.add(Flags::name); \
break;
JSC_REGEXP_FLAGS(JSC_HANDLE_REGEXP_FLAG)
#undef JSC_HANDLE_REGEXP_FLAG
default:
return nullptr;
}
}
// Can only specify one of 'u' and 'v' flags.
if (flags.contains(Flags::Unicode) && flags.contains(Flags::UnicodeSets))
return nullptr;
return flags;
}
} } // namespace JSC::Yarr

View file

@ -50,4 +50,6 @@ enum class Flags : uint16_t {
DeletedValue = 1 << numberOfFlags,
};
JS_EXPORT_PRIVATE Optional<OptionSet<Flags>> parseFlags(StringView);
} } // namespace JSC::Yarr

72
third_party/yarr/YarrSyntaxChecker.cpp vendored Normal file
View file

@ -0,0 +1,72 @@
/*
* Copyright (C) 2011, 2016 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "WTFBridge.h"
#include "YarrSyntaxChecker.h"
#include "YarrFlags.h"
#include "YarrParser.h"
namespace JSC { namespace Yarr {
class SyntaxChecker {
public:
void assertionBOL() { }
void assertionEOL() { }
void assertionWordBoundary(bool) { }
void atomPatternCharacter(char32_t) { }
void atomBuiltInCharacterClass(BuiltInCharacterClassID, bool) { }
void atomCharacterClassBegin(bool = false) { }
void atomCharacterClassAtom(UChar) { }
void atomCharacterClassRange(UChar, UChar) { }
void atomCharacterClassBuiltIn(BuiltInCharacterClassID, bool) { }
void atomClassStringDisjunction(Vector<Vector<char32_t>>&) { }
void atomCharacterClassSetOp(CharacterClassSetOp) { }
void atomCharacterClassPushNested() { }
void atomCharacterClassPopNested() { }
void atomCharacterClassEnd() { }
void atomParenthesesSubpatternBegin(bool = true, Optional<String> = nullptr) { }
void atomParentheticalAssertionBegin(bool, MatchDirection) { }
void atomParenthesesEnd() { }
void atomBackReference(unsigned) { }
void atomNamedBackReference(const String&) { }
void atomNamedForwardReference(const String&) { }
void quantifyAtom(unsigned, unsigned, bool) { }
void disjunction(CreateDisjunctionPurpose) { }
void resetForReparsing() { }
};
ErrorCode checkSyntax(StringView pattern, StringView flags)
{
SyntaxChecker syntaxChecker;
auto parsedFlags = parseFlags(flags);
if (!parsedFlags)
return ErrorCode::InvalidRegularExpressionFlags;
return parse(syntaxChecker, pattern, compileMode(parsedFlags));
}
}} // JSC::Yarr

34
third_party/yarr/YarrSyntaxChecker.h vendored Normal file
View file

@ -0,0 +1,34 @@
/*
* Copyright (C) 2011 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#pragma once
#include "YarrErrorCode.h"
namespace JSC { namespace Yarr {
ErrorCode checkSyntax(StringView pattern, StringView flags);
}} // JSC::Yarr

View file

@ -587,169 +587,6 @@
<test id="built-ins/RegExp/named-groups/duplicate-names-replaceall"><reason>TODO</reason></test>
<test id="built-ins/RegExp/named-groups/non-unicode-property-names-valid"><reason>TODO</reason></test>
<test id="built-ins/RegExp/named-groups/unicode-property-names-valid"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_F-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Invalid-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_N-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_No-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_T-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Y-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/binary-property-with-value-ASCII_-_Yes-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/character-class-range-end"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/character-class-range-no-dash-end"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/character-class-range-no-dash-start"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/character-class-range-start"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/Basic_Emoji-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/Emoji_Keycap_Sequence-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Flag_Sequence-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Modifier_Sequence-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_Tag_Sequence-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-CharacterClass"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-P"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/generated/strings/RGI_Emoji_ZWJ_Sequence-negative-u"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Block-implicit-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-implicit-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-In-prefix-Script-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-Is-prefix-Script-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-circumflex-negation-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-empty"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-empty-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-invalid"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-invalid-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-no-braces"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-no-braces-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-no-braces-value"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-no-braces-value-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-separator"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-separator-and-value-only-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-separator-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-separator-only"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-separator-only-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-unclosed"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-unclosed-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-unopened"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/grammar-extension-unopened-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-01"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-01-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-02"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-02-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-03"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-03-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-04"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-04-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-05"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-05-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-06"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-06-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-07"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-07-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-08"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-08-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-09"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-09-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-10"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-10-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-11"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-11-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-12"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-12-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-13"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-13-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-14"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/loose-matching-14-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-equals-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-General_Category-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-equals-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-equals-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-binary-property-without-value-Script_Extensions-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-binary-property"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-binary-property-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-and-value"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-and-value-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-existing-value"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-existing-value-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-value-General_Category-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-value-Script"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-value-Script-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-value-Script_Extensions-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/non-existent-property-value-general-category"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Composition_Exclusion-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFC-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFD-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKC-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Expands_On_NFKD-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-FC_NFKC_Closure-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Full_Composition_Exclusion-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Grapheme_Link-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Hyphen-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Alphabetic-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Default_Ignorable_Code_Point-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Grapheme_Extend-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Continue-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_ID_Start-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Lowercase-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Math-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Other_Uppercase-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-binary-property-Prepended_Concatenation_Mark-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-Block-with-value"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-Block-with-value-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-FC_NFKC_Closure-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-Line_Break"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-Line_Break-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value"><reason>TODO</reason></test>
<test id="built-ins/RegExp/property-escapes/unsupported-property-Line_Break-with-value-negated"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/builtin-infer-unicode"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/flags-tostring-error"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/Symbol.match/get-flags-err"><reason>TODO</reason></test>
@ -763,34 +600,6 @@
<test id="built-ins/RegExp/prototype/exec/duplicate-named-indices-groups-properties"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/exec/u-lastindex-adv"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/source/value-line-terminator"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-01"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-02"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-03"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-04"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-05"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-06"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-07"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-08"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-09"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-10"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-11"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-12"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-13"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-14"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-15"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-16"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-17"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-18"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-19"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-20"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-21"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-22"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-23"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-24"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-25"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-26"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-27"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/breaking-change-from-u-to-v-28"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/cross-realm"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/length"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/name"><reason>TODO</reason></test>
@ -799,7 +608,6 @@
<test id="built-ins/RegExp/prototype/unicodeSets/this-val-non-obj"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/this-val-regexp"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/this-val-regexp-prototype"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/uv-flags"><reason>TODO</reason></test>
<test id="built-ins/RegExp/prototype/unicodeSets/uv-flags-constructor"><reason>TODO</reason></test>
<test id="built-ins/RegExp/quantifier-integer-limit"><reason>TODO</reason></test>
<test id="built-ins/RegExp/unicodeSets/generated/rgi-emoji-15.1"><reason>TODO</reason></test>