1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | #ifndef NAN_MAYBE_PRE_43_INL_H_
|
10 | #define NAN_MAYBE_PRE_43_INL_H_
|
11 |
|
12 | template<typename T>
|
13 | class 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) {}
|
21 | # else
|
22 | inline
|
23 | MaybeLocal(v8::Local<S> that) :
|
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
|
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 |
|
51 | inline
|
52 | MaybeLocal<v8::String> ToDetailString(v8::Handle<v8::Value> val) {
|
53 | return MaybeLocal<v8::String>(val->ToDetailString());
|
54 | }
|
55 |
|
56 | inline
|
57 | MaybeLocal<v8::Uint32> ToArrayIndex(v8::Handle<v8::Value> val) {
|
58 | return MaybeLocal<v8::Uint32>(val->ToArrayIndex());
|
59 | }
|
60 |
|
61 | inline
|
62 | Maybe<bool> Equals(v8::Handle<v8::Value> a, v8::Handle<v8::Value>(b)) {
|
63 | return Just<bool>(a->Equals(b));
|
64 | }
|
65 |
|
66 | inline
|
67 | MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::Function> h) {
|
68 | return MaybeLocal<v8::Object>(h->NewInstance());
|
69 | }
|
70 |
|
71 | inline
|
72 | MaybeLocal<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 |
|
79 | inline
|
80 | MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::ObjectTemplate> h) {
|
81 | return MaybeLocal<v8::Object>(h->NewInstance());
|
82 | }
|
83 |
|
84 | inline
|
85 | MaybeLocal<v8::Function> GetFunction(v8::Handle<v8::FunctionTemplate> t) {
|
86 | return MaybeLocal<v8::Function>(t->GetFunction());
|
87 | }
|
88 |
|
89 | inline 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 |
|
96 | inline 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"
|
104 |
|
105 | inline 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 |
|
114 | NAN_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 |
|
122 | inline 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 |
|
128 | inline MaybeLocal<v8::Value> Get(
|
129 | v8::Handle<v8::Object> obj
|
130 | , uint32_t index) {
|
131 | return MaybeLocal<v8::Value>(obj->Get(index));
|
132 | }
|
133 |
|
134 | inline 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 |
|
140 | inline Maybe<bool> Has(
|
141 | v8::Handle<v8::Object> obj
|
142 | , v8::Handle<v8::String> key) {
|
143 | return Just<bool>(obj->Has(key));
|
144 | }
|
145 |
|
146 | inline Maybe<bool> Has(
|
147 | v8::Handle<v8::Object> obj
|
148 | , uint32_t index) {
|
149 | return Just<bool>(obj->Has(index));
|
150 | }
|
151 |
|
152 | inline Maybe<bool> Delete(
|
153 | v8::Handle<v8::Object> obj
|
154 | , v8::Handle<v8::String> key) {
|
155 | return Just<bool>(obj->Delete(key));
|
156 | }
|
157 |
|
158 | inline Maybe<bool> Delete(
|
159 | v8::Handle<v8::Object> obj
|
160 | , uint32_t index) {
|
161 | return Just<bool>(obj->Delete(index));
|
162 | }
|
163 |
|
164 | inline
|
165 | MaybeLocal<v8::Array> GetPropertyNames(v8::Handle<v8::Object> obj) {
|
166 | return MaybeLocal<v8::Array>(obj->GetPropertyNames());
|
167 | }
|
168 |
|
169 | inline
|
170 | MaybeLocal<v8::Array> GetOwnPropertyNames(v8::Handle<v8::Object> obj) {
|
171 | return MaybeLocal<v8::Array>(obj->GetOwnPropertyNames());
|
172 | }
|
173 |
|
174 | inline Maybe<bool> SetPrototype(
|
175 | v8::Handle<v8::Object> obj
|
176 | , v8::Handle<v8::Value> prototype) {
|
177 | return Just<bool>(obj->SetPrototype(prototype));
|
178 | }
|
179 |
|
180 | inline MaybeLocal<v8::String> ObjectProtoToString(
|
181 | v8::Handle<v8::Object> obj) {
|
182 | return MaybeLocal<v8::String>(obj->ObjectProtoToString());
|
183 | }
|
184 |
|
185 | inline Maybe<bool> HasOwnProperty(
|
186 | v8::Handle<v8::Object> obj
|
187 | , v8::Handle<v8::String> key) {
|
188 | return Just<bool>(obj->HasOwnProperty(key));
|
189 | }
|
190 |
|
191 | inline Maybe<bool> HasRealNamedProperty(
|
192 | v8::Handle<v8::Object> obj
|
193 | , v8::Handle<v8::String> key) {
|
194 | return Just<bool>(obj->HasRealNamedProperty(key));
|
195 | }
|
196 |
|
197 | inline Maybe<bool> HasRealIndexedProperty(
|
198 | v8::Handle<v8::Object> obj
|
199 | , uint32_t index) {
|
200 | return Just<bool>(obj->HasRealIndexedProperty(index));
|
201 | }
|
202 |
|
203 | inline Maybe<bool> HasRealNamedCallbackProperty(
|
204 | v8::Handle<v8::Object> obj
|
205 | , v8::Handle<v8::String> key) {
|
206 | return Just<bool>(obj->HasRealNamedCallbackProperty(key));
|
207 | }
|
208 |
|
209 | inline 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 |
|
216 | inline 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 |
|
222 | inline 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 |
|
230 | inline 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 |
|
237 | inline
|
238 | MaybeLocal<v8::String> GetSourceLine(v8::Handle<v8::Message> msg) {
|
239 | return MaybeLocal<v8::String>(msg->GetSourceLine());
|
240 | }
|
241 |
|
242 | inline Maybe<int> GetLineNumber(v8::Handle<v8::Message> msg) {
|
243 | return Just<int>(msg->GetLineNumber());
|
244 | }
|
245 |
|
246 | inline Maybe<int> GetStartColumn(v8::Handle<v8::Message> msg) {
|
247 | return Just<int>(msg->GetStartColumn());
|
248 | }
|
249 |
|
250 | inline Maybe<int> GetEndColumn(v8::Handle<v8::Message> msg) {
|
251 | return Just<int>(msg->GetEndColumn());
|
252 | }
|
253 |
|
254 | inline MaybeLocal<v8::Object> CloneElementAt(
|
255 | v8::Handle<v8::Array> array
|
256 | , uint32_t index) {
|
257 | return MaybeLocal<v8::Object>(array->CloneElementAt(index));
|
258 | }
|
259 |
|
260 | inline 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
|