1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | #ifndef NAN_CALLBACKS_12_INL_H_
|
10 | #define NAN_CALLBACKS_12_INL_H_
|
11 |
|
12 | template<typename T>
|
13 | class ReturnValue {
|
14 | v8::ReturnValue<T> value_;
|
15 |
|
16 | public:
|
17 | template <class S>
|
18 | explicit inline ReturnValue(const v8::ReturnValue<S> &value) :
|
19 | value_(value) {}
|
20 | template <class S>
|
21 | explicit inline ReturnValue(const ReturnValue<S>& that)
|
22 | : value_(that.value_) {
|
23 | TYPE_CHECK(T, S);
|
24 | }
|
25 |
|
26 |
|
27 | template <typename S> inline void Set(const v8::Local<S> &handle) {
|
28 | TYPE_CHECK(T, S);
|
29 | value_.Set(handle);
|
30 | }
|
31 |
|
32 | template <typename S> inline void Set(const Global<S> &handle) {
|
33 | TYPE_CHECK(T, S);
|
34 | #if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \
|
35 | (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && \
|
36 | (V8_MINOR_VERSION > 5 || (V8_MINOR_VERSION == 5 && \
|
37 | defined(V8_BUILD_NUMBER) && V8_BUILD_NUMBER >= 8))))
|
38 | value_.Set(handle);
|
39 | #else
|
40 | value_.Set(*reinterpret_cast<const v8::Persistent<S>*>(&handle));
|
41 | const_cast<Global<S> &>(handle).Reset();
|
42 | #endif
|
43 | }
|
44 |
|
45 |
|
46 | inline void Set(bool value) {
|
47 | TYPE_CHECK(T, v8::Boolean);
|
48 | value_.Set(value);
|
49 | }
|
50 |
|
51 | inline void Set(double i) {
|
52 | TYPE_CHECK(T, v8::Number);
|
53 | value_.Set(i);
|
54 | }
|
55 |
|
56 | inline void Set(int32_t i) {
|
57 | TYPE_CHECK(T, v8::Integer);
|
58 | value_.Set(i);
|
59 | }
|
60 |
|
61 | inline void Set(uint32_t i) {
|
62 | TYPE_CHECK(T, v8::Integer);
|
63 | value_.Set(i);
|
64 | }
|
65 |
|
66 |
|
67 | inline void SetNull() {
|
68 | TYPE_CHECK(T, v8::Primitive);
|
69 | value_.SetNull();
|
70 | }
|
71 |
|
72 | inline void SetUndefined() {
|
73 | TYPE_CHECK(T, v8::Primitive);
|
74 | value_.SetUndefined();
|
75 | }
|
76 |
|
77 | inline void SetEmptyString() {
|
78 | TYPE_CHECK(T, v8::String);
|
79 | value_.SetEmptyString();
|
80 | }
|
81 |
|
82 |
|
83 | inline v8::Isolate *GetIsolate() const {
|
84 | return value_.GetIsolate();
|
85 | }
|
86 |
|
87 |
|
88 | template<typename S>
|
89 | inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); }
|
90 | };
|
91 |
|
92 | template<typename T>
|
93 | class FunctionCallbackInfo {
|
94 | const v8::FunctionCallbackInfo<T> &info_;
|
95 | const v8::Local<v8::Value> data_;
|
96 |
|
97 | public:
|
98 | explicit inline FunctionCallbackInfo(
|
99 | const v8::FunctionCallbackInfo<T> &info
|
100 | , v8::Local<v8::Value> data) :
|
101 | info_(info)
|
102 | , data_(data) {}
|
103 |
|
104 | inline ReturnValue<T> GetReturnValue() const {
|
105 | return ReturnValue<T>(info_.GetReturnValue());
|
106 | }
|
107 |
|
108 | inline v8::Local<v8::Function> Callee() const { return info_.Callee(); }
|
109 | inline v8::Local<v8::Value> Data() const { return data_; }
|
110 | inline v8::Local<v8::Object> Holder() const { return info_.Holder(); }
|
111 | inline bool IsConstructCall() const { return info_.IsConstructCall(); }
|
112 | inline int Length() const { return info_.Length(); }
|
113 | inline v8::Local<v8::Value> operator[](int i) const { return info_[i]; }
|
114 | inline v8::Local<v8::Object> This() const { return info_.This(); }
|
115 | inline v8::Isolate *GetIsolate() const { return info_.GetIsolate(); }
|
116 |
|
117 |
|
118 | protected:
|
119 | static const int kHolderIndex = 0;
|
120 | static const int kIsolateIndex = 1;
|
121 | static const int kReturnValueDefaultValueIndex = 2;
|
122 | static const int kReturnValueIndex = 3;
|
123 | static const int kDataIndex = 4;
|
124 | static const int kCalleeIndex = 5;
|
125 | static const int kContextSaveIndex = 6;
|
126 | static const int kArgsLength = 7;
|
127 |
|
128 | private:
|
129 | NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo)
|
130 | };
|
131 |
|
132 | template<typename T>
|
133 | class PropertyCallbackInfo {
|
134 | const v8::PropertyCallbackInfo<T> &info_;
|
135 | const v8::Local<v8::Value> data_;
|
136 |
|
137 | public:
|
138 | explicit inline PropertyCallbackInfo(
|
139 | const v8::PropertyCallbackInfo<T> &info
|
140 | , const v8::Local<v8::Value> data) :
|
141 | info_(info)
|
142 | , data_(data) {}
|
143 |
|
144 | inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); }
|
145 | inline v8::Local<v8::Value> Data() const { return data_; }
|
146 | inline v8::Local<v8::Object> This() const { return info_.This(); }
|
147 | inline v8::Local<v8::Object> Holder() const { return info_.Holder(); }
|
148 | inline ReturnValue<T> GetReturnValue() const {
|
149 | return ReturnValue<T>(info_.GetReturnValue());
|
150 | }
|
151 |
|
152 | protected:
|
153 | static const int kHolderIndex = 0;
|
154 | static const int kIsolateIndex = 1;
|
155 | static const int kReturnValueDefaultValueIndex = 2;
|
156 | static const int kReturnValueIndex = 3;
|
157 | static const int kDataIndex = 4;
|
158 | static const int kThisIndex = 5;
|
159 | static const int kArgsLength = 6;
|
160 |
|
161 | private:
|
162 | NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo)
|
163 | };
|
164 |
|
165 | namespace imp {
|
166 | static
|
167 | void FunctionCallbackWrapper(const v8::FunctionCallbackInfo<v8::Value> &info) {
|
168 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
169 | FunctionCallback callback = reinterpret_cast<FunctionCallback>(
|
170 | reinterpret_cast<intptr_t>(
|
171 | obj->GetInternalField(kFunctionIndex).As<v8::External>()->Value()));
|
172 | FunctionCallbackInfo<v8::Value>
|
173 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
174 | callback(cbinfo);
|
175 | }
|
176 |
|
177 | typedef void (*NativeFunction)(const v8::FunctionCallbackInfo<v8::Value> &);
|
178 |
|
179 | #if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION
|
180 | static
|
181 | void GetterCallbackWrapper(
|
182 | v8::Local<v8::Name> property
|
183 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
184 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
185 | PropertyCallbackInfo<v8::Value>
|
186 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
187 | GetterCallback callback = reinterpret_cast<GetterCallback>(
|
188 | reinterpret_cast<intptr_t>(
|
189 | obj->GetInternalField(kGetterIndex).As<v8::External>()->Value()));
|
190 | callback(property.As<v8::String>(), cbinfo);
|
191 | }
|
192 |
|
193 | typedef void (*NativeGetter)
|
194 | (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &);
|
195 |
|
196 | static
|
197 | void SetterCallbackWrapper(
|
198 | v8::Local<v8::Name> property
|
199 | , v8::Local<v8::Value> value
|
200 | , const v8::PropertyCallbackInfo<void> &info) {
|
201 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
202 | PropertyCallbackInfo<void>
|
203 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
204 | SetterCallback callback = reinterpret_cast<SetterCallback>(
|
205 | reinterpret_cast<intptr_t>(
|
206 | obj->GetInternalField(kSetterIndex).As<v8::External>()->Value()));
|
207 | callback(property.As<v8::String>(), value, cbinfo);
|
208 | }
|
209 |
|
210 | typedef void (*NativeSetter)(
|
211 | v8::Local<v8::Name>
|
212 | , v8::Local<v8::Value>
|
213 | , const v8::PropertyCallbackInfo<void> &);
|
214 | #else
|
215 | static
|
216 | void GetterCallbackWrapper(
|
217 | v8::Local<v8::String> property
|
218 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
219 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
220 | PropertyCallbackInfo<v8::Value>
|
221 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
222 | GetterCallback callback = reinterpret_cast<GetterCallback>(
|
223 | reinterpret_cast<intptr_t>(
|
224 | obj->GetInternalField(kGetterIndex).As<v8::External>()->Value()));
|
225 | callback(property, cbinfo);
|
226 | }
|
227 |
|
228 | typedef void (*NativeGetter)
|
229 | (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value> &);
|
230 |
|
231 | static
|
232 | void SetterCallbackWrapper(
|
233 | v8::Local<v8::String> property
|
234 | , v8::Local<v8::Value> value
|
235 | , const v8::PropertyCallbackInfo<void> &info) {
|
236 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
237 | PropertyCallbackInfo<void>
|
238 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
239 | SetterCallback callback = reinterpret_cast<SetterCallback>(
|
240 | reinterpret_cast<intptr_t>(
|
241 | obj->GetInternalField(kSetterIndex).As<v8::External>()->Value()));
|
242 | callback(property, value, cbinfo);
|
243 | }
|
244 |
|
245 | typedef void (*NativeSetter)(
|
246 | v8::Local<v8::String>
|
247 | , v8::Local<v8::Value>
|
248 | , const v8::PropertyCallbackInfo<void> &);
|
249 | #endif
|
250 |
|
251 | #if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION
|
252 | static
|
253 | void PropertyGetterCallbackWrapper(
|
254 | v8::Local<v8::Name> property
|
255 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
256 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
257 | PropertyCallbackInfo<v8::Value>
|
258 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
259 | PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
|
260 | reinterpret_cast<intptr_t>(
|
261 | obj->GetInternalField(kPropertyGetterIndex)
|
262 | .As<v8::External>()->Value()));
|
263 | callback(property.As<v8::String>(), cbinfo);
|
264 | }
|
265 |
|
266 | typedef void (*NativePropertyGetter)
|
267 | (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &);
|
268 |
|
269 | static
|
270 | void PropertySetterCallbackWrapper(
|
271 | v8::Local<v8::Name> property
|
272 | , v8::Local<v8::Value> value
|
273 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
274 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
275 | PropertyCallbackInfo<v8::Value>
|
276 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
277 | PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
|
278 | reinterpret_cast<intptr_t>(
|
279 | obj->GetInternalField(kPropertySetterIndex)
|
280 | .As<v8::External>()->Value()));
|
281 | callback(property.As<v8::String>(), value, cbinfo);
|
282 | }
|
283 |
|
284 | typedef void (*NativePropertySetter)(
|
285 | v8::Local<v8::Name>
|
286 | , v8::Local<v8::Value>
|
287 | , const v8::PropertyCallbackInfo<v8::Value> &);
|
288 |
|
289 | static
|
290 | void PropertyEnumeratorCallbackWrapper(
|
291 | const v8::PropertyCallbackInfo<v8::Array> &info) {
|
292 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
293 | PropertyCallbackInfo<v8::Array>
|
294 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
295 | PropertyEnumeratorCallback callback =
|
296 | reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(
|
297 | obj->GetInternalField(kPropertyEnumeratorIndex)
|
298 | .As<v8::External>()->Value()));
|
299 | callback(cbinfo);
|
300 | }
|
301 |
|
302 | typedef void (*NativePropertyEnumerator)
|
303 | (const v8::PropertyCallbackInfo<v8::Array> &);
|
304 |
|
305 | static
|
306 | void PropertyDeleterCallbackWrapper(
|
307 | v8::Local<v8::Name> property
|
308 | , const v8::PropertyCallbackInfo<v8::Boolean> &info) {
|
309 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
310 | PropertyCallbackInfo<v8::Boolean>
|
311 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
312 | PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
|
313 | reinterpret_cast<intptr_t>(
|
314 | obj->GetInternalField(kPropertyDeleterIndex)
|
315 | .As<v8::External>()->Value()));
|
316 | callback(property.As<v8::String>(), cbinfo);
|
317 | }
|
318 |
|
319 | typedef void (NativePropertyDeleter)
|
320 | (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean> &);
|
321 |
|
322 | static
|
323 | void PropertyQueryCallbackWrapper(
|
324 | v8::Local<v8::Name> property
|
325 | , const v8::PropertyCallbackInfo<v8::Integer> &info) {
|
326 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
327 | PropertyCallbackInfo<v8::Integer>
|
328 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
329 | PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
|
330 | reinterpret_cast<intptr_t>(
|
331 | obj->GetInternalField(kPropertyQueryIndex)
|
332 | .As<v8::External>()->Value()));
|
333 | callback(property.As<v8::String>(), cbinfo);
|
334 | }
|
335 |
|
336 | typedef void (*NativePropertyQuery)
|
337 | (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Integer> &);
|
338 | #else
|
339 | static
|
340 | void PropertyGetterCallbackWrapper(
|
341 | v8::Local<v8::String> property
|
342 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
343 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
344 | PropertyCallbackInfo<v8::Value>
|
345 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
346 | PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(
|
347 | reinterpret_cast<intptr_t>(
|
348 | obj->GetInternalField(kPropertyGetterIndex)
|
349 | .As<v8::External>()->Value()));
|
350 | callback(property, cbinfo);
|
351 | }
|
352 |
|
353 | typedef void (*NativePropertyGetter)
|
354 | (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value> &);
|
355 |
|
356 | static
|
357 | void PropertySetterCallbackWrapper(
|
358 | v8::Local<v8::String> property
|
359 | , v8::Local<v8::Value> value
|
360 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
361 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
362 | PropertyCallbackInfo<v8::Value>
|
363 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
364 | PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(
|
365 | reinterpret_cast<intptr_t>(
|
366 | obj->GetInternalField(kPropertySetterIndex)
|
367 | .As<v8::External>()->Value()));
|
368 | callback(property, value, cbinfo);
|
369 | }
|
370 |
|
371 | typedef void (*NativePropertySetter)(
|
372 | v8::Local<v8::String>
|
373 | , v8::Local<v8::Value>
|
374 | , const v8::PropertyCallbackInfo<v8::Value> &);
|
375 |
|
376 | static
|
377 | void PropertyEnumeratorCallbackWrapper(
|
378 | const v8::PropertyCallbackInfo<v8::Array> &info) {
|
379 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
380 | PropertyCallbackInfo<v8::Array>
|
381 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
382 | PropertyEnumeratorCallback callback =
|
383 | reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(
|
384 | obj->GetInternalField(kPropertyEnumeratorIndex)
|
385 | .As<v8::External>()->Value()));
|
386 | callback(cbinfo);
|
387 | }
|
388 |
|
389 | typedef void (*NativePropertyEnumerator)
|
390 | (const v8::PropertyCallbackInfo<v8::Array> &);
|
391 |
|
392 | static
|
393 | void PropertyDeleterCallbackWrapper(
|
394 | v8::Local<v8::String> property
|
395 | , const v8::PropertyCallbackInfo<v8::Boolean> &info) {
|
396 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
397 | PropertyCallbackInfo<v8::Boolean>
|
398 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
399 | PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(
|
400 | reinterpret_cast<intptr_t>(
|
401 | obj->GetInternalField(kPropertyDeleterIndex)
|
402 | .As<v8::External>()->Value()));
|
403 | callback(property, cbinfo);
|
404 | }
|
405 |
|
406 | typedef void (NativePropertyDeleter)
|
407 | (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Boolean> &);
|
408 |
|
409 | static
|
410 | void PropertyQueryCallbackWrapper(
|
411 | v8::Local<v8::String> property
|
412 | , const v8::PropertyCallbackInfo<v8::Integer> &info) {
|
413 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
414 | PropertyCallbackInfo<v8::Integer>
|
415 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
416 | PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(
|
417 | reinterpret_cast<intptr_t>(
|
418 | obj->GetInternalField(kPropertyQueryIndex)
|
419 | .As<v8::External>()->Value()));
|
420 | callback(property, cbinfo);
|
421 | }
|
422 |
|
423 | typedef void (*NativePropertyQuery)
|
424 | (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Integer> &);
|
425 | #endif
|
426 |
|
427 | static
|
428 | void IndexGetterCallbackWrapper(
|
429 | uint32_t index, const v8::PropertyCallbackInfo<v8::Value> &info) {
|
430 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
431 | PropertyCallbackInfo<v8::Value>
|
432 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
433 | IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(
|
434 | reinterpret_cast<intptr_t>(
|
435 | obj->GetInternalField(kIndexPropertyGetterIndex)
|
436 | .As<v8::External>()->Value()));
|
437 | callback(index, cbinfo);
|
438 | }
|
439 |
|
440 | typedef void (*NativeIndexGetter)
|
441 | (uint32_t, const v8::PropertyCallbackInfo<v8::Value> &);
|
442 |
|
443 | static
|
444 | void IndexSetterCallbackWrapper(
|
445 | uint32_t index
|
446 | , v8::Local<v8::Value> value
|
447 | , const v8::PropertyCallbackInfo<v8::Value> &info) {
|
448 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
449 | PropertyCallbackInfo<v8::Value>
|
450 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
451 | IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(
|
452 | reinterpret_cast<intptr_t>(
|
453 | obj->GetInternalField(kIndexPropertySetterIndex)
|
454 | .As<v8::External>()->Value()));
|
455 | callback(index, value, cbinfo);
|
456 | }
|
457 |
|
458 | typedef void (*NativeIndexSetter)(
|
459 | uint32_t
|
460 | , v8::Local<v8::Value>
|
461 | , const v8::PropertyCallbackInfo<v8::Value> &);
|
462 |
|
463 | static
|
464 | void IndexEnumeratorCallbackWrapper(
|
465 | const v8::PropertyCallbackInfo<v8::Array> &info) {
|
466 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
467 | PropertyCallbackInfo<v8::Array>
|
468 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
469 | IndexEnumeratorCallback callback = reinterpret_cast<IndexEnumeratorCallback>(
|
470 | reinterpret_cast<intptr_t>(
|
471 | obj->GetInternalField(
|
472 | kIndexPropertyEnumeratorIndex).As<v8::External>()->Value()));
|
473 | callback(cbinfo);
|
474 | }
|
475 |
|
476 | typedef void (*NativeIndexEnumerator)
|
477 | (const v8::PropertyCallbackInfo<v8::Array> &);
|
478 |
|
479 | static
|
480 | void IndexDeleterCallbackWrapper(
|
481 | uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean> &info) {
|
482 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
483 | PropertyCallbackInfo<v8::Boolean>
|
484 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
485 | IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(
|
486 | reinterpret_cast<intptr_t>(
|
487 | obj->GetInternalField(kIndexPropertyDeleterIndex)
|
488 | .As<v8::External>()->Value()));
|
489 | callback(index, cbinfo);
|
490 | }
|
491 |
|
492 | typedef void (*NativeIndexDeleter)
|
493 | (uint32_t, const v8::PropertyCallbackInfo<v8::Boolean> &);
|
494 |
|
495 | static
|
496 | void IndexQueryCallbackWrapper(
|
497 | uint32_t index, const v8::PropertyCallbackInfo<v8::Integer> &info) {
|
498 | v8::Local<v8::Object> obj = info.Data().As<v8::Object>();
|
499 | PropertyCallbackInfo<v8::Integer>
|
500 | cbinfo(info, obj->GetInternalField(kDataIndex));
|
501 | IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(
|
502 | reinterpret_cast<intptr_t>(
|
503 | obj->GetInternalField(kIndexPropertyQueryIndex)
|
504 | .As<v8::External>()->Value()));
|
505 | callback(index, cbinfo);
|
506 | }
|
507 |
|
508 | typedef void (*NativeIndexQuery)
|
509 | (uint32_t, const v8::PropertyCallbackInfo<v8::Integer> &);
|
510 | }
|
511 |
|
512 | #endif
|