File tree Expand file tree Collapse file tree 5 files changed +61
-0
lines changed
Expand file tree Collapse file tree 5 files changed +61
-0
lines changed Original file line number Diff line number Diff line change @@ -185,6 +185,7 @@ The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Lo
185185 - <a href =" doc/maybe_types.md#api_nan_get_start_column " ><b ><code >Nan::GetStartColumn()</code ></b ></a >
186186 - <a href =" doc/maybe_types.md#api_nan_get_end_column " ><b ><code >Nan::GetEndColumn()</code ></b ></a >
187187 - <a href =" doc/maybe_types.md#api_nan_clone_element_at " ><b ><code >Nan::CloneElementAt()</code ></b ></a >
188+ - <a href =" doc/maybe_types.md#api_nan_make_maybe " ><b ><code >Nan::MakeMaybe()</code ></b ></a >
188189
189190### Script
190191
Original file line number Diff line number Diff line change @@ -36,6 +36,7 @@ The `Nan::MaybeLocal` and `Nan::Maybe` types are monads that encapsulate `v8::Lo
3636 - <a href =" #api_nan_get_start_column " ><b ><code >Nan::GetStartColumn()</code ></b ></a >
3737 - <a href =" #api_nan_get_end_column " ><b ><code >Nan::GetEndColumn()</code ></b ></a >
3838 - <a href =" #api_nan_clone_element_at " ><b ><code >Nan::CloneElementAt()</code ></b ></a >
39+ - <a href =" #api_nan_make_maybe " ><b ><code >Nan::MakeMaybe()</code ></b ></a >
3940
4041<a name =" api_nan_maybe_local " ></a >
4142### Nan::MaybeLocal
@@ -478,3 +479,22 @@ Signature:
478479``` c++
479480Nan::MaybeLocal<v8::Object> Nan::CloneElementAt (v8::Local< v8::Array > array, uint32_t index);
480481```
482+
483+ <a name="api_nan_make_maybe"></a>
484+ ### Nan::MakeMaybe()
485+
486+ Wraps a `v8::Local<>` in a `Nan::MaybeLocal<>`. When called with a `Nan::MaybeLocal<>` it just returns its argument. This is useful in generic template code that builds on NAN.
487+
488+ Synopsis:
489+
490+ ```c++
491+ MaybeLocal<v8::Number> someNumber = MakeMaybe(New<v8::Number>(3.141592654));
492+ MaybeLocal<v8::String> someString = MakeMaybe(New<v8::String>("probably"));
493+ ```
494+
495+ Signature:
496+
497+ ``` c++
498+ template <typename T, template <typename > class MaybeMaybe >
499+ Nan::MaybeLocal<T> Nan::MakeMaybe (MaybeMaybe<T > v);
500+ ```
Original file line number Diff line number Diff line change @@ -2186,6 +2186,32 @@ struct Tap {
21862186
21872187#undef TYPE_CHECK
21882188
2189+ // === Generic Maybefication ===================================================
2190+
2191+ namespace imp {
2192+
2193+ template <typename T> struct Maybefier ;
2194+
2195+ template <typename T> struct Maybefier <v8::Local<T> > {
2196+ static MaybeLocal<T> convert (v8::Local<T> v) {
2197+ return MaybeLocal<T>(v);
2198+ }
2199+ };
2200+
2201+ template <typename T> struct Maybefier <MaybeLocal<T> > {
2202+ static MaybeLocal<T> convert (MaybeLocal<T> v) {
2203+ return v;
2204+ }
2205+ };
2206+
2207+ } // end of namespace imp
2208+
2209+ template <typename T, template <typename > class MaybeMaybe >
2210+ MaybeLocal<T>
2211+ MakeMaybe (MaybeMaybe<T> v) {
2212+ return imp::Maybefier<MaybeMaybe<T> >::convert (v);
2213+ }
2214+
21892215} // end of namespace Nan
21902216
21912217#endif // NAN_H_
Original file line number Diff line number Diff line change @@ -447,6 +447,13 @@ NAN_METHOD(newExternal) {
447447 info.GetReturnValue ().Set (New<External>(&ttt));
448448}
449449
450+ NAN_METHOD (invokeMakeMaybe) {
451+ Nan::MaybeLocal<v8::Number> number = MakeMaybe (New<v8::Number>(3.141592654 ));
452+ Nan::MaybeLocal<v8::String> string = MakeMaybe (New<v8::String>(" probably" ));
453+ (void )string;
454+ info.GetReturnValue ().Set (number.ToLocalChecked ());
455+ }
456+
450457NAN_MODULE_INIT (Init) {
451458 NAN_EXPORT (target, testArray);
452459 NAN_EXPORT (target, testBoolean);
@@ -478,6 +485,8 @@ NAN_MODULE_INIT(Init) {
478485 NAN_EXPORT (target, newStringFromStdString);
479486
480487 NAN_EXPORT (target, newExternal);
488+
489+ NAN_EXPORT (target, invokeMakeMaybe);
481490}
482491
483492} // end of anonymous namespace
Original file line number Diff line number Diff line change @@ -49,3 +49,8 @@ test('strings', function (t) {
4949 t . end ( ) ;
5050} ) ;
5151
52+ test ( 'test MakeMaybe(...)' , function ( t ) {
53+ t . plan ( 1 ) ;
54+ t . ok ( bindings . invokeMakeMaybe ( ) - Math . PI < 10e-8 ) ;
55+ t . end ( ) ;
56+ } ) ;
You can’t perform that action at this time.
0 commit comments