src: define Is* util functions with macros
authorcjihrig <cjihrig@gmail.com>
Wed, 2 Dec 2015 16:49:35 +0000 (11:49 -0500)
committerMyles Borins <mborins@us.ibm.com>
Tue, 19 Jan 2016 19:52:29 +0000 (11:52 -0800)
The Is* type checking functions in node_util.cc are mostly
the same boilerplate. This commit defines them using a macro.

Refs: https://github.com/nodejs/node/pull/4100
PR-URL: https://github.com/nodejs/node/pull/4118
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
Conflicts:
src/node_util.cc

src/node_util.cc

index ea800ff..1e0f214 100644 (file)
@@ -14,45 +14,27 @@ using v8::String;
 using v8::Value;
 
 
-static void IsRegExp(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsRegExp());
-}
-
+#define VALUE_METHOD_MAP(V)                                                   \
+  V(isArrayBuffer, IsArrayBuffer)                                             \
+  V(isDataView, IsDataView)                                                   \
+  V(isDate, IsDate)                                                           \
+  V(isMap, IsMap)                                                             \
+  V(isMapIterator, IsMapIterator)                                             \
+  V(isPromise, IsPromise)                                                     \
+  V(isRegExp, IsRegExp)                                                       \
+  V(isSet, IsSet)                                                             \
+  V(isSetIterator, IsSetIterator)                                             \
+  V(isTypedArray, IsTypedArray)
 
-static void IsDate(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsDate());
-}
 
+#define V(_, ucname) \
+  static void ucname(const FunctionCallbackInfo<Value>& args) {               \
+    CHECK_EQ(1, args.Length());                                               \
+    args.GetReturnValue().Set(args[0]->ucname());                             \
+  }
 
-static void IsMap(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsMap());
-}
-
-
-static void IsMapIterator(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsMapIterator());
-}
-
-
-static void IsSet(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsSet());
-}
-
-
-static void IsSetIterator(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsSetIterator());
-}
-
-static void IsPromise(const FunctionCallbackInfo<Value>& args) {
-  CHECK_EQ(1, args.Length());
-  args.GetReturnValue().Set(args[0]->IsPromise());
-}
+  VALUE_METHOD_MAP(V)
+#undef V
 
 
 static void GetHiddenValue(const FunctionCallbackInfo<Value>& args) {
@@ -75,13 +57,11 @@ void Initialize(Local<Object> target,
                 Local<Value> unused,
                 Local<Context> context) {
   Environment* env = Environment::GetCurrent(context);
-  env->SetMethod(target, "isRegExp", IsRegExp);
-  env->SetMethod(target, "isDate", IsDate);
-  env->SetMethod(target, "isMap", IsMap);
-  env->SetMethod(target, "isMapIterator", IsMapIterator);
-  env->SetMethod(target, "isSet", IsSet);
-  env->SetMethod(target, "isSetIterator", IsSetIterator);
-  env->SetMethod(target, "isPromise", IsPromise);
+
+#define V(lcname, ucname) env->SetMethod(target, #lcname, ucname);
+  VALUE_METHOD_MAP(V)
+#undef V
+
   env->SetMethod(target, "getHiddenValue", GetHiddenValue);
 }