Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | package Psh::Strategy::Built_in; |
2 | ||
3 | require Psh::Strategy; | |
4 | require Psh::Options; | |
5 | require Psh::Support::Builtins; | |
6 | ||
7 | @Psh::Strategy::Built_in::ISA=('Psh::Strategy'); | |
8 | ||
9 | Psh::Support::Builtins::build_autoload_list(); | |
10 | ||
11 | sub new { Psh::Strategy::new(@_) } | |
12 | ||
13 | sub consumes { | |
14 | return Psh::Strategy::CONSUME_TOKENS; | |
15 | } | |
16 | ||
17 | sub runs_before { | |
18 | return qw(executable auto_resume auto_cd); | |
19 | } | |
20 | ||
21 | sub applies { | |
22 | my $fnname= ${$_[2]}[0]; | |
23 | ||
24 | if( $fnname= Psh::Support::Builtins::is_builtin($fnname)) { | |
25 | eval 'use Psh::Builtins::'.ucfirst($fnname); | |
26 | if ($@) { | |
27 | Psh::Util::print_error_i18n('builtin_failed',$@); | |
28 | } | |
29 | return $fnname; | |
30 | } | |
31 | return ''; | |
32 | } | |
33 | ||
34 | sub execute { | |
35 | my $line= ${$_[1]}; | |
36 | my @words= @{$_[2]}; | |
37 | my $command= $_[3]; | |
38 | shift @words; | |
39 | my $coderef; | |
40 | ||
41 | my $rest= join(' ',@words); | |
42 | ||
43 | no strict 'refs'; | |
44 | $coderef= *{join('','Psh::Builtins::',ucfirst($command), | |
45 | '::bi_',$command)}; | |
46 | return (1,sub { &{$coderef}($rest,\@words); }, [], 0, undef ); | |
47 | } | |
48 | ||
49 | 1; |