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');
+  }
+}