macros refactor
This commit is contained in:
parent
8f6cf0853a
commit
731c751a16
|
@ -6,13 +6,15 @@
|
||||||
|
|
||||||
|
|
||||||
#define RET_VALUE(VAL) info.GetReturnValue().Set(VAL);
|
#define RET_VALUE(VAL) info.GetReturnValue().Set(VAL);
|
||||||
#define RET_UNDEFINED info.GetReturnValue().Set(Nan::Undefined());
|
#define RET_UNDEFINED RET_VALUE(Nan::Undefined());
|
||||||
|
|
||||||
|
|
||||||
#define JS_STR(...) Nan::New<String>(__VA_ARGS__).ToLocalChecked()
|
#define JS_STR(...) Nan::New<String>(__VA_ARGS__).ToLocalChecked()
|
||||||
#define JS_INT(val) Nan::New<v8::Integer>(val)
|
#define JS_INT(val) Nan::New<v8::Integer>(val)
|
||||||
#define JS_NUM(val) Nan::New<v8::Number>(val)
|
#define JS_NUM(val) Nan::New<v8::Number>(val)
|
||||||
#define JS_BOOL(val) (val) ? Nan::True() : Nan::False()
|
#define JS_BOOL(val) (val) ? Nan::True() : Nan::False()
|
||||||
|
|
||||||
|
|
||||||
#define JS_RETHROW(tc) v8::Local<v8::Value>::New(tc.Exception());
|
#define JS_RETHROW(tc) v8::Local<v8::Value>::New(tc.Exception());
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,87 +23,90 @@
|
||||||
Nan::ThrowTypeError("Expected at least " #N " arguments");
|
Nan::ThrowTypeError("Expected at least " #N " arguments");
|
||||||
|
|
||||||
|
|
||||||
#define REQ_STR_ARG(I, VAR) \
|
#define CHECK_REQ_ARG(I, C, T) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsString()) \
|
if (info.Length() <= (I) || ! info[I]->C) \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a string"); \
|
Nan::ThrowTypeError("Argument " #I " must be " T);
|
||||||
String::Utf8Value _v8_##VAR(info[I]->ToString()); \
|
|
||||||
std::string _std_##VAR = std::string(*_v8_##VAR); \
|
#define CHECK_LET_ARG(I, C, T) \
|
||||||
const char *VAR = _std_##VAR.c_str();
|
if ( ! (info[I]->IsNull() || info[I]->C) ) \
|
||||||
|
Nan::ThrowTypeError("Argument " #I " must be " T " or null");
|
||||||
|
|
||||||
|
|
||||||
#define REQ_UTF8_ARG(I, VAR) \
|
#define REQ_UTF8_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsString()) \
|
CHECK_REQ_ARG(I, IsString(), "string"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a string"); \
|
|
||||||
String::Utf8Value VAR(info[I]);
|
String::Utf8Value VAR(info[I]);
|
||||||
|
|
||||||
|
#define LET_UTF8_ARG(I, VAR) \
|
||||||
|
CHECK_LET_ARG(I, IsString(), "string"); \
|
||||||
|
String::Utf8Value VAR(info[I]->IsNull() ? JS_STR("") : info[I]);
|
||||||
|
|
||||||
|
|
||||||
#define REQ_INT32_ARG(I, VAR) \
|
#define REQ_INT32_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsInt32()) \
|
CHECK_REQ_ARG(I, IsInt32(), "int32"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be an int32"); \
|
|
||||||
int VAR = info[I]->Int32Value();
|
int VAR = info[I]->Int32Value();
|
||||||
|
|
||||||
|
|
||||||
#define LET_INT32_ARG(I, VAR) \
|
#define LET_INT32_ARG(I, VAR) \
|
||||||
if ( ! (info[I]->IsNull() || info[I]->IsInt32()) ) \
|
CHECK_LET_ARG(I, IsInt32(), "int32"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be an int32 or null");\
|
|
||||||
int VAR = info[I]->IsNull() ? 0 : info[I]->Int32Value();
|
int VAR = info[I]->IsNull() ? 0 : info[I]->Int32Value();
|
||||||
|
|
||||||
|
|
||||||
#define REQ_BOOL_ARG(I, VAR) \
|
#define REQ_BOOL_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsBoolean()) \
|
CHECK_REQ_ARG(I, IsBoolean(), "bool"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a bool"); \
|
|
||||||
int VAR = info[I]->BooleanValue();
|
int VAR = info[I]->BooleanValue();
|
||||||
|
|
||||||
|
#define LET_BOOL_ARG(I, VAR) \
|
||||||
|
CHECK_LET_ARG(I, IsBoolean(), "bool"); \
|
||||||
|
int VAR = info[I]->IsNull() ? false : info[I]->BooleanValue();
|
||||||
|
|
||||||
|
|
||||||
#define REQ_UINT32_ARG(I, VAR) \
|
#define REQ_UINT32_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsUint32()) \
|
CHECK_REQ_ARG(I, IsUint32(), "uint32"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a uint32"); \
|
|
||||||
unsigned int VAR = info[I]->Uint32Value();
|
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) \
|
#define LET_UINT32_ARG(I, VAR) \
|
||||||
USE_UINT32_ARG(I, VAR, 0)
|
CHECK_LET_ARG(I, IsUint32(), "uint32"); \
|
||||||
|
unsigned int VAR = info[I]->IsNull() ? 0 : info[I]->Uint32Value();
|
||||||
|
|
||||||
|
|
||||||
#define REQ_INT_ARG(I, VAR) \
|
#define REQ_OFFS_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsNumber()) \
|
CHECK_REQ_ARG(I, IsNumber(), "number"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a int"); \
|
|
||||||
size_t VAR = static_cast<size_t>(info[I]->IntegerValue());
|
size_t VAR = static_cast<size_t>(info[I]->IntegerValue());
|
||||||
|
|
||||||
|
#define LET_OFFS_ARG(I, VAR) \
|
||||||
|
CHECK_LET_ARG(I, IsNumber(), "number"); \
|
||||||
|
size_t VAR = info[I]->IsNull() ? 0 : static_cast<size_t>(info[I]->IntegerValue());
|
||||||
|
|
||||||
|
|
||||||
#define REQ_DOUBLE_ARG(I, VAR) \
|
#define REQ_DOUBLE_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsNumber()) \
|
CHECK_REQ_ARG(I, IsNumber(), "number"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a int"); \
|
double VAR = info[I]->NumberValue();
|
||||||
double VAR = static_cast<size_t>(info[I]->NumberValue());
|
|
||||||
|
#define LET_DOUBLE_ARG(I, VAR) \
|
||||||
|
CHECK_LET_ARG(I, IsNumber(), "number"); \
|
||||||
|
double VAR = info[I]->IsNull() ? 0.0 : info[I]->NumberValue();
|
||||||
|
|
||||||
|
|
||||||
#define REQ_FLOAT_ARG(I, VAR) \
|
#define REQ_FLOAT_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsNumber()) \
|
CHECK_REQ_ARG(I, IsNumber(), "number"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a int"); \
|
|
||||||
float VAR = static_cast<float>(info[I]->NumberValue());
|
float VAR = static_cast<float>(info[I]->NumberValue());
|
||||||
|
|
||||||
|
#define LET_FLOAT_ARG(I, VAR) \
|
||||||
|
CHECK_LET_ARG(I, IsNumber(), "number"); \
|
||||||
|
float VAR = info[I]->IsNull() ? 0.f : static_cast<float>(info[I]->NumberValue());
|
||||||
|
|
||||||
|
|
||||||
#define REQ_EXT_ARG(I, VAR) \
|
#define REQ_EXT_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsExternal()) \
|
CHECK_REQ_ARG(I, IsExternal(), "void*"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " invalid"); \
|
|
||||||
Local<External> VAR = Local<External>::Cast(info[I]);
|
Local<External> VAR = Local<External>::Cast(info[I]);
|
||||||
|
|
||||||
|
|
||||||
#define REQ_FUN_ARG(I, VAR) \
|
#define REQ_FUN_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsFunction()) \
|
CHECK_REQ_ARG(I, IsFunction(), "function"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be a function"); \
|
|
||||||
Local<Function> VAR = Local<Function>::Cast(info[I]);
|
Local<Function> VAR = Local<Function>::Cast(info[I]);
|
||||||
|
|
||||||
|
|
||||||
#define REQ_OBJ_ARG(I, VAR) \
|
#define REQ_OBJ_ARG(I, VAR) \
|
||||||
if (info.Length() <= (I) || ! info[I]->IsObject()) \
|
CHECK_REQ_ARG(I, IsObject(), "object"); \
|
||||||
Nan::ThrowTypeError("Argument " #I " must be an object"); \
|
|
||||||
Local<Object> VAR = Local<Object>::Cast(info[I]);
|
Local<Object> VAR = Local<Object>::Cast(info[I]);
|
||||||
|
|
||||||
|
|
||||||
|
@ -112,9 +117,7 @@
|
||||||
Local<ArrayBufferView> VAR = Local<ArrayBufferView>::Cast(_obj_##VAR);
|
Local<ArrayBufferView> VAR = Local<ArrayBufferView>::Cast(_obj_##VAR);
|
||||||
|
|
||||||
|
|
||||||
#define REQ_ERROR_THROW(error) \
|
#define SET_PROP(OBJ, KEY, VAL) OBJ->Set(JS_STR(KEY), VAL);
|
||||||
if (ret == error) \
|
|
||||||
Nan::ThrowError(String::New(#error));
|
|
||||||
|
|
||||||
|
|
||||||
#endif // _ADDON_TOOLS_HPP_
|
#endif // _ADDON_TOOLS_HPP_
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "node-addon-tools-raub",
|
"name": "node-addon-tools-raub",
|
||||||
"author": "Luis Blanco <raubtierxxx@gmail.com>",
|
"author": "Luis Blanco <raubtierxxx@gmail.com>",
|
||||||
"description": "A set of extra macros for node addons, shipped as C++ header file.",
|
"description": "A set of extra macros for node addons, shipped as C++ header file.",
|
||||||
"version": "0.0.3",
|
"version": "0.0.4",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"node",
|
"node",
|
||||||
|
|
Loading…
Reference in New Issue