add qdeps debug command
[scpubgit/DX.git] / lib / DX / Utils.pm
CommitLineData
9d759b64 1package DX::Utils;
2
3use strictures 2;
4use Exporter 'import';
5
efad53c4 6my @const = (
7 my @dep_types = qw(EXISTENCE_OF INDICES_OF TYPE_OF CONTENTS_OF),
8 my @ev_types = qw(VALUE_SET VALUE_EXISTS),
9);
9d759b64 10
efad53c4 11our @EXPORT_OK = (
12 @const,
1e812b19 13 (my @builders = qw(step string number dict proposition)),
372a400c 14 'deparse', 'trace',
efad53c4 15);
16
17our %EXPORT_TAGS = (
18 all => \@EXPORT_OK,
19 dep_types => \@dep_types,
20 event_types => \@ev_types,
21 builders => \@builders,
22);
23
24require constant;
25
26# use constant INDICES_OF => \*INDICES_OF;
27
28constant->import(+{
29 map {; no strict 'refs'; $_ => \*$_ } @const
30});
31
32# $INDICES_OF = 1, ...
33
34do { no strict 'refs'; ${$dep_types[$_-1]} = $_ } for 1..@dep_types;
35
36# VALUE_EXISTS needs to trigger indices checks on its parent
37
38our $VALUE_EXISTS = 1;
39
40# VALUE_EXISTS triggers all types, VALUE_SET all but EXISTENCE_OF
41
42our @VALUE_EXISTS = (EXISTENCE_OF(), INDICES_OF(), TYPE_OF(), CONTENTS_OF());
43our @VALUE_SET = (INDICES_OF(), TYPE_OF(), CONTENTS_OF());
9d759b64 44
372a400c 45sub trace {
46 my ($tag, $thing) = @_;
47 my $dp = deparse($thing);
48 $dp =~ s/\n//;
49 warn "${tag}: ${dp}\n";
50}
51
9d759b64 52sub step {
3e465d5d 53 require DX::Step::Normal;
9d759b64 54 DX::Step::Normal->new(@_);
55}
56
57sub string {
3e465d5d 58 require DX::Value::String;
9d759b64 59 DX::Value::String->new(string_value => $_[0])
60}
61
62sub number {
3e465d5d 63 require DX::Value::Number;
9d759b64 64 DX::Value::Number->new(number_value => $_[0]);
65}
66
efad53c4 67sub dict {
3e465d5d 68 require DX::Value::Dict;
efad53c4 69 DX::Value::Dict->new(
70 members => { @_ },
71 );
72}
73
74sub proposition {
75 my ($pred, @args) = @_;
3e465d5d 76 require DX::Proposition;
efad53c4 77 DX::Proposition->new(
78 predicate => $pred,
79 args => \@args,
80 );
81}
82
1e812b19 83{
3e465d5d 84 my $dp;
1e812b19 85
86 sub deparse {
3e465d5d 87 $dp ||= do {
88 require DX::Deparse;
89 DX::Deparse->new;
90 };
1e812b19 91 my ($thing) = @_;
92 $dp->fmt($thing);
93 }
94}
95
9d759b64 961;