Commit | Line | Data |
71217e42 |
1 | package DX::Op::Not; |
2 | |
3 | use DX::Op::FromCode; |
4 | use DX::Var; |
5 | use DX::ArrayStream; |
6 | use DX::Op::Return; |
7 | use Moo; |
8 | |
9 | with 'DX::Role::Op'; |
10 | |
11 | has body => (is => 'ro', required => 1); |
12 | |
13 | sub run { |
14 | my ($self, $state) = @_; |
15 | my $var = DX::Var->new(id => "rule:not") |
16 | ->with_stream(DX::ArrayStream->from_array( |
17 | $self->body, DX::Op::Return->new |
18 | )); |
19 | my $invoke = DX::Op::FromCode->new( |
20 | code => sub { |
21 | my ($self, $state) = @_; |
0676b282 |
22 | my $op = $state->resolve_value($var); |
71217e42 |
23 | $state->then($op); |
24 | } |
25 | ); |
71217e42 |
26 | $state->push_return_then($self->next, $invoke)->mark_choice($var); |
27 | } |
28 | |
29 | 1; |