Commit | Line | Data |
9d759b64 |
1 | package DX::Role::Predicate; |
2 | |
3 | use List::Util qw(reduce); |
4 | use DX::Utils qw(step); |
5 | use DX::Role; |
6 | |
7 | sub resolution_step_for { |
8 | my ($self, @args) = @_; |
9 | my ($last, @rest) = reverse $self->_possible_resolution_list(@args); |
10 | return undef unless $last; |
11 | my $targ = $last; |
12 | $targ = $_->but_with_alternative_step($targ) for @rest; |
13 | return $targ; |
14 | } |
15 | |
16 | sub _make_equal { |
17 | my ($self, $left, $right) = @_; |
18 | if ($left->equals($right)) { |
19 | return step( |
20 | actions => [], |
21 | depends_on => [ $left, $right ], |
22 | ); |
23 | } |
24 | return ( |
25 | do { |
26 | if ($left->is_set and my $set = $right->action_for_set_value($left)) { |
27 | step( |
28 | actions => [ $set ], |
0498469a |
29 | depends_on => [ |
30 | [ $right => |
31 | [ $left ], [ $right ] |
32 | ] |
33 | ] |
9d759b64 |
34 | ) |
35 | } else { |
36 | () |
37 | } |
38 | }, |
39 | do { |
40 | if ($right->is_set and my $set = $left->action_for_set_value($right)) { |
41 | step( |
42 | actions => [ $set ], |
0498469a |
43 | depends_on => [ |
44 | [ $left => |
45 | [ $left ], [ $right ] |
46 | ] |
47 | ] |
9d759b64 |
48 | ) |
49 | } else { |
50 | () |
51 | } |
52 | }, |
53 | ); |
54 | } |
55 | |
56 | sub selection_depends_on { |
57 | my ($self, @args) = @_; |
58 | \@args; |
59 | } |
60 | |
61 | 1; |