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__