Skip to content

Commit

Permalink
Add missing scopes
Browse files Browse the repository at this point in the history
  • Loading branch information
kkoopa committed Jan 22, 2017
1 parent 6a80995 commit a93b8ba
Show file tree
Hide file tree
Showing 8 changed files with 308 additions and 173 deletions.
163 changes: 98 additions & 65 deletions nan.h

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions nan_callbacks_pre_12_inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,43 +45,57 @@ class ReturnValue {

// Fast primitive setters
inline void Set(bool value) {
v8::HandleScope scope;

TYPE_CHECK(T, v8::Boolean);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::Boolean::New(value));
}

inline void Set(double i) {
v8::HandleScope scope;

TYPE_CHECK(T, v8::Number);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::Number::New(i));
}

inline void Set(int32_t i) {
v8::HandleScope scope;

TYPE_CHECK(T, v8::Integer);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::Int32::New(i));
}

inline void Set(uint32_t i) {
v8::HandleScope scope;

TYPE_CHECK(T, v8::Integer);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::Uint32::NewFromUnsigned(i));
}

// Fast JS primitive setters
inline void SetNull() {
v8::HandleScope scope;

TYPE_CHECK(T, v8::Primitive);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::Null());
}

inline void SetUndefined() {
v8::HandleScope scope;

TYPE_CHECK(T, v8::Primitive);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::Undefined());
}

