You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
268 lines
7.0 KiB
268 lines
7.0 KiB
/*********************************************************************
|
|
* NAN - Native Abstractions for Node.js
|
|
*
|
|
* Copyright (c) 2018 NAN contributors
|
|
*
|
|
* MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
|
|
********************************************************************/
|
|
|
|
#ifndef NAN_MAYBE_PRE_43_INL_H_
|
|
#define NAN_MAYBE_PRE_43_INL_H_
|
|
|
|
template<typename T>
|
|
class MaybeLocal {
|
|
public:
|
|
inline MaybeLocal() : val_(v8::Local<T>()) {}
|
|
|
|
template<typename S>
|
|
# if NODE_MODULE_VERSION >= NODE_0_12_MODULE_VERSION
|
|
inline
|
|
MaybeLocal(v8::Local<S> that) : val_(that) {} // NOLINT(runtime/explicit)
|
|
# else
|
|
inline
|
|
MaybeLocal(v8::Local<S> that) : // NOLINT(runtime/explicit)
|
|
val_(*reinterpret_cast<v8::Local<T>*>(&that)) {}
|
|
# endif
|
|
|
|
inline bool IsEmpty() const { return val_.IsEmpty(); }
|
|
|
|
template<typename S>
|
|
inline bool ToLocal(v8::Local<S> *out) const {
|
|
*out = val_;
|
|
return !IsEmpty();
|
|
}
|
|
|
|
inline v8::Local<T> ToLocalChecked() const {
|
|
#if defined(V8_ENABLE_CHECKS)
|
|
assert(!IsEmpty() && "ToLocalChecked is Empty");
|
|
#endif // V8_ENABLE_CHECKS
|
|
return val_;
|
|
}
|
|
|
|
template<typename S>
|
|
inline v8::Local<S> FromMaybe(v8::Local<S> default_value) const {
|
|
return IsEmpty() ? default_value : v8::Local<S>(val_);
|
|
}
|
|
|
|
private:
|
|
v8::Local<T> val_;
|
|
};
|
|
|
|
inline
|
|
MaybeLocal<v8::String> ToDetailString(v8::Handle<v8::Value> val) {
|
|
return MaybeLocal<v8::String>(val->ToDetailString());
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Uint32> ToArrayIndex(v8::Handle<v8::Value> val) {
|
|
return MaybeLocal<v8::Uint32>(val->ToArrayIndex());
|
|
}
|
|
|
|
inline
|
|
Maybe<bool> Equals(v8::Handle<v8::Value> a, v8::Handle<v8::Value>(b)) {
|
|
return Just<bool>(a->Equals(b));
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::Function> h) {
|
|
return MaybeLocal<v8::Object>(h->NewInstance());
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Object> NewInstance(
|
|
v8::Local<v8::Function> h
|
|
, int argc
|
|
, v8::Local<v8::Value> argv[]) {
|
|
return MaybeLocal<v8::Object>(h->NewInstance(argc, argv));
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Object> NewInstance(v8::Handle<v8::ObjectTemplate> h) {
|
|
return MaybeLocal<v8::Object>(h->NewInstance());
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Function> GetFunction(v8::Handle<v8::FunctionTemplate> t) {
|
|
return MaybeLocal<v8::Function>(t->GetFunction());
|
|
}
|
|
|
|
inline Maybe<bool> Set(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::Value> key
|
|
, v8::Handle<v8::Value> value) {
|
|
return Just<bool>(obj->Set(key, value));
|
|
}
|
|
|
|
inline Maybe<bool> Set(
|
|
v8::Handle<v8::Object> obj
|
|
, uint32_t index
|
|
, v8::Handle<v8::Value> value) {
|
|
return Just<bool>(obj->Set(index, value));
|
|
}
|
|
|
|
#include "nan_define_own_property_helper.h" // NOLINT(build/include)
|
|
|
|
inline Maybe<bool> DefineOwnProperty(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key
|
|
, v8::Handle<v8::Value> value
|
|
, v8::PropertyAttribute attribs = v8::None) {
|
|
v8::PropertyAttribute current = obj->GetPropertyAttributes(key);
|
|
return imp::DefineOwnPropertyHelper(current, obj, key, value, attribs);
|
|
}
|
|
|
|
NAN_DEPRECATED inline Maybe<bool> ForceSet(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::Value> key
|
|
, v8::Handle<v8::Value> value
|
|
, v8::PropertyAttribute attribs = v8::None) {
|
|
return Just<bool>(obj->ForceSet(key, value, attribs));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> Get(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::Value> key) {
|
|
return MaybeLocal<v8::Value>(obj->Get(key));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> Get(
|
|
v8::Handle<v8::Object> obj
|
|
, uint32_t index) {
|
|
return MaybeLocal<v8::Value>(obj->Get(index));
|
|
}
|
|
|
|
inline Maybe<v8::PropertyAttribute> GetPropertyAttributes(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::Value> key) {
|
|
return Just<v8::PropertyAttribute>(obj->GetPropertyAttributes(key));
|
|
}
|
|
|
|
inline Maybe<bool> Has(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return Just<bool>(obj->Has(key));
|
|
}
|
|
|
|
inline Maybe<bool> Has(
|
|
v8::Handle<v8::Object> obj
|
|
, uint32_t index) {
|
|
return Just<bool>(obj->Has(index));
|
|
}
|
|
|
|
inline Maybe<bool> Delete(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return Just<bool>(obj->Delete(key));
|
|
}
|
|
|
|
inline Maybe<bool> Delete(
|
|
v8::Handle<v8::Object> obj
|
|
, uint32_t index) {
|
|
return Just<bool>(obj->Delete(index));
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Array> GetPropertyNames(v8::Handle<v8::Object> obj) {
|
|
return MaybeLocal<v8::Array>(obj->GetPropertyNames());
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::Array> GetOwnPropertyNames(v8::Handle<v8::Object> obj) {
|
|
return MaybeLocal<v8::Array>(obj->GetOwnPropertyNames());
|
|
}
|
|
|
|
inline Maybe<bool> SetPrototype(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::Value> prototype) {
|
|
return Just<bool>(obj->SetPrototype(prototype));
|
|
}
|
|
|
|
inline MaybeLocal<v8::String> ObjectProtoToString(
|
|
v8::Handle<v8::Object> obj) {
|
|
return MaybeLocal<v8::String>(obj->ObjectProtoToString());
|
|
}
|
|
|
|
inline Maybe<bool> HasOwnProperty(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return Just<bool>(obj->HasOwnProperty(key));
|
|
}
|
|
|
|
inline Maybe<bool> HasRealNamedProperty(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return Just<bool>(obj->HasRealNamedProperty(key));
|
|
}
|
|
|
|
inline Maybe<bool> HasRealIndexedProperty(
|
|
v8::Handle<v8::Object> obj
|
|
, uint32_t index) {
|
|
return Just<bool>(obj->HasRealIndexedProperty(index));
|
|
}
|
|
|
|
inline Maybe<bool> HasRealNamedCallbackProperty(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return Just<bool>(obj->HasRealNamedCallbackProperty(key));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> GetRealNamedPropertyInPrototypeChain(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return MaybeLocal<v8::Value>(
|
|
obj->GetRealNamedPropertyInPrototypeChain(key));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> GetRealNamedProperty(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::String> key) {
|
|
return MaybeLocal<v8::Value>(obj->GetRealNamedProperty(key));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> CallAsFunction(
|
|
v8::Handle<v8::Object> obj
|
|
, v8::Handle<v8::Object> recv
|
|
, int argc
|
|
, v8::Handle<v8::Value> argv[]) {
|
|
return MaybeLocal<v8::Value>(obj->CallAsFunction(recv, argc, argv));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> CallAsConstructor(
|
|
v8::Handle<v8::Object> obj
|
|
, int argc
|
|
, v8::Local<v8::Value> argv[]) {
|
|
return MaybeLocal<v8::Value>(obj->CallAsConstructor(argc, argv));
|
|
}
|
|
|
|
inline
|
|
MaybeLocal<v8::String> GetSourceLine(v8::Handle<v8::Message> msg) {
|
|
return MaybeLocal<v8::String>(msg->GetSourceLine());
|
|
}
|
|
|
|
inline Maybe<int> GetLineNumber(v8::Handle<v8::Message> msg) {
|
|
return Just<int>(msg->GetLineNumber());
|
|
}
|
|
|
|
inline Maybe<int> GetStartColumn(v8::Handle<v8::Message> msg) {
|
|
return Just<int>(msg->GetStartColumn());
|
|
}
|
|
|
|
inline Maybe<int> GetEndColumn(v8::Handle<v8::Message> msg) {
|
|
return Just<int>(msg->GetEndColumn());
|
|
}
|
|
|
|
inline MaybeLocal<v8::Object> CloneElementAt(
|
|
v8::Handle<v8::Array> array
|
|
, uint32_t index) {
|
|
return MaybeLocal<v8::Object>(array->CloneElementAt(index));
|
|
}
|
|
|
|
inline MaybeLocal<v8::Value> Call(
|
|
v8::Local<v8::Function> fun
|
|
, v8::Local<v8::Object> recv
|
|
, int argc
|
|
, v8::Local<v8::Value> argv[]) {
|
|
return MaybeLocal<v8::Value>(fun->Call(recv, argc, argv));
|
|
}
|
|
|
|
#endif // NAN_MAYBE_PRE_43_INL_H_
|
|
|