Index: src/runtime/runtime-regexp.cc |
diff --git a/src/runtime/runtime-regexp.cc b/src/runtime/runtime-regexp.cc |
index 5005a5ecda6e1223d7931588af8d0b39516e874d..c887d459e76dfc5a8d1c23285e4d2f3a8aa8c0c9 100644 |
--- a/src/runtime/runtime-regexp.cc |
+++ b/src/runtime/runtime-regexp.cc |
@@ -1116,6 +1116,7 @@ class VectorBackedMatch : public String::Match { |
Handle<JSObject> ConstructNamedCaptureGroupsObject( |
Isolate* isolate, Handle<FixedArray> capture_map, |
std::function<Object*(int)> f_get_capture) { |
+ DCHECK(FLAG_harmony_regexp_named_captures); |
Handle<JSObject> groups = isolate->factory()->NewJSObjectWithNullProto(); |
const int capture_count = capture_map->length() >> 1; |
@@ -1228,6 +1229,7 @@ static Object* SearchRegExpMultiple(Isolate* isolate, Handle<String> subject, |
Handle<Object> maybe_capture_map(regexp->CaptureNameMap(), isolate); |
const bool has_named_captures = maybe_capture_map->IsFixedArray(); |
+ DCHECK_IMPLIES(has_named_captures, FLAG_harmony_regexp_named_captures); |
const int argc = |
has_named_captures ? 4 + capture_count : 3 + capture_count; |
@@ -1254,7 +1256,6 @@ static Object* SearchRegExpMultiple(Isolate* isolate, Handle<String> subject, |
elements->set(cursor++, *subject); |
if (has_named_captures) { |
- DCHECK(FLAG_harmony_regexp_named_captures); |
Handle<FixedArray> capture_map = |
Handle<FixedArray>::cast(maybe_capture_map); |
Handle<JSObject> groups = ConstructNamedCaptureGroupsObject( |
@@ -1499,12 +1500,12 @@ RUNTIME_FUNCTION(Runtime_StringReplaceNonGlobalRegExpWithFunction) { |
Object* maybe_capture_map = regexp->CaptureNameMap(); |
if (maybe_capture_map->IsFixedArray()) { |
- DCHECK(FLAG_harmony_regexp_named_captures); |
has_named_captures = true; |
capture_map = handle(FixedArray::cast(maybe_capture_map)); |
} |
} |
+ DCHECK_IMPLIES(has_named_captures, FLAG_harmony_regexp_named_captures); |
const int argc = has_named_captures ? m + 3 : m + 2; |
ScopedVector<Handle<Object>> argv(argc); |
@@ -1853,12 +1854,15 @@ RUNTIME_FUNCTION(Runtime_RegExpReplace) { |
captures.push_back(capture); |
} |
- Handle<Object> groups_obj; |
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
- isolate, groups_obj, |
- Object::GetProperty(result, factory->groups_string())); |
+ Handle<Object> groups_obj = isolate->factory()->undefined_value(); |
+ if (FLAG_harmony_regexp_named_captures) { |
+ ASSIGN_RETURN_FAILURE_ON_EXCEPTION( |
+ isolate, groups_obj, |
+ Object::GetProperty(result, factory->groups_string())); |
+ } |
const bool has_named_captures = !groups_obj->IsUndefined(isolate); |
+ DCHECK_IMPLIES(has_named_captures, FLAG_harmony_regexp_named_captures); |
Handle<String> replacement; |
if (functional_replace) { |