Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 liveuser 1
/*********************************************************************
2
 * NAN - Native Abstractions for Node.js
3
 *
4
 * Copyright (c) 2016 NAN contributors
5
 *
6
 * MIT License <https://github.com/nodejs/nan/blob/master/LICENSE.md>
7
 ********************************************************************/
8
 
9
#ifndef NAN_IMPLEMENTATION_12_INL_H_
10
#define NAN_IMPLEMENTATION_12_INL_H_
11
//==============================================================================
12
// node v0.11 implementation
13
//==============================================================================
14
 
15
namespace imp {
16
 
17
//=== Array ====================================================================
18
 
19
Factory<v8::Array>::return_t
20
Factory<v8::Array>::New() {
21
  return v8::Array::New(v8::Isolate::GetCurrent());
22
}
23
 
24
Factory<v8::Array>::return_t
25
Factory<v8::Array>::New(int length) {
26
  return v8::Array::New(v8::Isolate::GetCurrent(), length);
27
}
28
 
29
//=== Boolean ==================================================================
30
 
31
Factory<v8::Boolean>::return_t
32
Factory<v8::Boolean>::New(bool value) {
33
  return v8::Boolean::New(v8::Isolate::GetCurrent(), value);
34
}
35
 
36
//=== Boolean Object ===========================================================
37
 
38
Factory<v8::BooleanObject>::return_t
39
Factory<v8::BooleanObject>::New(bool value) {
40
#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION)
41
  return v8::BooleanObject::New(
42
    v8::Isolate::GetCurrent(), value).As<v8::BooleanObject>();
43
#else
44
  return v8::BooleanObject::New(value).As<v8::BooleanObject>();
45
#endif
46
}
47
 
48
//=== Context ==================================================================
49
 
50
Factory<v8::Context>::return_t
51
Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
52
                         , v8::Local<v8::ObjectTemplate> tmpl
53
                         , v8::Local<v8::Value> obj) {
54
  return v8::Context::New(v8::Isolate::GetCurrent(), extensions, tmpl, obj);
55
}
56
 
57
//=== Date =====================================================================
58
 
59
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
60
  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
61
Factory<v8::Date>::return_t
62
Factory<v8::Date>::New(double value) {
63
  v8::Local<v8::Date> ret;
64
  if (v8::Date::New(GetCurrentContext(), value).
65
      ToLocal(reinterpret_cast<v8::Local<v8::Value>*>(&ret))) {
66
    return v8::MaybeLocal<v8::Date>(ret);
67
  } else {
68
    return v8::MaybeLocal<v8::Date>(ret);
69
  }
70
}
71
#else
72
Factory<v8::Date>::return_t
73
Factory<v8::Date>::New(double value) {
74
  return Factory<v8::Date>::return_t(
75
      v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>());
76
}
77
#endif
78
 
79
//=== External =================================================================
80
 
81
Factory<v8::External>::return_t
82
Factory<v8::External>::New(void * value) {
83
  return v8::External::New(v8::Isolate::GetCurrent(), value);
84
}
85
 
86
//=== Function =================================================================
87
 
88
Factory<v8::Function>::return_t
89
Factory<v8::Function>::New( FunctionCallback callback
90
                          , v8::Local<v8::Value> data) {
91
  v8::Isolate *isolate = v8::Isolate::GetCurrent();
92
  v8::EscapableHandleScope scope(isolate);
93
  v8::Local<v8::ObjectTemplate> tpl = v8::ObjectTemplate::New(isolate);
94
  tpl->SetInternalFieldCount(imp::kFunctionFieldCount);
95
  v8::Local<v8::Object> obj = NewInstance(tpl).ToLocalChecked();
96
 
97
  obj->SetInternalField(
98
      imp::kFunctionIndex
99
    , v8::External::New(isolate, reinterpret_cast<void *>(callback)));
100
 
101
  v8::Local<v8::Value> val = v8::Local<v8::Value>::New(isolate, data);
102
 
103
  if (!val.IsEmpty()) {
104
    obj->SetInternalField(imp::kDataIndex, val);
105
  }
106
 
107
  return scope.Escape(v8::Function::New( isolate
108
                          , imp::FunctionCallbackWrapper
109
                          , obj));
110
}
111
 
112
//=== Function Template ========================================================
113
 
114
Factory<v8::FunctionTemplate>::return_t
115
Factory<v8::FunctionTemplate>::New( FunctionCallback callback
116
                                  , v8::Local<v8::Value> data
117
                                  , v8::Local<v8::Signature> signature) {
118
  v8::Isolate *isolate = v8::Isolate::GetCurrent();
119
  if (callback) {
120
    v8::EscapableHandleScope scope(isolate);
121
    v8::Local<v8::ObjectTemplate> tpl = v8::ObjectTemplate::New(isolate);
122
    tpl->SetInternalFieldCount(imp::kFunctionFieldCount);
123
    v8::Local<v8::Object> obj = NewInstance(tpl).ToLocalChecked();
124
 
125
    obj->SetInternalField(
126
        imp::kFunctionIndex
127
      , v8::External::New(isolate, reinterpret_cast<void *>(callback)));
128
    v8::Local<v8::Value> val = v8::Local<v8::Value>::New(isolate, data);
129
 
130
    if (!val.IsEmpty()) {
131
      obj->SetInternalField(imp::kDataIndex, val);
132
    }
133
 
134
    return scope.Escape(v8::FunctionTemplate::New( isolate
135
                                    , imp::FunctionCallbackWrapper
136
                                    , obj
137
                                    , signature));
138
  } else {
139
    return v8::FunctionTemplate::New(isolate, 0, data, signature);
140
  }
141
}
142
 
