| // 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. | |
| #ifndef RUNTIME_BIN_DARTDEV_OPTIONS_H_ | |
| #define RUNTIME_BIN_DARTDEV_OPTIONS_H_ | |
| #include "bin/dartutils.h" | |
| #include "bin/options.h" | |
| #include "platform/globals.h" | |
| #include "platform/growable_array.h" | |
| #include "platform/hashmap.h" | |
| namespace dart { | |
| namespace bin { | |
| #if defined(DART_PRECOMPILED_RUNTIME) | |
| // A list of options taking string arguments. Organized as: | |
| // V(flag_name, field_name) | |
| // The value of the flag can then be accessed with Options::field_name(). | |
| #define STRING_OPTIONS_LIST(V) \ | |
| V(packages, packages_file) \ | |
| V(namespace, namespc) | |
| // As STRING_OPTIONS_LIST but for boolean valued options. The default value is | |
| // always false, and the presence of the flag switches the value to true. | |
| #define BOOL_OPTIONS_LIST(V) \ | |
| V(disable_exit, exit_disabled) \ | |
| V(version, version_option) \ | |
| V(suppress_core_dump, suppress_core_dump) | |
| // Boolean flags that have a short form. | |
| #define SHORT_BOOL_OPTIONS_LIST(V) \ | |
| V(h, help, help_option) \ | |
| V(v, verbose, verbose_option) | |
| // Callbacks passed to DEFINE_CB_OPTION(). | |
| #define CB_OPTIONS_LIST(V) \ | |
| V(ProcessEnvironmentOption) \ | |
| V(ProcessVMOptions) | |
| enum VerbosityLevel { | |
| kError, | |
| kWarning, | |
| kInfo, | |
| kAll, | |
| }; | |
| static const char* const kVerbosityLevelNames[] = { | |
| "error", "warning", "info", "all", nullptr, | |
| }; | |
| class Options { | |
| public: | |
| // Returns true if argument parsing succeeded. False otherwise. | |
| static bool ParseDartDevArguments(int argc, | |
| char** argv, | |
| CommandLineOptions* vm_options, | |
| CommandLineOptions* dart_vm_options, | |
| CommandLineOptions* dart_options, | |
| bool* skip_dartdev); | |
| #define STRING_OPTION_GETTER(flag, variable) \ | |
| static const char* variable() { \ | |
| return variable##_; \ | |
| } | |
| STRING_OPTIONS_LIST(STRING_OPTION_GETTER) | |
| #undef STRING_OPTION_GETTER | |
| #define BOOL_OPTION_GETTER(flag, variable) \ | |
| static bool variable() { \ | |
| return variable##_; \ | |
| } | |
| BOOL_OPTIONS_LIST(BOOL_OPTION_GETTER) | |
| #undef BOOL_OPTION_GETTER | |
| #define SHORT_BOOL_OPTION_GETTER(short_name, long_name, variable) \ | |
| static bool variable() { \ | |
| return variable##_; \ | |
| } | |
| SHORT_BOOL_OPTIONS_LIST(SHORT_BOOL_OPTION_GETTER) | |
| #undef SHORT_BOOL_OPTION_GETTER | |
| // Callbacks have to be public. | |
| #define CB_OPTIONS_DECL(callback) \ | |
| static bool callback(const char* arg, CommandLineOptions* vm_options); | |
| CB_OPTIONS_LIST(CB_OPTIONS_DECL) | |
| #undef CB_OPTIONS_DECL | |
| static dart::SimpleHashMap* environment() { return environment_; } | |
| static void PrintUsage(); | |
| static void PrintVersion(); | |
| static void Cleanup(); | |
| #if defined(DART_PRECOMPILED_RUNTIME) | |
| // Get the list of options in DART_VM_OPTIONS. | |
| static char** GetEnvArguments(const char* executable_name, int* argc); | |
| #endif // defined(DART_PRECOMPILED_RUNTIME) | |
| private: | |
| static void DestroyEnvironment(); | |
| #if defined(DART_PRECOMPILED_RUNTIME) | |
| static void DestroyEnvArgv(); | |
| #endif // defined(DART_PRECOMPILED_RUNTIME) | |
| #define STRING_OPTION_DECL(flag, variable) static const char* variable##_; | |
| STRING_OPTIONS_LIST(STRING_OPTION_DECL) | |
| #undef STRING_OPTION_DECL | |
| #define BOOL_OPTION_DECL(flag, variable) static bool variable##_; | |
| BOOL_OPTIONS_LIST(BOOL_OPTION_DECL) | |
| #undef BOOL_OPTION_DECL | |
| #define SHORT_BOOL_OPTION_DECL(short_name, long_name, variable) \ | |
| static bool variable##_; | |
| SHORT_BOOL_OPTIONS_LIST(SHORT_BOOL_OPTION_DECL) | |
| #undef SHORT_BOOL_OPTION_DECL | |
| static bool resident_; | |
| static const char* resident_compiler_info_file_path_; | |
| static dart::SimpleHashMap* environment_; | |
| static char** env_argv_; | |
| static int env_argc_; | |
| #define OPTION_FRIEND(flag, variable) friend class OptionProcessor_##flag; | |
| STRING_OPTIONS_LIST(OPTION_FRIEND) | |
| BOOL_OPTIONS_LIST(OPTION_FRIEND) | |
| #undef OPTION_FRIEND | |
| #define SHORT_BOOL_OPTION_FRIEND(short_name, long_name, variable) \ | |
| friend class OptionProcessor_##long_name; | |
| SHORT_BOOL_OPTIONS_LIST(SHORT_BOOL_OPTION_FRIEND) | |
| #undef SHORT_BOOL_OPTION_FRIEND | |
| DISALLOW_ALLOCATION(); | |
| DISALLOW_IMPLICIT_CONSTRUCTORS(Options); | |
| }; | |
| #endif // defined(DART_PRECOMPILED_RUNTIME) | |
| } // namespace bin | |
| } // namespace dart | |
| #endif // RUNTIME_BIN_DARTDEV_OPTIONS_H_ |