Skip to content

Commit a93b8ba

Browse files
committed
Add missing scopes
1 parent 6a80995 commit a93b8ba

8 files changed

+308
-173
lines changed

nan.h

Lines changed: 98 additions & 65 deletions
Large diffs are not rendered by default.

nan_callbacks_pre_12_inl.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,43 +45,57 @@ class ReturnValue {
4545

4646
// Fast primitive setters
4747
inline void Set(bool value) {
48+
v8::HandleScope scope;
49+
4850
TYPE_CHECK(T, v8::Boolean);
4951
value_->Dispose();
5052
*value_ = v8::Persistent<T>::New(v8::Boolean::New(value));
5153
}
5254

5355
inline void Set(double i) {
56+
v8::HandleScope scope;
57+
5458
TYPE_CHECK(T, v8::Number);
5559
value_->Dispose();
5660
*value_ = v8::Persistent<T>::New(v8::Number::New(i));
5761
}
5862

5963
inline void Set(int32_t i) {
64+
v8::HandleScope scope;
65+
6066
TYPE_CHECK(T, v8::Integer);
6167
value_->Dispose();
6268
*value_ = v8::Persistent<T>::New(v8::Int32::New(i));
6369
}
6470

6571
inline void Set(uint32_t i) {
72+
v8::HandleScope scope;
73+
6674
TYPE_CHECK(T, v8::Integer);
6775
value_->Dispose();
6876
*value_ = v8::Persistent<T>::New(v8::Uint32::NewFromUnsigned(i));
6977
}
7078

7179
// Fast JS primitive setters
7280
inline void SetNull() {
81+
v8::HandleScope scope;
82+
7383
TYPE_CHECK(T, v8::Primitive);
7484
value_->Dispose();
7585
*value_ = v8::Persistent<T>::New(v8::Null());
7686
}
7787

7888
inline void SetUndefined() {
89+
v8::HandleScope scope;
90+
7991
TYPE_CHECK(T, v8::Primitive);
8092
value_->Dispose();
8193
*value_ = v8::Persistent<T>::New(v8::Undefined());
8294
}
8395

8496
inline void SetEmptyString() {
97+
v8::HandleScope scope;
98+
8599
TYPE_CHECK(T, v8::String);
86100
value_->Dispose();
87101
*value_ = v8::Persistent<T>::New(v8::String::Empty());

nan_converters_43_inl.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
#define X(TYPE) \
1313
imp::ToFactory<v8::TYPE>::return_t \
1414
imp::ToFactory<v8::TYPE>::convert(v8::Local<v8::Value> val) { \
15-
return val->To ## TYPE(GetCurrentContext()); \
15+
v8::Isolate *isolate = v8::Isolate::GetCurrent(); \
16+
v8::EscapableHandleScope scope(isolate); \
17+
return scope.Escape( \
18+
val->To ## TYPE(v8::Isolate::GetCurrent()->GetCurrentContext()) \
19+
.FromMaybe(v8::Local<v8::TYPE>())); \
1620
}
1721

1822
X(Boolean)
@@ -28,7 +32,9 @@ X(Int32)
2832
#define X(TYPE, NAME) \
2933
imp::ToFactory<TYPE>::return_t \
3034
imp::ToFactory<TYPE>::convert(v8::Local<v8::Value> val) { \
31-
return val->NAME ## Value(GetCurrentContext()); \
35+
v8::Isolate *isolate = v8::Isolate::GetCurrent(); \
36+
v8::HandleScope scope(isolate); \
37+
return val->NAME ## Value(isolate->GetCurrentContext()); \
3238
}
3339

3440
X(bool, Boolean)

nan_converters_pre_43_inl.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#define X(TYPE) \
1313
imp::ToFactory<v8::TYPE>::return_t \
1414
imp::ToFactory<v8::TYPE>::convert(v8::Local<v8::Value> val) { \
15-
return MaybeLocal<v8::TYPE>(val->To ## TYPE()); \
15+
return val->To ## TYPE(); \
1616
}
1717

1818
X(Boolean)
@@ -28,7 +28,7 @@ X(Int32)
2828
#define X(TYPE, NAME) \
2929
imp::ToFactory<TYPE>::return_t \
3030
imp::ToFactory<TYPE>::convert(v8::Local<v8::Value> val) { \
31-
return Just<TYPE>(val->NAME ##Value()); \
31+
return Just(val->NAME ## Value()); \
3232
}
3333

3434
X(bool, Boolean)

nan_implementation_12_inl.h

Lines changed: 35 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,15 @@ Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
6060
(V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
6161
Factory<v8::Date>::return_t
6262
Factory<v8::Date>::New(double value) {
63-
v8::Local<v8::Date> ret;
64-
if (v8::Date::New(GetCurrentContext(), value).
65-
ToLocal(reinterpret_cast<v8::Local<v8::Value>*>(&ret))) {
66-
return v8::MaybeLocal<v8::Date>(ret);
67-
} else {
68-
return v8::MaybeLocal<v8::Date>(ret);
69-
}
63+
v8::Isolate *isolate = v8::Isolate::GetCurrent();
64+
v8::EscapableHandleScope scope(isolate);
65+
return scope.Escape(v8::Date::New(isolate->GetCurrentContext(), value)
66+
.FromMaybe(v8::Local<v8::Value>()).As<v8::Date>());
7067
}
7168
#else
7269
Factory<v8::Date>::return_t
7370
Factory<v8::Date>::New(double value) {
74-
return Factory<v8::Date>::return_t(
75-
v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>());
71+
return v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>();
7672
}
7773
#endif
7874

@@ -203,14 +199,18 @@ Factory<v8::RegExp>::return_t
203199
Factory<v8::RegExp>::New(
204200
v8::Local<v8::String> pattern
205201
, v8::RegExp::Flags flags) {
206-
return v8::RegExp::New(GetCurrentContext(), pattern, flags);
202+
v8::Isolate *isolate = v8::Isolate::GetCurrent();
203+
v8::EscapableHandleScope scope(isolate);
204+
return scope.Escape(
205+
v8::RegExp::New(isolate->GetCurrentContext(), pattern, flags)
206+
.FromMaybe(v8::Local<v8::RegExp>()));
207207
}
208208
#else
209209
Factory<v8::RegExp>::return_t
210210
Factory<v8::RegExp>::New(
211211
v8::Local<v8::String> pattern
212212
, v8::RegExp::Flags flags) {
213-
return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
213+
return v8::RegExp::New(pattern, flags);
214214
}
215215
#endif
216216

@@ -220,30 +220,36 @@ Factory<v8::RegExp>::New(
220220
(V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
221221
Factory<v8::Script>::return_t
222222
Factory<v8::Script>::New( v8::Local<v8::String> source) {
223+
v8::Isolate *isolate = v8::Isolate::GetCurrent();
224+
v8::EscapableHandleScope scope(isolate);
223225
v8::ScriptCompiler::Source src(source);
224-
return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
226+
return scope.Escape(
227+
v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src)
228+
.FromMaybe(v8::Local<v8::Script>()));
225229
}
226230

227231
Factory<v8::Script>::return_t
228232
Factory<v8::Script>::New( v8::Local<v8::String> source
229233
, v8::ScriptOrigin const& origin) {
234+
v8::Isolate *isolate = v8::Isolate::GetCurrent();
235+
v8::EscapableHandleScope scope(isolate);
230236
v8::ScriptCompiler::Source src(source, origin);
231-
return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
237+
return scope.Escape(
238+
v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src)
239+
.FromMaybe(v8::Local<v8::Script>()));
232240
}
233241
#else
234242
Factory<v8::Script>::return_t
235243
Factory<v8::Script>::New( v8::Local<v8::String> source) {
236244
v8::ScriptCompiler::Source src(source);
237-
return Factory<v8::Script>::return_t(
238-
v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
245+
return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src);
239246
}
240247

241248
Factory<v8::Script>::return_t
242249
Factory<v8::Script>::New( v8::Local<v8::String> source
243250
, v8::ScriptOrigin const& origin) {
244251
v8::ScriptCompiler::Source src(source, origin);
245-
return Factory<v8::Script>::return_t(
246-
v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
252+
return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src);
247253
}
248254
#endif
249255

@@ -258,8 +264,7 @@ Factory<v8::Signature>::New(Factory<v8::Signature>::FTH receiver) {
258264

259265
Factory<v8::String>::return_t
260266
Factory<v8::String>::New() {
261-
return Factory<v8::String>::return_t(
262-
v8::String::Empty(v8::Isolate::GetCurrent()));
267+
return v8::String::Empty(v8::Isolate::GetCurrent());
263268
}
264269

265270
#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \
@@ -295,46 +300,33 @@ Factory<v8::String>::New(ExternalOneByteStringResource * value) {
295300
#else
296301
Factory<v8::String>::return_t
297302
Factory<v8::String>::New(const char * value, int length) {
298-
return Factory<v8::String>::return_t(
299-
v8::String::NewFromUtf8(
300-
v8::Isolate::GetCurrent()
301-
, value
302-
, v8::String::kNormalString
303-
, length));
303+
return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value,
304+
v8::String::kNormalString, length);
304305
}
305306

306307
Factory<v8::String>::return_t
307308
Factory<v8::String>::New(
308309
std::string const& value) /* NOLINT(build/include_what_you_use) */ {
309310
assert(value.size() <= INT_MAX && "string too long");
310-
return Factory<v8::String>::return_t(
311-
v8::String::NewFromUtf8(
312-
v8::Isolate::GetCurrent()
313-
, value.data()
314-
, v8::String::kNormalString
315-
, static_cast<int>(value.size())));
311+
return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value.data(),
312+
v8::String::kNormalString,
313+
static_cast<int>(value.size()));
316314
}
317315

318316
Factory<v8::String>::return_t
319317
Factory<v8::String>::New(const uint16_t * value, int length) {
320-
return Factory<v8::String>::return_t(
321-
v8::String::NewFromTwoByte(
322-
v8::Isolate::GetCurrent()
323-
, value
324-
, v8::String::kNormalString
325-
, length));
318+
return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value,
319+
v8::String::kNormalString, length);
326320
}
327321

328322
Factory<v8::String>::return_t
329323
Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
330-
return Factory<v8::String>::return_t(
331-
v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
324+
return v8::String::NewExternal(v8::Isolate::GetCurrent(), value);
332325
}
333326

334327
Factory<v8::String>::return_t
335328
Factory<v8::String>::New(ExternalOneByteStringResource * value) {
336-
return Factory<v8::String>::return_t(
337-
v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
329+
return v8::String::NewExternal(v8::Isolate::GetCurrent(), value);
338330
}
339331
#endif
340332

@@ -367,16 +359,14 @@ Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
367359
Factory<v8::UnboundScript>::return_t
368360
Factory<v8::UnboundScript>::New(v8::Local<v8::String> source) {
369361
v8::ScriptCompiler::Source src(source);
370-
return Factory<v8::UnboundScript>::return_t(
371-
v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
362+
return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src);
372363
}
373364

374365
Factory<v8::UnboundScript>::return_t
375366
Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
376367
, v8::ScriptOrigin const& origin) {
377368
v8::ScriptCompiler::Source src(source, origin);
378-
return Factory<v8::UnboundScript>::return_t(
379-
v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
369+
return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src);
380370
}
381371
#endif
382372

nan_implementation_pre_12_inl.h

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
5757

5858
Factory<v8::Date>::return_t
5959
Factory<v8::Date>::New(double value) {
60-
return Factory<v8::Date>::return_t(v8::Date::New(value).As<v8::Date>());
60+
return v8::Date::New(value).As<v8::Date>();
6161
}
6262

6363
//=== External =================================================================
@@ -72,10 +72,11 @@ Factory<v8::External>::New(void * value) {
7272
Factory<v8::Function>::return_t
7373
Factory<v8::Function>::New( FunctionCallback callback
7474
, v8::Local<v8::Value> data) {
75-
return Factory<v8::FunctionTemplate>::New( callback
76-
, data
77-
, v8::Local<v8::Signature>()
78-
)->GetFunction();
75+
v8::HandleScope scope;
76+
77+
return scope.Close(Factory<v8::FunctionTemplate>::New(
78+
callback, data, v8::Local<v8::Signature>())
79+
->GetFunction());
7980
}
8081

8182

@@ -172,20 +173,19 @@ Factory<v8::RegExp>::return_t
172173
Factory<v8::RegExp>::New(
173174
v8::Local<v8::String> pattern
174175
, v8::RegExp::Flags flags) {
175-
return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
176+
return v8::RegExp::New(pattern, flags);
176177
}
177178

178179
//=== Script ===================================================================
179180

180181
Factory<v8::Script>::return_t
181182
Factory<v8::Script>::New( v8::Local<v8::String> source) {
182-
return Factory<v8::Script>::return_t(v8::Script::New(source));
183+
return v8::Script::New(source);
183184
}
184185
Factory<v8::Script>::return_t
185186
Factory<v8::Script>::New( v8::Local<v8::String> source
186187
, v8::ScriptOrigin const& origin) {
187-
return Factory<v8::Script>::return_t(
188-
v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin)));
188+
return v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin));
189189
}
190190

191191
//=== Signature ================================================================
@@ -199,35 +199,34 @@ Factory<v8::Signature>::New(Factory<v8::Signature>::FTH receiver) {
199199

200200
Factory<v8::String>::return_t
201201
Factory<v8::String>::New() {
202-
return Factory<v8::String>::return_t(v8::String::Empty());
202+
return v8::String::Empty();
203203
}
204204

205205
Factory<v8::String>::return_t
206206
Factory<v8::String>::New(const char * value, int length) {
207-
return Factory<v8::String>::return_t(v8::String::New(value, length));
207+
return v8::String::New(value, length);
208208
}
209209

210210
Factory<v8::String>::return_t
211211
Factory<v8::String>::New(
212212
std::string const& value) /* NOLINT(build/include_what_you_use) */ {
213213
assert(value.size() <= INT_MAX && "string too long");
214-
return Factory<v8::String>::return_t(
215-
v8::String::New( value.data(), static_cast<int>(value.size())));
214+
return v8::String::New(value.data(), static_cast<int>(value.size()));
216215
}
217216

218217
Factory<v8::String>::return_t
219218
Factory<v8::String>::New(const uint16_t * value, int length) {
220-
return Factory<v8::String>::return_t(v8::String::New(value, length));
219+
return v8::String::New(value, length);
221220
}
222221

223222
Factory<v8::String>::return_t
224223
Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
225-
return Factory<v8::String>::return_t(v8::String::NewExternal(value));
224+
return v8::String::NewExternal(value);
226225
}
227226

228227
Factory<v8::String>::return_t
229228
Factory<v8::String>::New(v8::String::ExternalAsciiStringResource * value) {
230-
return Factory<v8::String>::return_t(v8::String::NewExternal(value));
229+
return v8::String::NewExternal(value);
231230
}
232231

233232
//=== String Object ============================================================

0 commit comments

Comments
 (0)