From 46d43775d1afea5a5a273fddc965977956ed5487 Mon Sep 17 00:00:00 2001 From: Luis Blanco Date: Sun, 31 Dec 2017 22:06:18 +0300 Subject: [PATCH] refined header --- include/addon-tools.hpp | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/include/addon-tools.hpp b/include/addon-tools.hpp index 70e4301..e417a1e 100644 --- a/include/addon-tools.hpp +++ b/include/addon-tools.hpp @@ -1,13 +1,13 @@ -#ifndef _COMMON_HPP_ -#define _COMMON_HPP_ +#ifndef _ADDON_TOOLS_HPP_ +#define _ADDON_TOOLS_HPP_ -#include -#include -#include +#define NAN_HS Nan::HandleScope scope; -#include +#define RET_VALUE(VAL) info.GetReturnValue().Set(VAL); +#define RET_UNDEFINED info.GetReturnValue().Set(Nan::Undefined()); + #define JS_STR(...) Nan::New(__VA_ARGS__).ToLocalChecked() #define JS_INT(val) Nan::New(val) @@ -15,10 +15,12 @@ #define JS_BOOL(val) (val) ? Nan::True() : Nan::False() #define JS_RETHROW(tc) v8::Local::New(tc.Exception()); + #define REQ_ARGS(N) \ if (info.Length() < (N)) \ Nan::ThrowTypeError("Expected at least " #N " arguments"); + #define REQ_STR_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsString()) \ Nan::ThrowTypeError("Argument " #I " must be a string"); \ @@ -26,82 +28,93 @@ std::string _std_##VAR = std::string(*_v8_##VAR); \ const char *VAR = _std_##VAR.c_str(); + #define REQ_UTF8_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsString()) \ Nan::ThrowTypeError("Argument " #I " must be a string"); \ String::Utf8Value VAR(info[I]); + #define REQ_INT32_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsInt32()) \ Nan::ThrowTypeError("Argument " #I " must be an int32"); \ int VAR = info[I]->Int32Value(); + #define LET_INT32_ARG(I, VAR) \ if ( ! (info[I]->IsNull() || info[I]->IsInt32()) ) \ Nan::ThrowTypeError("Argument " #I " must be an int32 or null");\ int VAR = info[I]->IsNull() ? 0 : info[I]->Int32Value(); + #define REQ_BOOL_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsBoolean()) \ Nan::ThrowTypeError("Argument " #I " must be a bool"); \ int VAR = info[I]->BooleanValue(); + #define REQ_UINT32_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsUint32()) \ Nan::ThrowTypeError("Argument " #I " must be a uint32"); \ unsigned int VAR = info[I]->Uint32Value(); + #define USE_UINT32_ARG(I, VAR, DEF) \ if ( ! (info[I]->IsNull() || info[I]->IsUint32()) ) \ Nan::ThrowTypeError("Argument " #I " must be an uint32 or null");\ unsigned int VAR = info[I]->IsNull() ? (DEF) : info[I]->Uint32Value(); - + + #define LET_UINT32_ARG(I, VAR) \ USE_UINT32_ARG(I, VAR, 0) + #define REQ_INT_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsNumber()) \ Nan::ThrowTypeError("Argument " #I " must be a int"); \ size_t VAR = static_cast(info[I]->IntegerValue()); + #define REQ_DOUBLE_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsNumber()) \ Nan::ThrowTypeError("Argument " #I " must be a int"); \ double VAR = static_cast(info[I]->NumberValue()); + #define REQ_FLOAT_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsNumber()) \ Nan::ThrowTypeError("Argument " #I " must be a int"); \ float VAR = static_cast(info[I]->NumberValue()); + #define REQ_EXT_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsExternal()) \ Nan::ThrowTypeError("Argument " #I " invalid"); \ Local VAR = Local::Cast(info[I]); + #define REQ_FUN_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsFunction()) \ Nan::ThrowTypeError("Argument " #I " must be a function"); \ Local VAR = Local::Cast(info[I]); + #define REQ_OBJ_ARG(I, VAR) \ if (info.Length() <= (I) || ! info[I]->IsObject()) \ Nan::ThrowTypeError("Argument " #I " must be an object"); \ Local VAR = Local::Cast(info[I]); + #define REQ_ARRV_ARG(I, VAR) \ REQ_OBJ_ARG(I, _obj_##VAR); \ if( ! _obj_##VAR->IsArrayBufferView() ) \ Nan::ThrowTypeError("Argument " #I " must be an array buffer"); \ Local VAR = Local::Cast(_obj_##VAR); + #define REQ_ERROR_THROW(error) \ if (ret == error) \ Nan::ThrowError(String::New(#error)); -#define NAN_HS Nan::HandleScope scope; -#define RET_VALUE(VAL) info.GetReturnValue().Set(VAL); -#define RET_UNDEFINED info.GetReturnValue().Set(Nan::Undefined()); - -#endif // _COMMON_HPP_ +#endif // _ADDON_TOOLS_HPP_