Skip to content
Closed
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
bd8045b
node-api: unify string creation
gabrielschulhof Jun 2, 2023
50a2109
node-api: add string creation benchmark
gabrielschulhof Jun 3, 2023
1364872
node-api: implement external strings
gabrielschulhof Jun 3, 2023
a9e24b9
add test
gabrielschulhof Jun 3, 2023
e1127d1
rename to node_api_*
gabrielschulhof Jun 4, 2023
953304c
put back build type
gabrielschulhof Jun 5, 2023
09f7cdf
make linter work
gabrielschulhof Jun 5, 2023
902cb33
rename as requested
gabrielschulhof Jun 6, 2023
754864e
use std::basic_string_view to calc length in case of NAPI_AUTO_LENGTH
gabrielschulhof Jun 6, 2023
95a9971
test for auto-length
gabrielschulhof Jun 7, 2023
b4f383b
format
gabrielschulhof Jun 7, 2023
05317ac
correct length
gabrielschulhof Jun 7, 2023
20ab0fb
doc
gabrielschulhof Jun 7, 2023
ca4c08c
use right length indicator
gabrielschulhof Jun 8, 2023
5de34d4
final adjustment
gabrielschulhof Jun 8, 2023
64f2498
Apply suggestions from code review
gabrielschulhof Jun 8, 2023
cb9d95a
Apply suggestions from code review
gabrielschulhof Jun 8, 2023
ed83494
remove utf8
gabrielschulhof Jun 9, 2023
e063901
handle the case where we copy the string
gabrielschulhof Jun 10, 2023
4ff5e53
implement the non-copying case
gabrielschulhof Jun 10, 2023
402c93e
Unify the two external cases
gabrielschulhof Jun 11, 2023
32a5600
factor out tracking
gabrielschulhof Jun 11, 2023
0b72009
document
gabrielschulhof Jun 11, 2023
50dfa5d
debug ctor dtor
gabrielschulhof Jun 11, 2023
3a96b04
typo
gabrielschulhof Jun 11, 2023
caccb8e
Apply suggestions from code review
gabrielschulhof Jun 11, 2023
5c11c81
Apply suggestions from code review
gabrielschulhof Jun 11, 2023
b651fca
use common distructor
gabrielschulhof Jun 12, 2023
668fd4d
format
gabrielschulhof Jun 12, 2023
c721439
Apply suggestions from code review
gabrielschulhof Jun 12, 2023
7f67a2f
md lint
gabrielschulhof Jun 12, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
implement the non-copying case
  • Loading branch information
gabrielschulhof committed Jun 10, 2023
commit 4ff5e53d53a5688d2ddc6c605f82b29ddb35d343
39 changes: 31 additions & 8 deletions src/js_native_api_v8.cc
Original file line number Diff line number Diff line change
Expand Up @@ -84,26 +84,48 @@ napi_status CopyExternalString(napi_env env,
}

class ExternalOneByteStringResource
: public v8::String::ExternalOneByteStringResource {
: public v8::String::ExternalOneByteStringResource,
Finalizer {
public:
ExternalOneByteStringResource(const char* string, const size_t length)
: string_(string), length_(length) {}
ExternalOneByteStringResource(napi_env env,
char* string,
const size_t length,
napi_finalize finalize_callback,
void* finalize_hint)
: Finalizer(env, finalize_callback, string, finalize_hint),
string_(string),
length_(length) {}
const char* data() const { return string_; }
size_t length() const { return length_; }

private:
void Dispose() {
if (finalize_callback_ == nullptr) return;
env_->CallFinalizer(finalize_callback_, finalize_data_, finalize_hint_);
}
const char* string_;
const size_t length_;
};

class ExternalStringResource : public v8::String::ExternalStringResource {
class ExternalStringResource : public v8::String::ExternalStringResource,
Finalizer {
public:
ExternalStringResource(const uint16_t* string, const size_t length)
: string_(string), length_(length) {}
ExternalStringResource(napi_env env,
char16_t* string,
const size_t length,
napi_finalize finalize_callback,
void* finalize_hint)
: Finalizer(env, finalize_callback, string, finalize_hint),
string_(reinterpret_cast<uint16_t*>(string)),
length_(length) {}
const uint16_t* data() const { return string_; }
size_t length() const { return length_; }

private:
void Dispose() {
if (finalize_callback_ == nullptr) return;
env_->CallFinalizer(finalize_callback_, finalize_data_, finalize_hint_);
}
const uint16_t* string_;
const size_t length_;
};
Expand Down Expand Up @@ -1510,7 +1532,8 @@ node_api_create_external_string_latin1(napi_env env,
if (length == NAPI_AUTO_LENGTH) {
length = (std::string_view(str)).length();
}
auto resource = new v8impl::ExternalOneByteStringResource(str, length);
auto resource = new v8impl::ExternalOneByteStringResource(
env, str, length, finalize_callback, finalize_hint);
return v8::String::NewExternalOneByte(isolate, resource);
});
#endif // V8_ENABLE_SANDBOX
Expand Down Expand Up @@ -1539,7 +1562,7 @@ node_api_create_external_string_utf16(napi_env env,
length = (std::u16string_view(str)).length();
}
auto resource = new v8impl::ExternalStringResource(
reinterpret_cast<const uint16_t*>(str), length);
env, str, length, finalize_callback, finalize_hint);
return v8::String::NewExternalTwoByte(isolate, resource);
});
#endif // V8_ENABLE_SANDBOX
Expand Down