From dbf7f9ca9734a2149cdafc5ae257c6d8b37b002f Mon Sep 17 00:00:00 2001 From: Benjamin Byholm Date: Sat, 23 May 2015 18:33:13 +0300 Subject: [PATCH] Introduce NanNewOneByteString --- nan.h | 37 +++++++++++++++++++++++++++++++++ nan_implementation_12_inl.h | 15 ------------- nan_implementation_pre_12_inl.h | 24 --------------------- nan_new.h | 9 -------- test/cpp/morenews.cpp | 2 +- test/cpp/nannew.cpp | 5 ++--- test/cpp/news.cpp | 2 +- 7 files changed, 41 insertions(+), 53 deletions(-) diff --git a/nan.h b/nan.h index 6c28c5d3..58e9f8ee 100644 --- a/nan.h +++ b/nan.h @@ -639,6 +639,12 @@ class NanEscapableScope { #if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) + NAN_INLINE NanMaybeLocal + NanNewOneByteString(const uint8_t * value, int length = -1) { + return v8::String::NewFromOneByte(v8::Isolate::GetCurrent(), value, + v8::NewStringType::kNormal, length); + } + NAN_INLINE NanMaybeLocal NanCompileScript( v8::Local s , const v8::ScriptOrigin& origin @@ -666,6 +672,15 @@ class NanEscapableScope { return script->Run(NanGetCurrentContext()); } #else + NAN_INLINE NanMaybeLocal + NanNewOneByteString(const uint8_t * value, int length = -1) { + return NanMaybeLocal( + v8::String::NewFromOneByte( + v8::Isolate::GetCurrent() + , value + , v8::String::kNormalString, length)); + } + NAN_INLINE NanMaybeLocal NanCompileScript( v8::Local s , const v8::ScriptOrigin& origin @@ -908,6 +923,28 @@ class NanEscapableScope { return function_template->HasInstance(value); } + namespace Nan { namespace imp { + NAN_INLINE void + widenString(std::vector *ws, const uint8_t *s, int l) { + size_t len = static_cast(l); + if (l < 0) { + len = strlen(reinterpret_cast(s)); + } + assert(len <= INT_MAX && "string too long"); + ws->resize(len); + std::copy(s, s + len, ws->begin()); + } + } // end of namespace imp + } // end of namespace Nan + + NAN_INLINE NanMaybeLocal + NanNewOneByteString(const uint8_t * value, int length = -1) { + std::vector wideString; + Nan::imp::widenString(&wideString, value, length); + return Factory::return_t(v8::String::New(&wideString.front() + , static_cast(wideString.size()))); + } + NAN_INLINE NanMaybeLocal NanCompileScript( v8::Local s , const v8::ScriptOrigin& origin diff --git a/nan_implementation_12_inl.h b/nan_implementation_12_inl.h index f9af72ce..7fa4da4b 100644 --- a/nan_implementation_12_inl.h +++ b/nan_implementation_12_inl.h @@ -294,12 +294,6 @@ Factory::New(std::string const& value) { value.data(), v8::NewStringType::kNormal, static_cast(value.size())); } -Factory::return_t -Factory::New(const uint8_t * value, int length) { - return v8::String::NewFromOneByte(v8::Isolate::GetCurrent(), value, - v8::NewStringType::kNormal, length); -} - Factory::return_t Factory::New(const uint16_t * value, int length) { return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value, @@ -337,15 +331,6 @@ Factory::New(std::string const& value) { , static_cast(value.size()))); } -Factory::return_t -Factory::New(const uint8_t * value, int length) { - return Factory::return_t( - v8::String::NewFromOneByte( - v8::Isolate::GetCurrent() - , value - , v8::String::kNormalString, length)); -} - Factory::return_t Factory::New(const uint16_t * value, int length) { return Factory::return_t( diff --git a/nan_implementation_pre_12_inl.h b/nan_implementation_pre_12_inl.h index 6b222b8c..ad6f3d32 100644 --- a/nan_implementation_pre_12_inl.h +++ b/nan_implementation_pre_12_inl.h @@ -226,35 +226,11 @@ Factory::New(std::string const& value) { v8::String::New( value.data(), static_cast(value.size()))); } -inline -void -widenString(std::vector *ws, const uint8_t *s, int l = -1) { - size_t len = static_cast(l); - if (l < 0) { - len = strlen(reinterpret_cast(s)); - } - assert(len <= INT_MAX && "string too long"); - ws->resize(len); - std::copy(s, s + len, ws->begin()); -} - Factory::return_t Factory::New(const uint16_t * value, int length) { return Factory::return_t(v8::String::New(value, length)); } -Factory::return_t -Factory::New(const uint8_t * value, int length) { - std::vector wideString; - widenString(&wideString, value, length); - if (wideString.size() == 0) { - return Factory::return_t(v8::String::Empty()); - } else { - return Factory::return_t(v8::String::New(&wideString.front() - , static_cast(wideString.size()))); - } -} - Factory::return_t Factory::New(v8::String::ExternalStringResource * value) { return Factory::return_t(v8::String::NewExternal(value)); diff --git a/nan_new.h b/nan_new.h index 3d5bcf71..62748744 100644 --- a/nan_new.h +++ b/nan_new.h @@ -173,9 +173,6 @@ struct Factory : MaybeFactoryBase { static inline return_t New(v8::String::ExternalStringResource * value); static inline return_t New(NanExternalOneByteStringResource * value); - - // TODO(agnat): Deprecate. - static inline return_t New(const uint8_t * value, int length = -1); }; template <> @@ -316,12 +313,6 @@ NanNew(const char * value) { return NanNew(value); } -inline -Nan::imp::Factory::return_t -NanNew(const uint8_t * value) { - return NanNew(value); -} - inline Nan::imp::Factory::return_t NanNew(const uint16_t * value) { diff --git a/test/cpp/morenews.cpp b/test/cpp/morenews.cpp index eef689a5..9b4bbb32 100644 --- a/test/cpp/morenews.cpp +++ b/test/cpp/morenews.cpp @@ -27,7 +27,7 @@ NAN_METHOD(NewUtf8String) { NAN_METHOD(NewLatin1String) { const uint8_t s[] = "str\xefng"; - info.GetReturnValue().Set(NanNew(s).ToLocalChecked()); + info.GetReturnValue().Set(NanNewOneByteString(s).ToLocalChecked()); } NAN_METHOD(NewUcs2String) { diff --git a/test/cpp/nannew.cpp b/test/cpp/nannew.cpp index dc6f0557..745e345b 100644 --- a/test/cpp/nannew.cpp +++ b/test/cpp/nannew.cpp @@ -301,12 +301,11 @@ NAN_METHOD(testString) { t.ok(_( stringMatches( NanNew().ToLocalChecked(), ""))); t.ok(_( assertType( NanNew().ToLocalChecked()))); - // These should be deprecated const uint8_t *ustring = reinterpret_cast("unsigned chars"); t.ok(_( stringMatches( - NanNew(ustring).ToLocalChecked(), "unsigned chars"))); + NanNewOneByteString(ustring).ToLocalChecked(), "unsigned chars"))); t.ok(_( stringMatches( - NanNew(ustring, 8).ToLocalChecked(), "unsigned"))); + NanNewOneByteString(ustring, 8).ToLocalChecked(), "unsigned"))); // === Convenience diff --git a/test/cpp/news.cpp b/test/cpp/news.cpp index 538879f9..b28ddbc6 100644 --- a/test/cpp/news.cpp +++ b/test/cpp/news.cpp @@ -57,7 +57,7 @@ NAN_METHOD(NewUtf8String) { NAN_METHOD(NewLatin1String) { const uint8_t s[] = "str\xefng"; - info.GetReturnValue().Set(NanNew(s).ToLocalChecked()); + info.GetReturnValue().Set(NanNewOneByteString(s).ToLocalChecked()); } NAN_METHOD(NewUcs2String) {