Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef NAN_IMPLEMENTATION_PRE_12_INL_H_
00010 #define NAN_IMPLEMENTATION_PRE_12_INL_H_
00011
00012
00013
00014
00015
00016 namespace imp {
00017
00018
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
00031
00032 Factory<v8::Boolean>::return_t
00033 Factory<v8::Boolean>::New(bool value) {
00034 return v8::Boolean::New(value)->ToBoolean();
00035 }
00036
00037
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
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
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
00064
00065 Factory<v8::External>::return_t
00066 Factory<v8::External>::New(void * value) {
00067 return v8::External::New(value);
00068 }
00069
00070
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
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
00106
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
00117
00118 Factory<v8::Number>::return_t
00119 Factory<v8::Number>::New(double value) {
00120 return v8::Number::New(value);
00121 }
00122
00123
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
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
00156
00157 Factory<v8::Object>::return_t
00158 Factory<v8::Object>::New() {
00159 return v8::Object::New();
00160 }
00161
00162
00163
00164 Factory<v8::ObjectTemplate>::return_t
00165 Factory<v8::ObjectTemplate>::New() {
00166 return v8::ObjectTemplate::New();
00167 }
00168
00169
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
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
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
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) {
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
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 }
00241
00242
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_