about summary refs log tree commit diff
path: root/compiler/rustc_errors/src/snippet.rs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-08-03 04:50:28 +0000
committerbors <bors@rust-lang.org>2021-08-03 04:50:28 +0000
commite91405b9d5c8dabb3e488bafb314147f1050f9b9 (patch)
treee685ca7d120d1d9e26e06a1c4a64142c9f9da488 /compiler/rustc_errors/src/snippet.rs
parent810b9267f38a398c28dd213bad4acc58dce0199a (diff)
parent55ff45a5c25c49e665a9459b8d6ea03ae2c44476 (diff)
downloadrust-e91405b9d5c8dabb3e488bafb314147f1050f9b9.tar.gz
rust-e91405b9d5c8dabb3e488bafb314147f1050f9b9.zip
Auto merge of #87262 - dtolnay:negative, r=Aaron1011
Support negative numbers in Literal::from_str

proc_macro::Literal has allowed negative numbers in a single literal token ever since Rust 1.29, using https://doc.rust-lang.org/stable/proc_macro/struct.Literal.html#method.isize_unsuffixed and similar constructors.

```rust
let lit = proc_macro::Literal::isize_unsuffixed(-10);
```

However, the suite of constructors on Literal is not sufficient for all use cases, for example arbitrary precision floats, or custom suffixes in FFI macros.

```rust
let lit = proc_macro::Literal::f64_unsuffixed(0.101001000100001000001000000100000001); // :(
let lit = proc_macro::Literal::i???_suffixed(10ulong); // :(
```

For those, macros construct the literal using from_str instead, which preserves arbitrary precision, custom suffixes, base, and digit grouping.

```rust
let lit = "0.101001000100001000001000000100000001".parse::<Literal>().unwrap();
let lit = "10ulong".parse::<Literal>().unwrap();
let lit = "0b1000_0100_0010_0001".parse::<Literal>().unwrap();
```

However, until this PR it was not possible to construct a literal token that is **both** negative **and** preserving of arbitrary precision etc.

This PR fixes `Literal::from_str` to recognize negative integer and float literals.
Diffstat (limited to 'compiler/rustc_errors/src/snippet.rs')
0 files changed, 0 insertions, 0 deletions