Skip to content

Commit 53b59b4

Browse files
joyeecheungBridgeAR
authored andcommitted
src: move READONLY_* macros into util.h
Move these macros to util.h so they can be shared among different C++ files. Also, renames `READONLY_BOOLEAN_PROPERTY` to `READONLY_TRUE_PROPERTY` (since it sets the property to true), and use `ToV8Value` in `READONLY_STRING_PROPERTY`. PR-URL: #24774 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent 1f8787c commit 53b59b4

File tree

3 files changed

+43
-71
lines changed

3 files changed

+43
-71
lines changed

src/node.cc

+3-28
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ using v8::Array;
124124
using v8::Boolean;
125125
using v8::Context;
126126
using v8::DEFAULT;
127-
using v8::DontEnum;
128127
using v8::EscapableHandleScope;
129128
using v8::Exception;
130129
using v8::Function;
@@ -147,8 +146,6 @@ using v8::Nothing;
147146
using v8::Null;
148147
using v8::Object;
149148
using v8::ObjectTemplate;
150-
using v8::PropertyAttribute;
151-
using v8::ReadOnly;
152149
using v8::Script;
153150
using v8::ScriptOrigin;
154151
using v8::SealHandleScope;
@@ -954,31 +951,12 @@ static Local<Object> GetFeatures(Environment* env) {
954951
static void DebugProcess(const FunctionCallbackInfo<Value>& args);
955952
static void DebugEnd(const FunctionCallbackInfo<Value>& args);
956953

957-
namespace {
958-
959-
#define READONLY_PROPERTY(obj, str, var) \
960-
do { \
961-
obj->DefineOwnProperty(env->context(), \
962-
OneByteString(env->isolate(), str), \
963-
var, \
964-
ReadOnly).FromJust(); \
965-
} while (0)
966-
967-
#define READONLY_DONT_ENUM_PROPERTY(obj, str, var) \
968-
do { \
969-
obj->DefineOwnProperty(env->context(), \
970-
OneByteString(env->isolate(), str), \
971-
var, \
972-
static_cast<PropertyAttribute>(ReadOnly|DontEnum)) \
973-
.FromJust(); \
974-
} while (0)
975-
976-
} // anonymous namespace
977-
978954
void SetupProcessObject(Environment* env,
979955
const std::vector<std::string>& args,
980956
const std::vector<std::string>& exec_args) {
981-
HandleScope scope(env->isolate());
957+
Isolate* isolate = env->isolate();
958+
HandleScope scope(isolate);
959+
Local<Context> context = env->context();
982960

983961
Local<Object> process = env->process_object();
984962

@@ -1319,9 +1297,6 @@ void SetupProcessObject(Environment* env,
13191297
}
13201298

13211299

1322-
#undef READONLY_PROPERTY
1323-
1324-
13251300
void SignalExit(int signo) {
13261301
uv_tty_reset_mode();
13271302
#ifdef __FreeBSD__

src/node_config.cc

+15-43
Original file line numberDiff line numberDiff line change
@@ -12,68 +12,40 @@ using v8::Isolate;
1212
using v8::Local;
1313
using v8::Number;
1414
using v8::Object;
15-
using v8::ReadOnly;
16-
using v8::String;
1715
using v8::Value;
1816

1917
// The config binding is used to provide an internal view of compile or runtime
2018
// config options that are required internally by lib/*.js code. This is an
2119
// alternative to dropping additional properties onto the process object as
2220
// has been the practice previously in node.cc.
2321

24-
#define READONLY_BOOLEAN_PROPERTY(str) \
25-
do { \
26-
target->DefineOwnProperty(context, \
27-
FIXED_ONE_BYTE_STRING(isolate, str), \
28-
True(isolate), ReadOnly).FromJust(); \
29-
} while (0)
30-
31-
#define READONLY_STRING_PROPERTY(obj, str, val) \
32-
do { \
33-
(obj)->DefineOwnProperty(context, \
34-
FIXED_ONE_BYTE_STRING(isolate, str), \
35-
String::NewFromUtf8( \
36-
isolate, \
37-
val.data(), \
38-
v8::NewStringType::kNormal).ToLocalChecked(), \
39-
ReadOnly).FromJust(); \
40-
} while (0)
41-
42-
43-
#define READONLY_PROPERTY(obj, name, value) \
44-
do { \
45-
obj->DefineOwnProperty(env->context(), \
46-
FIXED_ONE_BYTE_STRING(isolate, name), \
47-
value, ReadOnly).FromJust(); \
48-
} while (0)
49-
5022
static void Initialize(Local<Object> target,
5123
Local<Value> unused,
5224
Local<Context> context) {
5325
Environment* env = Environment::GetCurrent(context);
5426
Isolate* isolate = env->isolate();
5527

5628
#ifdef NODE_FIPS_MODE
57-
READONLY_BOOLEAN_PROPERTY("fipsMode");
29+
READONLY_TRUE_PROPERTY(target, "fipsMode");
5830
// TODO(addaleax): Use options parser variable instead.
5931
if (per_process_opts->force_fips_crypto)
60-
READONLY_BOOLEAN_PROPERTY("fipsForced");
32+
READONLY_TRUE_PROPERTY(target, "fipsForced");
6133
#endif
6234

6335
#ifdef NODE_HAVE_I18N_SUPPORT
6436

65-
READONLY_BOOLEAN_PROPERTY("hasIntl");
37+
READONLY_TRUE_PROPERTY(target, "hasIntl");
6638

6739
#ifdef NODE_HAVE_SMALL_ICU
68-
READONLY_BOOLEAN_PROPERTY("hasSmallICU");
40+
READONLY_TRUE_PROPERTY(target, "hasSmallICU");
6941
#endif // NODE_HAVE_SMALL_ICU
7042

7143
#if NODE_USE_V8_PLATFORM
72-
READONLY_BOOLEAN_PROPERTY("hasTracing");
44+
READONLY_TRUE_PROPERTY(target, "hasTracing");
7345
#endif
7446

7547
#if !defined(NODE_WITHOUT_NODE_OPTIONS)
76-
READONLY_BOOLEAN_PROPERTY("hasNodeOptions");
48+
READONLY_TRUE_PROPERTY(target, "hasNodeOptions");
7749
#endif
7850

7951
// TODO(addaleax): This seems to be an unused, private API. Remove it?
@@ -83,35 +55,35 @@ static void Initialize(Local<Object> target,
8355
#endif // NODE_HAVE_I18N_SUPPORT
8456

8557
if (env->options()->preserve_symlinks)
86-
READONLY_BOOLEAN_PROPERTY("preserveSymlinks");
58+
READONLY_TRUE_PROPERTY(target, "preserveSymlinks");
8759
if (env->options()->preserve_symlinks_main)
88-
READONLY_BOOLEAN_PROPERTY("preserveSymlinksMain");
60+
READONLY_TRUE_PROPERTY(target, "preserveSymlinksMain");
8961

9062
if (env->options()->experimental_modules) {
91-
READONLY_BOOLEAN_PROPERTY("experimentalModules");
63+
READONLY_TRUE_PROPERTY(target, "experimentalModules");
9264
const std::string& userland_loader = env->options()->userland_loader;
9365
if (!userland_loader.empty()) {
9466
READONLY_STRING_PROPERTY(target, "userLoader", userland_loader);
9567
}
9668
}
9769

9870
if (env->options()->experimental_vm_modules)
99-
READONLY_BOOLEAN_PROPERTY("experimentalVMModules");
71+
READONLY_TRUE_PROPERTY(target, "experimentalVMModules");
10072

10173
if (env->options()->experimental_worker)
102-
READONLY_BOOLEAN_PROPERTY("experimentalWorker");
74+
READONLY_TRUE_PROPERTY(target, "experimentalWorker");
10375

10476
if (env->options()->experimental_repl_await)
105-
READONLY_BOOLEAN_PROPERTY("experimentalREPLAwait");
77+
READONLY_TRUE_PROPERTY(target, "experimentalREPLAwait");
10678

10779
if (env->options()->pending_deprecation)
108-
READONLY_BOOLEAN_PROPERTY("pendingDeprecation");
80+
READONLY_TRUE_PROPERTY(target, "pendingDeprecation");
10981

11082
if (env->options()->expose_internals)
111-
READONLY_BOOLEAN_PROPERTY("exposeInternals");
83+
READONLY_TRUE_PROPERTY(target, "exposeInternals");
11284

11385
if (env->abort_on_uncaught_exception())
114-
READONLY_BOOLEAN_PROPERTY("shouldAbortOnUncaughtException");
86+
READONLY_TRUE_PROPERTY(target, "shouldAbortOnUncaughtException");
11587

11688
READONLY_PROPERTY(target,
11789
"bits",

src/util.h

+25
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,31 @@ template <typename T, typename U>
479479
inline v8::MaybeLocal<v8::Value> ToV8Value(v8::Local<v8::Context> context,
480480
const std::unordered_map<T, U>& map);
481481

482+
// These macros expects a `Isolate* isolate` and a `Local<Context> context`
483+
// to be in the scope.
484+
#define READONLY_PROPERTY(obj, name, value) \
485+
do { \
486+
obj->DefineOwnProperty( \
487+
context, FIXED_ONE_BYTE_STRING(isolate, name), value, v8::ReadOnly) \
488+
.FromJust(); \
489+
} while (0)
490+
491+
#define READONLY_DONT_ENUM_PROPERTY(obj, name, var) \
492+
do { \
493+
obj->DefineOwnProperty( \
494+
context, \
495+
OneByteString(isolate, name), \
496+
var, \
497+
static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontEnum)) \
498+
.FromJust(); \
499+
} while (0)
500+
501+
#define READONLY_TRUE_PROPERTY(obj, name) \
502+
READONLY_PROPERTY(obj, name, True(isolate))
503+
504+
#define READONLY_STRING_PROPERTY(obj, name, str) \
505+
READONLY_PROPERTY(obj, name, ToV8Value(context, str).ToLocalChecked())
506+
482507
} // namespace node
483508

484509
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS

0 commit comments

Comments
 (0)