File: callbackscope.cc

package info (click to toggle)
node-addon-api 8.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,248 kB
  • sloc: cpp: 15,431; javascript: 5,631; ansic: 157; makefile: 7
file content (39 lines) | stat: -rw-r--r-- 1,017 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "assert.h"
#include "napi.h"
using namespace Napi;

#if (NAPI_VERSION > 2)

namespace {

static void RunInCallbackScope(const CallbackInfo& info) {
  Function callback = info[0].As<Function>();
  AsyncContext context(info.Env(), "callback_scope_test");
  CallbackScope scope(info.Env(), context);
  callback.Call({});
}

static void RunInCallbackScopeFromExisting(const CallbackInfo& info) {
  Function callback = info[0].As<Function>();
  Env env = info.Env();

  AsyncContext ctx(env, "existing_callback_scope_test");
  napi_callback_scope scope;
  napi_open_callback_scope(env, Object::New(env), ctx, &scope);

  CallbackScope existingScope(env, scope);
  assert(existingScope.Env() == env);

  callback.Call({});
}

}  // namespace

Object InitCallbackScope(Env env) {
  Object exports = Object::New(env);
  exports["runInCallbackScope"] = Function::New(env, RunInCallbackScope);
  exports["runInPreExistingCbScope"] =
      Function::New(env, RunInCallbackScopeFromExisting);
  return exports;
}
#endif