ab44b20ab8
Add the fixes that were done after original CL landed.
This reverts commit 97bc401163.
TEST=ci
Change-Id: I26373aecc325e4c0c379c92e779aa301e3a58c5a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441700
Reviewed-by: Brian Quinlan <bquinlan@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
141 lines
4.8 KiB
C++
141 lines
4.8 KiB
C++
// 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(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 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_
|