今回は、
  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-

  }