From c155ff943ea425b413e447e0bc1583666067ff68 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 8 Oct 2017 23:18:27 +0900 Subject: [PATCH] Generate JSTypeTraits by macro functions ISSUE=#120 --- core/js_type_traits.h | 57 +++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/core/js_type_traits.h b/core/js_type_traits.h index f307062..11fd95b 100644 --- a/core/js_type_traits.h +++ b/core/js_type_traits.h @@ -25,34 +25,33 @@ inline Napi::Value JSTypeTraits(Napi::Env env, T value) { return T(); } -template <> -inline Napi::Value JSTypeTraits(Napi::Env env, bool value) { - return Napi::Boolean::New(env, value); -} - -template <> -inline Napi::Value JSTypeTraits(Napi::Env env, double value) { - return Napi::Number::New(env, value); -} - -template <> -inline Napi::Value JSTypeTraits(Napi::Env env, int16_t value) { - return Napi::Number::New(env, value); -} - -template <> -inline Napi::Value JSTypeTraits(Napi::Env env, int32_t value) { - return Napi::Number::New(env, value); -} - -template <> -inline Napi::Value JSTypeTraits(Napi::Env env, int64_t value) { - return Napi::Number::New(env, value); -} - -template <> -inline Napi::Value JSTypeTraits(Napi::Env env, const std::string value) { - return Napi::String::New(env, value); -} +#define JS_TYPE_TRAITS_NUMBER(type) \ + template <> \ + inline Napi::Value JSTypeTraits(Napi::Env env, type value) { \ + return Napi::Number::New(env, value); \ + } + +#define JS_TYPE_TRAITS_BOOLEAN(type) \ + template <> \ + inline Napi::Value JSTypeTraits(Napi::Env env, type value) { \ + return Napi::Boolean::New(env, value); \ + } + +#define JS_TYPE_TRAITS_STRING(type) \ + template <> \ + inline Napi::Value JSTypeTraits(Napi::Env env, type value) { \ + return Napi::String::New(env, value); \ + } + +// TODO(corona10): Auto generate JS_TYPE_TRAITS_XXXX. + +JS_TYPE_TRAITS_NUMBER(int16_t); +JS_TYPE_TRAITS_NUMBER(int32_t); +JS_TYPE_TRAITS_NUMBER(int64_t); +JS_TYPE_TRAITS_NUMBER(double); + +JS_TYPE_TRAITS_BOOLEAN(bool); + +JS_TYPE_TRAITS_STRING(std::string); #endif // CORE_JS_TYPE_TRAITS_H_