Commit | Line | Data |
9d759b64 |
1 | package DX::Role::Predicate; |
2 | |
3 | use List::Util qw(reduce); |
3e465d5d |
4 | use DX::Utils qw(step CONTENTS_OF); |
9d759b64 |
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 => [], |
3e465d5d |
21 | depends_on => [ |
22 | [ undef ,=> [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ] |
23 | ], |
9d759b64 |
24 | ); |
25 | } |
26 | return ( |
27 | do { |
28 | if ($left->is_set and my $set = $right->action_for_set_value($left)) { |
29 | step( |
30 | actions => [ $set ], |
0498469a |
31 | depends_on => [ |
32 | [ $right => |
3e465d5d |
33 | [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] |
0498469a |
34 | ] |
35 | ] |
9d759b64 |
36 | ) |
37 | } else { |
38 | () |
39 | } |
40 | }, |
41 | do { |
42 | if ($right->is_set and my $set = $left->action_for_set_value($right)) { |
43 | step( |
44 | actions => [ $set ], |
0498469a |
45 | depends_on => [ |
46 | [ $left => |
3e465d5d |
47 | [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] |
0498469a |
48 | ] |
49 | ] |
9d759b64 |
50 | ) |
51 | } else { |
52 | () |
53 | } |
54 | }, |
55 | ); |
56 | } |
57 | |
58 | sub selection_depends_on { |
59 | my ($self, @args) = @_; |
60 | \@args; |
61 | } |
62 | |
63 | 1; |