Index: src/builtins/builtins-regexp.cc |
diff --git a/src/builtins/builtins-regexp.cc b/src/builtins/builtins-regexp.cc |
index 65df206e56146d01165ef4ceb5137310189410fc..dcf45d5177b5b68017da747c33314bfbed407fb0 100644 |
--- a/src/builtins/builtins-regexp.cc |
+++ b/src/builtins/builtins-regexp.cc |
@@ -1290,16 +1290,22 @@ |
ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, string, |
Object::ToString(isolate, string_obj)); |
- if (RegExpUtils::IsUnmodifiedRegExp(isolate, recv)) { |
- RETURN_RESULT_OR_FAILURE( |
- isolate, |
- RegExpSplit(isolate, Handle<JSRegExp>::cast(recv), string, limit_obj)); |
- } |
- |
Handle<JSFunction> regexp_fun = isolate->regexp_function(); |
Handle<Object> ctor; |
ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
isolate, ctor, SpeciesConstructor(isolate, recv, regexp_fun)); |
+ |
+ if (recv->IsJSRegExp() && *ctor == *regexp_fun) { |
+ Handle<Object> exec; |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ isolate, exec, JSObject::GetProperty( |
+ recv, factory->NewStringFromAsciiChecked("exec"))); |
+ if (RegExpUtils::IsBuiltinExec(exec)) { |
+ RETURN_RESULT_OR_FAILURE( |
+ isolate, RegExpSplit(isolate, Handle<JSRegExp>::cast(recv), string, |
+ limit_obj)); |
+ } |
+ } |
Handle<Object> flags_obj; |
ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |