-
-
Notifications
You must be signed in to change notification settings - Fork 528
Expand file tree
/
Copy pathglobal.cpp
More file actions
75 lines (65 loc) · 2.11 KB
/
global.cpp
File metadata and controls
75 lines (65 loc) · 2.11 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*********************************************************************
* NAN - Native Abstractions for Node.js
*
* Copyright (c) 2016 NAN contributors
*
* MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
********************************************************************/
#include <nan.h>
using namespace Nan; // NOLINT(build/namespaces)
template<typename T> Global<T> passer(v8::Local<T> handle) {
return Global<T>(handle).Pass();
}
NAN_METHOD(PassGlobal) {
info.GetReturnValue().Set(passer(New(42)));
}
NAN_METHOD(EmptyGlobal) {
Global<v8::String> g(New("value").ToLocalChecked());
bool b1 = !g.IsEmpty();
g.Empty(); // this will leak, never do it
info.GetReturnValue().Set(b1 && g.IsEmpty());
}
NAN_METHOD(MoveConstructGlobal) {
Global<v8::String> g(Global<v8::String>(New("value").ToLocalChecked()));
info.GetReturnValue().Set(!g.IsEmpty());
}
NAN_METHOD(CopyConstructGlobal) {
Persistent<v8::String> p(New("value").ToLocalChecked());
bool b1 = !p.IsEmpty();
Global<v8::String> g(p);
bool b2 = !p.IsEmpty();
p.Reset();
info.GetReturnValue().Set(b1 && b2 && !g.IsEmpty());
}
NAN_METHOD(MoveAssignGlobal) {
Global<v8::String> g = passer(New("value").ToLocalChecked());
info.GetReturnValue().Set(!g.IsEmpty());
}
NAN_MODULE_INIT(Init) {
Set(target
, New<v8::String>("passGlobal").ToLocalChecked()
, GetFunction(New<v8::FunctionTemplate>(PassGlobal))
.ToLocalChecked()
);
Set(target
, New<v8::String>("emptyGlobal").ToLocalChecked()
, GetFunction(New<v8::FunctionTemplate>(EmptyGlobal))
.ToLocalChecked()
);
Set(target
, New<v8::String>("moveConstructGlobal").ToLocalChecked()
, GetFunction(New<v8::FunctionTemplate>(MoveConstructGlobal))
.ToLocalChecked()
);
Set(target
, New<v8::String>("copyConstructGlobal").ToLocalChecked()
, GetFunction(New<v8::FunctionTemplate>(CopyConstructGlobal))
.ToLocalChecked()
);
Set(target
, New<v8::String>("moveAssignGlobal").ToLocalChecked()
, GetFunction(New<v8::FunctionTemplate>(MoveAssignGlobal))
.ToLocalChecked()
);
}
NODE_MODULE(global, Init)