File Coverage

blib/lib/Text/APL/Translator.pm
Criterion Covered Total %
statement 24 24 100.0
branch 8 8 100.0
condition 2 3 66.6
subroutine 4 4 100.0
pod 1 1 100.0
total 39 40 97.5


line stmt bran cond sub pod time code
1             package Text::APL::Translator;
2              
3 3     3   16745 use strict;
  3         4  
  3         96  
4 3     3   10 use warnings;
  3         4  
  3         66  
5              
6 3     3   12 use base 'Text::APL::Base';
  3         3  
  3         781  
7              
8             sub translate {
9 22     22 1 49 my $self = shift;
10 22         25 my ($tape) = @_;
11              
12 22         21 my $code = '';
13              
14 22         36 foreach my $token (@$tape) {
15 27 100       63 if ($token->{type} eq 'expr') {
    100          
16 17         21 my $value = $token->{value};
17 17 100 66     52 if (exists $token->{as_is} && $token->{as_is}) {
18 5         26 $code .= '__print(do {' . $value . '});';
19             }
20             else {
21 12         38 $code .= '__print_escaped(do {' . $value . '});';
22             }
23             }
24             elsif ($token->{type} eq 'exec') {
25 6         12 $code .= $token->{value};
26 6 100       20 $code .= ';' unless $token->{line};
27             }
28             else {
29 4         11 $token->{value} =~ s/}/\\}/gms;
30 4         7 $token->{value} =~ s/{/\\{/gms;
31 4         12 $code .= '__print(q{' . $token->{value} . '});';
32             }
33             }
34              
35 22         63 $code;
36             }
37              
38             1;
39             __END__