DMS-Parser
view release on metacpan or search on metacpan
lib/DMS/Parser.pm view on Meta::CPAN
$self->_die("strings cannot span lines") if $c eq "\n" || $c eq "\r";
if ($c eq "'") { $self->{pos}++; return $out; }
$self->{pos}++;
$out .= $c;
}
}
sub _read_hex_codepoint {
my ($self, $n) = @_;
my $rest = substr($self->{src}, $self->{pos});
$self->_die("expected $n hex digits in unicode escape") if length($rest) < $n;
my $hex = substr($rest, 0, $n);
$self->_die("invalid hex in unicode escape: $hex") if $hex !~ /^[0-9a-fA-F]+$/;
my $v = hex($hex);
# SPEC: U+0000 is forbidden anywhere in DMS source, including via
# escape decoding. ` ` / `\U00000000` must not slip through.
if ($v == 0) {
$self->_die("\\u0000 escape forbidden");
}
if ($v >= 0xD800 && $v <= 0xDFFF) {
$self->_die(sprintf("surrogate codepoint U+%04X in escape", $v));
}
if ($v > 0x10FFFF) {
$self->_die("unicode escape is not a scalar value");
}
$self->{pos} += $n;
return chr($v);
}
# Heredocs
sub parse_heredoc_basic {
my $self = shift;
$self->{pos} += 3;
( run in 0.990 second using v1.01-cache-2.11-cpan-9581c071862 )