pub(crate) mod alias;
pub(crate) mod alias_hazard;
pub(crate) mod alias_tree;
pub(crate) mod arithmetic;
pub(crate) mod call;
pub(crate) mod container;
pub(crate) mod contracts;
pub(crate) mod display;
pub(crate) mod effects;
pub(crate) mod comparison_simulator;
pub(crate) mod exec;
pub(crate) mod materialize;
pub(crate) mod memory;
pub(crate) mod method_cache;
pub(crate) mod parameters;
pub(crate) mod region;
pub(crate) mod rules;
pub(crate) mod state;
use rustc_middle::ty::TyCtxt;
use rustc_middle::mir::Body;
use rustc_hir::def_id::DefId;
use z3::Context;
use crate::verify::slicer::ProofGoal;
pub(crate) use self::state::VmState;
pub(crate) fn execute_goal<'z3, 'tcx>(
z3_ctx: &'z3 Context,
tcx: TyCtxt<'tcx>,
caller_def_id: DefId,
instance_body: Option<&'tcx Body<'tcx>>,
goal: ProofGoal<'tcx>,
) -> VmState<'z3, 'tcx> {
let mut state = VmState::new(z3_ctx, tcx, caller_def_id, instance_body);
state.execute_items(&goal.items);
state
}