7#if !defined(DART_PRECOMPILED_RUNTIME)
22#define CHECK_RESULT(result) \
23 if (Dart_IsError(result)) { \
24 ProcessError(Dart_GetError(result), kErrorExitCode); \
25 if (send_port_id != ILLEGAL_PORT) { \
26 Dart_CloseNativePort(send_port_id); \
29 Dart_ShutdownIsolate(); \
36DartDevIsolate::DartDevRunner DartDevIsolate::runner_ =
37 DartDevIsolate::DartDevRunner();
38bool DartDevIsolate::should_run_dart_dev_ =
false;
39bool DartDevIsolate::print_usage_error_ =
false;
40Monitor* DartDevIsolate::DartDevRunner::monitor_ =
new Monitor();
43char** DartDevIsolate::DartDevRunner::script_ =
nullptr;
44char** DartDevIsolate::DartDevRunner::package_config_override_ =
nullptr;
45std::unique_ptr<
char*[], void (*)(
char*[])>
46 DartDevIsolate::DartDevRunner::argv_ =
47 std::unique_ptr<
char*[],
void (*)(
char**)>(
nullptr, [](
char**) {});
48intptr_t DartDevIsolate::DartDevRunner::argc_ = 0;
59 (strcmp(script_uri,
"analyze") == 0) ||
60 (strcmp(script_uri,
"compilation-server") == 0) ||
61 (strcmp(script_uri,
"build") == 0) ||
62 (strcmp(script_uri,
"compile") == 0) ||
63 (strcmp(script_uri,
"create") == 0) ||
64 (strcmp(script_uri,
"development-service") == 0) ||
65 (strcmp(script_uri,
"devtools") == 0) ||
66 (strcmp(script_uri,
"doc") == 0) || (strcmp(script_uri,
"fix") == 0) ||
67 (strcmp(script_uri,
"format") == 0) ||
68 (strcmp(script_uri,
"info") == 0) || (strcmp(script_uri,
"pub") == 0) ||
69 (strcmp(script_uri,
"run") == 0) || (strcmp(script_uri,
"test") == 0) ||
70 (strcmp(script_uri,
"info") == 0) ||
71 (strcmp(script_uri,
"language-server") == 0) ||
72 (strcmp(script_uri,
"tooling-daemon") == 0) ||
74 (strncmp(script_uri,
"http://", 7) != 0) &&
75 (strncmp(script_uri,
"https://", 8) != 0) &&
76 (strncmp(script_uri,
"file://", 7) != 0) &&
77 (strncmp(script_uri,
"package:", 8) != 0) &&
78 (strncmp(script_uri,
"google3://", 10) != 0)));
82 const char* filename) {
96 snapshot_path =
Utils::SCreate(
"%s%s", dir_prefix.get(), filename);
105 return TryResolveArtifactPath(
"dartdev.dart.snapshot");
110 char** packages_file,
113 create_isolate_ = create_isolate;
114 dart_options_ = dart_options;
115 package_config_override_ = packages_file;
120 if (print_usage_error_) {
121 dart_options_->
Reset();
127 reinterpret_cast<uword>(
this));
129 FATAL(
"Failed to start DartDev thread: %d",
result);
136 dart_options_->
Reset();
137 dart_options_->
AddArguments(
const_cast<const char**
>(argv_.get()), argc_);
145void DartDevIsolate::DartDevRunner::DartDevResultCallback(
164 if (*script_ !=
nullptr) {
167 if (*package_config_override_ !=
nullptr) {
168 free(*package_config_override_);
169 *package_config_override_ =
nullptr;
174 *package_config_override_ =
Utils::StrDup(item2->value.as_string);
179 argc_ =
args->value.as_array.length;
182 auto deleter = [](
char**
args) {
183 for (intptr_t i = 0; i < argc_; ++i) {
189 std::unique_ptr<char*[], void (*)(char**)>(
new char*[argc_], deleter);
190 for (intptr_t i = 0; i < argc_; ++i) {
213 DartDevRunner::monitor_->Notify();
221void DartDevIsolate::DartDevRunner::RunCallback(
uword args) {
222 MonitorLocker locker_(DartDevRunner::monitor_);
223 DartDevRunner* runner =
reinterpret_cast<DartDevRunner*
>(
args);
228 flags.enable_asserts =
false;
229 flags.use_field_guards =
true;
230 flags.use_osr =
true;
231 flags.is_system_isolate =
true;
232 flags.branch_coverage =
false;
234 char*
error =
nullptr;
237 runner->packages_file_, &
flags,
nullptr,
238 const_cast<char**
>(&
error));
240 if (dartdev_isolate ==
nullptr) {
257 ProcessError(
"Unable to find 'main' in root library 'dartdev'",
271 const intptr_t kNumIsolateArgs = 4;
273 isolate_args[0] = main_closure;
274 isolate_args[1] = runner->dart_options_->CreateRuntimeOptions();
275 isolate_args[2] = send_port;
282 kNumIsolateArgs, isolate_args);
292void DartDevIsolate::DartDevRunner::ProcessError(
const char* msg,
297 DartDevRunner::monitor_->Notify();
302 char** packages_file,
305 runner_.
Run(create_isolate, packages_file, script, dart_options);
static void PrintErr(const char *format,...) PRINTF_ATTRIBUTE(1
static char * StrDup(const char *s)
static CStringUniquePtr CreateCStringUniquePtr(char *str)
std::unique_ptr< char, decltype(std::free) * > CStringUniquePtr
static char * SCreate(const char *format,...) PRINTF_ATTRIBUTE(1
void AddArguments(const char **argv, int argc)
void AddArgument(const char *argument)
void Run(Dart_IsolateGroupCreateCallback create_isolate, char **package_config_override_, char **script, CommandLineOptions *dart_options)
DartDev_Result result() const
static Utils::CStringUniquePtr TryResolveDartDevSnapshotPath()
static DartDev_Result RunDartDev(Dart_IsolateGroupCreateCallback create_isolate, char **packages_file, char **script, CommandLineOptions *dart_options)
static bool ShouldParseCommand(const char *script_uri)
static Utils::CStringUniquePtr GetDirectoryPrefixFromExeName()
static bool Exists(Namespace *namespc, const char *path)
static bool ExistsUri(Namespace *namespc, const char *uri)
static constexpr int64_t kNoTimeout
WaitResult WaitMicros(int64_t micros)
static void SetGlobalExitCode(int exit_code)
static int Start(const char *name, ThreadStartFunction function, uword parameters)
Dart_Isolate(* Dart_IsolateGroupCreateCallback)(const char *script_uri, const char *main, const char *package_root, const char *package_config, Dart_IsolateFlags *flags, void *isolate_data, char **error)
struct _Dart_Handle * Dart_Handle
struct _Dart_Isolate * Dart_Isolate
#define CHECK_RESULT(result)
#define DART_DEV_ISOLATE_NAME
FlutterSemanticsFlag flags
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
const uint8_t uint32_t uint32_t GError ** error
static Dart_CObject * GetArrayItem(Dart_CObject *message, intptr_t index)
constexpr int kErrorExitCode
DART_EXPORT void Dart_EnterScope()
DART_EXPORT void Dart_EnterIsolate(Dart_Isolate isolate)
DART_EXPORT Dart_Handle Dart_Invoke(Dart_Handle target, Dart_Handle name, int number_of_arguments, Dart_Handle *arguments)
DART_EXPORT Dart_Handle Dart_True()
DART_EXPORT Dart_Handle Dart_RootLibrary()
DART_EXPORT void Dart_IsolateFlagsInitialize(Dart_IsolateFlags *flags)
DART_EXPORT Dart_Handle Dart_GetField(Dart_Handle container, Dart_Handle name)
DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id)
DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id)
DART_EXPORT Dart_Handle Dart_RunLoop()
DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url)
DART_EXPORT Dart_Port Dart_NewNativePort(const char *name, Dart_NativeMessageHandler handler, bool handle_concurrently)
DART_EXPORT bool Dart_IsClosure(Dart_Handle object)
DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char *str)
union _Dart_CObject::@86 value
struct _Dart_CObject::@86::@89 as_array
struct _Dart_CObject ** values