[meta] Use AsRef<str> to allow passing String or &str to Formatter functions;

This commit is contained in:
Benjamin Bouvier
2019-02-08 18:28:58 +01:00
parent 90028a6d0d
commit c8e09cb37f
4 changed files with 86 additions and 94 deletions

View File

@@ -12,14 +12,14 @@ fn gen_regbank(fmt: &mut Formatter, reg_bank: &RegBank) {
};
fmt.line("RegBank {");
fmt.indent(|fmt| {
fmt.line(&format!(r#"name: "{}","#, reg_bank.name));
fmt.line(&format!("first_unit: {},", reg_bank.first_unit));
fmt.line(&format!("units: {},", reg_bank.units));
fmt.line(&format!("names: &[{}],", names));
fmt.line(&format!(r#"prefix: "{}","#, reg_bank.prefix));
fmt.line(&format!("first_toprc: {},", reg_bank.toprcs[0].index()));
fmt.line(&format!("num_toprcs: {},", reg_bank.toprcs.len()));
fmt.line(&format!(
fmt.line(format!(r#"name: "{}","#, reg_bank.name));
fmt.line(format!("first_unit: {},", reg_bank.first_unit));
fmt.line(format!("units: {},", reg_bank.units));
fmt.line(format!("names: &[{}],", names));
fmt.line(format!(r#"prefix: "{}","#, reg_bank.prefix));
fmt.line(format!("first_toprc: {},", reg_bank.toprcs[0].index()));
fmt.line(format!("num_toprcs: {},", reg_bank.toprcs.len()));
fmt.line(format!(
"pressure_tracking: {},",
if reg_bank.pressure_tracking {
"true"
@@ -41,27 +41,24 @@ fn gen_regclass(isa: &TargetIsa, reg_class: &RegClass, fmt: &mut Formatter) {
.collect();
let mask = mask.join(", ");
fmt.line(&format!(
fmt.line(format!(
"pub static {}_DATA: RegClassData = RegClassData {{",
reg_class.name
));
fmt.indent(|fmt| {
fmt.line(&format!(r#"name: "{}","#, reg_class.name));
fmt.line(&format!("index: {},", reg_class.index.index()));
fmt.line(&format!("width: {},", reg_class.width));
fmt.line(&format!("bank: {},", reg_class.bank.index()));
fmt.line(&format!("toprc: {},", reg_class.toprc.index()));
fmt.line(&format!(
"first: {},",
reg_bank.first_unit + reg_class.start
));
fmt.line(&format!("subclasses: {:#x},", reg_class.subclass_mask()));
fmt.line(&format!("mask: [{}],", mask));
fmt.line(format!(r#"name: "{}","#, reg_class.name));
fmt.line(format!("index: {},", reg_class.index.index()));
fmt.line(format!("width: {},", reg_class.width));
fmt.line(format!("bank: {},", reg_class.bank.index()));
fmt.line(format!("toprc: {},", reg_class.toprc.index()));
fmt.line(format!("first: {},", reg_bank.first_unit + reg_class.start));
fmt.line(format!("subclasses: {:#x},", reg_class.subclass_mask()));
fmt.line(format!("mask: [{}],", mask));
fmt.line("info: &INFO,");
});
fmt.line("};");
fmt.line("#[allow(dead_code)]");
fmt.line(&format!(
fmt.line(format!(
"pub static {}: RegClass = &{}_DATA;",
reg_class.name, reg_class.name
));
@@ -71,10 +68,10 @@ fn gen_regbank_units(reg_bank: &RegBank, fmt: &mut Formatter) {
for unit in 0..reg_bank.units {
let v = unit + reg_bank.first_unit;
if (unit as usize) < reg_bank.names.len() {
fmt.line(&format!("{} = {},", reg_bank.names[unit as usize], v));
fmt.line(format!("{} = {},", reg_bank.names[unit as usize], v));
continue;
}
fmt.line(&format!("{}{} = {},", reg_bank.prefix, unit, v));
fmt.line(format!("{}{} = {},", reg_bank.prefix, unit, v));
}
}
@@ -95,7 +92,7 @@ fn gen_isa(isa: &TargetIsa, fmt: &mut Formatter) {
fmt.line("classes: &[");
fmt.indent(|fmt| {
for reg_class in isa.regs.classes.values() {
fmt.line(&format!("&{}_DATA,", reg_class.name));
fmt.line(format!("&{}_DATA,", reg_class.name));
}
});
fmt.line("],");
@@ -133,6 +130,6 @@ fn gen_isa(isa: &TargetIsa, fmt: &mut Formatter) {
pub fn generate(isa: &TargetIsa, base_filename: &str, out_dir: &str) -> Result<(), error::Error> {
let mut fmt = Formatter::new();
gen_isa(&isa, &mut fmt);
fmt.update_file(&format!("{}-{}.rs", base_filename, isa.name), out_dir)?;
fmt.update_file(format!("{}-{}.rs", base_filename, isa.name), out_dir)?;
Ok(())
}