File Coverage

blib/lib/Language/P/Toy/Value/MainSymbolTable.pm
Criterion Covered Total %
statement 23 30 76.6
branch 4 8 50.0
condition 2 3 66.6
subroutine 7 9 77.7
pod 1 3 33.3
total 37 53 69.8


line stmt bran cond sub pod time code
1             package Language::P::Toy::Value::MainSymbolTable;
2              
3 100     100   55466 use strict;
  100         270  
  100         3827  
4 100     100   606 use warnings;
  100         228  
  100         5437  
5 100     100   560 use base qw(Language::P::Toy::Value::SymbolTable);
  100         321  
  100         62471  
6              
7 100     100   79222 use Language::P::Toy::Value::ActiveScalar;
  100         619  
  100         1072  
8              
9 3233     3233 0 22885 sub is_main { 1 }
10              
11             my %special_names =
12             ( "\017" => 1,
13             );
14             our %sigils; *sigils = \%Language::P::Toy::Value::SymbolTable::sigils;
15              
16             sub new {
17 74     74 1 636814 my( $class, $args ) = @_;
18 74         953 my $self = $class->SUPER::new( $args );
19              
20 74         1081 my $out = Language::P::Toy::Value::Handle->new( { handle => \*STDOUT } );
21 74         1545 $self->set_symbol( 'STDOUT', 'I', $out );
22              
23 74         438 return $self;
24             }
25              
26             sub _tied_to_rt_variable {
27 0     0   0 my( $name ) = @_;
28              
29             my $get = sub {
30 0     0   0 return Language::P::Toy::Value::StringNumber->new
31             ( { string => $Language::P::Toy::Runtime::current
32             ->{_variables}->{osname},
33             } );
34 0         0 };
35              
36 0         0 return Language::P::Toy::Value::ActiveScalarCallbacks->new
37             ( { get_callback => $get,
38             } )
39             }
40              
41             sub get_symbol {
42 3233     3233 0 20714 my( $self, $name, $sigil, $create ) = @_;
43 3233         10838 my( $symbol, $created ) = $self->SUPER::_get_symbol( $name, '*', $create );
44              
45 3233 100 66     17084 return $symbol if !$symbol || !$created;
46 121 50       530 if( $special_names{$name} ) {
47 0 0       0 if( $name eq "\017" ) {
48 0         0 $symbol->set_slot( 'scalar', _tied_to_rt_variable( 'osname' ) );
49             }
50             }
51              
52 121 50       775 return $symbol if $sigil eq '*';
53 0           return $symbol->get_slot( $sigils{$sigil}[0] );
54             }
55              
56             1;