File Coverage

blib/lib/MarpaX/Languages/ECMAScript/AST/Grammar/ECMAScript_262_5/Lexical/StringLiteral/Semantics.pm
Criterion Covered Total %
statement 12 35 34.2
branch 0 18 0.0
condition n/a
subroutine 4 14 28.5
pod 1 1 100.0
total 17 68 25.0


line stmt bran cond sub pod time code
1 1     1   5 use strict;
  1         2  
  1         36  
2 1     1   3 use warnings FATAL => 'all';
  1         2  
  1         41  
3              
4             package MarpaX::Languages::ECMAScript::AST::Grammar::ECMAScript_262_5::Lexical::StringLiteral::Semantics;
5 1     1   5 use Carp qw/croak/;
  1         3  
  1         126  
6             use constant {
7 1         614 BS => "\N{U+0008}",
8             HT => "\N{U+0009}",
9             LF => "\N{U+000A}",
10             VT => "\N{U+000B}",
11             FF => "\N{U+000C}",
12             CR => "\N{U+000D}",
13             DQUOTE => "\N{U+0022}",
14             SQUOTE => "\N{U+0027}",
15             BACKSLASH => "\N{U+005C}"
16 1     1   6 };
  1         2  
17              
18             # ABSTRACT: ECMAScript 262, Edition 5, lexical string grammar actions
19              
20             our $VERSION = '0.019'; # VERSION
21              
22              
23              
24             sub new {
25 0     0 1   my $class = shift;
26 0           my $self = {};
27 0           bless($self, $class);
28 0           return $self;
29             }
30              
31 0     0     sub _secondArg { return $_[2] }
32 0     0     sub _emptyString { return ''; }
33 0     0     sub _concat { return join('', @_[1..$#_]); }
34              
35 0     0     sub _OctalEscapeSequence01 { return chr( oct($_[1])); }
36 0     0     sub _OctalEscapeSequence02 { return chr( 8 * oct($_[1]) + oct($_[2])); }
37 0     0     sub _OctalEscapeSequence03 { return chr(64 * oct($_[1]) + 8 * oct($_[2]) + oct($_[3])); }
38              
39             sub _SingleEscapeCharacter {
40 0 0   0     if ($_[1] eq 'b') { return BS; }
  0 0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
41 0           elsif ($_[1] eq 't') { return HT; }
42 0           elsif ($_[1] eq 'n') { return LF; }
43 0           elsif ($_[1] eq 'v') { return VT; }
44 0           elsif ($_[1] eq 'f') { return FF; }
45 0           elsif ($_[1] eq 'r') { return CR; }
46 0           elsif ($_[1] eq '"') { return DQUOTE; }
47 0           elsif ($_[1] eq '\'') { return SQUOTE; }
48 0           elsif ($_[1] eq '\\') { return BACKSLASH; }
49             else {
50 0           croak "Invalid single escape character: $_[1]";
51             }
52             }
53              
54 0     0     sub _HexEscapeSequence { return chr(16 * hex($_[1]) + hex($_[2])); }
55 0     0     sub _UnicodeEscapeSequence { return chr(4096 * hex($_[2]) + 256 * hex($_[3]) + 16 * hex($_[4]) + hex($_[5])); }
56              
57             1;
58              
59             __END__