ART: Encapsulate init-optimization fields
Put fields that belong together into a struct.
Test: m test-art-host
Change-Id: Ie0a4dfb2201b7603c6cf78e361fe0b264ab02e06
diff --git a/libdexfile/dex/dex_file_verifier.cc b/libdexfile/dex/dex_file_verifier.cc
index c069307..580d0b7 100644
--- a/libdexfile/dex/dex_file_verifier.cc
+++ b/libdexfile/dex/dex_file_verifier.cc
@@ -710,11 +710,11 @@
if (!CheckIndex(string_idx, header_->string_ids_size_, "method flags verification")) {
return false;
}
- if (UNLIKELY(string_idx < angle_bracket_end_index_) &&
- string_idx >= angle_bracket_start_index_) {
- if (string_idx == angle_clinit_angle_index_) {
+ if (UNLIKELY(string_idx < init_indices_.angle_bracket_end_index) &&
+ string_idx >= init_indices_.angle_bracket_start_index) {
+ if (string_idx == init_indices_.angle_clinit_angle_index) {
constructor_flags_by_name = kAccStatic | kAccConstructor;
- } else if (string_idx == angle_init_angle_index_) {
+ } else if (string_idx == init_indices_.angle_init_angle_index) {
constructor_flags_by_name = kAccConstructor;
} else {
ErrorStringPrintf("Bad method name for method index %u", idx);
@@ -3291,14 +3291,14 @@
// '=' follows '<'
static_assert('<' + 1 == '=', "Unexpected character relation");
const auto angle_end = std::lower_bound(first, last, "=", compare);
- angle_bracket_end_index_ = angle_end - first;
+ init_indices_.angle_bracket_end_index = angle_end - first;
const auto angle_start = std::lower_bound(first, angle_end, "<", compare);
- angle_bracket_start_index_ = angle_start - first;
+ init_indices_.angle_bracket_start_index = angle_start - first;
if (angle_start == angle_end) {
// No strings starting with '<'.
- angle_init_angle_index_ = std::numeric_limits<size_t>::max();
- angle_clinit_angle_index_ = std::numeric_limits<size_t>::max();
+ init_indices_.angle_init_angle_index = std::numeric_limits<size_t>::max();
+ init_indices_.angle_clinit_angle_index = std::numeric_limits<size_t>::max();
return;
}
@@ -3306,18 +3306,18 @@
constexpr const char* kClinit = "<clinit>";
const auto it = std::lower_bound(angle_start, angle_end, kClinit, compare);
if (it != angle_end && strcmp(get_string(*it), kClinit) == 0) {
- angle_clinit_angle_index_ = it - first;
+ init_indices_.angle_clinit_angle_index = it - first;
} else {
- angle_clinit_angle_index_ = std::numeric_limits<size_t>::max();
+ init_indices_.angle_clinit_angle_index = std::numeric_limits<size_t>::max();
}
}
{
constexpr const char* kInit = "<init>";
const auto it = std::lower_bound(angle_start, angle_end, kInit, compare);
if (it != angle_end && strcmp(get_string(*it), kInit) == 0) {
- angle_init_angle_index_ = it - first;
+ init_indices_.angle_init_angle_index = it - first;
} else {
- angle_init_angle_index_ = std::numeric_limits<size_t>::max();
+ init_indices_.angle_init_angle_index = std::numeric_limits<size_t>::max();
}
}
}
diff --git a/libdexfile/dex/dex_file_verifier.h b/libdexfile/dex/dex_file_verifier.h
index 3e1583e..fe3aa84 100644
--- a/libdexfile/dex/dex_file_verifier.h
+++ b/libdexfile/dex/dex_file_verifier.h
@@ -55,10 +55,10 @@
header_(&dex_file->GetHeader()),
ptr_(nullptr),
previous_item_(nullptr),
- angle_bracket_start_index_(std::numeric_limits<size_t>::max()),
- angle_bracket_end_index_(std::numeric_limits<size_t>::max()),
- angle_init_angle_index_(std::numeric_limits<size_t>::max()),
- angle_clinit_angle_index_(std::numeric_limits<size_t>::max()) {
+ init_indices_{std::numeric_limits<size_t>::max(),
+ std::numeric_limits<size_t>::max(),
+ std::numeric_limits<size_t>::max(),
+ std::numeric_limits<size_t>::max()} {
}
bool Verify();
@@ -259,12 +259,14 @@
// Strings starting with '<' are in the range
// [angle_bracket_start_index_,angle_bracket_end_index_).
// angle_init_angle_index_ and angle_clinit_angle_index_ denote the indices of "<init>" and
- // angle_clinit_angle_index_, respectively. If any value is not found, the corresponding
- // index will be larger than any valid string index for this dex file.
- size_t angle_bracket_start_index_;
- size_t angle_bracket_end_index_;
- size_t angle_init_angle_index_;
- size_t angle_clinit_angle_index_;
+ // "<clinit>", respectively. If any value is not found, the corresponding index will be larger
+ // than any valid string index for this dex file.
+ struct {
+ size_t angle_bracket_start_index;
+ size_t angle_bracket_end_index;
+ size_t angle_init_angle_index;
+ size_t angle_clinit_angle_index;
+ } init_indices_;
// A bitvector for verified type descriptors. Each bit corresponds to a type index. A set
// bit denotes that the descriptor has been verified wrt/ IsValidDescriptor.