今回は、
inline PerIsolateOptions* get_per_isolate_options();
から見ていきます。
inline PerIsolateOptions* get_per_isolate_options();
※※※3
class PerIsolateOptions : public Options {
public:
std::shared_ptr<EnvironmentOptions> per_env { new EnvironmentOptions() };
bool track_heap_objects = false;
bool report_uncaught_exception = false;
bool report_on_signal = false;
bool experimental_shadow_realm = false;
std::string report_signal = "SIGUSR2";
inline EnvironmentOptions* get_per_env_options();
void CheckOptions(std::vector<std::string>* errors,
std::vector<std::string>* argv) override;
};
※※※3-
void CheckOptions(std::vector<std::string>* errors,
std::vector<std::string>* argv) override;
};
※※2-
※1-
if (result->args().size() < 2) {
fprintf(stderr,
"--build-snapshot must be used with an entry point script.\n" // --build-snapshotは、エントリポイントスクリプトとともに使用する必要があります。
"Usage: node --build-snapshot /path/to/entry.js\n"); // 使用法:node--build-snapshot/path/to/entry.js
return 9;
}
return GenerateAndWriteSnapshotData(&snapshot_data, result.get());
※1
int GenerateAndWriteSnapshotData(const SnapshotData** snapshot_data_ptr,
const InitializationResult* result) {
int exit_code = result->exit_code();
// nullptr indicates there's no snapshot data. nullptrは、スナップショットデータがないことを示します。
DCHECK_NULL(*snapshot_data_ptr);
// node:embedded_snapshot_main indicates that we are using the
// embedded snapshot and we are not supposed to clean it up.
// node:embedded_snapshot_mainは、埋め込みスナップショットを使用しており、クリーンアップする必要がないことを示します。
if (result->args()[1] == "node:embedded_snapshot_main") {
*snapshot_data_ptr = SnapshotBuilder::GetEmbeddedSnapshotData();
if (*snapshot_data_ptr == nullptr) {
// The Node.js binary is built without embedded snapshot Node.jsバイナリは、埋め込まれたスナップショットなしで構築される
fprintf(stderr,
"node:embedded_snapshot_main was specified as snapshot "
"entry point but Node.js was built without embedded "
"snapshot.\n");
// node:embedded_snapshot_mainがスナップショットエントリポイントとして指定されたが、Node.jsは埋め込まれたスナップショットなしで構築された。
exit_code = 1;
return exit_code;
}
} else {
// Otherwise, load and run the specified main script. それ以外の場合は、指定されたメインスクリプトをロードして実行します。
std::unique_ptr<SnapshotData> generated_data =
std::make_unique<SnapshotData>();
exit_code = node::SnapshotBuilder::Generate(
generated_data.get(), result->args(), result->exec_args());
if (exit_code == 0) {
*snapshot_data_ptr = generated_data.release();
} else {
return exit_code;
}
}
// Get the path to write the snapshot blob to. スナップショットBLOBを書き込むパスを取得します。
std::string snapshot_blob_path;
if (!per_process::cli_options->snapshot_blob.empty()) {
snapshot_blob_path = per_process::cli_options->snapshot_blob;
} else {
// Defaults to snapshot.blob in the current working directory. デフォルトでは、現在の作業ディレクトリのsnapshot.blobに設定されている。
snapshot_blob_path = std::string("snapshot.blob");
}
FILE* fp = fopen(snapshot_blob_path.c_str(), "wb");
if (fp != nullptr) {
(*snapshot_data_ptr)->ToBlob(fp);
fclose(fp);
} else {
fprintf(stderr,
"Cannot open %s for writing a snapshot.\n", // スナップショットを書き込むために%sを開けません。
snapshot_blob_path.c_str());
exit_code = 1;
}
return exit_code;
}
※1-
}