summaryrefslogtreecommitdiff
path: root/src/stream_wrap.cc
diff options
context:
space:
mode:
authorTrevor Norris <trev.norris@gmail.com>2014-12-09 05:29:47 +0100
committerBert Belder <bertbelder@gmail.com>2014-12-09 17:57:15 +0100
commit819690fd983d61f90cdf05714a30782fe3b553cd (patch)
treed4dad55e559776cb72e7e79fb55586393e396a21 /src/stream_wrap.cc
parent8f41db6104deca82d74f55501a7f2689357fb45d (diff)
downloadandroid-node-v8-819690fd983d61f90cdf05714a30782fe3b553cd.tar.gz
android-node-v8-819690fd983d61f90cdf05714a30782fe3b553cd.tar.bz2
android-node-v8-819690fd983d61f90cdf05714a30782fe3b553cd.zip
src: all wraps now use actual FunctionTemplate
Instead of simply creating a new v8::Object to contain the connection information, instantiate a new instance of a FunctionTemplate. This will allow future improvements for debugging and performance probes. Additionally, the "provider" argument in the ReqWrap constructor is no longer optional. 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>
Diffstat (limited to 'src/stream_wrap.cc')
-rw-r--r--src/stream_wrap.cc29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/stream_wrap.cc b/src/stream_wrap.cc
index f39739cd2f..9d56793b1d 100644
--- a/src/stream_wrap.cc
+++ b/src/stream_wrap.cc
@@ -43,6 +43,7 @@ using v8::Array;
using v8::Context;
using v8::EscapableHandleScope;
using v8::FunctionCallbackInfo;
+using v8::FunctionTemplate;
using v8::Handle;
using v8::HandleScope;
using v8::Integer;
@@ -56,6 +57,27 @@ using v8::Undefined;
using v8::Value;
+void StreamWrap::Initialize(Handle<Object> target,
+ Handle<Value> unused,
+ Handle<Context> context) {
+ Environment* env = Environment::GetCurrent(context);
+
+ Local<FunctionTemplate> sw =
+ FunctionTemplate::New(env->isolate(), ShutdownWrap::NewShutdownWrap);
+ sw->InstanceTemplate()->SetInternalFieldCount(1);
+ sw->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "ShutdownWrap"));
+ target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "ShutdownWrap"),
+ sw->GetFunction());
+
+ Local<FunctionTemplate> ww =
+ FunctionTemplate::New(env->isolate(), WriteWrap::NewWriteWrap);
+ ww->InstanceTemplate()->SetInternalFieldCount(1);
+ ww->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "WriteWrap"));
+ target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "WriteWrap"),
+ ww->GetFunction());
+}
+
+
StreamWrap::StreamWrap(Environment* env,
Local<Object> object,
uv_stream_t* stream,
@@ -88,6 +110,7 @@ void StreamWrap::UpdateWriteQueueSize() {
object()->Set(env()->write_queue_size_string(), write_queue_size);
}
+
void StreamWrap::ReadStart(const FunctionCallbackInfo<Value>& args) {
StreamWrap* wrap = Unwrap<StreamWrap>(args.Holder());
if (!IsAlive(wrap))
@@ -564,9 +587,7 @@ void StreamWrap::Shutdown(const FunctionCallbackInfo<Value>& args) {
CHECK(args[0]->IsObject());
Local<Object> req_wrap_obj = args[0].As<Object>();
- ShutdownWrap* req_wrap = new ShutdownWrap(env,
- req_wrap_obj,
- AsyncWrap::PROVIDER_SHUTDOWNWRAP);
+ ShutdownWrap* req_wrap = new ShutdownWrap(env, req_wrap_obj);
int err = wrap->callbacks()->DoShutdown(req_wrap, AfterShutdown);
req_wrap->Dispatched();
if (err)
@@ -752,3 +773,5 @@ int StreamWrapCallbacks::DoShutdown(ShutdownWrap* req_wrap, uv_shutdown_cb cb) {
}
} // namespace node
+
+NODE_MODULE_CONTEXT_AWARE_BUILTIN(stream_wrap, node::StreamWrap::Initialize)