143
//=== Number ===================================================================
144
 
145
Factory<v8::Number>::return_t
146
Factory<v8::Number>::New(double value) {
147
  return v8::Number::New(v8::Isolate::GetCurrent(), value);
148
}
149
 
150
//=== Number Object ============================================================
151
 
152
Factory<v8::NumberObject>::return_t
153
Factory<v8::NumberObject>::New(double value) {
154
  return v8::NumberObject::New( v8::Isolate::GetCurrent()
155
                              , value).As<v8::NumberObject>();
156
}
157
 
158
//=== Integer, Int32 and Uint32 ================================================
159
 
160
template <typename T>
161
typename IntegerFactory<T>::return_t
162
IntegerFactory<T>::New(int32_t value) {
163
  return To<T>(T::New(v8::Isolate::GetCurrent(), value));
164
}
165
 
166
template <typename T>
167
typename IntegerFactory<T>::return_t
168
IntegerFactory<T>::New(uint32_t value) {
169
  return To<T>(T::NewFromUnsigned(v8::Isolate::GetCurrent(), value));
170
}
171
 
172
Factory<v8::Uint32>::return_t
173
Factory<v8::Uint32>::New(int32_t value) {
174
  return To<v8::Uint32>(
175
      v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value));
176
}
177
 
178
Factory<v8::Uint32>::return_t
179
Factory<v8::Uint32>::New(uint32_t value) {
180
  return To<v8::Uint32>(
181
      v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value));
182
}
183
 
184
//=== Object ===================================================================
185
 
186
Factory<v8::Object>::return_t
187
Factory<v8::Object>::New() {
188
  return v8::Object::New(v8::Isolate::GetCurrent());
189
}
190
 
191
//=== Object Template ==========================================================
192
 
193
Factory<v8::ObjectTemplate>::return_t
194
Factory<v8::ObjectTemplate>::New() {
195
  return v8::ObjectTemplate::New(v8::Isolate::GetCurrent());
196
}
197
 
198
//=== RegExp ===================================================================
199
 
200
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
201
  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
202
Factory<v8::RegExp>::return_t
203
Factory<v8::RegExp>::New(
204
    v8::Local<v8::String> pattern
205
  , v8::RegExp::Flags flags) {
206
  return v8::RegExp::New(GetCurrentContext(), pattern, flags);
207
}
208
#else
209
Factory<v8::RegExp>::return_t
210
Factory<v8::RegExp>::New(
211
    v8::Local<v8::String> pattern
212
  , v8::RegExp::Flags flags) {
213
  return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
214
}
215
#endif
216
 
217
//=== Script ===================================================================
218
 
219
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
220
  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
221
Factory<v8::Script>::return_t
222
Factory<v8::Script>::New( v8::Local<v8::String> source) {
223
  v8::ScriptCompiler::Source src(source);
224
  return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
225
}
226
 
227
Factory<v8::Script>::return_t
228
Factory<v8::Script>::New( v8::Local<v8::String> source
229
                        , v8::ScriptOrigin const& origin) {
230
  v8::ScriptCompiler::Source src(source, origin);
231
  return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
232
}
233
#else
234
Factory<v8::Script>::return_t
235
Factory<v8::Script>::New( v8::Local<v8::String> source) {
236
  v8::ScriptCompiler::Source src(source);
237
  return Factory<v8::Script>::return_t(
238
      v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
239
}
240
 
241
Factory<v8::Script>::return_t
242
Factory<v8::Script>::New( v8::Local<v8::String> source
243
                        , v8::ScriptOrigin const& origin) {
244
  v8::ScriptCompiler::Source src(source, origin);
245
  return Factory<v8::Script>::return_t(
246
      v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
247
}
248
#endif
249
 
250
//=== Signature ================================================================
251
 
252
Factory<v8::Signature>::return_t
253
Factory<v8::Signature>::New(Factory<v8::Signature>::FTH receiver) {
254
  return v8::Signature::New(v8::Isolate::GetCurrent(), receiver);
255
}
256
 
257
//=== String ===================================================================
258
 
259
Factory<v8::String>::return_t
260
Factory<v8::String>::New() {
261
  return Factory<v8::String>::return_t(
262
      v8::String::Empty(v8::Isolate::GetCurrent()));
263
}
264
 
265
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
266
  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
267
Factory<v8::String>::return_t
268
Factory<v8::String>::New(const char * value, int length) {
269
  return v8::String::NewFromUtf8(
270
      v8::Isolate::GetCurrent(), value, v8::NewStringType::kNormal, length);
271
}
272
 
273
Factory<v8::String>::return_t
274
Factory<v8::String>::New(std::string const& value) {
275
  assert(value.size() <= INT_MAX && "string too long");
276
  return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(),
277
      value.data(), v8::NewStringType::kNormal, static_cast<int>(value.size()));
278
}
279
 
280
Factory<v8::String>::return_t
281
Factory<v8::String>::New(const uint16_t * value, int length) {
282
  return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value,
283
        v8::NewStringType::kNormal, length);
284
}
285
 
