1 #include "node.h"
2 #include "env-inl.h"
3
4 namespace node {
5
6 using v8::Function;
7 using v8::Isolate;
8 using v8::Local;
9 using v8::MaybeLocal;
10 using v8::Object;
11 using v8::String;
12 using v8::Value;
13
AsyncResource(Isolate * isolate,Local<Object> resource,const char * name,async_id trigger_async_id)14 AsyncResource::AsyncResource(Isolate* isolate,
15 Local<Object> resource,
16 const char* name,
17 async_id trigger_async_id)
18 : env_(Environment::GetCurrent(isolate)),
19 resource_(isolate, resource) {
20 CHECK_NOT_NULL(env_);
21 async_context_ = EmitAsyncInit(isolate, resource, name,
22 trigger_async_id);
23 }
24
~AsyncResource()25 AsyncResource::~AsyncResource() {
26 EmitAsyncDestroy(env_, async_context_);
27 }
28
MakeCallback(Local<Function> callback,int argc,Local<Value> * argv)29 MaybeLocal<Value> AsyncResource::MakeCallback(Local<Function> callback,
30 int argc,
31 Local<Value>* argv) {
32 return node::MakeCallback(env_->isolate(), get_resource(),
33 callback, argc, argv,
34 async_context_);
35 }
36
MakeCallback(const char * method,int argc,Local<Value> * argv)37 MaybeLocal<Value> AsyncResource::MakeCallback(const char* method,
38 int argc,
39 Local<Value>* argv) {
40 return node::MakeCallback(env_->isolate(), get_resource(),
41 method, argc, argv,
42 async_context_);
43 }
44
MakeCallback(Local<String> symbol,int argc,Local<Value> * argv)45 MaybeLocal<Value> AsyncResource::MakeCallback(Local<String> symbol,
46 int argc,
47 Local<Value>* argv) {
48 return node::MakeCallback(env_->isolate(), get_resource(),
49 symbol, argc, argv,
50 async_context_);
51 }
52
get_resource()53 Local<Object> AsyncResource::get_resource() {
54 return resource_.Get(env_->isolate());
55 }
56
get_async_id() const57 async_id AsyncResource::get_async_id() const {
58 return async_context_.async_id;
59 }
60
get_trigger_async_id() const61 async_id AsyncResource::get_trigger_async_id() const {
62 return async_context_.trigger_async_id;
63 }
64
CallbackScope(AsyncResource * res)65 AsyncResource::CallbackScope::CallbackScope(AsyncResource* res)
66 : node::CallbackScope(res->env_,
67 res->resource_.Get(res->env_->isolate()),
68 res->async_context_) {}
69
70 } // namespace node
71