inline void SetEmptyString() {
v8::HandleScope scope;

TYPE_CHECK(T, v8::String);
value_->Dispose();
*value_ = v8::Persistent<T>::New(v8::String::Empty());
Expand Down
10 changes: 8 additions & 2 deletions nan_converters_43_inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
#define X(TYPE) \
imp::ToFactory<v8::TYPE>::return_t \
imp::ToFactory<v8::TYPE>::convert(v8::Local<v8::Value> val) { \
return val->To ## TYPE(GetCurrentContext()); \
v8::Isolate *isolate = v8::Isolate::GetCurrent(); \
v8::EscapableHandleScope scope(isolate); \
return scope.Escape( \
val->To ## TYPE(v8::Isolate::GetCurrent()->GetCurrentContext()) \
.FromMaybe(v8::Local<v8::TYPE>())); \
}

X(Boolean)
Expand All @@ -28,7 +32,9 @@ X(Int32)
#define X(TYPE, NAME) \
imp::ToFactory<TYPE>::return_t \
imp::ToFactory<TYPE>::convert(v8::Local<v8::Value> val) { \
return val->NAME ## Value(GetCurrentContext()); \
v8::Isolate *isolate = v8::Isolate::GetCurrent(); \
v8::HandleScope scope(isolate); \
return val->NAME ## Value(isolate->GetCurrentContext()); \
}

X(bool, Boolean)
Expand Down
4 changes: 2 additions & 2 deletions nan_converters_pre_43_inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
#define X(TYPE) \
imp::ToFactory<v8::TYPE>::return_t \
imp::ToFactory<v8::TYPE>::convert(v8::Local<v8::Value> val) { \
return MaybeLocal<v8::TYPE>(val->To ## TYPE()); \
return val->To ## TYPE(); \
}

X(Boolean)
Expand All @@ -28,7 +28,7 @@ X(Int32)
#define X(TYPE, NAME) \
imp::ToFactory<TYPE>::return_t \
imp::ToFactory<TYPE>::convert(v8::Local<v8::Value> val) { \
return Just<TYPE>(val->NAME ##Value()); \
return Just(val->NAME ## Value()); \
}

X(bool, Boolean)
Expand Down
80 changes: 35 additions & 45 deletions nan_implementation_12_inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,19 +60,15 @@ Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions
(V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
Factory<v8::Date>::return_t
Factory<v8::Date>::New(double value) {
v8::Local<v8::Date> ret;
if (v8::Date::New(GetCurrentContext(), value).
ToLocal(reinterpret_cast<v8::Local<v8::Value>*>(&ret))) {
return v8::MaybeLocal<v8::Date>(ret);
} else {
return v8::MaybeLocal<v8::Date>(ret);
}
v8::Isolate *isolate = v8::Isolate::GetCurrent();
v8::EscapableHandleScope scope(isolate);
return scope.Escape(v8::Date::New(isolate->GetCurrentContext(), value)
.FromMaybe(v8::Local<v8::Value>()).As<v8::Date>());
}
#else
Factory<v8::Date>::return_t
Factory<v8::Date>::New(double value) {
return Factory<v8::Date>::return_t(
v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>());
return v8::Date::New(v8::Isolate::GetCurrent(), value).As<v8::Date>();
}
#endif

Expand Down Expand Up @@ -203,14 +199,18 @@ Factory<v8::RegExp>::return_t
Factory<v8::RegExp>::New(
v8::Local<v8::String> pattern
, v8::RegExp::Flags flags) {
return v8::RegExp::New(GetCurrentContext(), pattern, flags);
v8::Isolate *isolate = v8::Isolate::GetCurrent();
v8::EscapableHandleScope scope(isolate);
return scope.Escape(
v8::RegExp::New(isolate->GetCurrentContext(), pattern, flags)
.FromMaybe(v8::Local<v8::RegExp>()));
}
#else
Factory<v8::RegExp>::return_t
Factory<v8::RegExp>::New(
v8::Local<v8::String> pattern
, v8::RegExp::Flags flags) {
return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
return v8::RegExp::New(pattern, flags);
}
#endif

Expand All @@ -220,30 +220,36 @@ Factory<v8::RegExp>::New(
(V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3))
Factory<v8::Script>::return_t
Factory<v8::Script>::New( v8::Local<v8::String> source) {
v8::Isolate *isolate = v8::Isolate::GetCurrent();
v8::EscapableHandleScope scope(isolate);
v8::ScriptCompiler::Source src(source);
return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
return scope.Escape(
v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src)
.FromMaybe(v8::Local<v8::Script>()));
}

Factory<v8::Script>::return_t
Factory<v8::Script>::New( v8::Local<v8::String> source
, v8::ScriptOrigin const& origin) {
v8::Isolate *isolate = v8::Isolate::GetCurrent();
v8::EscapableHandleScope scope(isolate);
v8::ScriptCompiler::Source src(source, origin);
return v8::ScriptCompiler::Compile(GetCurrentContext(), &src);
return scope.Escape(
v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src)
.FromMaybe(v8::Local<v8::Script>()));
}
#else
Factory<v8::Script>::return_t
Factory<v8::Script>::New( v8::Local<v8::String> source) {
v8::ScriptCompiler::Source src(source);
return Factory<v8::Script>::return_t(
v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src);
}

Factory<v8::Script>::return_t
Factory<v8::Script>::New( v8::Local<v8::String> source
, v8::ScriptOrigin const& origin) {
v8::ScriptCompiler::Source src(source, origin);
return Factory<v8::Script>::return_t(
v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src));
return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src);
}
#endif

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

Factory<v8::String>::return_t
Factory<v8::String>::New() {
return Factory<v8::String>::return_t(
v8::String::Empty(v8::Isolate::GetCurrent()));
return v8::String::Empty(v8::Isolate::GetCurrent());
}

#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \
Expand Down Expand Up @@ -295,46 +300,33 @@ Factory<v8::String>::New(ExternalOneByteStringResource * value) {
#else
Factory<v8::String>::return_t
Factory<v8::String>::New(const char * value, int length) {
return Factory<v8::String>::return_t(
v8::String::NewFromUtf8(
v8::Isolate::GetCurrent()
, value
, v8::String::kNormalString
, length));
return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value,
v8::String::kNormalString, length);
}

Factory<v8::String>::return_t
Factory<v8::String>::New(
std::string const& value) /* NOLINT(build/include_what_you_use) */ {
assert(value.size() <= INT_MAX && "string too long");
return Factory<v8::String>::return_t(
v8::String::NewFromUtf8(
v8::Isolate::GetCurrent()
, value.data()
, v8::String::kNormalString
, static_cast<int>(value.size())));
return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value.data(),
v8::String::kNormalString,
static_cast<int>(value.size()));
}

Factory<v8::String>::return_t
Factory<v8::String>::New(const uint16_t * value, int length) {
return Factory<v8::String>::return_t(
v8::String::NewFromTwoByte(
v8::Isolate::GetCurrent()
, value
, v8::String::kNormalString
, length));
return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value,
v8::String::kNormalString, length);
}

Factory<v8::String>::return_t
Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
return Factory<v8::String>::return_t(
v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
return v8::String::NewExternal(v8::Isolate::GetCurrent(), value);
}

