Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Unified Diff: src/builtins/builtins-regexp-gen.cc

Issue 2752143004: [refactor] Separate generated builtins and C++ builtins into separate files (Closed)
Patch Set: tentative gcmole fix Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/builtins/builtins-regexp-gen.h ('k') | src/builtins/builtins-sharedarraybuffer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/builtins/builtins-regexp-gen.cc
diff --git a/src/builtins/builtins-regexp.cc b/src/builtins/builtins-regexp-gen.cc
similarity index 93%
copy from src/builtins/builtins-regexp.cc
copy to src/builtins/builtins-regexp-gen.cc
index eef9953a8a565cd97f7e62fdda95743db041e2b6..707d7661f19d90cd2ab1c9cfba7db3170f0c3a6b 100644
--- a/src/builtins/builtins-regexp.cc
+++ b/src/builtins/builtins-regexp-gen.cc
@@ -1,26 +1,21 @@
-// Copyright 2016 the V8 project authors. All rights reserved.
+// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "src/builtins/builtins-regexp.h"
+#include "src/builtins/builtins-regexp-gen.h"
#include "src/builtins/builtins-constructor.h"
-#include "src/builtins/builtins-utils.h"
+#include "src/builtins/builtins-utils-gen.h"
#include "src/builtins/builtins.h"
#include "src/code-factory.h"
#include "src/code-stub-assembler.h"
-#include "src/counters.h"
-#include "src/objects-inl.h"
#include "src/objects/regexp-match-info.h"
-#include "src/regexp/jsregexp.h"
-#include "src/regexp/regexp-utils.h"
-#include "src/string-builder.h"
+#include "src/regexp/regexp-macro-assembler.h"
namespace v8 {
namespace internal {
-typedef CodeStubAssembler::ParameterMode ParameterMode;
-
+using compiler::Node;
// -----------------------------------------------------------------------------
// ES6 section 21.2 RegExp Objects
@@ -1175,43 +1170,6 @@ TF_BUILTIN(RegExpPrototypeSourceGetter, RegExpBuiltinsAssembler) {
}
}
-BUILTIN(RegExpPrototypeToString) {
- HandleScope scope(isolate);
- CHECK_RECEIVER(JSReceiver, recv, "RegExp.prototype.toString");
-
- if (*recv == isolate->regexp_function()->prototype()) {
- isolate->CountUsage(v8::Isolate::kRegExpPrototypeToString);
- }
-
- IncrementalStringBuilder builder(isolate);
-
- builder.AppendCharacter('/');
- {
- Handle<Object> source;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
- isolate, source,
- JSReceiver::GetProperty(recv, isolate->factory()->source_string()));
- Handle<String> source_str;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, source_str,
- Object::ToString(isolate, source));
- builder.AppendString(source_str);
- }
-
- builder.AppendCharacter('/');
- {
- Handle<Object> flags;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
- isolate, flags,
- JSReceiver::GetProperty(recv, isolate->factory()->flags_string()));
- Handle<String> flags_str;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, flags_str,
- Object::ToString(isolate, flags));
- builder.AppendString(flags_str);
- }
-
- RETURN_RESULT_OR_FAILURE(isolate, builder.Finish());
-}
-
// Fast-path implementation for flag checks on an unmodified JSRegExp instance.
Node* RegExpBuiltinsAssembler::FastFlagGetter(Node* const regexp,
JSRegExp::Flag flag) {
@@ -1372,89 +1330,6 @@ TF_BUILTIN(RegExpPrototypeUnicodeGetter, RegExpBuiltinsAssembler) {
"RegExp.prototype.unicode");
}
-// The properties $1..$9 are the first nine capturing substrings of the last
-// successful match, or ''. The function RegExpMakeCaptureGetter will be
-// called with indices from 1 to 9.
-#define DEFINE_CAPTURE_GETTER(i) \
- BUILTIN(RegExpCapture##i##Getter) { \
- HandleScope scope(isolate); \
- return *RegExpUtils::GenericCaptureGetter( \
- isolate, isolate->regexp_last_match_info(), i); \
- }
-DEFINE_CAPTURE_GETTER(1)
-DEFINE_CAPTURE_GETTER(2)
-DEFINE_CAPTURE_GETTER(3)
-DEFINE_CAPTURE_GETTER(4)
-DEFINE_CAPTURE_GETTER(5)
-DEFINE_CAPTURE_GETTER(6)
-DEFINE_CAPTURE_GETTER(7)
-DEFINE_CAPTURE_GETTER(8)
-DEFINE_CAPTURE_GETTER(9)
-#undef DEFINE_CAPTURE_GETTER
-
-// The properties `input` and `$_` are aliases for each other. When this
-// value is set, the value it is set to is coerced to a string.
-// Getter and setter for the input.
-
-BUILTIN(RegExpInputGetter) {
- HandleScope scope(isolate);
- Handle<Object> obj(isolate->regexp_last_match_info()->LastInput(), isolate);
- return obj->IsUndefined(isolate) ? isolate->heap()->empty_string()
- : String::cast(*obj);
-}
-
-BUILTIN(RegExpInputSetter) {
- HandleScope scope(isolate);
- Handle<Object> value = args.atOrUndefined(isolate, 1);
- Handle<String> str;
- ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, str,
- Object::ToString(isolate, value));
- isolate->regexp_last_match_info()->SetLastInput(*str);
- return isolate->heap()->undefined_value();
-}
-
-// Getters for the static properties lastMatch, lastParen, leftContext, and
-// rightContext of the RegExp constructor. The properties are computed based
-// on the captures array of the last successful match and the subject string
-// of the last successful match.
-BUILTIN(RegExpLastMatchGetter) {
- HandleScope scope(isolate);
- return *RegExpUtils::GenericCaptureGetter(
- isolate, isolate->regexp_last_match_info(), 0);
-}
-
-BUILTIN(RegExpLastParenGetter) {
- HandleScope scope(isolate);
- Handle<RegExpMatchInfo> match_info = isolate->regexp_last_match_info();
- const int length = match_info->NumberOfCaptureRegisters();
- if (length <= 2) return isolate->heap()->empty_string(); // No captures.
-
- DCHECK_EQ(0, length % 2);
- const int last_capture = (length / 2) - 1;
-
- // We match the SpiderMonkey behavior: return the substring defined by the
- // last pair (after the first pair) of elements of the capture array even if
- // it is empty.
- return *RegExpUtils::GenericCaptureGetter(isolate, match_info, last_capture);
-}
-
-BUILTIN(RegExpLeftContextGetter) {
- HandleScope scope(isolate);
- Handle<RegExpMatchInfo> match_info = isolate->regexp_last_match_info();
- const int start_index = match_info->Capture(0);
- Handle<String> last_subject(match_info->LastSubject());
- return *isolate->factory()->NewSubString(last_subject, 0, start_index);
-}
-
-BUILTIN(RegExpRightContextGetter) {
- HandleScope scope(isolate);
- Handle<RegExpMatchInfo> match_info = isolate->regexp_last_match_info();
- const int start_index = match_info->Capture(1);
- Handle<String> last_subject(match_info->LastSubject());
- const int len = last_subject->length();
- return *isolate->factory()->NewSubString(last_subject, start_index, len);
-}
-
// ES#sec-regexpexec Runtime Semantics: RegExpExec ( R, S )
Node* RegExpBuiltinsAssembler::RegExpExec(Node* context, Node* regexp,
Node* string) {
@@ -1729,7 +1604,8 @@ class GrowableFixedArray {
const ElementsKind kind = FAST_ELEMENTS;
const WriteBarrierMode barrier_mode = UPDATE_WRITE_BARRIER;
- const ParameterMode mode = CodeStubAssembler::INTPTR_PARAMETERS;
+ const CodeStubAssembler::ParameterMode mode =
+ CodeStubAssembler::INTPTR_PARAMETERS;
const CodeStubAssembler::AllocationFlags flags =
CodeStubAssembler::kAllowLargeObjectAllocation;
@@ -2514,40 +2390,42 @@ Node* RegExpBuiltinsAssembler::ReplaceGlobalCallableFastPath(
Node* const to = SmiUntag(res_length);
const int increment = 1;
- BuildFastLoop(
- from, to,
- [this, res_elems, isolate, native_context, context, undefined,
- replace_callable](Node* index) {
- Node* const elem = LoadFixedArrayElement(res_elems, index);
+ BuildFastLoop(from, to,
+ [this, res_elems, isolate, native_context, context, undefined,
+ replace_callable](Node* index) {
+ Node* const elem = LoadFixedArrayElement(res_elems, index);
- Label do_continue(this);
- GotoIf(TaggedIsSmi(elem), &do_continue);
+ Label do_continue(this);
+ GotoIf(TaggedIsSmi(elem), &do_continue);
- // elem must be an Array.
- // Use the apply argument as backing for global RegExp properties.
+ // elem must be an Array.
+ // Use the apply argument as backing for global RegExp
+ // properties.
- CSA_ASSERT(this, HasInstanceType(elem, JS_ARRAY_TYPE));
+ CSA_ASSERT(this, HasInstanceType(elem, JS_ARRAY_TYPE));
- // TODO(jgruber): Remove indirection through Call->ReflectApply.
- Callable call_callable = CodeFactory::Call(isolate);
- Node* const reflect_apply =
- LoadContextElement(native_context, Context::REFLECT_APPLY_INDEX);
+ // TODO(jgruber): Remove indirection through
+ // Call->ReflectApply.
+ Callable call_callable = CodeFactory::Call(isolate);
+ Node* const reflect_apply = LoadContextElement(
+ native_context, Context::REFLECT_APPLY_INDEX);
- Node* const replacement_obj =
- CallJS(call_callable, context, reflect_apply, undefined,
- replace_callable, undefined, elem);
+ Node* const replacement_obj =
+ CallJS(call_callable, context, reflect_apply, undefined,
+ replace_callable, undefined, elem);
- // Overwrite the i'th element in the results with the string we got
- // back from the callback function.
+ // Overwrite the i'th element in the results with the string
+ // we got back from the callback function.
- Node* const replacement_str = ToString(context, replacement_obj);
- StoreFixedArrayElement(res_elems, index, replacement_str);
+ Node* const replacement_str =
+ ToString(context, replacement_obj);
+ StoreFixedArrayElement(res_elems, index, replacement_str);
- Goto(&do_continue);
- Bind(&do_continue);
- },
- increment, CodeStubAssembler::INTPTR_PARAMETERS,
- CodeStubAssembler::IndexAdvanceMode::kPost);
+ Goto(&do_continue);
+ Bind(&do_continue);
+ },
+ increment, CodeStubAssembler::INTPTR_PARAMETERS,
+ CodeStubAssembler::IndexAdvanceMode::kPost);
Goto(&create_result);
}
« no previous file with comments | « src/builtins/builtins-regexp-gen.h ('k') | src/builtins/builtins-sharedarraybuffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698