mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 14:59:41 +00:00
[vm/regexp] Name generated Regexp function with actual expression.
Currently all generated Regexp functions share the same name making profile information with RegExp functions harder to use. BUG=https://github.com/dart-lang/sdk/issues/51624 TEST=ci Change-Id: I67acf73df4be301dbcb17a60b8be1793002897b4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/287247 Commit-Queue: Alexander Aprelev <aam@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
parent
2496c1a69a
commit
63bea106d6
|
@ -12,6 +12,7 @@
|
|||
#include "vm/regexp_assembler_bytecode.h"
|
||||
#include "vm/regexp_parser.h"
|
||||
#include "vm/reusable_handles.h"
|
||||
#include "vm/symbols.h"
|
||||
#include "vm/thread.h"
|
||||
|
||||
#if !defined(DART_PRECOMPILED_RUNTIME)
|
||||
|
@ -62,11 +63,13 @@ DEFINE_NATIVE_ENTRY(RegExp_factory, 0, 6) {
|
|||
RegExpParser::ParseRegExp(pattern, flags, &compileData);
|
||||
|
||||
{
|
||||
RegExpKey lookup_symbol_key(String::Handle(Symbols::New(thread, pattern)),
|
||||
flags);
|
||||
SafepointMutexLocker ml(thread->isolate_group()->symbols_mutex());
|
||||
CanonicalRegExpSet table(
|
||||
thread->zone(),
|
||||
thread->isolate_group()->object_store()->regexp_table());
|
||||
regexp ^= table.InsertNewOrGet(lookup_key);
|
||||
regexp ^= table.InsertNewOrGet(lookup_symbol_key);
|
||||
thread->isolate_group()->object_store()->set_regexp_table(table.Release());
|
||||
}
|
||||
|
||||
|
|
|
@ -5528,8 +5528,9 @@ void CreateSpecializedFunction(Thread* thread,
|
|||
|
||||
const FunctionType& signature =
|
||||
FunctionType::Handle(zone, FunctionType::New());
|
||||
const String& pattern = String::Handle(zone, regexp.pattern());
|
||||
Function& fn =
|
||||
Function::Handle(zone, Function::New(signature, Symbols::ColonMatcher(),
|
||||
Function::Handle(zone, Function::New(signature, pattern,
|
||||
UntaggedFunction::kIrregexpFunction,
|
||||
true, // Static.
|
||||
false, // Not const.
|
||||
|
|
|
@ -28,7 +28,8 @@ ISOLATE_UNIT_TEST_CASE(RegExp_OneByteString) {
|
|||
const String& str =
|
||||
String::Handle(OneByteString::New(chars, len, Heap::kNew));
|
||||
|
||||
const String& pat = String::Handle(String::New("bc"));
|
||||
const String& pat =
|
||||
String::Handle(Symbols::New(thread, String::Handle(String::New("bc"))));
|
||||
const Array& res = Array::Handle(Match(pat, str));
|
||||
EXPECT_EQ(2, res.Length());
|
||||
|
||||
|
@ -49,7 +50,8 @@ ISOLATE_UNIT_TEST_CASE(RegExp_TwoByteString) {
|
|||
const String& str =
|
||||
String::Handle(TwoByteString::New(chars, len, Heap::kNew));
|
||||
|
||||
const String& pat = String::Handle(String::New("bc"));
|
||||
const String& pat =
|
||||
String::Handle(Symbols::New(thread, String::Handle(String::New("bc"))));
|
||||
const Array& res = Array::Handle(Match(pat, str));
|
||||
EXPECT_EQ(2, res.Length());
|
||||
|
||||
|
@ -72,7 +74,8 @@ ISOLATE_UNIT_TEST_CASE(RegExp_ExternalOneByteString) {
|
|||
const String& str = String::Handle(ExternalOneByteString::New(
|
||||
chars, len, NULL, 0, NoopFinalizer, Heap::kNew));
|
||||
|
||||
const String& pat = String::Handle(String::New("bc"));
|
||||
const String& pat =
|
||||
String::Handle(Symbols::New(thread, String::Handle(String::New("bc"))));
|
||||
const Array& res = Array::Handle(Match(pat, str));
|
||||
EXPECT_EQ(2, res.Length());
|
||||
|
||||
|
@ -93,7 +96,8 @@ ISOLATE_UNIT_TEST_CASE(RegExp_ExternalTwoByteString) {
|
|||
const String& str = String::Handle(ExternalTwoByteString::New(
|
||||
chars, len, NULL, 0, NoopFinalizer, Heap::kNew));
|
||||
|
||||
const String& pat = String::Handle(String::New("bc"));
|
||||
const String& pat =
|
||||
String::Handle(Symbols::New(thread, String::Handle(String::New("bc"))));
|
||||
const Array& res = Array::Handle(Match(pat, str));
|
||||
EXPECT_EQ(2, res.Length());
|
||||
|
||||
|
|
Loading…
Reference in a new issue