Skip to content

Commit

Permalink
fix compilation issues on Mac and Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
vmoroz committed Apr 26, 2022
1 parent 3b7bb22 commit 174938a
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 10 deletions.
10 changes: 5 additions & 5 deletions src/js_native_api_v8.cc
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,13 @@ namespace {
struct FinalizerContext {
explicit FinalizerContext(napi_env env) noexcept
: env_(env),
errorState_(env->ExchangeErrorState(&ErrorState())),
errorState_(env->ExchangeErrorState(ErrorState())),
handleScope_(env->isolate),
prohibitCallJS_(std::exchange(env->prohibit_call_js, true)) {}

~FinalizerContext() {
env_->prohibit_call_js = prohibitCallJS_;
ErrorState errorState = env_->ExchangeErrorState(&errorState_);
ErrorState errorState = env_->ExchangeErrorState(std::move(errorState_));
if (errorState.HasError()) {
Abort();
}
Expand Down Expand Up @@ -137,12 +137,12 @@ void napi_env__::CallFinalizerAsync(
}

v8impl::ErrorState napi_env__::ExchangeErrorState(
v8impl::ErrorState* errorState) {
v8impl::ErrorState&& errorState) {
v8impl::ErrorState previousErrorState{};
previousErrorState.last_exception =
std::exchange(last_exception, std::move(errorState->last_exception));
std::exchange(last_exception, std::move(errorState.last_exception));
previousErrorState.last_error =
std::exchange(last_error, std::move(errorState->last_error));
std::exchange(last_error, std::move(errorState.last_error));
return previousErrorState;
}

Expand Down
4 changes: 2 additions & 2 deletions src/js_native_api_v8.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include "js_native_api_types.h"
#include "js_native_api_v8_internals.h"

napi_status napi_clear_last_error(napi_env env);
static napi_status napi_clear_last_error(napi_env env);

namespace v8impl {

Expand Down Expand Up @@ -112,7 +112,7 @@ struct napi_env__ {
void CallFinalizer(node_api_native_data* native_data) noexcept;
void CallFinalizerAsync(node_api_native_data* native_data) noexcept;

v8impl::ErrorState ExchangeErrorState(v8impl::ErrorState* errorState);
v8impl::ErrorState ExchangeErrorState(v8impl::ErrorState&& errorState);

v8impl::Persistent<v8::Value> last_exception;

Expand Down
9 changes: 6 additions & 3 deletions src/js_native_api_v8_internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,13 @@ using PersistentToLocal = node::PersistentToLocal;
node::Abort();
}

template <typename T>
void SetImmediate(napi_env env, T task) {
template <typename Env, typename Task>
void SetImmediate(Env env, Task task) {
// We use Env type parameter instead of using napi_env directly because the
// napi_env__ is not defined in this context yet.
node::Environment::GetCurrent(env->context())
->SetImmediate([task](node::Environment* /* node_env */) { task(); });
->SetImmediate([task = std::move(task)](
node::Environment* /* node_env */) { task(); });
}

} // end of namespace v8impl
Expand Down

0 comments on commit 174938a

Please sign in to comment.