7 my @dep_types = qw(EXISTENCE_OF TYPE_OF INDICES_OF CONTENTS_OF),
8 my @ev_types = qw(VALUE_SET VALUE_EXISTS),
13 (my @builders = qw(rspace rstrat res string number dict proposition)),
14 'deparse', '*trace', 'expand_deps', 'format_deps',
19 dep_types => \@dep_types,
20 event_types => \@ev_types,
21 builders => \@builders,
26 # use constant INDICES_OF => \*INDICES_OF;
29 map {; no strict 'refs'; $_ => \*$_ } @const
32 # $EXISTENCE_OF = 1, ...
34 do { no strict 'refs'; ${$dep_types[$_-1]} = $_ } for 1..@dep_types;
36 # VALUE_EXISTS needs to trigger indices checks on its parent
38 our $VALUE_EXISTS = 1;
40 # VALUE_EXISTS triggers all types, VALUE_SET all but EXISTENCE_OF
42 our @VALUE_EXISTS = (EXISTENCE_OF(), TYPE_OF(), INDICES_OF(), CONTENTS_OF());
43 our @VALUE_SET = (TYPE_OF(), INDICES_OF(), CONTENTS_OF());
48 my ($type, @path) = @{$_[0]};
50 ref() ? @{$_->value_path or return ()} : $_
52 return [ $type, @expanded ];
56 [ map _expand_dep($_), @{$_[0]} ]
62 [ symbol => (split '::', ${$_->[0]})[-1] ],
63 [ value_path => [ @{$_}[1..$#$_] ] ]
69 require DX::ResolutionSpace;
70 DX::ResolutionSpace->new(@_);
74 require DX::ResolutionStrategy;
75 DX::ResolutionStrategy->new(@_);
79 require DX::Resolution;
80 DX::Resolution->new(@_);
84 require DX::Value::String;
85 DX::Value::String->new(string_value => $_[0])
89 require DX::Value::Number;
90 DX::Value::Number->new(number_value => $_[0]);
94 require DX::Value::Dict;
101 my ($pred, @args) = @_;
102 require DX::Proposition;
103 DX::Proposition->new(
114 require DX::TraceFormatter;
115 DX::TraceFormatter->new;