Merge "Simplify the return value of CompareCommonRecordFields" am: 16e50ed2a6
Original change: https://android-review.googlesource.com/c/platform/development/+/2420999 Change-Id: I418617fdebaafbb626d50c08435b0ad99bee90e2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -366,28 +366,19 @@ static bool CompareSizeAndAlignment(const TypeIR *old_type,
|
|||||||
old_type->GetAlignment() == new_type->GetAlignment();
|
old_type->GetAlignment() == new_type->GetAlignment();
|
||||||
}
|
}
|
||||||
|
|
||||||
DiffStatusPair<std::unique_ptr<RecordFieldDiffIR>>
|
DiffStatus AbiDiffHelper::CompareCommonRecordFields(
|
||||||
AbiDiffHelper::CompareCommonRecordFields(
|
const RecordFieldIR *old_field, const RecordFieldIR *new_field,
|
||||||
const RecordFieldIR *old_field,
|
std::deque<std::string> *type_queue, DiffMessageIR::DiffKind diff_kind) {
|
||||||
const RecordFieldIR *new_field,
|
DiffStatus field_diff_status = CompareAndDumpTypeDiff(
|
||||||
std::deque<std::string> *type_queue,
|
old_field->GetReferencedType(), new_field->GetReferencedType(),
|
||||||
DiffMessageIR::DiffKind diff_kind) {
|
type_queue, diff_kind);
|
||||||
|
|
||||||
DiffStatus field_diff_status =
|
|
||||||
CompareAndDumpTypeDiff(old_field->GetReferencedType(),
|
|
||||||
new_field->GetReferencedType(),
|
|
||||||
type_queue, diff_kind);
|
|
||||||
|
|
||||||
if (old_field->GetOffset() != new_field->GetOffset() ||
|
if (old_field->GetOffset() != new_field->GetOffset() ||
|
||||||
// TODO: Should this be an inquality check instead ? Some compilers can
|
// TODO: Should this be an inquality check instead ? Some compilers can
|
||||||
// make signatures dependant on absolute values of access specifiers.
|
// make signatures dependant on absolute values of access specifiers.
|
||||||
IsAccessDowngraded(old_field->GetAccess(), new_field->GetAccess()) ||
|
IsAccessDowngraded(old_field->GetAccess(), new_field->GetAccess())) {
|
||||||
field_diff_status.IsDirectDiff()) {
|
field_diff_status.CombineWith(DiffStatus::kDirectDiff);
|
||||||
return std::make_pair(
|
|
||||||
DiffStatus::kDirectDiff,
|
|
||||||
std::make_unique<RecordFieldDiffIR>(old_field, new_field));
|
|
||||||
}
|
}
|
||||||
return std::make_pair(field_diff_status, nullptr);
|
return field_diff_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This function filters out the pairs of old and new fields that meet the
|
// This function filters out the pairs of old and new fields that meet the
|
||||||
@@ -435,9 +426,8 @@ void AbiDiffHelper::FilterOutRenamedRecordFields(
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto comparison_result =
|
if (CompareCommonRecordFields(*old_it, *new_it, type_queue, diff_kind)
|
||||||
CompareCommonRecordFields(*old_it, *new_it, type_queue, diff_kind);
|
.IsDirectDiff()) {
|
||||||
if (comparison_result.second != nullptr) {
|
|
||||||
out_old_fields.emplace_back(*old_it);
|
out_old_fields.emplace_back(*old_it);
|
||||||
out_new_fields.emplace_back(*new_it);
|
out_new_fields.emplace_back(*new_it);
|
||||||
}
|
}
|
||||||
@@ -480,14 +470,14 @@ RecordFieldDiffResult AbiDiffHelper::CompareRecordFields(
|
|||||||
utils::FindCommonElements(old_fields_map, new_fields_map);
|
utils::FindCommonElements(old_fields_map, new_fields_map);
|
||||||
bool common_field_diff_exists = false;
|
bool common_field_diff_exists = false;
|
||||||
for (auto &&common_fields : cf) {
|
for (auto &&common_fields : cf) {
|
||||||
auto diffed_field_ptr = CompareCommonRecordFields(
|
DiffStatus field_diff_status = CompareCommonRecordFields(
|
||||||
common_fields.first, common_fields.second, type_queue, diff_kind);
|
common_fields.first, common_fields.second, type_queue, diff_kind);
|
||||||
if (diffed_field_ptr.first.HasDiff()) {
|
if (field_diff_status.HasDiff()) {
|
||||||
common_field_diff_exists = true;
|
common_field_diff_exists = true;
|
||||||
}
|
}
|
||||||
if (diffed_field_ptr.second != nullptr) {
|
if (field_diff_status.IsDirectDiff()) {
|
||||||
result.diffed_fields.emplace_back(
|
result.diffed_fields.emplace_back(common_fields.first,
|
||||||
std::move(*(diffed_field_ptr.second.release())));
|
common_fields.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Determine DiffStatus.
|
// Determine DiffStatus.
|
||||||
|
|||||||
@@ -63,9 +63,6 @@ class DiffStatus {
|
|||||||
Status status_;
|
Status status_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
using DiffStatusPair = std::pair<DiffStatus, T>;
|
|
||||||
|
|
||||||
struct RecordFieldDiffResult {
|
struct RecordFieldDiffResult {
|
||||||
DiffStatus status = DiffStatus::kNoDiff;
|
DiffStatus status = DiffStatus::kNoDiff;
|
||||||
std::vector<RecordFieldDiffIR> diffed_fields;
|
std::vector<RecordFieldDiffIR> diffed_fields;
|
||||||
@@ -181,12 +178,10 @@ class AbiDiffHelper {
|
|||||||
FixupDiffedFieldTypeIds(
|
FixupDiffedFieldTypeIds(
|
||||||
const std::vector<RecordFieldDiffIR> &field_diffs);
|
const std::vector<RecordFieldDiffIR> &field_diffs);
|
||||||
|
|
||||||
DiffStatusPair<std::unique_ptr<RecordFieldDiffIR>>
|
DiffStatus CompareCommonRecordFields(const RecordFieldIR *old_field,
|
||||||
CompareCommonRecordFields(
|
const RecordFieldIR *new_field,
|
||||||
const RecordFieldIR *old_field,
|
std::deque<std::string> *type_queue,
|
||||||
const RecordFieldIR *new_field,
|
IRDiffDumper::DiffKind diff_kind);
|
||||||
std::deque<std::string> *type_queue,
|
|
||||||
IRDiffDumper::DiffKind diff_kind);
|
|
||||||
|
|
||||||
void FilterOutRenamedRecordFields(
|
void FilterOutRenamedRecordFields(
|
||||||
std::deque<std::string> *type_queue, DiffMessageIR::DiffKind diff_kind,
|
std::deque<std::string> *type_queue, DiffMessageIR::DiffKind diff_kind,
|
||||||
|
|||||||
Reference in New Issue
Block a user