Skip to content

Commit 9bf9b8b

Browse files
committed
Enable creating Locals from Globals under Node 0.10.
Fixes #470
1 parent eab6d82 commit 9bf9b8b

File tree

5 files changed

+30
-0
lines changed

5 files changed

+30
-0
lines changed

nan_implementation_12_inl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,4 +396,9 @@ inline v8::Local<T> New(Persistent<T, M> const& p) {
396396
return v8::Local<T>::New(v8::Isolate::GetCurrent(), p);
397397
}
398398

399+
template <typename T>
400+
inline v8::Local<T> New(Global<T> const& p) {
401+
return v8::Local<T>::New(v8::Isolate::GetCurrent(), p);
402+
}
403+
399404
#endif // NAN_IMPLEMENTATION_12_INL_H_

nan_implementation_pre_12_inl.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,4 +256,9 @@ inline v8::Local<T> New(Persistent<T, M> const& p) {
256256
return v8::Local<T>::New(p.persistent);
257257
}
258258

259+
template <typename T>
260+
inline v8::Local<T> New(Global<T> const& p) {
261+
return v8::Local<T>::New(p.persistent);
262+
}
263+
259264
#endif // NAN_IMPLEMENTATION_PRE_12_INL_H_

nan_new.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ template <typename T> inline v8::Local<T> New(v8::Persistent<T> const& p);
262262
#endif
263263
template <typename T, typename M>
264264
inline v8::Local<T> New(Persistent<T, M> const& p);
265+
template <typename T>
266+
inline v8::Local<T> New(Global<T> const& p);
265267

266268
inline
267269
imp::Factory<v8::Boolean>::return_t

nan_persistent_pre_12_inl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,12 @@
1212
template<typename T>
1313
class PersistentBase {
1414
v8::Persistent<T> persistent;
15+
template<typename U>
16+
friend v8::Local<U> New(const PersistentBase<U> &p);
1517
template<typename U, typename M>
1618
friend v8::Local<U> New(const Persistent<U, M> &p);
19+
template<typename U>
20+
friend v8::Local<U> New(const Global<U> &p);
1721
template<typename S> friend class ReturnValue;
1822

1923
public:

test/cpp/nannew.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,19 @@ NAN_METHOD(testPersistents) {
362362
info.GetReturnValue().SetUndefined();
363363
}
364364

365+
NAN_METHOD(testGlobals) {
366+
Tap t(info[0]);
367+
368+
t.plan(1);
369+
370+
Nan::Global<String> p;
371+
p.Reset(New("foo").ToLocalChecked());
372+
t.ok(_( assertType<String>( New(p))));
373+
p.Reset();
374+
375+
info.GetReturnValue().SetUndefined();
376+
}
377+
365378
//==============================================================================
366379
// Regression Tests
367380
//==============================================================================
@@ -473,6 +486,7 @@ NAN_MODULE_INIT(Init) {
473486
NAN_EXPORT(target, testStringObject);
474487

475488
NAN_EXPORT(target, testPersistents);
489+
NAN_EXPORT(target, testGlobals);
476490

477491
NAN_EXPORT(target, testRegression212);
478492
NAN_EXPORT(target, testRegression242);

0 commit comments

Comments
 (0)