blob: f82ebfe16f4a332d9a23c59df9b28eafdd10e8d0 [file] [log] [blame]
#include "napi.h"
static napi_value NoArgFunction_Core(napi_env env, napi_callback_info info) {
(void)env;
(void)info;
return nullptr;
}
static napi_value OneArgFunction_Core(napi_env env, napi_callback_info info) {
size_t argc = 1;
napi_value argv;
if (napi_get_cb_info(env, info, &argc, &argv, nullptr, nullptr) != napi_ok) {
return nullptr;
}
(void)argv;
return nullptr;
}
static napi_value TwoArgFunction_Core(napi_env env, napi_callback_info info) {
size_t argc = 2;
napi_value argv[2];
if (napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr) != napi_ok) {
return nullptr;
}
(void)argv[0];
(void)argv[1];
return nullptr;
}
static napi_value ThreeArgFunction_Core(napi_env env, napi_callback_info info) {
size_t argc = 3;
napi_value argv[3];
if (napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr) != napi_ok) {
return nullptr;
}
(void)argv[0];
(void)argv[1];
(void)argv[2];
return nullptr;
}
static napi_value FourArgFunction_Core(napi_env env, napi_callback_info info) {
size_t argc = 4;
napi_value argv[4];
if (napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr) != napi_ok) {
return nullptr;
}
(void)argv[0];
(void)argv[1];
(void)argv[2];
(void)argv[3];
return nullptr;
}
static void NoArgFunction(const Napi::CallbackInfo& info) {
(void)info;
}
static void OneArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
}
static void TwoArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
Napi::Value argv1 = info[1];
(void)argv1;
}
static void ThreeArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
Napi::Value argv1 = info[1];
(void)argv1;
Napi::Value argv2 = info[2];
(void)argv2;
}
static void FourArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
Napi::Value argv1 = info[1];
(void)argv1;
Napi::Value argv2 = info[2];
(void)argv2;
Napi::Value argv3 = info[3];
(void)argv3;
}
#if NAPI_VERSION > 5
class FunctionArgsBenchmark : public Napi::Addon<FunctionArgsBenchmark> {
public:
FunctionArgsBenchmark(Napi::Env env, Napi::Object exports) {
DefineAddon(
exports,
{
InstanceValue(
"addon",
DefineProperties(
Napi::Object::New(env),
{
InstanceMethod("noArgFunction",
&FunctionArgsBenchmark::NoArgFunction),
InstanceMethod("oneArgFunction",
&FunctionArgsBenchmark::OneArgFunction),
InstanceMethod("twoArgFunction",
&FunctionArgsBenchmark::TwoArgFunction),
InstanceMethod(
"threeArgFunction",
&FunctionArgsBenchmark::ThreeArgFunction),
InstanceMethod("fourArgFunction",
&FunctionArgsBenchmark::FourArgFunction),
}),
napi_enumerable),
InstanceValue(
"addon_templated",
DefineProperties(
Napi::Object::New(env),
{
InstanceMethod<&FunctionArgsBenchmark::NoArgFunction>(
"noArgFunction"),
InstanceMethod<&FunctionArgsBenchmark::OneArgFunction>(
"oneArgFunction"),
InstanceMethod<&FunctionArgsBenchmark::TwoArgFunction>(
"twoArgFunction"),
InstanceMethod<
&FunctionArgsBenchmark::ThreeArgFunction>(
"threeArgFunction"),
InstanceMethod<&FunctionArgsBenchmark::FourArgFunction>(
"fourArgFunction"),
}),
napi_enumerable),
});
}
private:
void NoArgFunction(const Napi::CallbackInfo& info) { (void)info; }
void OneArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
}
void TwoArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
Napi::Value argv1 = info[1];
(void)argv1;
}
void ThreeArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
Napi::Value argv1 = info[1];
(void)argv1;
Napi::Value argv2 = info[2];
(void)argv2;
}
void FourArgFunction(const Napi::CallbackInfo& info) {
Napi::Value argv0 = info[0];
(void)argv0;
Napi::Value argv1 = info[1];
(void)argv1;
Napi::Value argv2 = info[2];
(void)argv2;
Napi::Value argv3 = info[3];
(void)argv3;
}
};
#endif // NAPI_VERSION > 5
static Napi::Object Init(Napi::Env env, Napi::Object exports) {
napi_value no_arg_function, one_arg_function, two_arg_function,
three_arg_function, four_arg_function;
napi_status status;
status = napi_create_function(env,
"noArgFunction",
NAPI_AUTO_LENGTH,
NoArgFunction_Core,
nullptr,
&no_arg_function);
NAPI_THROW_IF_FAILED(env, status, Napi::Object());
status = napi_create_function(env,
"oneArgFunction",
NAPI_AUTO_LENGTH,
OneArgFunction_Core,
nullptr,
&one_arg_function);
NAPI_THROW_IF_FAILED(env, status, Napi::Object());
status = napi_create_function(env,
"twoArgFunction",
NAPI_AUTO_LENGTH,
TwoArgFunction_Core,
nullptr,
&two_arg_function);
NAPI_THROW_IF_FAILED(env, status, Napi::Object());
status = napi_create_function(env,
"threeArgFunction",
NAPI_AUTO_LENGTH,
ThreeArgFunction_Core,
nullptr,
&three_arg_function);
NAPI_THROW_IF_FAILED(env, status, Napi::Object());
status = napi_create_function(env,
"fourArgFunction",
NAPI_AUTO_LENGTH,
FourArgFunction_Core,
nullptr,
&four_arg_function);
NAPI_THROW_IF_FAILED(env, status, Napi::Object());
Napi::Object core = Napi::Object::New(env);
core["noArgFunction"] = Napi::Value(env, no_arg_function);
core["oneArgFunction"] = Napi::Value(env, one_arg_function);
core["twoArgFunction"] = Napi::Value(env, two_arg_function);
core["threeArgFunction"] = Napi::Value(env, three_arg_function);
core["fourArgFunction"] = Napi::Value(env, four_arg_function);
exports["core"] = core;
Napi::Object cplusplus = Napi::Object::New(env);
cplusplus["noArgFunction"] = Napi::Function::New(env, NoArgFunction);
cplusplus["oneArgFunction"] = Napi::Function::New(env, OneArgFunction);
cplusplus["twoArgFunction"] = Napi::Function::New(env, TwoArgFunction);
cplusplus["threeArgFunction"] = Napi::Function::New(env, ThreeArgFunction);
cplusplus["fourArgFunction"] = Napi::Function::New(env, FourArgFunction);
exports["cplusplus"] = cplusplus;
Napi::Object templated = Napi::Object::New(env);
templated["noArgFunction"] = Napi::Function::New<NoArgFunction>(env);
templated["oneArgFunction"] = Napi::Function::New<OneArgFunction>(env);
templated["twoArgFunction"] = Napi::Function::New<TwoArgFunction>(env);
templated["threeArgFunction"] = Napi::Function::New<ThreeArgFunction>(env);
templated["fourArgFunction"] = Napi::Function::New<FourArgFunction>(env);
exports["templated"] = templated;
#if NAPI_VERSION > 5
FunctionArgsBenchmark::Init(env, exports);
#endif // NAPI_VERSION > 5
return exports;
}
NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)