| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690 | /********************************************************************* * NAN - Native Abstractions for Node.js * * Copyright (c) 2018 NAN contributors * * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md> ********************************************************************/#ifndef NAN_CALLBACKS_12_INL_H_#define NAN_CALLBACKS_12_INL_H_template<typename T>class ReturnValue {  v8::ReturnValue<T> value_; public:  template <class S>  explicit inline ReturnValue(const v8::ReturnValue<S> &value) :      value_(value) {}  template <class S>  explicit inline ReturnValue(const ReturnValue<S>& that)      : value_(that.value_) {    TYPE_CHECK(T, S);  }  // Handle setters  template <typename S> inline void Set(const v8::Local<S> &handle) {    TYPE_CHECK(T, S);    value_.Set(handle);  }  template <typename S> inline void Set(const Global<S> &handle) {    TYPE_CHECK(T, S);#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) &&                       \  (V8_MINOR_VERSION > 5 || (V8_MINOR_VERSION == 5 &&                           \  defined(V8_BUILD_NUMBER) && V8_BUILD_NUMBER >= 8))))    value_.Set(handle);#else    value_.Set(*reinterpret_cast<const v8::Persistent<S>*>(&handle));    const_cast<Global<S> &>(handle).Reset();#endif  }  // Fast primitive setters  inline void Set(bool value) {    TYPE_CHECK(T, v8::Boolean);    value_.Set(value);  }  inline void Set(double i) {    TYPE_CHECK(T, v8::Number);    value_.Set(i);  }  inline void Set(int32_t i) {    TYPE_CHECK(T, v8::Integer);    value_.Set(i);  }  inline void Set(uint32_t i) {    TYPE_CHECK(T, v8::Integer);    value_.Set(i);  }  // Fast JS primitive setters  inline void SetNull() {    TYPE_CHECK(T, v8::Primitive);    value_.SetNull();  }  inline void SetUndefined() {    TYPE_CHECK(T, v8::Primitive);    value_.SetUndefined();  }  inline void SetEmptyString() {    TYPE_CHECK(T, v8::String);    value_.SetEmptyString();  }  // Convenience getter for isolate  inline v8::Isolate *GetIsolate() const {    return value_.GetIsolate();  }  // Pointer setter: Uncompilable to prevent inadvertent misuse.  template<typename S>  inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); }};template<typename T>class FunctionCallbackInfo {  const v8::FunctionCallbackInfo<T> &info_;  const v8::Local<v8::Value> data_; public:  explicit inline FunctionCallbackInfo(      const v8::FunctionCallbackInfo<T> &info    , v8::Local<v8::Value> data) :          info_(info)        , data_(data) {}  inline ReturnValue<T> GetReturnValue() const {    return ReturnValue<T>(info_.GetReturnValue());  }#if NODE_MAJOR_VERSION < 10  NAN_DEPRECATED inline v8::Local<v8::Function> Callee() const {    return info_.Callee();  }#endif  inline v8::Local<v8::Value> Data() const { return data_; }  inline v8::Local<v8::Object> Holder() const {#if defined(V8_MAJOR_VERSION) &&                                               \    (V8_MAJOR_VERSION > 12 ||                                                  \     (V8_MAJOR_VERSION == 12 &&                                                \      (defined(V8_MINOR_VERSION) &&                                            \       (V8_MINOR_VERSION > 5 ||                                                \        (V8_MINOR_VERSION == 5 && defined(V8_BUILD_NUMBER) &&                  \         V8_BUILD_NUMBER >= 214)))))    return info_.This();#else    return info_.Holder();#endif  }  inline bool IsConstructCall() const { return info_.IsConstructCall(); }  inline int Length() const { return info_.Length(); }  inline v8::Local<v8::Value> operator[](int i) const { return info_[i]; }  inline v8::Local<v8::Object> This() const { return info_.This(); }  inline v8::Isolate *GetIsolate() const { return info_.GetIsolate(); } protected:  static const int kHolderIndex = 0;  static const int kIsolateIndex = 1;  static const int kReturnValueDefaultValueIndex = 2;  static const int kReturnValueIndex = 3;  static const int kDataIndex = 4;  static const int kCalleeIndex = 5;  static const int kContextSaveIndex = 6;  static const int kArgsLength = 7; private:  NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo)};template<typename T>class PropertyCallbackInfo {  const v8::PropertyCallbackInfo<T> &info_;  const v8::Local<v8::Value> data_; public:  explicit inline PropertyCallbackInfo(      const v8::PropertyCallbackInfo<T> &info    , const v8::Local<v8::Value> data) :          info_(info)        , data_(data) {}  inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); }  inline v8::Local<v8::Value> Data() const { return data_; }  inline v8::Local<v8::Object> This() const { return info_.This(); }  inline v8::Local<v8::Object> Holder() const { return info_.Holder(); }  inline ReturnValue<T> GetReturnValue() const {    return ReturnValue<T>(info_.GetReturnValue());  } protected:  static const int kHolderIndex = 0;  static const int kIsolateIndex = 1;  static const int kReturnValueDefaultValueIndex = 2;  static const int kReturnValueIndex = 3;  static const int kDataIndex = 4;  static const int kThisIndex = 5;  static const int kArgsLength = 6; private:  NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo)};namespace imp {staticvoid FunctionCallbackWrapper(const v8::FunctionCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  FunctionCallback callback = reinterpret_cast<FunctionCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kFunctionIndex)          .As<v8::Value>().As<v8::External>()->Value()));  FunctionCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  callback(cbinfo);}typedef void (*NativeFunction)(const v8::FunctionCallbackInfo<v8::Value> &);#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSIONstaticvoid GetterCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  GetterCallback callback = reinterpret_cast<GetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kGetterIndex)          .As<v8::Value>().As<v8::External>()->Value()));  callback(property.As<v8::String>(), cbinfo);}typedef void (*NativeGetter)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &);staticvoid SetterCallbackWrapper(    v8::Local<v8::Name> property  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<void> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<void>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  SetterCallback callback = reinterpret_cast<SetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kSetterIndex)          .As<v8::Value>().As<v8::External>()->Value()));  callback(property.As<v8::String>(), value, cbinfo);}typedef void (*NativeSetter)(    v8::Local<v8::Name>  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<void> &);#elsestaticvoid GetterCallbackWrapper(    v8::Local<v8::String> property  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  GetterCallback callback = reinterpret_cast<GetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kGetterIndex)          .As<v8::Value>().As<v8::External>()->Value()));  callback(property, cbinfo);}typedef void (*NativeGetter)    (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value> &);staticvoid SetterCallbackWrapper(    v8::Local<v8::String> property  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<void> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<void>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  SetterCallback callback = reinterpret_cast<SetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kSetterIndex)          .As<v8::Value>().As<v8::External>()->Value()));  callback(property, value, cbinfo);}typedef void (*NativeSetter)(    v8::Local<v8::String>  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<void> &);#endif#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 ||                     \  (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4))staticv8::Intercepted PropertyGetterCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyGetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(property.As<v8::String>(), cbinfo);}typedef v8::Intercepted (*NativePropertyGetter)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &);staticv8::Intercepted PropertySetterCallbackWrapper(    v8::Local<v8::Name> property  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<void> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<void>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertySetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(property.As<v8::String>(), value, cbinfo);}typedef v8::Intercepted (*NativePropertySetter)(    v8::Local<v8::Name>  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<void> &);#elsestaticvoid PropertyGetterCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyGetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property.As<v8::String>(), cbinfo);}typedef void (*NativePropertyGetter)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value> &);staticvoid PropertySetterCallbackWrapper(    v8::Local<v8::Name> property  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertySetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property.As<v8::String>(), value, cbinfo);}typedef void (*NativePropertySetter)(    v8::Local<v8::Name>  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<v8::Value> &);#endifstaticvoid PropertyEnumeratorCallbackWrapper(    const v8::PropertyCallbackInfo<v8::Array> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Array>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyEnumeratorCallback callback =      reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyEnumeratorIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(cbinfo);}typedef void (*NativePropertyEnumerator)    (const v8::PropertyCallbackInfo<v8::Array> &);#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 ||                     \  (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4))staticv8::Intercepted PropertyDeleterCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Boolean> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Boolean>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyDeleterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(property.As<v8::String>(), cbinfo);}typedef v8::Intercepted (NativePropertyDeleter)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean> &);staticv8::Intercepted PropertyQueryCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Integer> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Integer>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyQueryIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(property.As<v8::String>(), cbinfo);}typedef v8::Intercepted (*NativePropertyQuery)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Integer> &);#elsestaticvoid PropertyDeleterCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Boolean> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Boolean>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyDeleterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property.As<v8::String>(), cbinfo);}typedef void (NativePropertyDeleter)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Boolean> &);staticvoid PropertyQueryCallbackWrapper(    v8::Local<v8::Name> property  , const v8::PropertyCallbackInfo<v8::Integer> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Integer>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyQueryIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property.As<v8::String>(), cbinfo);}typedef void (*NativePropertyQuery)    (v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Integer> &);#endif#elsestaticvoid PropertyGetterCallbackWrapper(    v8::Local<v8::String> property  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyGetterCallback callback = reinterpret_cast<PropertyGetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyGetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property, cbinfo);}typedef void (*NativePropertyGetter)    (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value> &);staticvoid PropertySetterCallbackWrapper(    v8::Local<v8::String> property  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertySetterCallback callback = reinterpret_cast<PropertySetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertySetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property, value, cbinfo);}typedef void (*NativePropertySetter)(    v8::Local<v8::String>  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<v8::Value> &);staticvoid PropertyEnumeratorCallbackWrapper(    const v8::PropertyCallbackInfo<v8::Array> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Array>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyEnumeratorCallback callback =      reinterpret_cast<PropertyEnumeratorCallback>(reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyEnumeratorIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(cbinfo);}typedef void (*NativePropertyEnumerator)    (const v8::PropertyCallbackInfo<v8::Array> &);staticvoid PropertyDeleterCallbackWrapper(    v8::Local<v8::String> property  , const v8::PropertyCallbackInfo<v8::Boolean> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Boolean>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyDeleterCallback callback = reinterpret_cast<PropertyDeleterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyDeleterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property, cbinfo);}typedef void (NativePropertyDeleter)    (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Boolean> &);staticvoid PropertyQueryCallbackWrapper(    v8::Local<v8::String> property  , const v8::PropertyCallbackInfo<v8::Integer> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Integer>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  PropertyQueryCallback callback = reinterpret_cast<PropertyQueryCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kPropertyQueryIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(property, cbinfo);}typedef void (*NativePropertyQuery)    (v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Integer> &);#endif#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 ||                     \  (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4))staticv8::Intercepted IndexGetterCallbackWrapper(    uint32_t index, const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertyGetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(index, cbinfo);}typedef v8::Intercepted (*NativeIndexGetter)    (uint32_t, const v8::PropertyCallbackInfo<v8::Value> &);staticv8::Intercepted IndexSetterCallbackWrapper(    uint32_t index  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<void> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<void>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertySetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(index, value, cbinfo);}typedef v8::Intercepted (*NativeIndexSetter)(    uint32_t  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<void> &);#elsestaticvoid IndexGetterCallbackWrapper(    uint32_t index, const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexGetterCallback callback = reinterpret_cast<IndexGetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertyGetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(index, cbinfo);}typedef void (*NativeIndexGetter)    (uint32_t, const v8::PropertyCallbackInfo<v8::Value> &);staticvoid IndexSetterCallbackWrapper(    uint32_t index  , v8::Local<v8::Value> value  , const v8::PropertyCallbackInfo<v8::Value> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Value>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexSetterCallback callback = reinterpret_cast<IndexSetterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertySetterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(index, value, cbinfo);}typedef void (*NativeIndexSetter)(    uint32_t  , v8::Local<v8::Value>  , const v8::PropertyCallbackInfo<v8::Value> &);#endifstaticvoid IndexEnumeratorCallbackWrapper(    const v8::PropertyCallbackInfo<v8::Array> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Array>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexEnumeratorCallback callback = reinterpret_cast<IndexEnumeratorCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(              kIndexPropertyEnumeratorIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(cbinfo);}typedef void (*NativeIndexEnumerator)    (const v8::PropertyCallbackInfo<v8::Array> &);#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 ||                     \  (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4))staticv8::Intercepted IndexDeleterCallbackWrapper(    uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Boolean>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertyDeleterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(index, cbinfo);}typedef v8::Intercepted (*NativeIndexDeleter)    (uint32_t, const v8::PropertyCallbackInfo<v8::Boolean> &);staticv8::Intercepted IndexQueryCallbackWrapper(    uint32_t index, const v8::PropertyCallbackInfo<v8::Integer> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Integer>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertyQueryIndex)              .As<v8::Value>().As<v8::External>()->Value()));  return callback(index, cbinfo);}typedef v8::Intercepted (*NativeIndexQuery)    (uint32_t, const v8::PropertyCallbackInfo<v8::Integer> &);#elsestaticvoid IndexDeleterCallbackWrapper(    uint32_t index, const v8::PropertyCallbackInfo<v8::Boolean> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Boolean>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexDeleterCallback callback = reinterpret_cast<IndexDeleterCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertyDeleterIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(index, cbinfo);}typedef void (*NativeIndexDeleter)    (uint32_t, const v8::PropertyCallbackInfo<v8::Boolean> &);staticvoid IndexQueryCallbackWrapper(    uint32_t index, const v8::PropertyCallbackInfo<v8::Integer> &info) {  v8::Local<v8::Object> obj = info.Data().As<v8::Object>();  PropertyCallbackInfo<v8::Integer>      cbinfo(info, obj->GetInternalField(kDataIndex).As<v8::Value>());  IndexQueryCallback callback = reinterpret_cast<IndexQueryCallback>(      reinterpret_cast<intptr_t>(          obj->GetInternalField(kIndexPropertyQueryIndex)              .As<v8::Value>().As<v8::External>()->Value()));  callback(index, cbinfo);}typedef void (*NativeIndexQuery)    (uint32_t, const v8::PropertyCallbackInfo<v8::Integer> &);#endif}  // end of namespace imp#endif  // NAN_CALLBACKS_12_INL_H_
 |