1package ANTLR::Runtime::ANTLRFileStream;
2
3use Carp;
4use Readonly;
5
6use Moose;
7
8extends 'ANTLR::Runtime::ANTLRStringStream';
9
10has 'file_name' => (
11    is  => 'ro',
12    isa => 'Str',
13    required => 1,
14);
15
16sub 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
48sub 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
76sub get_source_name {
77    my ($self) = @_;
78    return $self->file_name;
79}
80
81no Moose;
82__PACKAGE__->meta->make_immutable();
831;
84__END__
85