File Coverage

blib/lib/MarpaX/Languages/IDL/AST/Value.pm
Criterion Covered Total %
statement 33 33 100.0
branch n/a
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 41 41 100.0


line stmt bran cond sub pod time code
1 1     1   3 use strict;
  1         2  
  1         22  
2 1     1   3 use warnings FATAL => 'all';
  1         1  
  1         30  
3              
4             package MarpaX::Languages::IDL::AST::Value;
5 1     1   4 use Scalar::Util qw/blessed/;
  1         0  
  1         51  
6              
7             # ABSTRACT: Translate an IDL source to an AST - parse tree value helpers
8              
9             our $VERSION = '0.007'; # VERSION
10              
11              
12             use constant {
13 1         72 LEXEME_INDEX => 0
14 1     1   3 };
  1         1  
15              
16             use constant {
17 1         262 LEXEME_INDEX_START => 0,
18             LEXEME_INDEX_LENGTH => 1,
19             LEXEME_INDEX_VALUE => 2
20 1     1   3 };
  1         1  
21              
22             sub new {
23 1     1 1 38662 my ($class) = @_;
24              
25             #
26             # "Contents of an entire IDL file, together with the contents of any files referenced by #include statements, forms a naming scope.
27             # Definitions that do not appear inside a scope are part of the global scope. There is only a single global scope, irrespective
28             # of the number of source files that form a specification."
29             #
30             # Scopes can be nested.
31             #
32 1         4 my $self = {
33             };
34              
35 1         8 bless($self, $class);
36              
37 1         3 return $self;
38             }
39              
40             sub _scopedName {
41 279     279   17107 my ($self, $scopedName) = @_;
42              
43             #
44             # We concatenate identifiers to have a single-like lexeme
45             #
46 279         219 my @scopedNames = ();
47 279         223 my $firstIdentifier = $scopedName->[0];
48 279         166 my $lastIdentifier = $scopedName->[-1];
49 279         151 my $firstLexeme = $firstIdentifier->[LEXEME_INDEX];
50 279         181 my $lastLexeme = $lastIdentifier->[LEXEME_INDEX];
51              
52 279         178 my $start = $firstLexeme->[LEXEME_INDEX_START];
53 279         200 my $length = $lastLexeme->[LEXEME_INDEX_START] + $lastLexeme->[LEXEME_INDEX_LENGTH] - $start;
54 279         201 map {push(@scopedNames, $_->[LEXEME_INDEX]->[LEXEME_INDEX_VALUE])} @{$scopedName};
  279         335  
  279         284  
55 279         320 my $value = join('::', @scopedNames);
56 279         548 my $rc = bless [$start, $length, $value ], blessed($scopedName);
57              
58 279         433 return $rc;
59             }
60              
61             1;
62              
63             __END__
64              
65             =pod
66              
67             =encoding UTF-8
68              
69             =head1 NAME
70              
71             MarpaX::Languages::IDL::AST::Value - Translate an IDL source to an AST - parse tree value helpers
72              
73             =head1 VERSION
74              
75             version 0.007
76              
77             =head1 DESCRIPTION
78              
79             This module contain some tools used by IDL to AST
80              
81             =head2 new()
82              
83             Instanciate a new object.
84              
85             =head1 AUTHOR
86              
87             Jean-Damien Durand <jeandamiendurand@free.fr>
88              
89             =head1 COPYRIGHT AND LICENSE
90              
91             This software is copyright (c) 2014 by Jean-Damien Durand.
92              
93             This is free software; you can redistribute it and/or modify it under
94             the same terms as the Perl 5 programming language system itself.
95              
96             =cut