fuzzgen: Generate compiler flags (#5020)
* fuzzgen: Test compiler flags
* cranelift: Generate `all()` function for all enum flags
This allows a user to iterate all flags that exist.
* fuzzgen: Minimize regalloc_checker compiles
* fuzzgen: Limit the amount of test case inputs
* fuzzgen: Add egraphs flag
It's finally here! 🥳
* cranelift: Add fuzzing comment to settings
* fuzzgen: Add riscv64
* fuzzgen: Unconditionally enable some flags
This commit is contained in:
@@ -98,6 +98,26 @@ fn gen_iterator(group: &SettingGroup, fmt: &mut Formatter) {
|
||||
fmtln!(fmt, "}");
|
||||
}
|
||||
|
||||
/// Generates a `all()` function with all options for this enum
|
||||
fn gen_enum_all(name: &str, values: &[&'static str], fmt: &mut Formatter) {
|
||||
fmtln!(
|
||||
fmt,
|
||||
"/// Returns a slice with all possible [{}] values.",
|
||||
name
|
||||
);
|
||||
fmtln!(fmt, "pub fn all() -> &'static [{}] {{", name);
|
||||
fmt.indent(|fmt| {
|
||||
fmtln!(fmt, "&[");
|
||||
fmt.indent(|fmt| {
|
||||
for v in values.iter() {
|
||||
fmtln!(fmt, "Self::{},", camel_case(v));
|
||||
}
|
||||
});
|
||||
fmtln!(fmt, "]");
|
||||
});
|
||||
fmtln!(fmt, "}");
|
||||
}
|
||||
|
||||
/// Emit Display and FromStr implementations for enum settings.
|
||||
fn gen_to_and_from_str(name: &str, values: &[&'static str], fmt: &mut Formatter) {
|
||||
fmtln!(fmt, "impl fmt::Display for {} {{", name);
|
||||
@@ -158,6 +178,12 @@ fn gen_enum_types(group: &SettingGroup, fmt: &mut Formatter) {
|
||||
});
|
||||
fmtln!(fmt, "}");
|
||||
|
||||
fmtln!(fmt, "impl {} {{", name);
|
||||
fmt.indent(|fmt| {
|
||||
gen_enum_all(&name, values, fmt);
|
||||
});
|
||||
fmtln!(fmt, "}");
|
||||
|
||||
gen_to_and_from_str(&name, values, fmt);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user