Skip to content

Commit d1e98e8

Browse files
committed
move to non-deprecated SetWeak API; cleanup
1 parent 7e2a08c commit d1e98e8

File tree

3 files changed

+29
-40
lines changed

3 files changed

+29
-40
lines changed

src/node.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,10 +1157,10 @@ void OnPromiseGC(const FunctionCallbackInfo<Value>& args) {
11571157

11581158
CHECK(args[0]->IsObject());
11591159
Local<Object> promise = args[0].As<Object>();
1160+
Local<Value> err = GetPromiseReason(env, promise);
11601161

1161-
TrackPromise::New(env->isolate(), promise);
1162+
TrackPromise::New(env->isolate(), promise, err);
11621163

1163-
Local<Value> err = GetPromiseReason(env, promise);
11641164
Local<NativeWeakMap> unhandled_reject_map =
11651165
env->promise_unhandled_reject_map();
11661166
Local<Set> unhandled_reject_keys =
@@ -1639,12 +1639,10 @@ void AppendExceptionLine(Environment* env,
16391639
PrintErrorString("\n%s", arrow);
16401640
}
16411641

1642-
void ReportPromiseRejection(Isolate* isolate, Local<Value> promise) {
1642+
void ReportPromiseRejection(Isolate* isolate, Local<Value> reason) {
16431643
Environment* env = Environment::GetCurrent(isolate);
16441644

1645-
Local<Value> err = GetPromiseReason(env, promise);
1646-
1647-
ReportException(env, err, Exception::CreateMessage(isolate, err));
1645+
ReportException(env, reason, Exception::CreateMessage(isolate, reason));
16481646
}
16491647

16501648
void ReportException(Environment* env,
@@ -4416,7 +4414,9 @@ static void StartNodeInstance(void* arg) {
44164414
key_iter).ToLocalChecked();
44174415

44184416
if (unhandled_reject_map->Has(key)) {
4419-
ReportPromiseRejection(isolate, unhandled_reject_map->Get(key));
4417+
Local<Value> err = GetPromiseReason(env,
4418+
unhandled_reject_map->Get(key));
4419+
ReportPromiseRejection(isolate, err);
44204420
exit(1);
44214421
}
44224422
}

src/track-promise.cc

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,51 +5,41 @@
55

66
namespace node {
77

8-
using v8::Function;
98
using v8::Isolate;
109
using v8::Local;
1110
using v8::Object;
1211
using v8::Persistent;
1312
using v8::Value;
14-
using v8::WeakCallbackData;
15-
16-
typedef void (*FreeCallback)(Local<Object> object, Local<Function> fn);
13+
using v8::WeakCallbackInfo;
1714

1815

1916
TrackPromise* TrackPromise::New(Isolate* isolate,
20-
Local<Object> object) {
21-
return new TrackPromise(isolate, object);
22-
}
23-
24-
25-
Persistent<Object>* TrackPromise::persistent() {
26-
return &persistent_;
17+
Local<Object> promise, Local<Value> reason) {
18+
return new TrackPromise(isolate, promise, reason);
2719
}
2820

2921

3022
TrackPromise::TrackPromise(Isolate* isolate,
31-
Local<Object> object)
32-
: persistent_(isolate, object) {
33-
persistent_.SetWeak(this, WeakCallback);
34-
persistent_.MarkIndependent();
23+
Local<Object> promise, Local<Value> reason)
24+
: promise_(isolate, promise), reason_(isolate, reason) {
25+
promise_.SetWeak(this, WeakCallback, v8::WeakCallbackType::kParameter);
26+
promise_.MarkIndependent();
3527
}
3628

3729

3830
TrackPromise::~TrackPromise() {
39-
persistent_.Reset();
31+
promise_.Reset();
32+
reason_.Reset();
4033
}
4134

4235

4336
void TrackPromise::WeakCallback(
44-
const WeakCallbackData<Object, TrackPromise>& data) {
45-
data.GetParameter()->WeakCallback(data.GetIsolate(), data.GetValue());
37+
const WeakCallbackInfo<TrackPromise>& data) {
38+
TrackPromise* self = data.GetParameter();
39+
node::ReportPromiseRejection(data.GetIsolate(),
40+
PersistentToLocal(data.GetIsolate(), self->reason_));
41+
delete self;
4642
}
4743

4844

49-
void TrackPromise::WeakCallback(Isolate* isolate, Local<Object> object) {
50-
node::ReportPromiseRejection(isolate, object.As<Value>());
51-
exit(1);
52-
delete this;
53-
}
54-
5545
} // namespace node

src/track-promise.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,20 @@ class Environment;
99

1010
class TrackPromise {
1111
public:
12-
TrackPromise(v8::Isolate* isolate, v8::Local<v8::Object> object);
13-
virtual ~TrackPromise();
14-
1512
static TrackPromise* New(v8::Isolate* isolate,
16-
v8::Local<v8::Object> object);
17-
18-
inline v8::Persistent<v8::Object>* persistent();
13+
v8::Local<v8::Object> promise,
14+
v8::Local<v8::Value> reason);
1915

2016
static inline void WeakCallback(
21-
const v8::WeakCallbackData<v8::Object, TrackPromise>& data);
17+
const v8::WeakCallbackInfo<TrackPromise>& data);
2218

2319
private:
24-
inline void WeakCallback(v8::Isolate* isolate, v8::Local<v8::Object> object);
20+
TrackPromise(v8::Isolate* isolate, v8::Local<v8::Object> promise,
21+
v8::Local<v8::Value> reason);
22+
~TrackPromise();
2523

26-
v8::Persistent<v8::Object> persistent_;
24+
v8::Persistent<v8::Object> promise_;
25+
v8::Persistent<v8::Value> reason_;
2726
};
2827

2928
} // namespace node

0 commit comments

Comments
 (0)