@@ -728,16 +728,28 @@ void SlowByteLengthUtf8(const FunctionCallbackInfo<Value>& args) { |
728 | 728 | args.GetReturnValue().Set(args[0].As<String>()->Utf8Length(env->isolate())); |
729 | 729 | } |
730 | 730 |
|
731 | | -uint32_t FastByteLengthUtf8(Local<Value> receiver, |
732 | | - const v8::FastOneByteString& source) { |
| 731 | +uint32_t FastByteLengthUtf8( |
| 732 | + Local<Value> receiver, |
| 733 | + Local<Value> sourceValue, |
| 734 | + v8::FastApiCallbackOptions& options) { // NOLINT(runtime/references) |
| 735 | + TRACK_V8_FAST_API_CALL("Buffer::FastByteLengthUtf8"); |
| 736 | + auto isolate = options.isolate; |
| 737 | + HandleScope handleScope(isolate); |
| 738 | + CHECK(sourceValue->IsString()); |
| 739 | + Local<String> sourceStr = sourceValue.As<String>(); |
| 740 | + |
| 741 | + if (!sourceStr->IsExternalOneByte()) { |
| 742 | + return sourceStr->Utf8Length(isolate); |
| 743 | + } |
| 744 | + auto source = sourceStr->GetExternalOneByteStringResource(); |
733 | 745 | // For short inputs, the function call overhead to simdutf is maybe |
734 | 746 | // not worth it, reserve simdutf for long strings. |
735 | | - if (source.length > 128) { |
736 | | - return simdutf::utf8_length_from_latin1(source.data, source.length); |
| 747 | + if (source->length() > 128) { |
| 748 | + return simdutf::utf8_length_from_latin1(source->data(), source->length()); |
737 | 749 | } |
738 | 750 |
|
739 | | - uint32_t length = source.length; |
740 | | - const auto input = reinterpret_cast<const uint8_t*>(source.data); |
| 751 | + uint32_t length = source->length(); |
| 752 | + const auto input = reinterpret_cast<const uint8_t*>(source->data()); |
741 | 753 |
|
742 | 754 | uint32_t answer = length; |
743 | 755 | uint32_t i = 0; |
|