Skip to content

Commit 32f03c7

Browse files
committed
Use new V8 v2 write APIs
1 parent b27f087 commit 32f03c7

File tree

4 files changed

+22
-25
lines changed

4 files changed

+22
-25
lines changed

src/workerd/api/streams/encoding.c++

+2-4
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,10 @@ jsg::Ref<TextEncoderStream> TextEncoderStream::constructor(jsg::Lock& js) {
3333
auto buffer = maybeBuffer.ToLocalChecked();
3434

3535
auto bytes = jsg::asBytes(buffer).releaseAsChars();
36-
[[maybe_unused]] int read = 0;
37-
[[maybe_unused]] auto written = str->WriteUtf8(js.v8Isolate, bytes.begin(), bytes.size(), &read,
38-
v8::String::NO_NULL_TERMINATION | v8::String::REPLACE_INVALID_UTF8);
36+
[[maybe_unused]] auto written = str->WriteUtf8V2(
37+
js.v8Isolate, bytes.begin(), bytes.size(), v8::String::WriteFlags::kReplaceInvalidUtf8);
3938

4039
KJ_DASSERT(written == buffer->ByteLength());
41-
KJ_DASSERT(read == str->Length());
4240
controller->enqueue(js, v8::Uint8Array::New(buffer, 0, buffer->ByteLength()));
4341
return js.resolvedPromise();
4442
})},

src/workerd/jsg/jsvalue.c++

+10-9
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,8 @@ int JsString::length(jsg::Lock& js) const {
258258
return inner->Length();
259259
}
260260

