Port StringPrototypeToString, StringPrototypeValueOf to Torque
Bug: v8:8996
Change-Id: I86104991d9732157c1fbdff273046bf4f7e0186f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1593853
Commit-Queue: Z Nguyen-Huu <duongn@microsoft.com>
Reviewed-by: Peter Wong <peter.wm.wong@gmail.com>
Reviewed-by: Simon Zünd <szuend@chromium.org>
Cr-Commit-Position: refs/heads/master@{#61221}
diff --git a/BUILD.gn b/BUILD.gn
index 14e80ae..85bac2c 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -949,6 +949,7 @@
"src/builtins/proxy-revoke.tq",
"src/builtins/regexp.tq",
"src/builtins/regexp-replace.tq",
+ "src/builtins/string.tq",
"src/builtins/string-endswith.tq",
"src/builtins/string-html.tq",
"src/builtins/string-iterator.tq",
diff --git a/src/builtins/base.tq b/src/builtins/base.tq
index a336a78..56db94a 100644
--- a/src/builtins/base.tq
+++ b/src/builtins/base.tq
@@ -614,6 +614,7 @@
generates 'TNode<Int32T>' constexpr 'WriteBarrierMode';
type MessageTemplate constexpr 'MessageTemplate';
+type PrimitiveType constexpr 'PrimitiveType';
type ToIntegerTruncationMode
constexpr 'CodeStubAssembler::ToIntegerTruncationMode';
type AllocationFlags constexpr 'AllocationFlags';
@@ -891,6 +892,9 @@
const kStrictReadOnlyProperty: constexpr MessageTemplate
generates 'MessageTemplate::kStrictReadOnlyProperty';
+const kString: constexpr PrimitiveType
+ generates 'PrimitiveType::kString';
+
type Hole extends Oddball;
type Null extends Oddball;
type Undefined extends Oddball;
@@ -1156,6 +1160,8 @@
extern transitioning macro ToString_Inline(Context, Object): String;
extern transitioning macro ToThisString(implicit context: Context)(
Object, String): String;
+extern transitioning macro ToThisValue(implicit context: Context)(
+ Object, constexpr PrimitiveType, constexpr string): Object;
extern transitioning macro GetProperty(implicit context: Context)(
Object, Object): Object;
extern transitioning builtin SetProperty(implicit context: Context)(
diff --git a/src/builtins/builtins-definitions.h b/src/builtins/builtins-definitions.h
index 4a6b455..2a91973 100644
--- a/src/builtins/builtins-definitions.h
+++ b/src/builtins/builtins-definitions.h
@@ -992,14 +992,10 @@
/* ES6 #sec-string.prototype.substring */ \
TFJ(StringPrototypeSubstring, \
SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
- /* ES6 #sec-string.prototype.tostring */ \
- TFJ(StringPrototypeToString, 0, kReceiver) \
TFJ(StringPrototypeTrim, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
TFJ(StringPrototypeTrimEnd, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
TFJ(StringPrototypeTrimStart, \
SharedFunctionInfo::kDontAdaptArgumentsSentinel) \
- /* ES6 #sec-string.prototype.valueof */ \
- TFJ(StringPrototypeValueOf, 0, kReceiver) \
/* ES6 #sec-string.raw */ \
CPP(StringRaw) \
\
diff --git a/src/builtins/builtins-string-gen.cc b/src/builtins/builtins-string-gen.cc
index 1a5a776..de5a515 100644
--- a/src/builtins/builtins-string-gen.cc
+++ b/src/builtins/builtins-string-gen.cc
@@ -2203,26 +2203,6 @@
BIND(&out);
}
-// ES6 #sec-string.prototype.tostring
-TF_BUILTIN(StringPrototypeToString, CodeStubAssembler) {
- Node* context = Parameter(Descriptor::kContext);
- Node* receiver = Parameter(Descriptor::kReceiver);
-
- Node* result = ToThisValue(context, receiver, PrimitiveType::kString,
- "String.prototype.toString");
- Return(result);
-}
-
-// ES6 #sec-string.prototype.valueof
-TF_BUILTIN(StringPrototypeValueOf, CodeStubAssembler) {
- Node* context = Parameter(Descriptor::kContext);
- Node* receiver = Parameter(Descriptor::kReceiver);
-
- Node* result = ToThisValue(context, receiver, PrimitiveType::kString,
- "String.prototype.valueOf");
- Return(result);
-}
-
// Return the |word32| codepoint at {index}. Supports SeqStrings and
// ExternalStrings.
TNode<Int32T> StringBuiltinsAssembler::LoadSurrogatePairAt(
diff --git a/src/builtins/string.tq b/src/builtins/string.tq
new file mode 100644
index 0000000..9e75029
--- /dev/null
+++ b/src/builtins/string.tq
@@ -0,0 +1,17 @@
+// Copyright 2019 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.
+
+namespace string {
+ // ES6 #sec-string.prototype.tostring
+ transitioning javascript builtin
+ StringPrototypeToString(implicit context: Context)(receiver: Object): Object {
+ return ToThisValue(receiver, kString, 'String.prototype.toString');
+ }
+
+ // ES6 #sec-string.prototype.valueof
+ transitioning javascript builtin
+ StringPrototypeValueOf(implicit context: Context)(receiver: Object): Object {
+ return ToThisValue(receiver, kString, 'String.prototype.valueOf');
+ }
+}