mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #129170 - artemagvanian:span-to-location, r=celinval
Add an ability to convert between `Span` and `visit::Location` AFAIK, there is no way to create a `Location` from a `Span` because its only field is private. This makes it impossible to use visitor methods like `visit_statement` or `visit_terminator`. This PR adds an implementation for`From<Span>` for `Location` to fix this. r? ```@celinval```
This commit is contained in:
commit
2572e0e8c9
@ -465,6 +465,22 @@ impl Location {
|
||||
}
|
||||
}
|
||||
|
||||
/// Location of the statement at the given index for a given basic block. Assumes that `stmt_idx`
|
||||
/// and `bb_idx` are valid for a given body.
|
||||
pub fn statement_location(body: &Body, bb_idx: &BasicBlockIdx, stmt_idx: usize) -> Location {
|
||||
let bb = &body.blocks[*bb_idx];
|
||||
let stmt = &bb.statements[stmt_idx];
|
||||
Location(stmt.span)
|
||||
}
|
||||
|
||||
/// Location of the terminator for a given basic block. Assumes that `bb_idx` is valid for a given
|
||||
/// body.
|
||||
pub fn terminator_location(body: &Body, bb_idx: &BasicBlockIdx) -> Location {
|
||||
let bb = &body.blocks[*bb_idx];
|
||||
let terminator = &bb.terminator;
|
||||
Location(terminator.span)
|
||||
}
|
||||
|
||||
/// Reference to a place used to represent a partial projection.
|
||||
pub struct PlaceRef<'a> {
|
||||
pub local: Local,
|
||||
|
Loading…
Reference in New Issue
Block a user