Skip to content

Commit 3df5dfb

Browse files
committed
cranelift: Generate all() function for all enum flags
This allows a user to iterate all flags that exist.
1 parent abc7c5c commit 3df5dfb

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

cranelift/codegen/meta/src/gen_settings.rs

+26
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,26 @@ fn gen_iterator(group: &SettingGroup, fmt: &mut Formatter) {
9898
fmtln!(fmt, "}");
9999
}
100100

101+
/// Generates a `all()` function with all options for this enum
102+
fn gen_enum_all(name: &str, values: &[&'static str], fmt: &mut Formatter) {
103+
fmtln!(
104+
fmt,
105+
"/// Returns a slice with all possible [{}] values.",
106+
name
107+
);
108+
fmtln!(fmt, "pub fn all() -> &'static [{}] {{", name);
109+
fmt.indent(|fmt| {
110+
fmtln!(fmt, "&[");
111+
fmt.indent(|fmt| {
112+
for v in values.iter() {
113+
fmtln!(fmt, "Self::{},", camel_case(v));
114+
}
115+
});
116+
fmtln!(fmt, "]");
117+
});
118+
fmtln!(fmt, "}");
119+
}
120+
101121
/// Emit Display and FromStr implementations for enum settings.
102122
fn gen_to_and_from_str(name: &str, values: &[&'static str], fmt: &mut Formatter) {
103123
fmtln!(fmt, "impl fmt::Display for {} {{", name);
@@ -158,6 +178,12 @@ fn gen_enum_types(group: &SettingGroup, fmt: &mut Formatter) {
158178
});
159179
fmtln!(fmt, "}");
160180

181+
fmtln!(fmt, "impl {} {{", name);
182+
fmt.indent(|fmt| {
183+
gen_enum_all(&name, values, fmt);
184+
});
185+
fmtln!(fmt, "}");
186+
161187
gen_to_and_from_str(&name, values, fmt);
162188
}
163189
}

cranelift/fuzzgen/src/lib.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,7 @@ where
231231
fn generate_flags(&mut self) -> Result<Flags> {
232232
let mut builder = settings::builder();
233233

234-
let opt_levels = [OptLevel::None, OptLevel::Speed, OptLevel::SpeedAndSize];
235-
let opt = self.u.choose(&opt_levels)?;
234+
let opt = self.u.choose(OptLevel::all())?;
236235
builder.set("opt_level", &format!("{}", opt)[..])?;
237236

238237
// Boolean flags

0 commit comments

Comments
 (0)