https://gcc.gnu.org/g:433fbb156898c256c38a9ee137a51a42fe9177ee

commit r15-2497-g433fbb156898c256c38a9ee137a51a42fe9177ee
Author: Arthur Cohen <arthur.co...@embecosm.com>
Date:   Mon Feb 26 11:55:47 2024 +0100

    gccrs: format-parser: Add `is_some_and` method for Option<T>
    
    Workaround for Ubuntu 18.04, since we still use it for the GCC 4.8 CI.
    The default Rust package is 1.65 (and unlikely to change I assume?),
    but the generic format parser library uses `is_some_and` which was
    introduced in 1.70. So this is a simple reimplementation, directly taken
    from the standard library sources.
    
    libgrust/ChangeLog:
    
            * libformat_parser/generic_format_parser/src/lib.rs: Add 
IsSomeAnd<T>
            trait, impl it for Option<T>.

Diff:
---
 .../libformat_parser/generic_format_parser/src/lib.rs    | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/libgrust/libformat_parser/generic_format_parser/src/lib.rs 
b/libgrust/libformat_parser/generic_format_parser/src/lib.rs
index 6a366177f252..8062bf9e5cec 100644
--- a/libgrust/libformat_parser/generic_format_parser/src/lib.rs
+++ b/libgrust/libformat_parser/generic_format_parser/src/lib.rs
@@ -22,6 +22,22 @@ fn is_id_continue(c: char) -> bool {
     unicode_xid::UnicodeXID::is_xid_continue(c)
 }
 
+// Workaround for Ubuntu 18.04. The default Rust package is 1.65 (and unlikely 
to change I assume?), but the
+// generic format parser library uses `is_some_and` which was introduced in 
1.70. So this is a reimplementation,
+// directly taken from the standard library sources
+trait IsSomeAnd<T> {
+    fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool;
+}
+
+impl<T> IsSomeAnd<T> for Option<T> {
+    fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool {
+        match self {
+            None => false,
+            Some(x) => f(x),
+        }
+    }
+}
+
 // use rustc_lexer::unescape;
 pub use Alignment::*;
 pub use Count::*;

Reply via email to