1 package DX::Step::Backtrack;
4 use DX::Utils qw(format_deps);
9 has resolution_space => (is => 'ro', isa => ResolutionSpace, required => 1);
13 my $rspace = $self->resolution_space;
14 trace backtrack => [ statement => [
15 [ symbol => 'backtrack' ],
17 [ symbol => 'because' ],
18 format_deps($rspace->geometry_depends_on)
21 my $dmap = DX::DependencyMap->new_empty
22 ->with_dependencies_for(
23 backtrack => $rspace->geometry_depends_on
26 foreach my $adj (@{$ss->decisions_taken}) {
27 my ($rspace_was, $ss_was) = @$adj;
28 $dmap = $dmap->with_dependencies_for(
29 backtrack => $rspace_was->geometry_depends_on
31 next unless @{$rspace_was->remaining_resolution_space->members};
32 trace rspace => [ statement => [
33 [ symbol => 'remaining' ],
34 @{$rspace_was->remaining_resolution_space->for_deparse->[1]}
37 next_step => $rspace_was->remaining_resolution_space->next_step
40 return $ss->but(next_step => $ss->on_exhaustion_step);