286
Factory<v8::String>::return_t
287
Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
288
  return v8::String::NewExternalTwoByte(v8::Isolate::GetCurrent(), value);
289
}
290
 
291
Factory<v8::String>::return_t
292
Factory<v8::String>::New(ExternalOneByteStringResource * value) {
293
  return v8::String::NewExternalOneByte(v8::Isolate::GetCurrent(), value);
294
}
295
#else
296
Factory<v8::String>::return_t
297
Factory<v8::String>::New(const char * value, int length) {
298
  return Factory<v8::String>::return_t(
299
      v8::String::NewFromUtf8(
300
          v8::Isolate::GetCurrent()
301
        , value
302
        , v8::String::kNormalString
303
        , length));
304
}
305
 
306
Factory<v8::String>::return_t
307
Factory<v8::String>::New(
308
    std::string const& value) /* NOLINT(build/include_what_you_use) */ {
309
  assert(value.size() <= INT_MAX && "string too long");
310
  return Factory<v8::String>::return_t(
311
      v8::String::NewFromUtf8(
312
          v8::Isolate::GetCurrent()
313
        , value.data()
314
        , v8::String::kNormalString
315
        , static_cast<int>(value.size())));
316
}
317
 
318
Factory<v8::String>::return_t
319
Factory<v8::String>::New(const uint16_t * value, int length) {
320
  return Factory<v8::String>::return_t(
321
      v8::String::NewFromTwoByte(
322
          v8::Isolate::GetCurrent()
323
        , value
324
        , v8::String::kNormalString
325
        , length));
326
}
327
 
328
Factory<v8::String>::return_t
329
Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
330
  return Factory<v8::String>::return_t(
331
      v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
332
}
333
 
334
Factory<v8::String>::return_t
335
Factory<v8::String>::New(ExternalOneByteStringResource * value) {
336
  return Factory<v8::String>::return_t(
337
      v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
338
}
339
#endif
340
 
341
//=== String Object ============================================================
342
 
343
Factory<v8::StringObject>::return_t
344
Factory<v8::StringObject>::New(v8::Local<v8::String> value) {
345
  return v8::StringObject::New(value).As<v8::StringObject>();
346
}
347
 
348
//=== Unbound Script ===========================================================
349
 
350
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 ||                      \
351
  (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
352
Factory<v8::UnboundScript>::return_t
353
Factory<v8::UnboundScript>::New(v8::Local<v8::String> source) {
354
  v8::ScriptCompiler::Source src(source);
355
  return v8::ScriptCompiler::CompileUnboundScript(
356
      v8::Isolate::GetCurrent(), &src);
357
}
358
 
359
Factory<v8::UnboundScript>::return_t
360
Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
361
                               , v8::ScriptOrigin const& origin) {
362
  v8::ScriptCompiler::Source src(source, origin);
363
  return v8::ScriptCompiler::CompileUnboundScript(
364
      v8::Isolate::GetCurrent(), &src);
365
}
366
#else
367
Factory<v8::UnboundScript>::return_t
368
Factory<v8::UnboundScript>::New(v8::Local<v8::String> source) {
369
  v8::ScriptCompiler::Source src(source);
370
  return Factory<v8::UnboundScript>::return_t(
371
      v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
372
}
373
 
374
Factory<v8::UnboundScript>::return_t
375
Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
376
                               , v8::ScriptOrigin const& origin) {
377
  v8::ScriptCompiler::Source src(source, origin);
378
  return Factory<v8::UnboundScript>::return_t(
379
      v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
380
}
381
#endif
382
 
383
}  // end of namespace imp
384
 
385
//=== Presistents and Handles ==================================================
386
 
387
#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION
388
template <typename T>
389
inline v8::Local<T> New(v8::Handle<T> h) {
390
  return v8::Local<T>::New(v8::Isolate::GetCurrent(), h);
391
}
392
#endif
393
 
394
template <typename T, typename M>
395
inline v8::Local<T> New(v8::Persistent<T, M> const& p) {
396
  return v8::Local<T>::New(v8::Isolate::GetCurrent(), p);
397
}
398
 
399
template <typename T, typename M>
400
inline v8::Local<T> New(Persistent<T, M> const& p) {
401
  return v8::Local<T>::New(v8::Isolate::GetCurrent(), p);
402
}
403
 
404
template <typename T>
405
inline v8::Local<T> New(Global<T> const& p) {
406
  return v8::Local<T>::New(v8::Isolate::GetCurrent(), p);
407
}
408
 
409
#endif  // NAN_IMPLEMENTATION_12_INL_H_