Skip to content

Commit d30287f

Browse files
legendecasrichardlau
authored andcommitted
src: iterate metadata version entries with std::array
PR-URL: #57866 Refs: nodejs/diagnostics#654 Refs: https://github.com/google/perfetto/blob/9ddf987d48cdfd9129987a3af1e85052c377756f/include/perfetto/tracing/traced_value.h#L46 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Joyee Cheung <[email protected]>
1 parent b2bf620 commit d30287f

File tree

5 files changed

+37
-45
lines changed

5 files changed

+37
-45
lines changed

src/node_metadata.cc

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,28 @@ Metadata::Versions::Versions() {
161161
nbytes = NBYTES_VERSION;
162162
}
163163

164+
std::array<std::pair<std::string_view, std::string_view>,
165+
NODE_VERSIONS_KEY_COUNT>
166+
Metadata::Versions::pairs() const {
167+
std::array<std::pair<std::string_view, std::string_view>,
168+
NODE_VERSIONS_KEY_COUNT>
169+
versions_array;
170+
auto slot = versions_array.begin();
171+
172+
#define V(key) \
173+
do { \
174+
*slot++ = std::pair<std::string_view, std::string_view>( \
175+
#key, per_process::metadata.versions.key); \
176+
} while (0);
177+
NODE_VERSIONS_KEYS(V)
178+
#undef V
179+
180+
std::ranges::sort(versions_array,
181+
[](auto& a, auto& b) { return a.first < b.first; });
182+
183+
return versions_array;
184+
}
185+
164186
Metadata::Release::Release() : name(NODE_RELEASE) {
165187
#if NODE_VERSION_IS_LTS
166188
lts = NODE_VERSION_LTS_CODENAME;

src/node_metadata.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
55

6+
#include <array>
67
#include <string>
8+
#include <utility>
79
#include "node_version.h"
810

911
#if HAVE_OPENSSL
@@ -98,6 +100,10 @@ namespace node {
98100
NODE_VERSIONS_KEY_QUIC(V) \
99101
NODE_VERSIONS_KEY_SQLITE(V)
100102

103+
#define V(key) +1
104+
constexpr int NODE_VERSIONS_KEY_COUNT = NODE_VERSIONS_KEYS(V);
105+
#undef V
106+
101107
class Metadata {
102108
public:
103109
Metadata();
@@ -118,6 +124,10 @@ class Metadata {
118124
#define V(key) std::string key;
119125
NODE_VERSIONS_KEYS(V)
120126
#undef V
127+
128+
std::array<std::pair<std::string_view, std::string_view>,
129+
NODE_VERSIONS_KEY_COUNT>
130+
pairs() const;
121131
};
122132

123133
struct Release {

src/node_process_object.cc

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -85,25 +85,7 @@ static void SetVersions(Isolate* isolate, Local<Object> versions) {
8585
READONLY_STRING_PROPERTY(
8686
versions, "node", per_process::metadata.versions.node);
8787

88-
#define V(key) +1
89-
std::pair<std::string_view, std::string_view>
90-
versions_array[NODE_VERSIONS_KEYS(V)];
91-
#undef V
92-
auto* slot = &versions_array[0];
93-
94-
#define V(key) \
95-
do { \
96-
*slot++ = std::pair<std::string_view, std::string_view>( \
97-
#key, per_process::metadata.versions.key); \
98-
} while (0);
99-
NODE_VERSIONS_KEYS(V)
100-
#undef V
101-
102-
std::sort(&versions_array[0],
103-
&versions_array[arraysize(versions_array)],
104-
[](auto& a, auto& b) { return a.first < b.first; });
105-
106-
for (const auto& version : versions_array) {
88+
for (const auto& version : per_process::metadata.versions.pairs()) {
10789
versions
10890
->DefineOwnProperty(context,
10991
OneByteString(isolate, version.first),

src/node_report.cc

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -792,25 +792,7 @@ static void PrintComponentVersions(JSONWriter* writer) {
792792

793793
writer->json_objectstart("componentVersions");
794794

795-
#define V(key) +1
796-
std::pair<std::string_view, std::string_view>
797-
versions_array[NODE_VERSIONS_KEYS(V)];
798-
#undef V
799-
auto* slot = &versions_array[0];
800-
801-
#define V(key) \
802-
do { \
803-
*slot++ = std::pair<std::string_view, std::string_view>( \
804-
#key, per_process::metadata.versions.key); \
805-
} while (0);
806-
NODE_VERSIONS_KEYS(V)
807-
#undef V
808-
809-
std::sort(&versions_array[0],
810-
&versions_array[arraysize(versions_array)],
811-
[](auto& a, auto& b) { return a.first < b.first; });
812-
813-
for (const auto& version : versions_array) {
795+
for (const auto& version : per_process::metadata.versions.pairs()) {
814796
writer->json_keyvalue(version.first, version.second);
815797
}
816798

src/tracing/traced_value.cc

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,9 @@ std::unique_ptr<v8::ConvertableToTraceFormat> AsyncWrapArgs::Cast() const {
239239
std::unique_ptr<v8::ConvertableToTraceFormat> ProcessMeta::Cast() const {
240240
auto trace_process = tracing::TracedValue::Create();
241241
trace_process->BeginDictionary("versions");
242-
243-
#define V(key) \
244-
trace_process->SetString(#key, per_process::metadata.versions.key.c_str());
245-
246-
NODE_VERSIONS_KEYS(V)
247-
#undef V
248-
242+
for (const auto& version : per_process::metadata.versions.pairs()) {
243+
trace_process->SetString(version.first.data(), version.second.data());
244+
}
249245
trace_process->EndDictionary();
250246

251247
trace_process->SetString("arch", per_process::metadata.arch.c_str());

0 commit comments

Comments
 (0)