async-wrap: expose async-wrap as binding
authorTrevor Norris <trev.norris@gmail.com>
Sat, 15 Nov 2014 00:15:06 +0000 (16:15 -0800)
committerBert Belder <bertbelder@gmail.com>
Tue, 9 Dec 2014 16:57:16 +0000 (17:57 +0100)
Expose basic hooks for AsyncWrap via the async_wrap binding. Right now
only the PROVIDER types are exposed. This is a preliminary step before
more functionality is added.

PR-URL: https://github.com/joyent/node/pull/8110
Signed-off-by: Trevor Norris <trev.norris@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
Reviewed-by: Alexis Campailla <alexis@janeasystems.com>
Reviewed-by: Julien Gilli <julien.gilli@joyent.com>
src/async-wrap.cc
src/async-wrap.h

index 4f742ce..2990f92 100644 (file)
 
 #include "v8.h"
 
+using v8::Context;
 using v8::Function;
 using v8::Handle;
+using v8::HandleScope;
+using v8::Integer;
+using v8::Isolate;
 using v8::Local;
 using v8::Object;
 using v8::TryCatch;
@@ -37,6 +41,23 @@ using v8::Value;
 
 namespace node {
 
+static void Initialize(Handle<Object> target,
+                Handle<Value> unused,
+                Handle<Context> context) {
+  Environment* env = Environment::GetCurrent(context);
+  Isolate* isolate = env->isolate();
+  HandleScope scope(isolate);
+
+  Local<Object> async_providers = Object::New(isolate);
+#define V(PROVIDER)                                                           \
+  async_providers->Set(FIXED_ONE_BYTE_STRING(isolate, #PROVIDER),             \
+      Integer::New(isolate, AsyncWrap::PROVIDER_ ## PROVIDER));
+  NODE_ASYNC_PROVIDER_TYPES(V)
+#undef V
+  target->Set(FIXED_ONE_BYTE_STRING(isolate, "Providers"), async_providers);
+}
+
+
 Handle<Value> AsyncWrap::MakeCallback(const Handle<Function> cb,
                                       int argc,
                                       Handle<Value>* argv) {
@@ -114,3 +135,5 @@ Handle<Value> AsyncWrap::MakeCallback(const Handle<Function> cb,
 }
 
 }  // namespace node
+
+NODE_MODULE_CONTEXT_AWARE_BUILTIN(async_wrap, node::Initialize)
index a069533..5a2c35a 100644 (file)
 
 namespace node {
 
+#define NODE_ASYNC_PROVIDER_TYPES(V)                                          \
+  V(NONE)                                                                     \
+  V(CARES)                                                                    \
+  V(CONNECTWRAP)                                                              \
+  V(CRYPTO)                                                                   \
+  V(FSEVENTWRAP)                                                              \
+  V(FSREQWRAP)                                                                \
+  V(GETADDRINFOREQWRAP)                                                       \
+  V(GETNAMEINFOREQWRAP)                                                       \
+  V(PIPEWRAP)                                                                 \
+  V(PROCESSWRAP)                                                              \
+  V(QUERYWRAP)                                                                \
+  V(REQWRAP)                                                                  \
+  V(SHUTDOWNWRAP)                                                             \
+  V(SIGNALWRAP)                                                               \
+  V(STATWATCHER)                                                              \
+  V(TCPWRAP)                                                                  \
+  V(TIMERWRAP)                                                                \
+  V(TLSWRAP)                                                                  \
+  V(TTYWRAP)                                                                  \
+  V(UDPWRAP)                                                                  \
+  V(WRITEWRAP)                                                                \
+  V(ZLIB)
+
 class AsyncWrap : public BaseObject {
  public:
   enum ProviderType {
-    PROVIDER_NONE,
-    PROVIDER_CARES,
-    PROVIDER_CONNECTWRAP,
-    PROVIDER_CRYPTO,
-    PROVIDER_FSEVENTWRAP,
-    PROVIDER_FSREQWRAP,
-    PROVIDER_GETADDRINFOREQWRAP,
-    PROVIDER_GETNAMEINFOREQWRAP,
-    PROVIDER_PIPEWRAP,
-    PROVIDER_PROCESSWRAP,
-    PROVIDER_QUERYWRAP,
-    PROVIDER_REQWRAP,
-    PROVIDER_SHUTDOWNWRAP,
-    PROVIDER_SIGNALWRAP,
-    PROVIDER_STATWATCHER,
-    PROVIDER_TCPWRAP,
-    PROVIDER_TIMERWRAP,
-    PROVIDER_TLSWRAP,
-    PROVIDER_TTYWRAP,
-    PROVIDER_UDPWRAP,
-    PROVIDER_WRITEWRAP,
-    PROVIDER_ZLIB
+#define V(PROVIDER)                                                           \
+    PROVIDER_ ## PROVIDER,
+    NODE_ASYNC_PROVIDER_TYPES(V)
+#undef V
   };
 
   inline AsyncWrap(Environment* env,