| Index: src/builtins/builtins-regexp.cc
|
| diff --git a/src/builtins/builtins-regexp.cc b/src/builtins/builtins-regexp.cc
|
| index 04e3d96a8d5748a20039260ce34de4a8e0186d92..2191268441c92687715ff86cbfecd9774b770ebc 100644
|
| --- a/src/builtins/builtins-regexp.cc
|
| +++ b/src/builtins/builtins-regexp.cc
|
| @@ -33,9 +33,8 @@
|
| void StoreLastIndex(Node* context, Node* regexp, Node* value,
|
| bool is_fastpath);
|
|
|
| - Node* ConstructNewResultFromMatchInfo(Node* const context, Node* const regexp,
|
| - Node* const match_info,
|
| - Node* const string);
|
| + Node* ConstructNewResultFromMatchInfo(Node* context, Node* match_info,
|
| + Node* string);
|
|
|
| Node* RegExpPrototypeExecBodyWithoutResult(Node* const context,
|
| Node* const regexp,
|
| @@ -142,10 +141,10 @@
|
| }
|
| }
|
|
|
| -Node* RegExpBuiltinsAssembler::ConstructNewResultFromMatchInfo(
|
| - Node* const context, Node* const regexp, Node* const match_info,
|
| - Node* const string) {
|
| - Label named_captures(this), out(this);
|
| +Node* RegExpBuiltinsAssembler::ConstructNewResultFromMatchInfo(Node* context,
|
| + Node* match_info,
|
| + Node* string) {
|
| + Label out(this);
|
|
|
| Node* const num_indices = SmiUntag(LoadFixedArrayElement(
|
| match_info, RegExpMatchInfo::kNumberOfCapturesIndex));
|
| @@ -165,8 +164,7 @@
|
|
|
| StoreFixedArrayElement(result_elements, 0, first, SKIP_WRITE_BARRIER);
|
|
|
| - // If no captures exist we can skip named capture handling as well.
|
| - GotoIf(SmiEqual(num_results, SmiConstant(1)), &out);
|
| + GotoIf(SmiEqual(num_results, SmiConstant(Smi::FromInt(1))), &out);
|
|
|
| // Store all remaining captures.
|
| Node* const limit = IntPtrAdd(
|
| @@ -189,7 +187,7 @@
|
| Node* const start = LoadFixedArrayElement(match_info, from_cursor);
|
|
|
| Label next_iter(this);
|
| - GotoIf(SmiEqual(start, SmiConstant(-1)), &next_iter);
|
| + GotoIf(SmiEqual(start, SmiConstant(Smi::FromInt(-1))), &next_iter);
|
|
|
| Node* const from_cursor_plus1 = IntPtrAdd(from_cursor, IntPtrConstant(1));
|
| Node* const end = LoadFixedArrayElement(match_info, from_cursor_plus1);
|
| @@ -201,85 +199,7 @@
|
| Bind(&next_iter);
|
| var_from_cursor.Bind(IntPtrAdd(from_cursor, IntPtrConstant(2)));
|
| var_to_cursor.Bind(IntPtrAdd(to_cursor, IntPtrConstant(1)));
|
| - Branch(UintPtrLessThan(var_from_cursor.value(), limit), &loop,
|
| - &named_captures);
|
| - }
|
| -
|
| - Bind(&named_captures);
|
| - {
|
| - // We reach this point only if captures exist, implying that this is an
|
| - // IRREGEXP JSRegExp.
|
| -
|
| - CSA_ASSERT(this, HasInstanceType(regexp, JS_REGEXP_TYPE));
|
| - CSA_ASSERT(this, SmiGreaterThan(num_results, SmiConstant(1)));
|
| -
|
| - // Preparations for named capture properties. Exit early if the result does
|
| - // not have any named captures to minimize performance impact.
|
| -
|
| - Node* const data = LoadObjectField(regexp, JSRegExp::kDataOffset);
|
| - CSA_ASSERT(this, SmiEqual(LoadFixedArrayElement(data, JSRegExp::kTagIndex),
|
| - SmiConstant(JSRegExp::IRREGEXP)));
|
| -
|
| - // The names fixed array associates names at even indices with a capture
|
| - // index at odd indices.
|
| - Node* const names =
|
| - LoadFixedArrayElement(data, JSRegExp::kIrregexpCaptureNameMapIndex);
|
| - GotoIf(SmiEqual(names, SmiConstant(0)), &out);
|
| -
|
| - // Allocate a new object to store the named capture properties.
|
| - // TODO(jgruber): Could be optimized by adding the object map to the heap
|
| - // root list.
|
| -
|
| - Node* const native_context = LoadNativeContext(context);
|
| - Node* const object_function =
|
| - LoadContextElement(native_context, Context::OBJECT_FUNCTION_INDEX);
|
| - Node* const object_function_map = LoadObjectField(
|
| - object_function, JSFunction::kPrototypeOrInitialMapOffset);
|
| -
|
| - Node* const group_object = AllocateJSObjectFromMap(object_function_map);
|
| -
|
| - // Store it on the result as a 'group' property.
|
| -
|
| - {
|
| - Node* const name = HeapConstant(isolate()->factory()->group_string());
|
| - Node* const language_mode = SmiConstant(Smi::FromInt(STRICT));
|
| - CallRuntime(Runtime::kSetProperty, context, result, name, group_object,
|
| - language_mode);
|
| - }
|
| -
|
| - // One or more named captures exist, add a property for each one.
|
| -
|
| - CSA_ASSERT(this, HasInstanceType(names, FIXED_ARRAY_TYPE));
|
| - Node* const names_length = LoadAndUntagFixedArrayBaseLength(names);
|
| - CSA_ASSERT(this, IntPtrGreaterThan(names_length, IntPtrConstant(0)));
|
| -
|
| - Variable var_i(this, MachineType::PointerRepresentation());
|
| - var_i.Bind(IntPtrConstant(0));
|
| -
|
| - Variable* vars[] = {&var_i};
|
| - const int vars_count = sizeof(vars) / sizeof(vars[0]);
|
| - Label loop(this, vars_count, vars);
|
| -
|
| - Goto(&loop);
|
| - Bind(&loop);
|
| - {
|
| - Node* const i = var_i.value();
|
| - Node* const i_plus_1 = IntPtrAdd(i, IntPtrConstant(1));
|
| - Node* const i_plus_2 = IntPtrAdd(i_plus_1, IntPtrConstant(1));
|
| -
|
| - Node* const name = LoadFixedArrayElement(names, i);
|
| - Node* const index = LoadFixedArrayElement(names, i_plus_1);
|
| - Node* const capture =
|
| - LoadFixedArrayElement(result_elements, SmiUntag(index));
|
| -
|
| - Node* const language_mode = SmiConstant(Smi::FromInt(STRICT));
|
| - CallRuntime(Runtime::kSetProperty, context, group_object, name, capture,
|
| - language_mode);
|
| -
|
| - var_i.Bind(i_plus_2);
|
| - Branch(IntPtrGreaterThanOrEqual(var_i.value(), names_length), &out,
|
| - &loop);
|
| - }
|
| + Branch(UintPtrLessThan(var_from_cursor.value(), limit), &loop, &out);
|
| }
|
|
|
| Bind(&out);
|
| @@ -432,7 +352,7 @@
|
| {
|
| Node* const match_indices = indices_or_null;
|
| Node* const result =
|
| - ConstructNewResultFromMatchInfo(context, regexp, match_indices, string);
|
| + ConstructNewResultFromMatchInfo(context, match_indices, string);
|
| var_result.Bind(result);
|
| Goto(&out);
|
| }
|
| @@ -2602,7 +2522,7 @@
|
| Bind(&if_matched);
|
| {
|
| Node* result =
|
| - ConstructNewResultFromMatchInfo(context, regexp, match_indices, string);
|
| + ConstructNewResultFromMatchInfo(context, match_indices, string);
|
| Return(result);
|
| }
|
| }
|
|
|