use std::fs;
use decuda::parser;
fn main() {
let path = std::env::args_os()
.nth(1)
.map(std::path::PathBuf::from)
.unwrap_or_else(|| {
std::path::PathBuf::from(concat!(
env!("CARGO_MANIFEST_DIR"),
"/examples/cu/saxpy.cu"
))
});
let src = fs::read_to_string(&path).unwrap();
let u = parser::translate_source(src.clone(), path);
println!("--- IR nodes ({} total) ---", u.nodes.len());
for n in &u.nodes {
println!(
"{:>5}-{:<5} {:>14} surface: {:?}",
n.start(),
n.end(),
n.kind_label(),
surface(n, &src)
);
}
}
fn surface(n: &decuda::ir::IrNode, src: &str) -> String {
let s = n.start();
let e = n.end().min(src.len());
if s > src.len() {
return "<OOB>".into();
}
let raw = &src[s..e];
raw.chars().take(40).collect::<String>() + if raw.len() > 40 { "…" } else { "" }
}