File Coverage

blib/lib/Pistachio/Token.pm
Criterion Covered Total %
statement 21 21 100.0
branch 10 10 100.0
condition n/a
subroutine 8 8 100.0
pod 0 5 0.0
total 39 44 88.6


line stmt bran cond sub pod time code
1             package Pistachio::Token;
2             # ABSTRACT: expresses a single source code language token as an object
3              
4 3     3   15 use strict;
  3         5  
  3         100  
5 3     3   16 use warnings;
  3         4  
  3         150  
6             our $VERSION = '0.10'; # VERSION
7              
8             use constant {
9 3         1025 TYP => 0,
10             VAL => 1
11 3     3   17 };
  3         5  
12              
13             # @param string $type object type
14             # @param string $token_type token type
15             # @param string $token_value token value
16             # @return Pistachio::Token
17             sub new {
18 30     30 0 39 my $type = shift;
19 30         55 my ($token_type, $token_value) = @_;
20 30         178 bless [$token_type, $token_value], $type;
21             }
22              
23             # @param object $this a Pistachio::Token
24             # @param string [optional] $set set to value, if any
25             # @return string token type
26             sub type {
27 503     503 0 920 my ($this, $set) = @_;
28 503 100       1012 $this->[TYP] = $set if $set;
29 503         5260 $this->[TYP];
30             }
31              
32             # @param Pistachio::Token
33             # @return string token value
34 28     28 0 114 sub value { shift->[VAL] }
35              
36             # @param Pistachio::Token
37             # @return int 1 if contained token type is Whitespace, or 0
38 40 100   40 0 72 sub whitespace { shift->type eq 'Whitespace' ? 1 : 0 }
39              
40             # @param Pistachio::Token $this
41             # @param string $type a type to match against
42             # @param coderef [optional] $val a value match sub, or undef
43             # @return int 1 if token object matches $type and $val, or 0
44             sub match {
45 411     411 0 697 my ($this, $type, $val) = @_;
46 411 100       742 return 0 unless $this->type =~ /^$type/;
47 60 100       238 return 1 unless defined $val;
48 24 100       53 $val->($this->value) ? 1 : 0;
49             }
50              
51             1;
52              
53             __END__