Skip to content

Commit 4333d35

Browse files
Changed From<String> for PassIdentifier to TryFrom for PassIdentifier
Also change From<&Options> to TryFrom<&Options>, since it also used passIdentifier Signed-off-by: Tomas Fabrizio Orsi <[email protected]>
1 parent e53b374 commit 4333d35

File tree

3 files changed

+24
-17
lines changed

3 files changed

+24
-17
lines changed

hir/src/pass/manager.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,21 @@ pub struct IRPrintingConfig {
4242
pub flags: OpPrintingFlags,
4343
}
4444

45-
impl From<&Options> for IRPrintingConfig {
46-
fn from(options: &Options) -> Self {
47-
let pass_filters: Vec<PassIdentifier> =
48-
options.print_ir_after_pass.iter().map(|a| a.into()).collect();
49-
IRPrintingConfig {
45+
impl TryFrom<&Options> for IRPrintingConfig {
46+
type Error = Report;
47+
48+
fn try_from(options: &Options) -> Result<Self, Self::Error> {
49+
let pass_filters: Vec<PassIdentifier> = options
50+
.print_ir_after_pass
51+
.iter()
52+
.map(|a| a.try_into())
53+
.collect::<Result<Vec<PassIdentifier>, Report>>()?;
54+
Ok(IRPrintingConfig {
5055
print_ir_after_all: options.print_ir_after_all,
5156
print_ir_after_pass: pass_filters,
5257
print_ir_after_modified: options.print_ir_after_modified,
5358
..Default::default()
54-
}
59+
})
5560
}
5661
}
5762

hir/src/pass/pass.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use alloc::{boxed::Box, rc::Rc};
1+
use alloc::{boxed::Box, format, rc::Rc};
22
use core::{any::Any, fmt};
33

44
use super::*;
@@ -154,18 +154,20 @@ pub enum PassIdentifier {
154154
TransformSpills,
155155
}
156156

157-
impl From<&String> for PassIdentifier {
158-
fn from(pass_name: &String) -> Self {
157+
impl TryFrom<&String> for PassIdentifier {
158+
type Error = Report;
159+
160+
fn try_from(pass_name: &String) -> Result<Self, Self::Error> {
159161
match pass_name.as_str() {
160-
"canonicalizer" => PassIdentifier::Canonicalizer,
161-
"control-flow-sink" => PassIdentifier::ControlFlowSink,
162-
"lift-control-flow" => PassIdentifier::LiftControlFlowToSCF,
163-
"sink-operand-defs" => PassIdentifier::SinkOperandDefs,
162+
"canonicalizer" => Ok(PassIdentifier::Canonicalizer),
163+
"control-flow-sink" => Ok(PassIdentifier::ControlFlowSink),
164+
"lift-control-flow" => Ok(PassIdentifier::LiftControlFlowToSCF),
165+
"sink-operand-defs" => Ok(PassIdentifier::SinkOperandDefs),
164166
"sparse-conditional-constant-propagation" => {
165-
PassIdentifier::SparseConditionalConstantPropagation
167+
Ok(PassIdentifier::SparseConditionalConstantPropagation)
166168
}
167-
"transform-spills" => PassIdentifier::TransformSpills,
168-
_ => panic!("ERROR: '{pass_name}' unrecognized pass."),
169+
"transform-spills" => Ok(PassIdentifier::TransformSpills),
170+
_ => Err(Report::msg(format!("'{pass_name}' unrecognized pass."))),
169171
}
170172
}
171173
}

midenc-compile/src/stages/rewrite.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ impl Stage for ApplyRewritesStage {
2222
}
2323

2424
fn run(&mut self, input: Self::Input, context: Rc<Context>) -> CompilerResult<Self::Output> {
25-
let ir_print_config: IRPrintingConfig = (&context.as_ref().session().options).into();
25+
let ir_print_config: IRPrintingConfig = (&context.as_ref().session().options).try_into()?;
2626
log::debug!(target: "driver", "applying rewrite passes");
2727
// TODO(pauls): Set up pass registration for new pass infra
2828
/*

0 commit comments

Comments
 (0)