diff --git a/js/src/frontend/TokenStream.cpp b/js/src/frontend/TokenStream.cpp index b464b23048..2539249ad9 100644 --- a/js/src/frontend/TokenStream.cpp +++ b/js/src/frontend/TokenStream.cpp @@ -24,6 +24,7 @@ #include "frontend/BytecodeCompiler.h" #include "frontend/ReservedWords.h" +#include "irregexp/FeatureFlags.h" #include "js/CharacterEncoding.h" #include "js/UniquePtr.h" #include "vm/HelperThreads.h" @@ -1942,6 +1943,8 @@ TokenStream::getTokenInternal(TokenKind* ttp, Modifier modifier) reflags = RegExpFlag(reflags | UnicodeFlag); else if (c == 's' && !(reflags & DotAllFlag)) reflags = RegExpFlag(reflags | DotAllFlag); + else if (c == 'v' && irregexp::kParseFlagUnicodeSetsAsUnicode && !(reflags & UnicodeFlag)) + reflags = RegExpFlag(reflags | UnicodeFlag); else break; getChar(); diff --git a/js/src/irregexp/FeatureFlags.h b/js/src/irregexp/FeatureFlags.h new file mode 100644 index 0000000000..1e0178b926 --- /dev/null +++ b/js/src/irregexp/FeatureFlags.h @@ -0,0 +1,20 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef irregexp_FeatureFlags_h +#define irregexp_FeatureFlags_h + +namespace js { + +namespace irregexp { + +// Feature flag to treat /../v as /../u (https://v8.dev/features/regexp-v-flag) +// We don't support Set Notation or the changed Case Insenstive handling +// but we have Property Sequences and want them in unit test runs. +static const bool kParseFlagUnicodeSetsAsUnicode = false; + +} } // namespace js::irregexp + +#endif // irregexp_FeatureFlags_h diff --git a/js/src/vm/RegExpObject.cpp b/js/src/vm/RegExpObject.cpp index 33b97a1174..a23dce25d1 100644 --- a/js/src/vm/RegExpObject.cpp +++ b/js/src/vm/RegExpObject.cpp @@ -15,6 +15,7 @@ #include "builtin/RegExp.h" #include "frontend/TokenStream.h" +#include "irregexp/FeatureFlags.h" #ifdef DEBUG #include "irregexp/RegExpBytecode.h" #endif @@ -1484,6 +1485,13 @@ ParseRegExpFlags(const CharT* chars, size_t length, RegExpFlag* flagsOut, char16 if (!HandleRegExpFlag(UnicodeFlag, flagsOut)) return false; break; + case 'v': + if (irregexp::kParseFlagUnicodeSetsAsUnicode) { + if (!HandleRegExpFlag(UnicodeFlag, flagsOut)) + return false; + break; + } + MOZ_FALLTHROUGH default: return false; }