Skip to content

Commit 64644bc

Browse files
committed
rust: patch bilge-impl to allow compilation with 1.63.0
Apply a patch that removes "let ... else" constructs, replacing them with "if let ... else" or "let ... = match ...". "let ... else" was stabilized in Rust 1.65.0. Reviewed-by: Junjie Mao <[email protected]> Reviewed-by: Zhao Liu <[email protected]> Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 230b710 commit 64644bc

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

.gitattributes

+2
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@
55
*.rs diff=rust
66
*.rs.inc diff=rust
77
Cargo.lock diff=toml merge=binary
8+
9+
*.patch -text -whitespace

subprojects/bilge-impl-0.2-rs.wrap

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ source_filename = bilge-impl-0.2.0.tar.gz
55
source_hash = feb11e002038ad243af39c2068c8a72bcf147acf05025dcdb916fcc000adb2d8
66
#method = cargo
77
patch_directory = bilge-impl-0.2-rs
8+
diff_files = bilge-impl-1.63.0.patch
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
--- a/src/shared/discriminant_assigner.rs
2+
+++ b/src/shared/discriminant_assigner.rs
3+
@@ -26,20 +26,20 @@
4+
let discriminant_expr = &discriminant.1;
5+
let variant_name = &variant.ident;
6+
7+
- let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr else {
8+
+ if let Expr::Lit(ExprLit { lit: Lit::Int(int), .. }) = discriminant_expr {
9+
+ let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable);
10+
+ if discriminant_value > self.max_value() {
11+
+ abort!(variant, "Value of variant exceeds the given number of bits")
12+
+ }
13+
+
14+
+ Some(discriminant_value)
15+
+ } else {
16+
abort!(
17+
discriminant_expr,
18+
"variant `{}` is not a number", variant_name;
19+
help = "only literal integers currently supported"
20+
)
21+
- };
22+
-
23+
- let discriminant_value: u128 = int.base10_parse().unwrap_or_else(unreachable);
24+
- if discriminant_value > self.max_value() {
25+
- abort!(variant, "Value of variant exceeds the given number of bits")
26+
}
27+
-
28+
- Some(discriminant_value)
29+
}
30+
31+
fn assign(&mut self, variant: &Variant) -> u128 {
32+
--- a/src/shared/fallback.rs
33+
+++ b/src/shared/fallback.rs
34+
@@ -22,8 +22,9 @@
35+
}
36+
Unnamed(fields) => {
37+
let variant_fields = fields.unnamed.iter();
38+
- let Ok(fallback_value) = variant_fields.exactly_one() else {
39+
- abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant")
40+
+ let fallback_value = match variant_fields.exactly_one() {
41+
+ Ok(ok) => ok,
42+
+ _ => abort!(variant, "fallback variant must have exactly one field"; help = "use only one field or change to a unit variant")
43+
};
44+
45+
if !is_last_variant {

0 commit comments

Comments
 (0)