Introduce methods for obtaining Location for statements and terminators

This commit is contained in:
Artem Agvanian 2024-08-23 12:45:38 -04:00
parent 8bc120af82
commit 515f5acefe

View File

@ -465,10 +465,20 @@ pub fn span(&self) -> Span {
}
}
impl From<Span> for Location {
fn from(span: Span) -> Self {
Location(span)
}
/// 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.