From abbb0f76b07417f13f712f54d5afddb72e3b9931 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Thu, 29 Oct 2015 18:55:58 +0000 Subject: Refactor code so that JIT can parse compiler options. Currently only the CompilerOptions class. We should also do it for the CompilerDriver options. This will fix the flakiness seen on jdwp testing, as the debuggable flag was not passed to the compiler. Change-Id: I4218dd5928c9f4fe2d6191ab11e5598e7cf84bcf --- runtime/utils.h | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'runtime/utils.h') diff --git a/runtime/utils.h b/runtime/utils.h index bd52b686fd..5cca2964ce 100644 --- a/runtime/utils.h +++ b/runtime/utils.h @@ -26,8 +26,10 @@ #include #include "arch/instruction_set.h" +#include "base/casts.h" #include "base/logging.h" #include "base/mutex.h" +#include "base/stringpiece.h" #include "globals.h" #include "primitive.h" @@ -35,7 +37,6 @@ class BacktraceMap; namespace art { -class ArtCode; class ArtField; class ArtMethod; class DexFile; @@ -321,6 +322,34 @@ static inline const void* EntryPointToCodePointer(const void* entry_point) { return reinterpret_cast(code); } +using UsageFn = void (*)(const char*, ...); + +template +static void ParseUintOption(const StringPiece& option, + const std::string& option_name, + T* out, + UsageFn Usage, + bool is_long_option = true) { + std::string option_prefix = option_name + (is_long_option ? "=" : ""); + DCHECK(option.starts_with(option_prefix)); + const char* value_string = option.substr(option_prefix.size()).data(); + int64_t parsed_integer_value; + if (!ParseInt(value_string, &parsed_integer_value)) { + Usage("Failed to parse %s '%s' as an integer", option_name.c_str(), value_string); + } + if (parsed_integer_value < 0) { + Usage("%s passed a negative value %d", option_name.c_str(), parsed_integer_value); + } + *out = dchecked_integral_cast(parsed_integer_value); +} + +void ParseDouble(const std::string& option, + char after_char, + double min, + double max, + double* parsed_value, + UsageFn Usage); + } // namespace art #endif // ART_RUNTIME_UTILS_H_ -- cgit v1.2.3-59-g8ed1b