Skip to content

Commit

Permalink
ts: make get_all_expressions a method
Browse files Browse the repository at this point in the history
  • Loading branch information
ekiwi committed Nov 25, 2024
1 parent dd4ef43 commit 3520c49
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 24 deletions.
24 changes: 1 addition & 23 deletions src/system/transform.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ pub fn do_transform(
mode: ExprTransformMode,
tran: impl FnMut(&mut Context, ExprRef, &[ExprRef]) -> Option<ExprRef>,
) {
let todo = get_root_expressions(sys);
let todo = sys.get_all_expressions();
let mut transformed = DenseExprMetaData::default();
do_transform_expr(ctx, mode, &mut transformed, todo, tran);

Expand All @@ -61,25 +61,3 @@ pub fn do_transform(
}
});
}

fn get_root_expressions(sys: &TransitionSystem) -> Vec<ExprRef> {
// include all input, output, assertion and assumptions expressions
let mut out = vec![];
out.extend_from_slice(sys.inputs.as_slice());
out.extend(sys.outputs.iter().map(|o| o.expr));
out.extend_from_slice(sys.bad_states.as_slice());
out.extend_from_slice(sys.constraints.as_slice());

// include all states
for state in sys.states.iter() {
out.push(state.symbol);
if let Some(init) = state.init {
out.push(init);
}
if let Some(next) = state.next {
out.push(next);
}
}

out
}
25 changes: 24 additions & 1 deletion src/system/transition_system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ impl TransitionSystem {
HashMap::from_iter(self.states.iter().map(|s| (s.symbol, s)))
}

/// Update all output, input, assume, assert, `state.next` and `state.init` expressions.
/// Update all output, input, assume, assert, state expressions.
/// If `update` returns `None`, no update is performed.
pub fn update_expressions(&mut self, mut update: impl FnMut(ExprRef) -> Option<ExprRef>) {
for old in self.inputs.iter_mut() {
Expand All @@ -131,4 +131,27 @@ impl TransitionSystem {
state.next = state.next.and_then(|old| update(old));
}
}

/// Returns a list of all output, input, assume, assert and state expressions.
pub fn get_all_expressions(&self) -> Vec<ExprRef> {
// include all input, output, assertion and assumptions expressions
let mut out = vec![];
out.extend_from_slice(self.inputs.as_slice());
out.extend(self.outputs.iter().map(|o| o.expr));
out.extend_from_slice(self.bad_states.as_slice());
out.extend_from_slice(self.constraints.as_slice());

// include all states
for state in self.states.iter() {
out.push(state.symbol);
if let Some(init) = state.init {
out.push(init);
}
if let Some(next) = state.next {
out.push(next);
}
}

out
}
}

0 comments on commit 3520c49

Please sign in to comment.