From 4eca89c8f4d272f4498e8754fe62ba70348a7571 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Mon, 19 Jan 2015 02:53:22 +0100 Subject: [PATCH 1/6] Add function factory and test --- nan_implementation_12_inl.h | 9 +++++++++ nan_new.h | 27 +++++++++++++++++++++++++-- test/cpp/nannew.cpp | 26 +++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h index c33a03d3..e67a7064 100644 --- a/nan_implementation_12_inl.h +++ b/nan_implementation_12_inl.h @@ -56,6 +56,15 @@ Factory::New(void * value) { return v8::External::New(v8::Isolate::GetCurrent(), value); } +//=== Function ================================================================= + +Factory::return_t +Factory::New( NanFunctionCallback callback + , v8::Handle data + , int length) { + return v8::Function::New(v8::Isolate::GetCurrent(), callback, data, length); +} + //=== Function Template ======================================================== Factory::return_t diff --git a/nan_new.h b/nan_new.h index b4b480bd..1761f3c9 100644 --- a/nan_new.h +++ b/nan_new.h @@ -154,6 +154,15 @@ struct Factory : FactoryBase { namespace NanIntern { +template <> +struct Factory : FactoryBase { + static inline + return_t + New( NanFunctionCallback callback + , v8::Handle data = v8::Handle() + , int length = 0); +}; + template <> struct Factory : FactoryBase { static inline return_t New( v8::Local source); @@ -203,12 +212,26 @@ NanNew(A0 arg0, A1 arg1, A2 arg2, A3 arg3) { return NanIntern::Factory::New(arg0, arg1, arg2, arg3); } +// Note(agnat): When passing overloaded function pointers to template functions +// as generic arguments the compiler needs help in picking the right overload. +// These two functions handle NanNew and NanNew with +// all argument variations. + +// v8::Function and v8::FunctionTemplate with one or two arguments template typename NanIntern::Factory::return_t +NanNew( NanFunctionCallback callback + , v8::Handle data = v8::Handle()) { + return NanIntern::Factory::New(callback, data); +} + +// v8::Function and v8::FunctionTemplate with three arguments +template +typename NanIntern::Factory::return_t NanNew( NanFunctionCallback callback , v8::Handle data = v8::Handle() - , v8::Handle signature = v8::Handle()) { - return NanIntern::Factory::New(callback, data, signature); + , A2 a2 = A2()) { + return NanIntern::Factory::New(callback, data, a2); } // Convenience diff --git a/test/cpp/nannew.cpp b/test/cpp/nannew.cpp index 33657f22..c4e109cc 100644 --- a/test/cpp/nannew.cpp +++ b/test/cpp/nannew.cpp @@ -118,6 +118,25 @@ NAN_METHOD(testExternal) { return_NanUndefined(); } +NAN_METHOD(testFunction) { + NanScope(); + NanTap t(args[0]); +// Direct Function construction is only available in newer v8 +#if (NODE_MODULE_VERSION < 12) + t.plan(0); +#else + t.plan(3); + + t.ok(_( assertType(NanNew(testFunction)))); + v8::Local data = NanNew("plonk"); + t.ok(_( assertType(NanNew(testFunction, data)))); + int length = 5; + t.ok(_( assertType(NanNew(testFunction, data, length)))); +#endif + + return_NanUndefined(); +} + NAN_METHOD(testFunctionTemplate) { NanScope(); NanTap t(args[0]); @@ -342,9 +361,13 @@ NAN_METHOD(testRegression242) { NanScope(); NanTap t(args[0]); - // This line needs to *compile*. Not much to test at runtime. + // These lines must *compile*. Not much to test at runtime. Local ft = NanNew(overloaded); (void)ft; // not unused +#if (NODE_MODULE_VERSION >= 12) + Local f = NanNew(overloaded); + (void)f; // not unused +#endif t.plan(1); @@ -399,6 +422,7 @@ void Init(Handle exports) { NAN_EXPORT(exports, testBooleanObject); NAN_EXPORT(exports, testDate); NAN_EXPORT(exports, testExternal); + NAN_EXPORT(exports, testFunction); NAN_EXPORT(exports, testFunctionTemplate); NAN_EXPORT(exports, testNumber); NAN_EXPORT(exports, testNumberObject); From cdcb9513aa7ac27c1957af79e2859617786d6ede Mon Sep 17 00:00:00 2001 From: David Siegel Date: Mon, 19 Jan 2015 03:08:23 +0100 Subject: [PATCH 2/6] Add object template factory and test --- nan_implementation_12_inl.h | 7 +++++++ nan_implementation_pre_12_inl.h | 7 +++++++ nan_new.h | 5 +++++ test/cpp/nannew.cpp | 24 ++++++++++++++++++++++++ 4 files changed, 43 insertions(+) diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h index e67a7064..9449e572 100644 --- a/nan_implementation_12_inl.h +++ b/nan_implementation_12_inl.h @@ -123,6 +123,13 @@ Factory::New() { return v8::Object::New(v8::Isolate::GetCurrent()); } +//=== Object Template ========================================================== + +Factory::return_t +Factory::New() { + return v8::ObjectTemplate::New(v8::Isolate::GetCurrent()); +} + //=== RegExp =================================================================== Factory::return_t diff --git a/nan_implementation_pre_12_inl.h b/nan_implementation_pre_12_inl.h index 6c1ee8a6..2991536b 100644 --- a/nan_implementation_pre_12_inl.h +++ b/nan_implementation_pre_12_inl.h @@ -114,6 +114,13 @@ Factory::New() { return v8::Object::New(); } +//=== Object Template ========================================================== + +Factory::return_t +Factory::New() { + return v8::ObjectTemplate::New(); +} + //=== RegExp =================================================================== Factory::return_t diff --git a/nan_new.h b/nan_new.h index 1761f3c9..45b3aa1c 100644 --- a/nan_new.h +++ b/nan_new.h @@ -104,6 +104,11 @@ struct Factory : FactoryBase { static inline return_t New(); }; +template <> +struct Factory : FactoryBase { + static inline return_t New(); +}; + template <> struct Factory : FactoryBase { static inline return_t New( diff --git a/test/cpp/nannew.cpp b/test/cpp/nannew.cpp index c4e109cc..1543d0ef 100644 --- a/test/cpp/nannew.cpp +++ b/test/cpp/nannew.cpp @@ -204,6 +204,28 @@ NAN_METHOD(testNumberObject) { return_NanUndefined(); } +NAN_METHOD(testObject) { + NanScope(); + NanTap t(args[0]); + + t.plan(1); + + t.ok(_(assertType( NanNew()))); + + return_NanUndefined(); +} + +NAN_METHOD(testObjectTemplate) { + NanScope(); + NanTap t(args[0]); + + t.plan(1); + + t.ok(_(assertType( NanNew()))); + + return_NanUndefined(); +} + NAN_METHOD(testScript) { NanScope(); NanTap t(args[0]); @@ -426,6 +448,8 @@ void Init(Handle exports) { NAN_EXPORT(exports, testFunctionTemplate); NAN_EXPORT(exports, testNumber); NAN_EXPORT(exports, testNumberObject); + NAN_EXPORT(exports, testObject); + NAN_EXPORT(exports, testObjectTemplate); NAN_EXPORT(exports, testScript); NAN_EXPORT(exports, testSignature); NAN_EXPORT(exports, testString); From c9490be083e18b2a570818b73628f2f08f57731b Mon Sep 17 00:00:00 2001 From: David Siegel Date: Mon, 19 Jan 2015 03:48:15 +0100 Subject: [PATCH 3/6] Lifted an io.js related typedef --- nan.h | 48 +++++++++++++++++++++++++++---------- nan_implementation_12_inl.h | 6 +---- nan_new.h | 12 ++-------- 3 files changed, 38 insertions(+), 28 deletions(-) diff --git a/nan.h b/nan.h index ae5748c9..f76e8026 100644 --- a/nan.h +++ b/nan.h @@ -60,6 +60,14 @@ typedef v8::UnboundScript NanUnboundScript; typedef v8::Script NanBoundScript; #endif +#if (NODE_MODULE_VERSION < 42) +typedef v8::String::ExternalAsciiStringResource + NanExternalOneByteStringResource; +#else // io.js v1.0.0 +typedef v8::String::ExternalOneByteStringResource + NanExternalOneByteStringResource; +#endif + #include "nan_new.h" // NOLINT(build/include) // uv helpers @@ -1713,6 +1721,30 @@ template static size_t _nan_hex_decode( return i; } +namespace NanIntern { + +inline +NanExternalOneByteStringResource const* +GetExternalResource(v8::Local str) { +#if NODE_MODULE_VERSION < 42 + return str->GetExternalAsciiStringResource(); +#else // io.js v1.0.0 + return str->GetExternalOneByteStringResource(); +#endif +} + +inline +bool +IsExternal(v8::Local str) { +#if NODE_MODULE_VERSION < 42 + return str->IsExternalAscii(); +#else // io.js v1.0.0 + return str->IsExternalOneByte(); +#endif +} + +} // end of namespace NanIntern + static bool _NanGetExternalParts( v8::Handle val , const char** data @@ -1727,23 +1759,13 @@ static bool _NanGetExternalParts( assert(val->IsString()); v8::Local str = NanNew(val.As()); -#if NODE_MODULE_VERSION >= 42 // io.js v1.0.0 - if (str->IsExternalOneByte()) { - const v8::String::ExternalOneByteStringResource* ext; - ext = str->GetExternalOneByteStringResource(); + if (NanIntern::IsExternal(str)) { + const NanExternalOneByteStringResource* ext; + ext = NanIntern::GetExternalResource(str); *data = ext->data(); *len = ext->length(); return true; } -#else - if (str->IsExternalAscii()) { - const v8::String::ExternalAsciiStringResource* ext; - ext = str->GetExternalAsciiStringResource(); - *data = ext->data(); - *len = ext->length(); - return true; - } -#endif if (str->IsExternal()) { const v8::String::ExternalStringResource* ext; diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h index 9449e572..0b07316f 100644 --- a/nan_implementation_12_inl.h +++ b/nan_implementation_12_inl.h @@ -200,11 +200,7 @@ Factory::New(v8::String::ExternalStringResource * value) { } Factory::return_t -#if NODE_MODULE_VERSION >= 42 // io.js v1.0.0 -Factory::New(v8::String::ExternalOneByteStringResource * value) { -#else -Factory::New(v8::String::ExternalAsciiStringResource * value) { -#endif +Factory::New(NanExternalOneByteStringResource * value) { return v8::String::NewExternal(v8::Isolate::GetCurrent(), value); } diff --git a/nan_new.h b/nan_new.h index 45b3aa1c..e74d56a4 100644 --- a/nan_new.h +++ b/nan_new.h @@ -138,11 +138,7 @@ struct Factory : FactoryBase { static inline return_t New(std::string const& value); static inline return_t New(v8::String::ExternalStringResource * value); -#if NODE_MODULE_VERSION >= 42 // io.js v1.0.0 - static inline return_t New(v8::String::ExternalOneByteStringResource * value); -#else - static inline return_t New(v8::String::ExternalAsciiStringResource * value); -#endif + static inline return_t New(NanExternalOneByteStringResource * value); // TODO(agnat): Deprecate. static inline return_t New(const uint8_t * value, int length = -1); @@ -306,11 +302,7 @@ NanNew(v8::String::ExternalStringResource * value) { inline NanIntern::Factory::return_t -#if NODE_MODULE_VERSION >= 42 // io.js v1.0.0 -NanNew(v8::String::ExternalOneByteStringResource * value) { -#else -NanNew(v8::String::ExternalAsciiStringResource * value) { -#endif +NanNew(NanExternalOneByteStringResource * value) { return NanNew(value); } From f1dc5be8ff4dfc2bb286d44edbe341fd08a0e5c6 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Wed, 21 Jan 2015 16:00:55 +0100 Subject: [PATCH 4/6] NanNew: Backport function construction --- nan_implementation_12_inl.h | 17 ++++++--- nan_implementation_pre_12_inl.h | 23 ++++++++++-- nan_new.h | 34 ++++++++++++------ test/binding.gyp | 8 +++++ test/cpp/nannew.cpp | 9 +---- test/cpp/nannew_function_length.cpp | 48 ++++++++++++++++++++++++++ test/js/nannew-test.js | 2 ++ test/js/nannew_function_length-test.js | 28 +++++++++++++++ 8 files changed, 144 insertions(+), 25 deletions(-) create mode 100644 test/cpp/nannew_function_length.cpp create mode 100644 test/js/nannew_function_length-test.js diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h index 0b07316f..9007557c 100644 --- a/nan_implementation_12_inl.h +++ b/nan_implementation_12_inl.h @@ -61,8 +61,11 @@ Factory::New(void * value) { Factory::return_t Factory::New( NanFunctionCallback callback , v8::Handle data - , int length) { - return v8::Function::New(v8::Isolate::GetCurrent(), callback, data, length); + NAN_FUNCTION_LENGTH_ARG_) { + return v8::Function::New( v8::Isolate::GetCurrent() + , callback + , data + NAN_FUNCTION_LENGTH_); } //=== Function Template ======================================================== @@ -70,9 +73,13 @@ Factory::New( NanFunctionCallback callback Factory::return_t Factory::New( NanFunctionCallback callback , v8::Handle data - , v8::Handle signature) { - return v8::FunctionTemplate::New(v8::Isolate::GetCurrent(), callback, data, - signature); + , v8::Handle signature + NAN_FUNCTION_LENGTH_ARG_) { + return v8::FunctionTemplate::New( v8::Isolate::GetCurrent() + , callback + , data + , signature + NAN_FUNCTION_LENGTH_); } //=== Number =================================================================== diff --git a/nan_implementation_pre_12_inl.h b/nan_implementation_pre_12_inl.h index 2991536b..ab681e77 100644 --- a/nan_implementation_pre_12_inl.h +++ b/nan_implementation_pre_12_inl.h @@ -59,13 +59,32 @@ Factory::New(void * value) { return v8::External::New(value); } +//=== Function ================================================================= + +Factory::return_t +Factory::New( NanFunctionCallback callback + , v8::Handle data + NAN_FUNCTION_LENGTH_ARG_) { + return Factory::New( callback + , data + , v8::Handle() + NAN_FUNCTION_LENGTH_)->GetFunction(); +} + + //=== FunctionTemplate ========================================================= Factory::return_t Factory::New( NanFunctionCallback callback , v8::Handle data - , v8::Handle signature) { - return v8::FunctionTemplate::New(callback, data, signature); + , v8::Handle signature + NAN_FUNCTION_LENGTH_ARG_) { + // Note(agnat): Emulate length argument here. Unfortunately, I couldn't find + // a way. Have at it though... + return v8::FunctionTemplate::New( callback + , data + , signature + NAN_FUNCTION_LENGTH_); } //=== Number =================================================================== diff --git a/nan_new.h b/nan_new.h index e74d56a4..d8ae74a4 100644 --- a/nan_new.h +++ b/nan_new.h @@ -61,13 +61,36 @@ struct Factory : FactoryBase { static inline return_t New(void *value); }; +# ifdef NAN_ENABLE_FUNCTION_LENGTH +# if (NODE_MODULE_VERSION < 12) +# error Function.length is not supported +# endif +# define NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_ , int length = 0 +# define NAN_FUNCTION_LENGTH_ARG_ , int length +# define NAN_FUNCTION_LENGTH_ , length +# else +# define NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_ +# define NAN_FUNCTION_LENGTH_ARG_ +# define NAN_FUNCTION_LENGTH_ +# endif + +template <> +struct Factory : FactoryBase { + static inline + return_t + New( NanFunctionCallback callback + , v8::Handle data = v8::Handle() + NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_); +}; + template <> struct Factory : FactoryBase { static inline return_t New( NanFunctionCallback callback = NULL , v8::Handle data = v8::Handle() - , v8::Handle signature = v8::Handle()); + , v8::Handle signature = v8::Handle() + NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_); }; template <> @@ -155,15 +178,6 @@ struct Factory : FactoryBase { namespace NanIntern { -template <> -struct Factory : FactoryBase { - static inline - return_t - New( NanFunctionCallback callback - , v8::Handle data = v8::Handle() - , int length = 0); -}; - template <> struct Factory : FactoryBase { static inline return_t New( v8::Local source); diff --git a/test/binding.gyp b/test/binding.gyp index 2ae66aa3..7ff74fb3 100644 --- a/test/binding.gyp +++ b/test/binding.gyp @@ -152,4 +152,12 @@ "(NanNew(testFunction)))); v8::Local data = NanNew("plonk"); t.ok(_( assertType(NanNew(testFunction, data)))); - int length = 5; - t.ok(_( assertType(NanNew(testFunction, data, length)))); -#endif return_NanUndefined(); } diff --git a/test/cpp/nannew_function_length.cpp b/test/cpp/nannew_function_length.cpp new file mode 100644 index 00000000..928794ab --- /dev/null +++ b/test/cpp/nannew_function_length.cpp @@ -0,0 +1,48 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2015 NAN contributors + * + * MIT License + ********************************************************************/ + +#include + +#if NODE_MODULE_VERSION >= 12 +# define NAN_ENABLE_FUNCTION_LENGTH +# define LENGTH(L) , L +#else +# define LENGTH(L) +#endif + +# include + +using namespace v8; // NOLINT(build/namespaces) + +namespace { + + +NAN_METHOD(lengthFiveFunction) { + NanScope(); + return_NanValue( NanNew( lengthFiveFunction + , Handle() + LENGTH(5))); +} + +NAN_METHOD(lengthSevenFunctionFromTemplate) { + NanScope(); + return_NanValue( NanNew( lengthSevenFunctionFromTemplate + , Handle() + , Handle() + LENGTH(7))->GetFunction()); +} + +void Init(Handle exports) { + NAN_EXPORT(exports, lengthFiveFunction); + NAN_EXPORT(exports, lengthSevenFunctionFromTemplate); +} + +} // end of anonymous namespace + +NODE_MODULE(nannew_function_length, Init) + diff --git a/test/js/nannew-test.js b/test/js/nannew-test.js index 34fca26b..2358a9e0 100644 --- a/test/js/nannew-test.js +++ b/test/js/nannew-test.js @@ -45,5 +45,7 @@ test('strings', function (t) { t.equals(bindings.newStringFromChars(), "hello?"); t.equals(bindings.newStringFromCharsWithLength(), "hell"); t.equals(bindings.newStringFromStdString(), "hello!"); + + t.end(); }); diff --git a/test/js/nannew_function_length-test.js b/test/js/nannew_function_length-test.js new file mode 100644 index 00000000..e38c0083 --- /dev/null +++ b/test/js/nannew_function_length-test.js @@ -0,0 +1,28 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2015 NAN contributors + * + * MIT License + ********************************************************************/ + +const test = require('tap').test + , testRoot = require('path').resolve(__dirname, '..') + , bindings = require('bindings')( + { module_root: testRoot, bindings: 'nannew_function_length' }); + + +// register c++ functions as tests... +for (var symbol in bindings) { + if (typeof bindings[symbol] == 'function' && symbol.match(/^test.*/)) { + test('C++: ' + symbol, bindings[symbol]); + } +} + +test('function length', function (t) { + var skip = {skip: process.versions.modules < 12}; + t.plan(2); + t.equals(bindings.lengthFiveFunction().length, 5, undefined, skip); + t.equals(bindings.lengthSevenFunctionFromTemplate().length, 7, undefined, skip); + t.end(); +}); From 02a7f0a46c48ea1f69540e53155216a1c2ab3257 Mon Sep 17 00:00:00 2001 From: David Siegel Date: Thu, 22 Jan 2015 13:49:07 +0100 Subject: [PATCH 5/6] NanNew: Removed function length argument --- nan_implementation_12_inl.h | 12 +++---- nan_implementation_pre_12_inl.h | 11 +++--- nan_new.h | 19 ++-------- test/binding.gyp | 8 ----- test/cpp/nannew_function_length.cpp | 48 -------------------------- test/js/nannew_function_length-test.js | 28 --------------- 6 files changed, 10 insertions(+), 116 deletions(-) delete mode 100644 test/cpp/nannew_function_length.cpp delete mode 100644 test/js/nannew_function_length-test.js diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h index 9007557c..6d6dd5a2 100644 --- a/nan_implementation_12_inl.h +++ b/nan_implementation_12_inl.h @@ -60,12 +60,10 @@ Factory::New(void * value) { Factory::return_t Factory::New( NanFunctionCallback callback - , v8::Handle data - NAN_FUNCTION_LENGTH_ARG_) { + , v8::Handle data) { return v8::Function::New( v8::Isolate::GetCurrent() , callback - , data - NAN_FUNCTION_LENGTH_); + , data); } //=== Function Template ======================================================== @@ -73,13 +71,11 @@ Factory::New( NanFunctionCallback callback Factory::return_t Factory::New( NanFunctionCallback callback , v8::Handle data - , v8::Handle signature - NAN_FUNCTION_LENGTH_ARG_) { + , v8::Handle signature) { return v8::FunctionTemplate::New( v8::Isolate::GetCurrent() , callback , data - , signature - NAN_FUNCTION_LENGTH_); + , signature); } //=== Number =================================================================== diff --git a/nan_implementation_pre_12_inl.h b/nan_implementation_pre_12_inl.h index ab681e77..1ed2c212 100644 --- a/nan_implementation_pre_12_inl.h +++ b/nan_implementation_pre_12_inl.h @@ -63,12 +63,11 @@ Factory::New(void * value) { Factory::return_t Factory::New( NanFunctionCallback callback - , v8::Handle data - NAN_FUNCTION_LENGTH_ARG_) { + , v8::Handle data) { return Factory::New( callback , data , v8::Handle() - NAN_FUNCTION_LENGTH_)->GetFunction(); + )->GetFunction(); } @@ -77,14 +76,12 @@ Factory::New( NanFunctionCallback callback Factory::return_t Factory::New( NanFunctionCallback callback , v8::Handle data - , v8::Handle signature - NAN_FUNCTION_LENGTH_ARG_) { + , v8::Handle signature) { // Note(agnat): Emulate length argument here. Unfortunately, I couldn't find // a way. Have at it though... return v8::FunctionTemplate::New( callback , data - , signature - NAN_FUNCTION_LENGTH_); + , signature); } //=== Number =================================================================== diff --git a/nan_new.h b/nan_new.h index d8ae74a4..7313c9d7 100644 --- a/nan_new.h +++ b/nan_new.h @@ -61,26 +61,12 @@ struct Factory : FactoryBase { static inline return_t New(void *value); }; -# ifdef NAN_ENABLE_FUNCTION_LENGTH -# if (NODE_MODULE_VERSION < 12) -# error Function.length is not supported -# endif -# define NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_ , int length = 0 -# define NAN_FUNCTION_LENGTH_ARG_ , int length -# define NAN_FUNCTION_LENGTH_ , length -# else -# define NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_ -# define NAN_FUNCTION_LENGTH_ARG_ -# define NAN_FUNCTION_LENGTH_ -# endif - template <> struct Factory : FactoryBase { static inline return_t New( NanFunctionCallback callback - , v8::Handle data = v8::Handle() - NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_); + , v8::Handle data = v8::Handle()); }; template <> @@ -89,8 +75,7 @@ struct Factory : FactoryBase { return_t New( NanFunctionCallback callback = NULL , v8::Handle data = v8::Handle() - , v8::Handle signature = v8::Handle() - NAN_FUNCTION_LENGTH_ARG_WITH_DEFAULT_); + , v8::Handle signature = v8::Handle()); }; template <> diff --git a/test/binding.gyp b/test/binding.gyp index 7ff74fb3..2ae66aa3 100644 --- a/test/binding.gyp +++ b/test/binding.gyp @@ -152,12 +152,4 @@ " - ********************************************************************/ - -#include - -#if NODE_MODULE_VERSION >= 12 -# define NAN_ENABLE_FUNCTION_LENGTH -# define LENGTH(L) , L -#else -# define LENGTH(L) -#endif - -# include - -using namespace v8; // NOLINT(build/namespaces) - -namespace { - - -NAN_METHOD(lengthFiveFunction) { - NanScope(); - return_NanValue( NanNew( lengthFiveFunction - , Handle() - LENGTH(5))); -} - -NAN_METHOD(lengthSevenFunctionFromTemplate) { - NanScope(); - return_NanValue( NanNew( lengthSevenFunctionFromTemplate - , Handle() - , Handle() - LENGTH(7))->GetFunction()); -} - -void Init(Handle exports) { - NAN_EXPORT(exports, lengthFiveFunction); - NAN_EXPORT(exports, lengthSevenFunctionFromTemplate); -} - -} // end of anonymous namespace - -NODE_MODULE(nannew_function_length, Init) - diff --git a/test/js/nannew_function_length-test.js b/test/js/nannew_function_length-test.js deleted file mode 100644 index e38c0083..00000000 --- a/test/js/nannew_function_length-test.js +++ /dev/null @@ -1,28 +0,0 @@ -/********************************************************************* - * NAN - Native Abstractions for Node.js - * - * Copyright (c) 2015 NAN contributors - * - * MIT License - ********************************************************************/ - -const test = require('tap').test - , testRoot = require('path').resolve(__dirname, '..') - , bindings = require('bindings')( - { module_root: testRoot, bindings: 'nannew_function_length' }); - - -// register c++ functions as tests... -for (var symbol in bindings) { - if (typeof bindings[symbol] == 'function' && symbol.match(/^test.*/)) { - test('C++: ' + symbol, bindings[symbol]); - } -} - -test('function length', function (t) { - var skip = {skip: process.versions.modules < 12}; - t.plan(2); - t.equals(bindings.lengthFiveFunction().length, 5, undefined, skip); - t.equals(bindings.lengthSevenFunctionFromTemplate().length, 7, undefined, skip); - t.end(); -}); From 57d31812160dd8fb3808d911b324803e6c6b121d Mon Sep 17 00:00:00 2001 From: David Siegel Date: Thu, 22 Jan 2015 14:20:16 +0100 Subject: [PATCH 6/6] NanNew: Enable function constructor test on pre 12 --- test/cpp/nannew.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/cpp/nannew.cpp b/test/cpp/nannew.cpp index 841a71f6..3703be15 100644 --- a/test/cpp/nannew.cpp +++ b/test/cpp/nannew.cpp @@ -379,10 +379,8 @@ NAN_METHOD(testRegression242) { // These lines must *compile*. Not much to test at runtime. Local ft = NanNew(overloaded); (void)ft; // not unused -#if (NODE_MODULE_VERSION >= 12) Local f = NanNew(overloaded); (void)f; // not unused -#endif t.plan(1);