Factory<v8::String>::return_t
Factory<v8::String>::New(ExternalOneByteStringResource * value) {
return Factory<v8::String>::return_t(
v8::String::NewExternal(v8::Isolate::GetCurrent(), value));
return v8::String::NewExternal(v8::Isolate::GetCurrent(), value);
}
#endif

Expand Down Expand Up @@ -367,16 +359,14 @@ Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
Factory<v8::UnboundScript>::return_t
Factory<v8::UnboundScript>::New(v8::Local<v8::String> source) {
v8::ScriptCompiler::Source src(source);
return Factory<v8::UnboundScript>::return_t(
v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src);
}

Factory<v8::UnboundScript>::return_t
Factory<v8::UnboundScript>::New( v8::Local<v8::String> source
, v8::ScriptOrigin const& origin) {
v8::ScriptCompiler::Source src(source, origin);
return Factory<v8::UnboundScript>::return_t(
v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src));
return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src);
}
#endif

Expand Down
31 changes: 15 additions & 16 deletions nan_implementation_pre_12_inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Factory<v8::Context>::New( v8::ExtensionConfiguration* extensions

Factory<v8::Date>::return_t
Factory<v8::Date>::New(double value) {
return Factory<v8::Date>::return_t(v8::Date::New(value).As<v8::Date>());
return v8::Date::New(value).As<v8::Date>();
}

//=== External =================================================================
Expand All @@ -72,10 +72,11 @@ Factory<v8::External>::New(void * value) {
Factory<v8::Function>::return_t
Factory<v8::Function>::New( FunctionCallback callback
, v8::Local<v8::Value> data) {
return Factory<v8::FunctionTemplate>::New( callback
, data
, v8::Local<v8::Signature>()
)->GetFunction();
v8::HandleScope scope;

return scope.Close(Factory<v8::FunctionTemplate>::New(
callback, data, v8::Local<v8::Signature>())
->GetFunction());
}


Expand Down Expand Up @@ -172,20 +173,19 @@ Factory<v8::RegExp>::return_t
Factory<v8::RegExp>::New(
v8::Local<v8::String> pattern
, v8::RegExp::Flags flags) {
return Factory<v8::RegExp>::return_t(v8::RegExp::New(pattern, flags));
return v8::RegExp::New(pattern, flags);
}

//=== Script ===================================================================

Factory<v8::Script>::return_t
Factory<v8::Script>::New( v8::Local<v8::String> source) {
return Factory<v8::Script>::return_t(v8::Script::New(source));
return v8::Script::New(source);
}
Factory<v8::Script>::return_t
Factory<v8::Script>::New( v8::Local<v8::String> source
, v8::ScriptOrigin const& origin) {
return Factory<v8::Script>::return_t(
v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin)));
return v8::Script::New(source, const_cast<v8::ScriptOrigin*>(&origin));
}

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

Factory<v8::String>::return_t
Factory<v8::String>::New() {
return Factory<v8::String>::return_t(v8::String::Empty());
return v8::String::Empty();
}

Factory<v8::String>::return_t
Factory<v8::String>::New(const char * value, int length) {
return Factory<v8::String>::return_t(v8::String::New(value, length));
return v8::String::New(value, length);
}

Factory<v8::String>::return_t
Factory<v8::String>::New(
std::string const& value) /* NOLINT(build/include_what_you_use) */ {
assert(value.size() <= INT_MAX && "string too long");
return Factory<v8::String>::return_t(
v8::String::New( value.data(), static_cast<int>(value.size())));
return v8::String::New(value.data(), static_cast<int>(value.size()));
}

Factory<v8::String>::return_t
Factory<v8::String>::New(const uint16_t * value, int length) {
return Factory<v8::String>::return_t(v8::String::New(value, length));
return v8::String::New(value, length);
}

Factory<v8::String>::return_t
Factory<v8::String>::New(v8::String::ExternalStringResource * value) {
return Factory<v8::String>::return_t(v8::String::NewExternal(value));
return v8::String::NewExternal(value);
}

Factory<v8::String>::return_t
Factory<v8::String>::New(v8::String::ExternalAsciiStringResource * value) {
return Factory<v8::String>::return_t(v8::String::NewExternal(value));
return v8::String::NewExternal(value);
}

//=== String Object ============================================================
Expand Down

0 comments on commit a93b8ba

Please sign in to comment.