UNPKG

7.16 kBtext/x-cView Raw
1/*********************************************************************
2 * NAN - Native Abstractions for Node.js
3 *
4 * Copyright (c) 2018 NAN contributors
5 *
6 * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
7 ********************************************************************/
8
9#ifndef NAN_MAYBE_PRE_43_INL_H_
10#define NAN_MAYBE_PRE_43_INL_H_
11
12template<typename T>
13class MaybeLocal {
14 public:
15 inline MaybeLocal() : val_(v8::Local<T>()) {}
16
17 template<typename S>
18# if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION
19 inline
20 MaybeLocal(v8::Local<S> that) : val_(that) {} // NOLINT(runtime/explicit)
21# else
22 inline
23 MaybeLocal(v8::Local<S> that) : // NOLINT(runtime/explicit)
24 val_(*reinterpret_cast<v8::Local<T>*>(&that)) {}
25# endif
26
27 inline bool IsEmpty() const { return val_.IsEmpty(); }
28
29 template<typename S>
30 inline bool ToLocal(v8::Local<S> *out) const {
31 *out = val_;
32 return !IsEmpty();
33 }
34
35 inline v8::Local<T> ToLocalChecked() const {
36#if defined(V8_ENABLE_CHECKS)
37 assert(!IsEmpty() && "ToLocalChecked is Empty");
38#endif // V8_ENABLE_CHECKS
39 return val_;
40 }
41
42 template<typename S>
43 inline v8::Local<S> FromMaybe(v8::Local<S> default_value) const {
44 return IsEmpty() ? default_value : v8::Local<S>(val_);
45 }
46
47 private:
48 v8::Local<T> val_;
49};
50
51inline
52MaybeLocal<v8::String> ToDetailString(v8::Handle<v8::Value> val) {
53 return MaybeLocal<v8::String>(val->ToDetailString());
54}
55
56inline
57MaybeLocal<v8::Uint32> ToArrayIndex(v8::Handle<v8::Value> val) {
58 return MaybeLocal<v8::Uint32>(val->ToArrayIndex());
59}
60
61inline
62Maybe<bool> Equals(v8::Handle<v8::Value> a, v8::Handle<v8::Value>(b)) {
63 return Just<bool>(a->Equals(b));
64}
65
66inline
67MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::Function> h) {
68 return MaybeLocal<v8::Object>(h->NewInstance());
69}
70
71inline
72MaybeLocal<v8::Object> NewInstance(
73 v8::Local<v8::Function> h
74 , int argc
75 , v8::Local<v8::Value> argv[]) {
76 return MaybeLocal<v8::Object>(h->NewInstance(argc, argv));
77}
78
79inline
80MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::ObjectTemplate> h) {
81 return MaybeLocal<v8::Object>(h->NewInstance());
82}
83
84inline
85MaybeLocal<v8::Function> GetFunction(v8::Handle<v8::FunctionTemplate> t) {
86 return MaybeLocal<v8::Function>(t->GetFunction());
87}
88
89inline Maybe<bool> Set(
90 v8::Handle<v8::Object> obj
91 , v8::Handle<v8::Value> key
92 , v8::Handle<v8::Value> value) {
93 return Just<bool>(obj->Set(key, value));
94}
95
96inline Maybe<bool> Set(
97 v8::Handle<v8::Object> obj
98 , uint32_t index
99 , v8::Handle<v8::Value> value) {
100 return Just<bool>(obj->Set(index, value));
101}
102
103#include "nan_define_own_property_helper.h" // NOLINT(build/include)
104
105inline Maybe<bool> DefineOwnProperty(
106 v8::Handle<v8::Object> obj
107 , v8::Handle<v8::String> key
108 , v8::Handle<v8::Value> value
109 , v8::PropertyAttribute attribs = v8::None) {
110 v8::PropertyAttribute current = obj->GetPropertyAttributes(key);
111 return imp::DefineOwnPropertyHelper(current, obj, key, value, attribs);
112}
113
114NAN_DEPRECATED inline Maybe<bool> ForceSet(
115 v8::Handle<v8::Object> obj
116 , v8::Handle<v8::Value> key
117 , v8::Handle<v8::Value> value
118 , v8::PropertyAttribute attribs = v8::None) {
119 return Just<bool>(obj->ForceSet(key, value, attribs));
120}
121
122inline MaybeLocal<v8::Value> Get(
123 v8::Handle<v8::Object> obj
124 , v8::Handle<v8::Value> key) {
125 return MaybeLocal<v8::Value>(obj->Get(key));
126}
127
128inline MaybeLocal<v8::Value> Get(
129 v8::Handle<v8::Object> obj
130 , uint32_t index) {
131 return MaybeLocal<v8::Value>(obj->Get(index));
132}
133
134inline Maybe<v8::PropertyAttribute> GetPropertyAttributes(
135 v8::Handle<v8::Object> obj
136 , v8::Handle<v8::Value> key) {
137 return Just<v8::PropertyAttribute>(obj->GetPropertyAttributes(key));
138}
139
140inline Maybe<bool> Has(
141 v8::Handle<v8::Object> obj
142 , v8::Handle<v8::String> key) {
143 return Just<bool>(obj->Has(key));
144}
145
146inline Maybe<bool> Has(
147 v8::Handle<v8::Object> obj
148 , uint32_t index) {
149 return Just<bool>(obj->Has(index));
150}
151
152inline Maybe<bool> Delete(
153 v8::Handle<v8::Object> obj
154 , v8::Handle<v8::String> key) {
155 return Just<bool>(obj->Delete(key));
156}
157
158inline Maybe<bool> Delete(
159 v8::Handle<v8::Object> obj
160 , uint32_t index) {
161 return Just<bool>(obj->Delete(index));
162}
163
164inline
165MaybeLocal<v8::Array> GetPropertyNames(v8::Handle<v8::Object> obj) {
166 return MaybeLocal<v8::Array>(obj->GetPropertyNames());
167}
168
169inline
170MaybeLocal<v8::Array> GetOwnPropertyNames(v8::Handle<v8::Object> obj) {
171 return MaybeLocal<v8::Array>(obj->GetOwnPropertyNames());
172}
173
174inline Maybe<bool> SetPrototype(
175 v8::Handle<v8::Object> obj
176 , v8::Handle<v8::Value> prototype) {
177 return Just<bool>(obj->SetPrototype(prototype));
178}
179
180inline MaybeLocal<v8::String> ObjectProtoToString(
181 v8::Handle<v8::Object> obj) {
182 return MaybeLocal<v8::String>(obj->ObjectProtoToString());
183}
184
185inline Maybe<bool> HasOwnProperty(
186 v8::Handle<v8::Object> obj
187 , v8::Handle<v8::String> key) {
188 return Just<bool>(obj->HasOwnProperty(key));
189}
190
191inline Maybe<bool> HasRealNamedProperty(
192 v8::Handle<v8::Object> obj
193 , v8::Handle<v8::String> key) {
194 return Just<bool>(obj->HasRealNamedProperty(key));
195}
196
197inline Maybe<bool> HasRealIndexedProperty(
198 v8::Handle<v8::Object> obj
199 , uint32_t index) {
200 return Just<bool>(obj->HasRealIndexedProperty(index));
201}
202
203inline Maybe<bool> HasRealNamedCallbackProperty(
204 v8::Handle<v8::Object> obj
205 , v8::Handle<v8::String> key) {
206 return Just<bool>(obj->HasRealNamedCallbackProperty(key));
207}
208
209inline MaybeLocal<v8::Value> GetRealNamedPropertyInPrototypeChain(
210 v8::Handle<v8::Object> obj
211 , v8::Handle<v8::String> key) {
212 return MaybeLocal<v8::Value>(
213 obj->GetRealNamedPropertyInPrototypeChain(key));
214}
215
216inline MaybeLocal<v8::Value> GetRealNamedProperty(
217 v8::Handle<v8::Object> obj
218 , v8::Handle<v8::String> key) {
219 return MaybeLocal<v8::Value>(obj->GetRealNamedProperty(key));
220}
221
222inline MaybeLocal<v8::Value> CallAsFunction(
223 v8::Handle<v8::Object> obj
224 , v8::Handle<v8::Object> recv
225 , int argc
226 , v8::Handle<v8::Value> argv[]) {
227 return MaybeLocal<v8::Value>(obj->CallAsFunction(recv, argc, argv));
228}
229
230inline MaybeLocal<v8::Value> CallAsConstructor(
231 v8::Handle<v8::Object> obj
232 , int argc
233 , v8::Local<v8::Value> argv[]) {
234 return MaybeLocal<v8::Value>(obj->CallAsConstructor(argc, argv));
235}
236
237inline
238MaybeLocal<v8::String> GetSourceLine(v8::Handle<v8::Message> msg) {
239 return MaybeLocal<v8::String>(msg->GetSourceLine());
240}
241
242inline Maybe<int> GetLineNumber(v8::Handle<v8::Message> msg) {
243 return Just<int>(msg->GetLineNumber());
244}
245
246inline Maybe<int> GetStartColumn(v8::Handle<v8::Message> msg) {
247 return Just<int>(msg->GetStartColumn());
248}
249
250inline Maybe<int> GetEndColumn(v8::Handle<v8::Message> msg) {
251 return Just<int>(msg->GetEndColumn());
252}
253
254inline MaybeLocal<v8::Object> CloneElementAt(
255 v8::Handle<v8::Array> array
256 , uint32_t index) {
257 return MaybeLocal<v8::Object>(array->CloneElementAt(index));
258}
259
260inline MaybeLocal<v8::Value> Call(
261 v8::Local<v8::Function> fun
262 , v8::Local<v8::Object> recv
263 , int argc
264 , v8::Local<v8::Value> argv[]) {
265 return MaybeLocal<v8::Value>(fun->Call(recv, argc, argv));
266}
267
268#endif // NAN_MAYBE_PRE_43_INL_H_