1 package ANTLR::Runtime::ANTLRFileStream; 2 3 use Carp; 4 use Readonly; 5 6 use Moose; 7 8 extends 'ANTLR::Runtime::ANTLRStringStream'; 9 10 has 'file_name' => ( 11 is => 'ro', 12 isa => 'Str', 13 required => 1, 14 ); 15 16 sub BUILDARGS { 17 my ($class, @args) = @_; 18 my $args = $class->SUPER::BUILDARGS(@args); 19 20 my $file_name = $args->{file_name}; 21 if (!defined $file_name) { 22 return; 23 } 24 25 my $fh; 26 my $encoding = $args->{encoding}; 27 if (defined $encoding) { 28 open $fh, "<:encoding($encoding)", $file_name 29 or croak "Can't open $file_name: $!"; 30 } 31 else { 32 open $fh, '<', $file_name 33 or croak "Can't open $file_name: $!"; 34 } 35 36 my $content; 37 { 38 local $/; 39 $content = <$fh>; 40 } 41 close $fh or carp "Can't close $fh: $!"; 42 43 $args->{input} = $content; 44 45 return $args; 46 } 47 48 sub load { 49 my ($self, $file_name, $encoding) = @_; 50 51 if (!defined $file_name) { 52 return; 53 } 54 55 my $fh; 56 if (defined $encoding) { 57 open $fh, "<:encoding($encoding)", $file_name 58 or croak "Can't open $file_name: $!"; 59 } 60 else { 61 open $fh, '<', $file_name 62 or croak "Can't open $file_name: $!"; 63 } 64 65 my $content; 66 { 67 local $/; 68 $content = <$fh>; 69 } 70 close $fh or carp "Can't close $fh: $!"; 71 72 $self->input($content); 73 return; 74 } 75 76 sub get_source_name { 77 my ($self) = @_; 78 return $self->file_name; 79 } 80 81 no Moose; 82 __PACKAGE__->meta->make_immutable(); 83 1; 84 __END__ 85