File tree Expand file tree Collapse file tree 1 file changed +14
-3
lines changed Expand file tree Collapse file tree 1 file changed +14
-3
lines changed Original file line number Diff line number Diff line change 4848#include < sys/types.h>
4949#endif
5050
51+ #include < simdutf.h>
52+
5153#include < atomic>
5254#include < cstdio>
5355#include < cstring>
@@ -100,11 +102,20 @@ static void MakeUtf8String(Isolate* isolate,
100102 MaybeStackBuffer<T>* target) {
101103 Local<String> string;
102104 if (!value->ToString (isolate->GetCurrentContext ()).ToLocal (&string)) return ;
105+ String::ValueView value_view (isolate, string);
103106
104- size_t storage;
105- if (!StringBytes::StorageSize (isolate, string, UTF8).To (&storage)) return ;
106- storage += 1 ;
107+ if (value_view.is_one_byte ()) {
108+ target->AllocateSufficientStorage (value_view.length () + 1 );
109+ target->SetLengthAndZeroTerminate (value_view.length ());
110+ memcpy (target->out (), reinterpret_cast <const char *>(value_view.data8 ()), value_view.length ());
111+ return ;
112+ }
113+
114+ // Add +1 for null termination.
115+ auto storage = simdutf::utf8_length_from_utf16 (reinterpret_cast <const char16_t *>(value_view.data16 ()), value_view.length ()) + 1 ;
107116 target->AllocateSufficientStorage (storage);
117+
118+ // TODO(@anonrig): Use simdutf to speed up none one byte strings once it's implemented
108119 const int flags =
109120 String::NO_NULL_TERMINATION | String::REPLACE_INVALID_UTF8;
110121 const int length =
You can’t perform that action at this time.
0 commit comments