From afe27e34cfc46e86334e2c17b6cbeb0afa316fff Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Fri, 14 Nov 2014 16:15:06 -0800 Subject: [PATCH] async-wrap: expose async-wrap as binding 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 Reviewed-by: Fedor Indutny Reviewed-by: Alexis Campailla Reviewed-by: Julien Gilli --- src/async-wrap.cc | 23 ++++++++++++++++++++++ src/async-wrap.h | 50 ++++++++++++++++++++++++++--------------------- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/src/async-wrap.cc b/src/async-wrap.cc index 4f742ce21e..2990f923c4 100644 --- a/src/async-wrap.cc +++ b/src/async-wrap.cc @@ -28,8 +28,12 @@ #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 target, + Handle unused, + Handle context) { + Environment* env = Environment::GetCurrent(context); + Isolate* isolate = env->isolate(); + HandleScope scope(isolate); + + Local 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 AsyncWrap::MakeCallback(const Handle cb, int argc, Handle* argv) { @@ -114,3 +135,5 @@ Handle AsyncWrap::MakeCallback(const Handle cb, } } // namespace node + +NODE_MODULE_CONTEXT_AWARE_BUILTIN(async_wrap, node::Initialize) diff --git a/src/async-wrap.h b/src/async-wrap.h index a069533718..5a2c35ac94 100644 --- a/src/async-wrap.h +++ b/src/async-wrap.h @@ -28,31 +28,37 @@ 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,