Skip to content

Commit 433a1a1

Browse files
author
Gabriel Schulhof
committed
Add ObjectWrap<T> subclass in instance data
1 parent 89aa6b6 commit 433a1a1

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

test/addon_data.cc

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,36 @@
44

55
class Addon {
66
public:
7-
Addon() {}
7+
class VerboseIndicator : public Napi::ObjectWrap<VerboseIndicator> {
8+
public:
9+
VerboseIndicator(const Napi::CallbackInfo& info):
10+
Napi::ObjectWrap<VerboseIndicator>(info) {
11+
info.This().As<Napi::Object>()["verbose"] =
12+
Napi::Boolean::New(info.Env(),
13+
info.Env().GetInstanceData<Addon>()->verbose);
14+
}
15+
16+
Napi::Value Getter(const Napi::CallbackInfo& info) {
17+
return Napi::Boolean::New(info.Env(),
18+
info.Env().GetInstanceData<Addon>()->verbose);
19+
}
20+
21+
void Setter(const Napi::CallbackInfo& info, const Napi::Value& val) {
22+
info.Env().GetInstanceData<Addon>()->verbose = val.As<Napi::Boolean>();
23+
}
24+
25+
static Napi::FunctionReference Init(Napi::Env env) {
26+
return Napi::Persistent(DefineClass(env, "VerboseIndicator", {
27+
InstanceAccessor<
28+
&VerboseIndicator::Getter,
29+
&VerboseIndicator::Setter>("verbose")
30+
}));
31+
}
32+
};
33+
34+
Addon(Napi::Env env): VerboseIndicator(VerboseIndicator::Init(env)) {}
835
bool verbose = false;
36+
Napi::FunctionReference VerboseIndicator;
937
~Addon() {
1038
if (verbose) {
1139
fprintf(stderr, "addon_data: Addon::~Addon\n");
@@ -14,16 +42,15 @@ class Addon {
1442
};
1543

1644
static Napi::Value Getter(const Napi::CallbackInfo& info) {
17-
return Napi::Boolean::New(info.Env(),
18-
info.Env().GetInstanceData<Addon>()->verbose);
45+
return info.Env().GetInstanceData<Addon>()->VerboseIndicator.New({});
1946
}
2047

2148
static void Setter(const Napi::CallbackInfo& info) {
2249
info.Env().GetInstanceData<Addon>()->verbose = info[0].As<Napi::Boolean>();
2350
}
2451

2552
Napi::Object InitAddonData(Napi::Env env) {
26-
env.SetInstanceData(new Addon());
53+
env.SetInstanceData(new Addon(env));
2754
Napi::Object result = Napi::Object::New(env);
2855

2956
result.DefineProperties({

test/addon_data.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ function test(bindingName) {
1212
const binding = require(bindingName);
1313

1414
// Make sure it is possible to get/set instance data.
15-
assert.strictEqual(binding.addon_data.verbose, false);
15+
assert.strictEqual(binding.addon_data.verbose.verbose, false);
1616
binding.addon_data.verbose = true;
17-
assert.strictEqual(binding.addon_data.verbose, true);
17+
assert.strictEqual(binding.addon_data.verbose.verbose, true);
1818
binding.addon_data.verbose = false;
19-
assert.strictEqual(binding.addon_data.verbose, false);
19+
assert.strictEqual(binding.addon_data.verbose.verbose, false);
2020

2121
// Make sure the instance data finalizer is called at process exit.
2222
const child = spawn(process.execPath, [

0 commit comments

Comments
 (0)