summaryrefslogtreecommitdiff
path: root/deps/v8/src/builtins/builtins-intl-gen.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/builtins/builtins-intl-gen.cc')
-rw-r--r--deps/v8/src/builtins/builtins-intl-gen.cc69
1 files changed, 31 insertions, 38 deletions
diff --git a/deps/v8/src/builtins/builtins-intl-gen.cc b/deps/v8/src/builtins/builtins-intl-gen.cc
index 1a9a3b7fd9..2330553721 100644
--- a/deps/v8/src/builtins/builtins-intl-gen.cc
+++ b/deps/v8/src/builtins/builtins-intl-gen.cc
@@ -17,9 +17,6 @@
namespace v8 {
namespace internal {
-template <class T>
-using TNode = compiler::TNode<T>;
-
class IntlBuiltinsAssembler : public CodeStubAssembler {
public:
explicit IntlBuiltinsAssembler(compiler::CodeAssemblerState* state)
@@ -30,6 +27,16 @@ class IntlBuiltinsAssembler : public CodeStubAssembler {
const char* method_name);
TNode<JSArray> AllocateEmptyJSArray(TNode<Context> context);
+
+ TNode<IntPtrT> PointerToSeqStringData(TNode<String> seq_string) {
+ CSA_ASSERT(this,
+ IsSequentialStringInstanceType(LoadInstanceType(seq_string)));
+ STATIC_ASSERT(SeqOneByteString::kHeaderSize ==
+ SeqTwoByteString::kHeaderSize);
+ return IntPtrAdd(
+ BitcastTaggedToWord(seq_string),
+ IntPtrConstant(SeqOneByteString::kHeaderSize - kHeapObjectTag));
+ }
};
TF_BUILTIN(StringToLowerCaseIntl, IntlBuiltinsAssembler) {
@@ -61,35 +68,35 @@ TF_BUILTIN(StringToLowerCaseIntl, IntlBuiltinsAssembler) {
&call_c);
{
- Node* const dst_ptr = PointerToSeqStringData(dst);
- VARIABLE(var_cursor, MachineType::PointerRepresentation(),
- IntPtrConstant(0));
+ const TNode<IntPtrT> dst_ptr = PointerToSeqStringData(dst);
+ TVARIABLE(IntPtrT, var_cursor, IntPtrConstant(0));
- TNode<RawPtrT> const start_address = to_direct.PointerToData(&call_c);
+ TNode<IntPtrT> const start_address =
+ ReinterpretCast<IntPtrT>(to_direct.PointerToData(&call_c));
TNode<IntPtrT> const end_address =
Signed(IntPtrAdd(start_address, ChangeUint32ToWord(length)));
TNode<ExternalReference> const to_lower_table_addr =
ExternalConstant(ExternalReference::intl_to_latin1_lower_table());
- VARIABLE(var_did_change, MachineRepresentation::kWord32, Int32Constant(0));
+ TVARIABLE(Word32T, var_did_change, Int32Constant(0));
VariableList push_vars({&var_cursor, &var_did_change}, zone());
- BuildFastLoop(
+ BuildFastLoop<IntPtrT>(
push_vars, start_address, end_address,
- [=, &var_cursor, &var_did_change](Node* current) {
+ [&](TNode<IntPtrT> current) {
TNode<Uint8T> c = Load<Uint8T>(current);
TNode<Uint8T> lower =
Load<Uint8T>(to_lower_table_addr, ChangeInt32ToIntPtr(c));
StoreNoWriteBarrier(MachineRepresentation::kWord8, dst_ptr,
var_cursor.value(), lower);
- var_did_change.Bind(
- Word32Or(Word32NotEqual(c, lower), var_did_change.value()));
+ var_did_change =
+ Word32Or(Word32NotEqual(c, lower), var_did_change.value());
Increment(&var_cursor);
},
- kCharSize, INTPTR_PARAMETERS, IndexAdvanceMode::kPost);
+ kCharSize, IndexAdvanceMode::kPost);
// Return the original string if it remained unchanged in order to preserve
// e.g. internalization and private symbols (such as the preserved object
@@ -110,9 +117,9 @@ TF_BUILTIN(StringToLowerCaseIntl, IntlBuiltinsAssembler) {
MachineType type_tagged = MachineType::AnyTagged();
- Node* const result = CallCFunction(function_addr, type_tagged,
- std::make_pair(type_tagged, src),
- std::make_pair(type_tagged, dst));
+ const TNode<String> result = CAST(CallCFunction(
+ function_addr, type_tagged, std::make_pair(type_tagged, src),
+ std::make_pair(type_tagged, dst)));
Return(result);
}
@@ -142,7 +149,7 @@ void IntlBuiltinsAssembler::ListFormatCommon(TNode<Context> context,
TNode<Int32T> argc,
Runtime::FunctionId format_func_id,
const char* method_name) {
- CodeStubArguments args(this, ChangeInt32ToIntPtr(argc));
+ CodeStubArguments args(this, argc);
// Label has_list(this);
// 1. Let lf be this value.
@@ -151,32 +158,18 @@ void IntlBuiltinsAssembler::ListFormatCommon(TNode<Context> context,
// 3. If lf does not have an [[InitializedListFormat]] internal slot, throw a
// TypeError exception.
- ThrowIfNotInstanceType(context, receiver, JS_INTL_LIST_FORMAT_TYPE,
- method_name);
+ ThrowIfNotInstanceType(context, receiver, JS_LIST_FORMAT_TYPE, method_name);
TNode<JSListFormat> list_format = CAST(receiver);
- // 4. If list is not provided or is undefined, then
TNode<Object> list = args.GetOptionalArgumentValue(0);
- Label has_list(this);
- {
- GotoIfNot(IsUndefined(list), &has_list);
- if (format_func_id == Runtime::kFormatList) {
- // a. Return an empty String.
- args.PopAndReturn(EmptyStringConstant());
- } else {
- DCHECK_EQ(format_func_id, Runtime::kFormatListToParts);
- // a. Return an empty Array.
- args.PopAndReturn(AllocateEmptyJSArray(context));
- }
- }
- BIND(&has_list);
{
- // 5. Let x be ? IterableToList(list).
- TNode<Object> x =
- CallBuiltin(Builtins::kIterableToListWithSymbolLookup, context, list);
+ // 4. Let stringList be ? StringListFromIterable(list).
+ TNode<Object> string_list =
+ CallBuiltin(Builtins::kStringListFromIterable, context, list);
- // 6. Return ? FormatList(lf, x).
- args.PopAndReturn(CallRuntime(format_func_id, context, list_format, x));
+ // 6. Return ? FormatList(lf, stringList).
+ args.PopAndReturn(
+ CallRuntime(format_func_id, context, list_format, string_list));
}
}