// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. #include #include "helpers.h" #include "include/dart_api.h" #include "include/dart_engine.h" Dart_Handle ToDartStringList(const std::vector& values) { Dart_Handle core_library = CheckError(Dart_LookupLibrary(Dart_NewStringFromCString("dart:core"))); Dart_Handle string_type = CheckError(Dart_GetNonNullableType( core_library, Dart_NewStringFromCString("String"), 0, nullptr)); Dart_Handle filler = Dart_NewStringFromCString(""); Dart_Handle result = CheckError(Dart_NewListOfTypeFilled(string_type, filler, values.size())); for (size_t i = 0; i < values.size(); i++) { Dart_Handle element = Dart_NewStringFromCString(values[i].c_str()); CheckError(Dart_ListSetAt(result, i, element)); } return result; } int main(int argc, char** argv) { if (argc == 1) { std::cerr << "Must specify snapshot path" << std::endl; std::exit(1); } char* error = nullptr; DartEngine_SnapshotData snapshot_data = AutoSnapshotFromFile(argv[1], &error); CheckError(error, "reading snapshot"); Dart_Isolate isolate = DartEngine_CreateIsolate(snapshot_data, &error); CheckError(error, "starting isolate"); DartEngine_AcquireIsolate(isolate); Dart_EnterScope(); std::initializer_list main_args{ToDartStringList({"world"})}; CheckError(Dart_Invoke(Dart_RootLibrary(), Dart_NewStringFromCString("main"), 1, const_cast(main_args.begin())), "calling main"); Dart_ExitScope(); DartEngine_ReleaseIsolate(); DartEngine_Shutdown(); }