blob: b6fe3de440e62fa20374276ef82608a2a550601a [file] [log] [blame]
package ANTLR::Runtime::ANTLRFileStream;
use Carp;
use Readonly;
use Moose;
extends 'ANTLR::Runtime::ANTLRStringStream';
has 'file_name' => (
is => 'ro',
isa => 'Str',
required => 1,
);
sub BUILDARGS {
my ($class, @args) = @_;
my $args = $class->SUPER::BUILDARGS(@args);
my $file_name = $args->{file_name};
if (!defined $file_name) {
return;
}
my $fh;
my $encoding = $args->{encoding};
if (defined $encoding) {
open $fh, "<:encoding($encoding)", $file_name
or croak "Can't open $file_name: $!";
}
else {
open $fh, '<', $file_name
or croak "Can't open $file_name: $!";
}
my $content;
{
local $/;
$content = <$fh>;
}
close $fh or carp "Can't close $fh: $!";
$args->{input} = $content;
return $args;
}
sub load {
my ($self, $file_name, $encoding) = @_;
if (!defined $file_name) {
return;
}
my $fh;
if (defined $encoding) {
open $fh, "<:encoding($encoding)", $file_name
or croak "Can't open $file_name: $!";
}
else {
open $fh, '<', $file_name
or croak "Can't open $file_name: $!";
}
my $content;
{
local $/;
$content = <$fh>;
}
close $fh or carp "Can't close $fh: $!";
$self->input($content);
return;
}
sub get_source_name {
my ($self) = @_;
return $self->file_name;
}
no Moose;
__PACKAGE__->meta->make_immutable();
1;
__END__