| Index: src/builtins/builtins-regexp.cc
|
| diff --git a/src/builtins/builtins-regexp.cc b/src/builtins/builtins-regexp.cc
|
| index 731e4dd82491dcdc33f63df82173ed14e27453a3..3afc94eb8d33d87a95d11c340ad50d9cfa0b0b8f 100644
|
| --- a/src/builtins/builtins-regexp.cc
|
| +++ b/src/builtins/builtins-regexp.cc
|
| @@ -34,9 +34,7 @@ Node* RegExpBuiltinsAssembler::FastLoadLastIndex(Node* regexp) {
|
|
|
| Node* RegExpBuiltinsAssembler::SlowLoadLastIndex(Node* context, Node* regexp) {
|
| // Load through the GetProperty stub.
|
| - Node* const name = HeapConstant(isolate()->factory()->lastIndex_string());
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate());
|
| - return CallStub(getproperty_callable, context, regexp, name);
|
| + return GetProperty(context, regexp, isolate()->factory()->lastIndex_string());
|
| }
|
|
|
| Node* RegExpBuiltinsAssembler::LoadLastIndex(Node* context, Node* regexp,
|
| @@ -830,21 +828,18 @@ Node* RegExpBuiltinsAssembler::FlagsGetter(Node* const context,
|
| // Fall back to GetProperty stub on the slow-path.
|
| var_flags.Bind(int_zero);
|
|
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate);
|
| -
|
| -#define CASE_FOR_FLAG(NAME, FLAG) \
|
| - do { \
|
| - Label next(this); \
|
| - Node* const name = \
|
| - HeapConstant(isolate->factory()->InternalizeUtf8String(NAME)); \
|
| - Node* const flag = CallStub(getproperty_callable, context, regexp, name); \
|
| - Label if_isflagset(this); \
|
| - BranchIfToBooleanIsTrue(flag, &if_isflagset, &next); \
|
| - Bind(&if_isflagset); \
|
| - var_length.Bind(IntPtrAdd(var_length.value(), int_one)); \
|
| - var_flags.Bind(WordOr(var_flags.value(), IntPtrConstant(FLAG))); \
|
| - Goto(&next); \
|
| - Bind(&next); \
|
| +#define CASE_FOR_FLAG(NAME, FLAG) \
|
| + do { \
|
| + Label next(this); \
|
| + Node* const flag = GetProperty( \
|
| + context, regexp, isolate->factory()->InternalizeUtf8String(NAME)); \
|
| + Label if_isflagset(this); \
|
| + BranchIfToBooleanIsTrue(flag, &if_isflagset, &next); \
|
| + Bind(&if_isflagset); \
|
| + var_length.Bind(IntPtrAdd(var_length.value(), int_one)); \
|
| + var_flags.Bind(WordOr(var_flags.value(), IntPtrConstant(FLAG))); \
|
| + Goto(&next); \
|
| + Bind(&next); \
|
| } while (false)
|
|
|
| CASE_FOR_FLAG("global", JSRegExp::kGlobal);
|
| @@ -903,9 +898,8 @@ Node* RegExpBuiltinsAssembler::IsRegExp(Node* const context,
|
|
|
| // Check @@match.
|
| {
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate());
|
| - Node* const name = HeapConstant(isolate()->factory()->match_symbol());
|
| - Node* const value = CallStub(getproperty_callable, context, receiver, name);
|
| + Node* const value =
|
| + GetProperty(context, receiver, isolate()->factory()->match_symbol());
|
|
|
| Label match_isundefined(this), match_isnotundefined(this);
|
| Branch(IsUndefined(value), &match_isundefined, &match_isnotundefined);
|
| @@ -997,9 +991,8 @@ TF_BUILTIN(RegExpConstructor, RegExpBuiltinsAssembler) {
|
| GotoIfNot(pattern_is_regexp, &next);
|
| GotoIfNot(IsUndefined(flags), &next);
|
|
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate);
|
| - Node* const name = HeapConstant(isolate->factory()->constructor_string());
|
| - Node* const value = CallStub(getproperty_callable, context, pattern, name);
|
| + Node* const value =
|
| + GetProperty(context, pattern, isolate->factory()->constructor_string());
|
|
|
| GotoIfNot(WordEqual(value, regexp_function), &next);
|
| Return(pattern);
|
| @@ -1037,12 +1030,9 @@ TF_BUILTIN(RegExpConstructor, RegExpBuiltinsAssembler) {
|
|
|
| Bind(&if_patternisslowregexp);
|
| {
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate);
|
| -
|
| {
|
| - Node* const name = HeapConstant(isolate->factory()->source_string());
|
| Node* const value =
|
| - CallStub(getproperty_callable, context, pattern, name);
|
| + GetProperty(context, pattern, isolate->factory()->source_string());
|
| var_pattern.Bind(value);
|
| }
|
|
|
| @@ -1050,9 +1040,8 @@ TF_BUILTIN(RegExpConstructor, RegExpBuiltinsAssembler) {
|
| Label inner_next(this);
|
| GotoIfNot(IsUndefined(flags), &inner_next);
|
|
|
| - Node* const name = HeapConstant(isolate->factory()->flags_string());
|
| Node* const value =
|
| - CallStub(getproperty_callable, context, pattern, name);
|
| + GetProperty(context, pattern, isolate->factory()->flags_string());
|
| var_flags.Bind(value);
|
| Goto(&inner_next);
|
|
|
| @@ -1263,30 +1252,28 @@ Node* RegExpBuiltinsAssembler::SlowFlagGetter(Node* const context,
|
| Label out(this);
|
| Variable var_result(this, MachineRepresentation::kWord32);
|
|
|
| - Node* name;
|
| -
|
| + Handle<String> name;
|
| switch (flag) {
|
| case JSRegExp::kGlobal:
|
| - name = HeapConstant(factory->global_string());
|
| + name = factory->global_string();
|
| break;
|
| case JSRegExp::kIgnoreCase:
|
| - name = HeapConstant(factory->ignoreCase_string());
|
| + name = factory->ignoreCase_string();
|
| break;
|
| case JSRegExp::kMultiline:
|
| - name = HeapConstant(factory->multiline_string());
|
| + name = factory->multiline_string();
|
| break;
|
| case JSRegExp::kSticky:
|
| - name = HeapConstant(factory->sticky_string());
|
| + name = factory->sticky_string();
|
| break;
|
| case JSRegExp::kUnicode:
|
| - name = HeapConstant(factory->unicode_string());
|
| + name = factory->unicode_string();
|
| break;
|
| default:
|
| UNREACHABLE();
|
| }
|
|
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate());
|
| - Node* const value = CallStub(getproperty_callable, context, regexp, name);
|
| + Node* const value = GetProperty(context, regexp, name);
|
|
|
| Label if_true(this), if_false(this);
|
| BranchIfToBooleanIsTrue(value, &if_true, &if_false);
|
| @@ -1514,9 +1501,8 @@ Node* RegExpBuiltinsAssembler::RegExpExec(Node* context, Node* regexp,
|
| // verifying its return value.
|
|
|
| // Get the exec property.
|
| - Node* const name = HeapConstant(isolate->factory()->exec_string());
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate);
|
| - Node* const exec = CallStub(getproperty_callable, context, regexp, name);
|
| + Node* const exec =
|
| + GetProperty(context, regexp, isolate->factory()->exec_string());
|
|
|
| // Is {exec} callable?
|
| Label if_iscallable(this), if_isnotcallable(this);
|
| @@ -1876,11 +1862,7 @@ void RegExpBuiltinsAssembler::RegExpPrototypeMatchBody(Node* const context,
|
| Bind(&slow_result);
|
| {
|
| // TODO(ishell): Use GetElement stub once it's available.
|
| - Node* const name = smi_zero;
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate);
|
| - Node* const match =
|
| - CallStub(getproperty_callable, context, result, name);
|
| -
|
| + Node* const match = GetProperty(context, result, smi_zero);
|
| var_match.Bind(ToString(context, match));
|
| Goto(&if_didmatch);
|
| }
|
| @@ -2047,11 +2029,8 @@ void RegExpBuiltinsAssembler::RegExpPrototypeSearchBodySlow(
|
|
|
| Bind(&slow_result);
|
| {
|
| - Node* const name = HeapConstant(isolate->factory()->index_string());
|
| - Callable getproperty_callable = CodeFactory::GetProperty(isolate);
|
| - Node* const index =
|
| - CallStub(getproperty_callable, context, exec_result, name);
|
| - Return(index);
|
| + Return(GetProperty(context, exec_result,
|
| + isolate->factory()->index_string()));
|
| }
|
| }
|
| }
|
|
|