Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to get lines/filename for Span in smir #116630

Merged
merged 2 commits into from
Oct 14, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
change fn name, return loc info, local name
  • Loading branch information
ouz-a committed Oct 13, 2023
commit d6a55d3409e9e875e6d65ad5daecee4c7ea8449b
27 changes: 8 additions & 19 deletions compiler/rustc_smir/src/rustc_smir/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@ use rustc_middle::ty::{self, Ty, TyCtxt, Variance};
use rustc_span::def_id::{CrateNum, DefId, LOCAL_CRATE};
use rustc_target::abi::FieldIdx;
use stable_mir::mir::{CopyNonOverlapping, Statement, UserTypeProjection, VariantIdx};
use stable_mir::ty::{FloatTy, GenericParamDef, IntTy, Movability, RigidTy, Span, TyKind, UintTy};
use stable_mir::ty::{
FloatTy, GenericParamDef, IntTy, LineInfo, Movability, RigidTy, Span, TyKind, UintTy,
};
use stable_mir::{self, opaque, Context, Filename};
use tracing::debug;

Expand Down Expand Up @@ -50,7 +52,7 @@ impl<'tcx> Context for Tables<'tcx> {
self.tcx.def_path_str(self[def_id])
}

fn print_span(&self, span: stable_mir::ty::Span) -> String {
fn span_to_string(&self, span: stable_mir::ty::Span) -> String {
self.tcx.sess.source_map().span_to_diagnostic_string(self[span])
}

Expand All @@ -61,27 +63,14 @@ impl<'tcx> Context for Tables<'tcx> {
.sess
.source_map()
.span_to_filename(self[*span])
.display(rustc_span::FileNameDisplayPreference::Short)
.display(rustc_span::FileNameDisplayPreference::Local)
.to_string(),
)
}

fn get_lines(&self, span: &Span) -> Vec<stable_mir::ty::LineInfo> {
let lines = &self
.tcx
.sess
.source_map()
.span_to_lines(self[*span])
.unwrap()
.lines
.iter()
.map(|line| stable_mir::ty::LineInfo {
line_index: line.line_index + 1,
start_col: line.start_col.0 + 1,
end_col: line.end_col.0 + 1,
})
.collect::<Vec<stable_mir::ty::LineInfo>>();
lines.to_vec()
fn get_lines(&self, span: &Span) -> LineInfo {
let lines = &self.tcx.sess.source_map().span_to_location_info(self[*span]);
LineInfo { start_line: lines.1, start_col: lines.2, end_line: lines.3, end_col: lines.4 }
}

fn def_kind(&mut self, def_id: stable_mir::DefId) -> stable_mir::DefKind {
Expand Down
4 changes: 2 additions & 2 deletions compiler/stable_mir/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -201,13 +201,13 @@ pub trait Context {
fn name_of_def_id(&self, def_id: DefId) -> String;

/// Returns printable, human readable form of `Span`
fn print_span(&self, span: Span) -> String;
fn span_to_string(&self, span: Span) -> String;

/// Return filename from given `Span`, for diagnostic purposes
fn get_filename(&self, span: &Span) -> Filename;

/// Return lines corresponding to this `Span`
fn get_lines(&self, span: &Span) -> Vec<LineInfo>;
fn get_lines(&self, span: &Span) -> LineInfo;

/// Returns the `kind` of given `DefId`
fn def_kind(&mut self, def_id: DefId) -> DefKind;
Expand Down
7 changes: 4 additions & 3 deletions compiler/stable_mir/src/ty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ impl Debug for Span {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("Span")
.field("id", &self.0)
.field("repr", &with(|cx| cx.print_span(*self)))
.field("repr", &with(|cx| cx.span_to_string(*self)))
.finish()
}
}
Expand All @@ -93,7 +93,7 @@ impl Span {
}

/// Return lines that corespond to this `Span`
pub fn get_lines(&self) -> Vec<LineInfo> {
pub fn get_lines(&self) -> LineInfo {
with(|c| c.get_lines(&self))
}
}
Expand All @@ -102,8 +102,9 @@ impl Span {
/// Information you get from `Span` in a struct form.
/// Line and col start from 1.
pub struct LineInfo {
pub line_index: usize,
pub start_line: usize,
pub start_col: usize,
pub end_line: usize,
pub end_col: usize,
}

Expand Down