1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
package CParse::Parser::Token::String;
use 5.6.0;
use strict;
use warnings;
use CParse::String qw/escape unescape/;
sub new
{
my $this = shift;
my $class = ref($this) || $this;
my $str = shift;
my $line = shift;
my $pos = shift;
my $wide;
if ($str =~ s/^L//)
{
$wide = 1;
}
else
{
$wide = 0;
}
$str =~ /^L?"(.*)"$/ or die;
my $value = unescape($1);
my $self = {value => $value,
wide => $wide,
line => $line,
pos => $pos,
};
bless $self, $class;
return $self;
}
sub line
{
my $self = shift;
return $self->{line};
}
sub pos
{
my $self = shift;
return $self->{pos};
}
sub dump_c
{
my $self = shift;
my $value = escape($self->{value});
return $self->{wide} ? "L\"$value\"" : "\"$value\"";
}
sub concatenate
{
my $self = shift;
my $other = shift;
$self->{wide} ||= $other->{wide};
$self->{value} .= $other->{value};
}
sub process
{
my $self = shift;
return new CParse::String $self->{value}, $self->{wide};
}
1;
|