Use node::MakeCallback to emit events in C++
authorCheng Zhao <zcbenz@gmail.com>
Thu, 23 Jul 2015 05:46:34 +0000 (13:46 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Thu, 23 Jul 2015 05:48:34 +0000 (13:48 +0800)
Fix #2165

atom/common/event_emitter_caller.cc

index 85f56a2..3dbdc9d 100644 (file)
@@ -4,6 +4,8 @@
 
 #include "atom/common/event_emitter_caller.h"
 
+#include "atom/common/node_includes.h"
+
 namespace mate {
 
 namespace internal {
@@ -11,21 +13,8 @@ namespace internal {
 v8::Local<v8::Value> CallEmitWithArgs(v8::Isolate* isolate,
                                       v8::Local<v8::Object> obj,
                                       ValueVector* args) {
-  v8::Local<v8::String> emit_name = StringToSymbol(isolate, "emit");
-  v8::Local<v8::Value> emit = obj->Get(emit_name);
-  if (emit.IsEmpty() || !emit->IsFunction()) {
-    isolate->ThrowException(v8::Exception::TypeError(
-        StringToV8(isolate, "\"emit\" is not a function")));
-    return v8::Undefined(isolate);
-  }
-
-  v8::MaybeLocal<v8::Value> result = emit.As<v8::Function>()->Call(
-      isolate->GetCurrentContext(), obj, args->size(), &args->front());
-  if (result.IsEmpty()) {
-    return v8::Undefined(isolate);
-  }
-
-  return result.ToLocalChecked();
+  return node::MakeCallback(
+      isolate, obj, "emit", args->size(), &args->front());
 }
 
 }  // namespace internal