summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node.gyp1
-rw-r--r--src/api/async_resource.cc70
-rw-r--r--src/node.h56
3 files changed, 85 insertions, 42 deletions
diff --git a/node.gyp b/node.gyp
index 554a834975..e0aa84bf3c 100644
--- a/node.gyp
+++ b/node.gyp
@@ -405,6 +405,7 @@
'dependencies': [ 'deps/histogram/histogram.gyp:histogram' ],
'sources': [
+ 'src/api/async_resource.cc',
'src/api/callback.cc',
'src/api/encoding.cc',
'src/api/environment.cc',
diff --git a/src/api/async_resource.cc b/src/api/async_resource.cc
new file mode 100644
index 0000000000..1d8224114e
--- /dev/null
+++ b/src/api/async_resource.cc
@@ -0,0 +1,70 @@
+#include "node.h"
+
+namespace node {
+
+using v8::Function;
+using v8::HandleScope;
+using v8::Isolate;
+using v8::Local;
+using v8::MaybeLocal;
+using v8::Object;
+using v8::String;
+using v8::Value;
+
+AsyncResource::AsyncResource(Isolate* isolate,
+ Local<Object> resource,
+ const char* name,
+ async_id trigger_async_id)
+ : isolate_(isolate),
+ resource_(isolate, resource) {
+ async_context_ = EmitAsyncInit(isolate, resource, name,
+ trigger_async_id);
+}
+
+AsyncResource::~AsyncResource() {
+ EmitAsyncDestroy(isolate_, async_context_);
+ resource_.Reset();
+}
+
+MaybeLocal<Value> AsyncResource::MakeCallback(Local<Function> callback,
+ int argc,
+ Local<Value>* argv) {
+ return node::MakeCallback(isolate_, get_resource(),
+ callback, argc, argv,
+ async_context_);
+}
+
+MaybeLocal<Value> AsyncResource::MakeCallback(const char* method,
+ int argc,
+ Local<Value>* argv) {
+ return node::MakeCallback(isolate_, get_resource(),
+ method, argc, argv,
+ async_context_);
+}
+
+MaybeLocal<Value> AsyncResource::MakeCallback(Local<String> symbol,
+ int argc,
+ Local<Value>* argv) {
+ return node::MakeCallback(isolate_, get_resource(),
+ symbol, argc, argv,
+ async_context_);
+}
+
+Local<Object> AsyncResource::get_resource() {
+ return resource_.Get(isolate_);
+}
+
+async_id AsyncResource::get_async_id() const {
+ return async_context_.async_id;
+}
+
+async_id AsyncResource::get_trigger_async_id() const {
+ return async_context_.trigger_async_id;
+}
+
+AsyncResource::CallbackScope::CallbackScope(AsyncResource* res)
+ : node::CallbackScope(res->isolate_,
+ res->resource_.Get(res->isolate_),
+ res->async_context_) {}
+
+} // namespace node
diff --git a/src/node.h b/src/node.h
index 039b188f4f..2923c60cf6 100644
--- a/src/node.h
+++ b/src/node.h
@@ -758,69 +758,41 @@ v8::MaybeLocal<v8::Value> MakeCallback(v8::Isolate* isolate,
/* Helper class users can optionally inherit from. If
* `AsyncResource::MakeCallback()` is used, then all four callbacks will be
* called automatically. */
-class AsyncResource {
+class NODE_EXTERN AsyncResource {
public:
AsyncResource(v8::Isolate* isolate,
v8::Local<v8::Object> resource,
const char* name,
- async_id trigger_async_id = -1)
- : isolate_(isolate),
- resource_(isolate, resource) {
- async_context_ = EmitAsyncInit(isolate, resource, name,
- trigger_async_id);
- }
+ async_id trigger_async_id = -1);
- virtual ~AsyncResource() {
- EmitAsyncDestroy(isolate_, async_context_);
- resource_.Reset();
- }
+ virtual ~AsyncResource();
+
+ AsyncResource(const AsyncResource&) = delete;
+ void operator=(const AsyncResource&) = delete;
v8::MaybeLocal<v8::Value> MakeCallback(
v8::Local<v8::Function> callback,
int argc,
- v8::Local<v8::Value>* argv) {
- return node::MakeCallback(isolate_, get_resource(),
- callback, argc, argv,
- async_context_);
- }
+ v8::Local<v8::Value>* argv);
v8::MaybeLocal<v8::Value> MakeCallback(
const char* method,
int argc,
- v8::Local<v8::Value>* argv) {
- return node::MakeCallback(isolate_, get_resource(),
- method, argc, argv,
- async_context_);
- }
+ v8::Local<v8::Value>* argv);
v8::MaybeLocal<v8::Value> MakeCallback(
v8::Local<v8::String> symbol,
int argc,
- v8::Local<v8::Value>* argv) {
- return node::MakeCallback(isolate_, get_resource(),
- symbol, argc, argv,
- async_context_);
- }
+ v8::Local<v8::Value>* argv);
- v8::Local<v8::Object> get_resource() {
- return resource_.Get(isolate_);
- }
-
- async_id get_async_id() const {
- return async_context_.async_id;
- }
-
- async_id get_trigger_async_id() const {
- return async_context_.trigger_async_id;
- }
+ v8::Local<v8::Object> get_resource();
+ async_id get_async_id() const;
+ async_id get_trigger_async_id() const;
protected:
- class CallbackScope : public node::CallbackScope {
+ class NODE_EXTERN CallbackScope : public node::CallbackScope {
public:
- explicit CallbackScope(AsyncResource* res)
- : node::CallbackScope(res->isolate_,
- res->resource_.Get(res->isolate_),
- res->async_context_) {}
+ explicit CallbackScope(AsyncResource* res);
};
private: