Commit 6beb0cf4 authored by Iain Ireland's avatar Iain Ireland Committed by V8 LUCI CQ

[regexp] SpiderMonkey embedding fixes

There are two changes in this patch.

1. We previously added `VerifyRegExpSyntax` in regexp-parser.h to support checking regexp syntax for early errors in SpiderMonkey. Now that V8 is also emitting early errors for regexps (bug v8:896), SpiderMonkey can use the same code as V8.

2. Bug v8:11069 used a std::unordered_map as a cache for range arrays. This is currently the only place in irregexp that can call non-placement new, which SpiderMonkey has a static analysis to detect. Converting this to a ZoneUnorderedMap solves the problem for us, and seems consistent with the rest of irregexp.

Bug: v8:13108
Change-Id: Icedafd7d30fd040760cb0676a7bef8d55853bb93
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3785444
Commit-Queue: Jakob Linke <jgruber@chromium.org>
Reviewed-by: 's avatarJakob Linke <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/main@{#81988}
parent a691632c
...@@ -291,7 +291,7 @@ class NativeRegExpMacroAssembler: public RegExpMacroAssembler { ...@@ -291,7 +291,7 @@ class NativeRegExpMacroAssembler: public RegExpMacroAssembler {
}; };
NativeRegExpMacroAssembler(Isolate* isolate, Zone* zone) NativeRegExpMacroAssembler(Isolate* isolate, Zone* zone)
: RegExpMacroAssembler(isolate, zone) {} : RegExpMacroAssembler(isolate, zone), range_array_cache_(zone) {}
~NativeRegExpMacroAssembler() override = default; ~NativeRegExpMacroAssembler() override = default;
// Returns a {Result} sentinel, or the number of successful matches. // Returns a {Result} sentinel, or the number of successful matches.
...@@ -349,7 +349,7 @@ class NativeRegExpMacroAssembler: public RegExpMacroAssembler { ...@@ -349,7 +349,7 @@ class NativeRegExpMacroAssembler: public RegExpMacroAssembler {
const byte* input_end, int* output, int output_size, const byte* input_end, int* output, int output_size,
Isolate* isolate, JSRegExp regexp); Isolate* isolate, JSRegExp regexp);
std::unordered_map<uint32_t, Handle<ByteArray>> range_array_cache_; ZoneUnorderedMap<uint32_t, Handle<ByteArray>> range_array_cache_;
}; };
} // namespace internal } // namespace internal
......
...@@ -2367,14 +2367,6 @@ template bool RegExpParser::VerifyRegExpSyntax<base::uc16>( ...@@ -2367,14 +2367,6 @@ template bool RegExpParser::VerifyRegExpSyntax<base::uc16>(
Zone*, uintptr_t, const base::uc16*, int, RegExpFlags, RegExpCompileData*, Zone*, uintptr_t, const base::uc16*, int, RegExpFlags, RegExpCompileData*,
const DisallowGarbageCollection&); const DisallowGarbageCollection&);
// static
bool RegExpParser::VerifyRegExpSyntax(Isolate* isolate, Zone* zone,
Handle<String> input, RegExpFlags flags,
RegExpCompileData* result,
const DisallowGarbageCollection&) {
return ParseRegExpFromHeapString(isolate, zone, input, flags, result);
}
#undef LAST #undef LAST
} // namespace internal } // namespace internal
......
...@@ -28,12 +28,6 @@ class V8_EXPORT_PRIVATE RegExpParser : public AllStatic { ...@@ -28,12 +28,6 @@ class V8_EXPORT_PRIVATE RegExpParser : public AllStatic {
const CharT* input, int input_length, const CharT* input, int input_length,
RegExpFlags flags, RegExpCompileData* result, RegExpFlags flags, RegExpCompileData* result,
const DisallowGarbageCollection& no_gc); const DisallowGarbageCollection& no_gc);
// Used by the SpiderMonkey embedding of irregexp.
static bool VerifyRegExpSyntax(Isolate* isolate, Zone* zone,
Handle<String> input, RegExpFlags flags,
RegExpCompileData* result,
const DisallowGarbageCollection& no_gc);
}; };
} // namespace internal } // namespace internal
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment