beginnings of a shell prototype
[scpubgit/DX.git] / bin / protoshell
1 use strictures 2;
2 use Module::Runtime qw(use_module);
3 use DX::Utils qw(dict deparse);
4 use Devel::Dwarn;
5 BEGIN { *u = \&use_module }
6
7 my $scope = u('DX::Scope')->new(
8   predicates => {
9     map +(
10       $_ => u('DX::Predicate::'.join('', map ucfirst, split '_', $_))->new
11     ), qw(eq member_at is_dict)
12   },
13   globals => dict(),
14   locals => [],
15 );
16
17 my $exp = u('DX::Expander')->new;
18
19 my $tcl = u('Tcl')->new;
20
21 foreach my $pred (keys %{$scope->predicates}) {
22   $tcl->CreateCommand($pred => sub {
23     my (undef, undef, undef, @args) = @_;
24     Dwarn [ $pred, $exp->expand_args(@args) ];
25   });
26 }
27
28 my $rl = u('Caroline')->new;
29
30 while (my $line = $rl->readline('$ ')) {
31   $tcl->Eval($line);
32 }