Skip to content

Commit 8f6f0be

Browse files
committed
Auto merge of rust-lang#90297 - dtolnay:dotzero, r=petrochenkov
Append .0 to unsuffixed float if it would otherwise become int token Previously the unsuffixed f32/f64 constructors of `proc_macro::Literal` would create literal tokens that are definitely not a float: ```rust Literal::f32_unsuffixed(10.0) // 10 Literal::f32_suffixed(10.0) // 10f32 Literal::f64_unsuffixed(10.0) // 10 Literal::f64_suffixed(10.0) // 10f64 ``` Notice that the `10` are actually integer tokens if you were to reparse them, not float tokens. This diff updates `Literal::f32_unsuffixed` and `Literal::f64_unsuffixed` to produce tokens that unambiguously parse as a float. This matches longstanding behavior of the proc-macro2 crate's implementation of these APIs dating back at least 3.5 years, so it's likely an unobjectionable behavior. ```rust Literal::f32_unsuffixed(10.0) // 10.0 Literal::f32_suffixed(10.0) // 10f32 Literal::f64_unsuffixed(10.0) // 10.0 Literal::f64_suffixed(10.0) // 10f64 ``` Fixes dtolnay/syn#1085.
2 parents f3ceaab + 7bdeb3e commit 8f6f0be

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

proc_macro/src/lib.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,7 +1074,11 @@ impl Literal {
10741074
if !n.is_finite() {
10751075
panic!("Invalid float literal {}", n);
10761076
}
1077-
Literal(bridge::client::Literal::float(&n.to_string()))
1077+
let mut repr = n.to_string();
1078+
if !repr.contains('.') {
1079+
repr.push_str(".0");
1080+
}
1081+
Literal(bridge::client::Literal::float(&repr))
10781082
}
10791083

10801084
/// Creates a new suffixed floating-point literal.
@@ -1115,7 +1119,11 @@ impl Literal {
11151119
if !n.is_finite() {
11161120
panic!("Invalid float literal {}", n);
11171121
}
1118-
Literal(bridge::client::Literal::float(&n.to_string()))
1122+
let mut repr = n.to_string();
1123+
if !repr.contains('.') {
1124+
repr.push_str(".0");
1125+
}
1126+
Literal(bridge::client::Literal::float(&repr))
11191127
}
11201128

11211129
/// Creates a new suffixed floating-point literal.

0 commit comments

Comments
 (0)