nan_implementation_pre_12_inl.h
Go to the documentation of this file.
00001 /*********************************************************************
00002  * NAN - Native Abstractions for Node.js
00003  *
00004  * Copyright (c) 2016 NAN contributors
00005  *
00006  * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
00007  ********************************************************************/
00008 
00009 #ifndef NAN_IMPLEMENTATION_PRE_12_INL_H_
00010 #define NAN_IMPLEMENTATION_PRE_12_INL_H_
00011 
00012 //==============================================================================
00013 // node v0.10 implementation
00014 //==============================================================================
00015 
00016 namespace imp {
00017 
00018 //=== Array ====================================================================
00019 
00020 Factory<v8::Array>::return_t
00021 Factory<v8::Array>::New() {
00022   return v8::Array::New();
00023 }
00024 
00025 Factory<v8::Array>::return_t
00026 Factory<v8::Array>::New(int length) {
00027   return v8::Array::New(length);
00028 }
00029 
00030 //=== Boolean ==================================================================
00031 
00032 Factory<v8::Boolean>::return_t
00033 Factory<v8::Boolean>::New(bool value) {
00034   return v8::Boolean::New(value)->ToBoolean();
00035 }
00036 
00037 //=== Boolean Object ===========================================================
00038 
00039 Factory<v8::BooleanObject>::return_t
00040 Factory<v8::BooleanObject>::New(bool value) {
00041   return v8::BooleanObject::New(value).As<v8::BooleanObject>();
00042 }
00043 
00044 //=== Context ==================================================================
00045 
00046 Factory<v8::Context>::return_t
00047 Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
00048                          , v8::Local<v8::ObjectTemplate> tmpl
00049                          , v8::Local<v8::Value> obj) {
00050   v8::Persistent<v8::Context> ctx = v8::Context::New(extensions, tmpl, obj);
00051   v8::Local<v8::Context> lctx = v8::Local<v8::Context>::New(ctx);
00052   ctx.Dispose();
00053   return lctx;
00054 }
00055 
00056 //=== Date =====================================================================
00057 
00058 Factory<v8::Date>::return_t
00059 Factory<v8::Date>::New(double value) {
00060   return Factory<v8::Date>::return_t(v8::Date::New(value).As<v8::Date>());
00061 }
00062 
00063 //=== External =================================================================
00064 
00065 Factory<v8::External>::return_t
00066 Factory<v8::External>::New(void * value) {
00067   return v8::External::New(value);
00068 }
00069 
00070 //=== Function =================================================================
00071 
00072 Factory<v8::Function>::return_t
00073 Factory<v8::Function>::New( FunctionCallback callback
00074                           , v8::Local<v8::Value> data) {
00075   return Factory<v8::FunctionTemplate>::New( callback
00076                                            , data
00077                                            , v8::Local<v8::Signature>()
00078                                            )->GetFunction();
00079 }
00080 
00081 
00082 //=== FunctionTemplate =========================================================
00083 
00084 Factory<v8::FunctionTemplate>::return_t
00085 Factory<v8::FunctionTemplate>::New( FunctionCallback callback
00086                                   , v8::Local<v8::Value> data
00087                                   , v8::Local<v8::Signature> signature) {
00088   if (callback) {
00089     v8::HandleScope scope;
00090 
00091     v8::Local<v8::ObjectTemplate> tpl = v8::ObjectTemplate::New();
00092     tpl->SetInternalFieldCount(imp::kFunctionFieldCount);
00093     v8::Local<v8::Object> obj = tpl->NewInstance();
00094 
00095     obj->SetInternalField(
00096         imp::kFunctionIndex
00097       , v8::External::New(reinterpret_cast<void *>(callback)));
00098 
00099     v8::Local<v8::Value> val = v8::Local<v8::Value>::New(data);
00100 
00101     if (!val.IsEmpty()) {
00102       obj->SetInternalField(imp::kDataIndex, val);
00103     }
00104 
00105     // Note(agnat): Emulate length argument here. Unfortunately, I couldn't find
00106     // a way. Have at it though...
00107     return scope.Close(
00108         v8::FunctionTemplate::New(imp::FunctionCallbackWrapper
00109                                  , obj
00110                                  , signature));
00111   } else {
00112     return v8::FunctionTemplate::New(0, data, signature);
00113   }
00114 }
00115 
00116 //=== Number ===================================================================
00117 
00118 Factory<v8::Number>::return_t
00119 Factory<v8::Number>::New(double value) {
00120   return v8::Number::New(value);
00121 }
00122 
00123 //=== Number Object ============================================================
00124 
00125 Factory<v8::NumberObject>::return_t
00126 Factory<v8::NumberObject>::New(double value) {
00127   return v8::NumberObject::New(value).As<v8::NumberObject>();
00128 }
00129 
00130 //=== Integer, Int32 and Uint32 ================================================
00131 
00132 template <typename T>
00133 typename IntegerFactory<T>::return_t
00134 IntegerFactory<T>::New(int32_t value) {
00135   return To<T>(T::New(value));
00136 }
00137 
00138 template <typename T>
00139 typename IntegerFactory<T>::return_t
00140 IntegerFactory<T>::New(uint32_t value) {
00141   return To<T>(T::NewFromUnsigned(value));
00142 }
00143 
00144 Factory<v8::Uint32>::return_t
00145 Factory<v8::Uint32>::New(int32_t value) {
00146   return To<v8::Uint32>(v8::Uint32::NewFromUnsigned(value));
00147 }
00148 
00149 Factory<v8::Uint32>::return_t
00150 Factory<v8::Uint32>::New(uint32_t value) {
00151   return To<v8::Uint32>(v8::Uint32::NewFromUnsigned(value));
00152 }
00153 
00154 
00155 //=== Object ===================================================================
00156 
00157 Factory<v8::Object>::return_t
00158 Factory<v8::Object>::New() {
00159   return v8::Object::New();
00160 }
00161 
00162 //=== Object Template ==========================================================
00163 
00164 Factory<v8::ObjectTemplate>::return_t
00165 Factory<v8::ObjectTemplate>::New() {
00166   return v8::ObjectTemplate::New();
00167 }
00168 
00169 //=== RegExp ===================================================================
00170 
00171 Factory<v8::RegExp>::return_t
00172 Factory<v8::RegExp>::New(
00173     v8::Local<v8::String> pattern
00174   , v8::RegExp::Flags flags) {
00175   return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
00176 }
00177 
00178 //=== Script ===================================================================
00179 
00180 Factory<v8::Script>::return_t
00181 Factory<v8::Script>::New( v8::Local<v8::String> source) {
00182   return Factory<v8::Script>::return_t(v8::Script::New(source));
00183 }
00184 Factory<v8::Script>::return_t
00185 Factory<v8::Script>::New( v8::Local<v8::String> source
00186                         , v8::ScriptOrigin const& origin) {
00187   return Factory<v8::Script>::return_t(
00188       v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin)));
00189 }
00190 
00191 //=== Signature ================================================================
00192 
00193 Factory<v8::Signature>::return_t
00194 Factory<v8::Signature>::New(Factory<v8::Signature>::FTH receiver) {
00195   return v8::Signature::New(receiver);
00196 }
00197 
00198 //=== String ===================================================================
00199 
00200 Factory<v8::String>::return_t
00201 Factory<v8::String>::New() {
00202   return Factory<v8::String>::return_t(v8::String::Empty());
00203 }
00204 
00205 Factory<v8::String>::return_t
00206 Factory<v8::String>::New(const char * value, int length) {
00207   return Factory<v8::String>::return_t(v8::String::New(value, length));
00208 }
00209 
00210 Factory<v8::String>::return_t
00211 Factory<v8::String>::New(
00212     std::string const& value) /* NOLINT(build/include_what_you_use) */ {
00213   assert(value.size() <= INT_MAX && "string too long");
00214   return Factory<v8::String>::return_t(
00215       v8::String::New( value.data(), static_cast<int>(value.size())));
00216 }
00217 
00218 Factory<v8::String>::return_t
00219 Factory<v8::String>::New(const uint16_t * value, int length) {
00220   return Factory<v8::String>::return_t(v8::String::New(value, length));
00221 }
00222 
00223 Factory<v8::String>::return_t
00224 Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
00225   return Factory<v8::String>::return_t(v8::String::NewExternal(value));
00226 }
00227 
00228 Factory<v8::String>::return_t
00229 Factory<v8::String>::New(v8::String::ExternalAsciiStringResource * value) {
00230   return Factory<v8::String>::return_t(v8::String::NewExternal(value));
00231 }
00232 
00233 //=== String Object ============================================================
00234 
00235 Factory<v8::StringObject>::return_t
00236 Factory<v8::StringObject>::New(v8::Local<v8::String> value) {
00237   return v8::StringObject::New(value).As<v8::StringObject>();
00238 }
00239 
00240 }  // end of namespace imp
00241 
00242 //=== Presistents and Handles ==================================================
00243 
00244 template <typename T>
00245 inline v8::Local<T> New(v8::Handle<T> h) {
00246   return v8::Local<T>::New(h);
00247 }
00248 
00249 template <typename T>
00250 inline v8::Local<T> New(v8::Persistent<T> const& p) {
00251   return v8::Local<T>::New(p);
00252 }
00253 
00254 template <typename T, typename M>
00255 inline v8::Local<T> New(Persistent<T, M> const& p) {
00256   return v8::Local<T>::New(p.persistent);
00257 }
00258 
00259 template <typename T>
00260 inline v8::Local<T> New(Global<T> const& p) {
00261   return v8::Local<T>::New(p.persistent);
00262 }
00263 
00264 #endif  // NAN_IMPLEMENTATION_PRE_12_INL_H_


dji_ronin
Author(s):
autogenerated on Sat Jun 8 2019 20:15:31