mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
src: use NewFromUtf8Literal in NODE_DEFINE_CONSTANT
Small efficiency improvement over NewFromUtf8(): the literal's length is known at compile time, so V8 doesn't have to call strlen() or ToLocalChecked(). PR-URL: https://github.com/nodejs/node/pull/55581 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Richard Lau <rlau@redhat.com>
This commit is contained in:
1 parent
8807549ed9
commit
996708042b
1 file changed
+31
-37
+31
-37
@@ -1023,44 +1023,38 @@ NODE_DEPRECATED("Use v8::Date::ValueOf() directly",
|
||||
})
|
||||
#define NODE_V8_UNIXTIME node::NODE_V8_UNIXTIME
|
||||
|
||||
#define NODE_DEFINE_CONSTANT(target, constant) \
|
||||
do { \
|
||||
v8::Isolate* isolate = target->GetIsolate(); \
|
||||
v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
|
||||
v8::Local<v8::String> constant_name = \
|
||||
v8::String::NewFromUtf8(isolate, #constant, \
|
||||
v8::NewStringType::kInternalized).ToLocalChecked(); \
|
||||
v8::Local<v8::Number> constant_value = \
|
||||
v8::Number::New(isolate, static_cast<double>(constant)); \
|
||||
v8::PropertyAttribute constant_attributes = \
|
||||
static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
|
||||
(target)->DefineOwnProperty(context, \
|
||||
constant_name, \
|
||||
constant_value, \
|
||||
constant_attributes).Check(); \
|
||||
} \
|
||||
while (0)
|
||||
#define NODE_DEFINE_CONSTANT(target, constant) \
|
||||
do { \
|
||||
v8::Isolate* isolate = target->GetIsolate(); \
|
||||
v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
|
||||
v8::Local<v8::String> constant_name = v8::String::NewFromUtf8Literal( \
|
||||
isolate, #constant, v8::NewStringType::kInternalized); \
|
||||
v8::Local<v8::Number> constant_value = \
|
||||
v8::Number::New(isolate, static_cast<double>(constant)); \
|
||||
v8::PropertyAttribute constant_attributes = \
|
||||
static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete); \
|
||||
(target) \
|
||||
->DefineOwnProperty( \
|
||||
context, constant_name, constant_value, constant_attributes) \
|
||||
.Check(); \
|
||||
} while (0)
|
||||
|
||||
#define NODE_DEFINE_HIDDEN_CONSTANT(target, constant) \
|
||||
do { \
|
||||
v8::Isolate* isolate = target->GetIsolate(); \
|
||||
v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
|
||||
v8::Local<v8::String> constant_name = \
|
||||
v8::String::NewFromUtf8(isolate, #constant, \
|
||||
v8::NewStringType::kInternalized) \
|
||||
.ToLocalChecked(); \
|
||||
v8::Local<v8::Number> constant_value = \
|
||||
v8::Number::New(isolate, static_cast<double>(constant)); \
|
||||
v8::PropertyAttribute constant_attributes = \
|
||||
static_cast<v8::PropertyAttribute>(v8::ReadOnly | \
|
||||
v8::DontDelete | \
|
||||
v8::DontEnum); \
|
||||
(target)->DefineOwnProperty(context, \
|
||||
constant_name, \
|
||||
constant_value, \
|
||||
constant_attributes).Check(); \
|
||||
} \
|
||||
while (0)
|
||||
#define NODE_DEFINE_HIDDEN_CONSTANT(target, constant) \
|
||||
do { \
|
||||
v8::Isolate* isolate = target->GetIsolate(); \
|
||||
v8::Local<v8::Context> context = isolate->GetCurrentContext(); \
|
||||
v8::Local<v8::String> constant_name = v8::String::NewFromUtf8Literal( \
|
||||
isolate, #constant, v8::NewStringType::kInternalized); \
|
||||
v8::Local<v8::Number> constant_value = \
|
||||
v8::Number::New(isolate, static_cast<double>(constant)); \
|
||||
v8::PropertyAttribute constant_attributes = \
|
||||
static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete | \
|
||||
v8::DontEnum); \
|
||||
(target) \
|
||||
->DefineOwnProperty( \
|
||||
context, constant_name, constant_value, constant_attributes) \
|
||||
.Check(); \
|
||||
} while (0)
|
||||
|
||||
// Used to be a macro, hence the uppercase name.
|
||||
inline void NODE_SET_METHOD(v8::Local<v8::Template> recv,
|
||||
|
||||
Reference in new issue
Block a user