7
7
#include < AK/Concepts.h>
8
8
#include < AK/Function.h>
9
9
#include < AK/QuickSort.h>
10
+ #include < AK/Try.h>
10
11
#include < LibEDID/EDID.h>
11
12
12
13
#ifndef KERNEL
@@ -185,16 +186,14 @@ T Parser::read_be(T const* field) const
185
186
ErrorOr<Parser> Parser::from_bytes (ReadonlyBytes bytes)
186
187
{
187
188
Parser edid (bytes);
188
- if (auto parse_result = edid.parse (); parse_result.is_error ())
189
- return parse_result.error ();
189
+ TRY (edid.parse ());
190
190
return edid;
191
191
}
192
192
193
193
ErrorOr<Parser> Parser::from_bytes (ByteBuffer&& bytes)
194
194
{
195
195
Parser edid (move (bytes));
196
- if (auto parse_result = edid.parse (); parse_result.is_error ())
197
- return parse_result.error ();
196
+ TRY (edid.parse ());
198
197
return edid;
199
198
}
200
199
@@ -683,7 +682,7 @@ ErrorOr<IterationDecision> Parser::for_each_established_timing(Function<Iteratio
683
682
}
684
683
685
684
auto callback_decision = IterationDecision::Continue;
686
- auto result = for_each_display_descriptor ([&](u8 descriptor_tag, auto & display_descriptor) {
685
+ TRY ( for_each_display_descriptor ([&](u8 descriptor_tag, auto & display_descriptor) {
687
686
if (descriptor_tag != (u8 )Definitions::DisplayDescriptorTag::EstablishedTimings3)
688
687
return IterationDecision::Continue;
689
688
@@ -758,9 +757,7 @@ ErrorOr<IterationDecision> Parser::for_each_established_timing(Function<Iteratio
758
757
byte_index++;
759
758
}
760
759
return IterationDecision::Break; // Only process one descriptor
761
- });
762
- if (result.is_error ())
763
- return result.error ();
760
+ }));
764
761
return callback_decision;
765
762
}
766
763
@@ -898,7 +895,7 @@ ErrorOr<IterationDecision> Parser::for_each_detailed_timing(Function<IterationDe
898
895
}
899
896
900
897
Optional<Error> extension_error;
901
- auto result = for_each_extension_block ([&](u8 block_id, u8 tag, u8 , ReadonlyBytes bytes) {
898
+ auto result = TRY ( for_each_extension_block ([&](u8 block_id, u8 tag, u8 , ReadonlyBytes bytes) {
902
899
if (tag != (u8 )Definitions::ExtensionBlockTag::CEA_861)
903
900
return IterationDecision::Continue;
904
901
@@ -913,11 +910,9 @@ ErrorOr<IterationDecision> Parser::for_each_detailed_timing(Function<IterationDe
913
910
}
914
911
915
912
return result.value ();
916
- });
917
- if (!result.is_error ()) {
918
- if (extension_error.has_value ())
919
- return extension_error.value ();
920
- }
913
+ }));
914
+ if (extension_error.has_value ())
915
+ return extension_error.value ();
921
916
return result;
922
917
}
923
918
@@ -978,7 +973,7 @@ ErrorOr<IterationDecision> Parser::for_each_display_descriptor(Function<Iteratio
978
973
}
979
974
980
975
Optional<Error> extension_error;
981
- auto result = for_each_extension_block ([&](u8 , u8 tag, u8 , ReadonlyBytes bytes) {
976
+ auto result = TRY ( for_each_extension_block ([&](u8 , u8 tag, u8 , ReadonlyBytes bytes) {
982
977
if (tag != (u8 )Definitions::ExtensionBlockTag::CEA_861)
983
978
return IterationDecision::Continue;
984
979
@@ -993,11 +988,9 @@ ErrorOr<IterationDecision> Parser::for_each_display_descriptor(Function<Iteratio
993
988
}
994
989
995
990
return result.value ();
996
- });
997
- if (!result.is_error ()) {
998
- if (extension_error.has_value ())
999
- return extension_error.value ();
1000
- }
991
+ }));
992
+ if (extension_error.has_value ())
993
+ return extension_error.value ();
1001
994
return result;
1002
995
}
1003
996
@@ -1075,38 +1068,30 @@ auto Parser::supported_resolutions() const -> ErrorOr<Vector<SupportedResolution
1075
1068
}
1076
1069
};
1077
1070
1078
- auto result = for_each_established_timing ([&](auto & established_timing) {
1071
+ TRY ( for_each_established_timing ([&](auto & established_timing) {
1079
1072
if (established_timing.source () != EstablishedTiming::Source::Manufacturer)
1080
1073
add_resolution (established_timing.width (), established_timing.height (), established_timing.refresh_rate ());
1081
1074
return IterationDecision::Continue;
1082
- });
1083
- if (result.is_error ())
1084
- return result.error ();
1075
+ }));
1085
1076
1086
- result = for_each_standard_timing ([&](auto & standard_timing) {
1077
+ TRY ( for_each_standard_timing ([&](auto & standard_timing) {
1087
1078
add_resolution (standard_timing.width (), standard_timing.height (), standard_timing.refresh_rate ());
1088
1079
return IterationDecision::Continue;
1089
- });
1090
- if (result.is_error ())
1091
- return result.error ();
1080
+ }));
1092
1081
1093
1082
size_t detailed_timing_index = 0 ;
1094
- result = for_each_detailed_timing ([&](auto & detailed_timing, auto ) {
1083
+ TRY ( for_each_detailed_timing ([&](auto & detailed_timing, auto ) {
1095
1084
bool is_preferred = detailed_timing_index++ == 0 ;
1096
1085
add_resolution (detailed_timing.horizontal_addressable_pixels (), detailed_timing.vertical_addressable_lines (), detailed_timing.refresh_rate (), is_preferred);
1097
1086
return IterationDecision::Continue;
1098
- });
1099
- if (result.is_error ())
1100
- return result.error ();
1087
+ }));
1101
1088
1102
- result = for_each_short_video_descriptor ([&](unsigned , bool , VIC::Details const & vic_details) {
1089
+ TRY ( for_each_short_video_descriptor ([&](unsigned , bool , VIC::Details const & vic_details) {
1103
1090
add_resolution (vic_details.horizontal_pixels , vic_details.vertical_lines , vic_details.refresh_rate_hz ());
1104
1091
return IterationDecision::Continue;
1105
- });
1106
- if (result.is_error ())
1107
- return result.error ();
1092
+ }));
1108
1093
1109
- result = for_each_coordinated_video_timing ([&](auto & coordinated_video_timing) {
1094
+ TRY ( for_each_coordinated_video_timing ([&](auto & coordinated_video_timing) {
1110
1095
if (auto * dmt = DMT::find_timing_by_cvt (coordinated_video_timing.cvt_code ())) {
1111
1096
add_resolution (dmt->horizontal_pixels , dmt->vertical_lines , dmt->vertical_frequency_hz ());
1112
1097
} else {
@@ -1115,7 +1100,7 @@ auto Parser::supported_resolutions() const -> ErrorOr<Vector<SupportedResolution
1115
1100
dbgln (" TODO: Decode CVT code: {:02x},{:02x},{:02x}" , cvt.bytes [0 ], cvt.bytes [1 ], cvt.bytes [2 ]);
1116
1101
}
1117
1102
return IterationDecision::Continue;
1118
- });
1103
+ })) ;
1119
1104
1120
1105
quick_sort (resolutions, [&](auto & info1, auto & info2) {
1121
1106
if (info1.width < info2.width )
0 commit comments