261-
int JsString::utf8Length(jsg::Lock& js) const {
262-
return inner->Utf8Length(js.v8Isolate);
261+
size_t JsString::utf8Length(jsg::Lock& js) const {
262+
return inner->Utf8LengthV2(js.v8Isolate);
263263
}
264264

265265
kj::String JsString::toString(jsg::Lock& js) const {
@@ -284,29 +284,30 @@ JsString JsString::internalize(Lock& js) const {
284284

285285
JsString::WriteIntoStatus JsString::writeInto(
286286
Lock& js, kj::ArrayPtr<char> buffer, WriteOptions options) const {
287-
WriteIntoStatus result = {0, 0};
287+
WriteIntoStatus result = {0};
288288
if (buffer.size() > 0) {
289-
result.written =
290-
inner->WriteUtf8(js.v8Isolate, buffer.begin(), buffer.size(), &result.read, options);
289+
result.written = inner->WriteUtf8V2(js.v8Isolate, buffer.begin(), buffer.size(), options);
291290
}
292291
return result;
293292
}
294293

295294
JsString::WriteIntoStatus JsString::writeInto(
296295
Lock& js, kj::ArrayPtr<uint16_t> buffer, WriteOptions options) const {
297-
WriteIntoStatus result = {0, 0};
296+
WriteIntoStatus result = {0};
298297
if (buffer.size() > 0) {
299-
result.written = inner->Write(js.v8Isolate, buffer.begin(), 0, buffer.size(), options);
298+
inner->WriteV2(js.v8Isolate, 0, buffer.size(), buffer.begin(), options);
300299
}
300+
result.written = length(js);
301301
return result;
302302
}
303303

304304
JsString::WriteIntoStatus JsString::writeInto(
305305
Lock& js, kj::ArrayPtr<kj::byte> buffer, WriteOptions options) const {
306-
WriteIntoStatus result = {0, 0};
306+
WriteIntoStatus result = {0};
307307
if (buffer.size() > 0) {
308-
result.written = inner->WriteOneByte(js.v8Isolate, buffer.begin(), 0, buffer.size(), options);
308+
inner->WriteOneByteV2(js.v8Isolate, 0, buffer.size(), buffer.begin(), options);
309309
}
310+
result.written = 1;
310311
return result;
311312
}
312313

src/workerd/jsg/jsvalue.h

+8-10
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ class JsArray final: public JsBase<v8::Array, JsArray> {
232232
class JsString final: public JsBase<v8::String, JsString> {
233233
public:
234234
int length(Lock& js) const KJ_WARN_UNUSED_RESULT;
235-
int utf8Length(Lock& js) const KJ_WARN_UNUSED_RESULT;
235+
size_t utf8Length(Lock& js) const KJ_WARN_UNUSED_RESULT;
236236
kj::String toString(Lock& js) const KJ_WARN_UNUSED_RESULT;
237237
int hashCode() const;
238238

@@ -249,11 +249,9 @@ class JsString final: public JsBase<v8::String, JsString> {
249249
static JsString concat(Lock& js, const JsString& one, const JsString& two) KJ_WARN_UNUSED_RESULT;
250250

251251
enum WriteOptions {
252-
NONE = v8::String::NO_OPTIONS,
253-
MANY_WRITES_EXPECTED = v8::String::HINT_MANY_WRITES_EXPECTED,
254-
NO_NULL_TERMINATION = v8::String::NO_NULL_TERMINATION,
255-
PRESERVE_ONE_BYTE_NULL = v8::String::PRESERVE_ONE_BYTE_NULL,
256-
REPLACE_INVALID_UTF8 = v8::String::REPLACE_INVALID_UTF8,
252+
NONE = v8::String::WriteFlags::kNone,
253+
NO_NULL_TERMINATION = v8::String::WriteFlags::kNullTerminate,
254+
REPLACE_INVALID_UTF8 = v8::String::WriteFlags::kReplaceInvalidUtf8,
257255
};
258256

259257
template <typename T>
@@ -262,9 +260,9 @@ class JsString final: public JsBase<v8::String, JsString> {
262260

263261
struct WriteIntoStatus {
264262
// The number of elements (e.g. char, byte, uint16_t) read from this string.
265-
int read;
263+
// size_t read;
266264
// The number of elements (e.g. char, byte, uint16_t) written to the buffer.
267-
int written;
265+
size_t written;
268266
};
269267
WriteIntoStatus writeInto(
270268
Lock& js, kj::ArrayPtr<char> buffer, WriteOptions options = WriteOptions::NONE) const;
@@ -442,11 +440,11 @@ inline kj::Array<T> JsString::toArray(Lock& js, WriteOptions options) const {
442440
if constexpr (kj::isSameType<T, kj::byte>()) {
443441
KJ_ASSERT(inner->ContainsOnlyOneByte());
444442
auto buf = kj::heapArray<kj::byte>(inner->Length());
445-
inner->WriteOneByte(js.v8Isolate, buf.begin(), 0, buf.size(), options);
443+
inner->WriteOneByteV2(js.v8Isolate, 0, buf.size(), buf.begin(), options);
446444
return kj::mv(buf);
447445
} else {
448446
auto buf = kj::heapArray<uint16_t>(inner->Length());
449-
inner->Write(js.v8Isolate, buf.begin(), 0, buf.size(), options);
447+
inner->WriteV2(js.v8Isolate, 0, buf.size(), buf.begin(), options);
450448
return kj::mv(buf);
451449
}
452450
}

src/workerd/jsg/value.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ class StringWrapper {
462462
#else
463463
auto buf = kj::heapArray<char>(str->Utf8Length(isolate) + 1);
464464
#endif
465-
str->WriteUtf8(isolate, buf.begin(), buf.size());
465+
str->WriteUtf8V2(isolate, buf.begin(), buf.size());
466466
buf[buf.size() - 1] = 0;
467467
return kj::String(kj::mv(buf));
468468
}
@@ -1018,7 +1018,7 @@ class DictWrapper {
10181018
#else
10191019
auto buf = kj::heapArray<char>(v8String->Utf8Length(isolate) + 1);
10201020
#endif
1021-
v8String->WriteUtf8(isolate, buf.begin(), buf.size());
1021+
v8String->WriteUtf8V2(isolate, buf.begin(), buf.size());
10221022
buf[buf.size() - 1] = 0;
10231023
return kj::String(kj::mv(buf));
10241024
};

0 commit comments

Comments
 (0)