1package ANTLR::Runtime::CommonToken;
2
3use Readonly;
4
5use Moose;
6
7use overload
8    'bool' => \&not_eof,
9    fallback => 1,
10    ;
11
12with 'ANTLR::Runtime::Token';
13
14has 'type' => (
15    is  => 'rw',
16    isa => 'Int',
17    required => 1,
18);
19
20has 'line' => (
21    is  => 'rw',
22    isa => 'Int',
23    default => 0,
24);
25
26has 'char_position_in_line' => (
27    is  => 'rw',
28    isa => 'Int',
29    # set to invalid position
30    default => -1,
31);
32
33has 'channel' => (
34    is  => 'rw',
35    isa => 'Int',
36    default => sub { ANTLR::Runtime::Token->DEFAULT_CHANNEL }
37);
38
39has 'input' => (
40    is  => 'rw',
41    isa => 'Maybe[ANTLR::Runtime::CharStream]',
42);
43
44# We need to be able to change the text once in a while.  If
45# this is non-null, then getText should return this.  Note that
46# start/stop are not affected by changing this.
47has 'text' => (
48    is  => 'rw',
49    isa => 'Maybe[Str]',
50);
51
52# What token number is this from 0..n-1 tokens; < 0 implies invalid index
53has 'index' => (
54    is  => 'rw',
55    isa => 'Int',
56    default => -1,
57);
58
59# The char position into the input buffer where this token starts
60has 'start' => (
61    is  => 'rw',
62    isa => 'Int',
63);
64
65# The char position into the input buffer where this token stops
66has 'stop' => (
67    is  => 'rw',
68    isa => 'Int',
69);
70
71sub BUILD {
72    my ($self, $arg_ref) = @_;
73
74    if (exists $arg_ref->{token}) {
75        my $token = $arg_ref->{token};
76        $self->text($token->get_text());
77        $self->type($token->get_type());
78        $self->line($token->get_line());
79        $self->index($token->get_token_index());
80        $self->char_position_in_line($token->get_char_position_in_line());
81        $self->channel($token->get_channel());
82    }
83    return;
84}
85
86sub get_type {
87    my ($self) = @_;
88    return $self->type;
89}
90
91sub set_type {
92    my ($self, $value) = @_;
93    $self->value($value);
94    return;
95}
96
97
98sub get_line {
99    my ($self) = @_;
100    return $self->line;
101}
102
103sub set_line {
104    my ($self, $line) = @_;
105    $self->line($line);
106    return;
107}
108
109sub get_text {
110    my ($self) = @_;
111
112    if (defined $self->text) {
113        return $self->text;
114    }
115    if (!defined $self->input) {
116        return undef;
117    }
118    $self->text($self->input->substring($self->start, $self->stop));
119    return $self->text;
120}
121
122sub set_text {
123    my ($self, $text) = @_;
124    $self->text($text);
125    return;
126}
127
128sub get_char_position_in_line {
129    my ($self) = @_;
130    return $self->char_position_in_line;
131}
132
133sub set_char_position_in_line {
134    my ($self, $pos) = @_;
135    $self->char_position_in_line($pos);
136    return;
137}
138
139sub get_channel {
140    my ($self) = @_;
141    return $self->channel;
142}
143
144sub set_channel {
145    my ($self, $channel) = @_;
146    $self->channel($channel);
147    return;
148}
149
150sub get_start_index {
151    my ($self) = @_;
152    return $self->start;
153}
154
155sub set_start_index {
156    my ($self, $start) = @_;
157    $self->start($start);
158    return;
159}
160
161sub get_stop_index {
162    my ($self) = @_;
163    return $self->stop;
164}
165
166sub set_stop_index {
167    my ($self, $stop) = @_;
168    $self->stop($stop);
169    return;
170}
171
172sub get_token_index {
173    my ($self) = @_;
174    return $self->index;
175}
176
177sub set_token_index {
178    my ($self, $index) = @_;
179    $self->index($index);
180    return;
181}
182
183sub get_input_stream {
184    my ($self) = @_;
185    return $self->input;
186}
187
188sub set_input_stream {
189    my ($self, $input) = @_;
190    $self->input($input);
191    return;
192}
193
194sub not_eof {
195    my ($self) = @_;
196    return $self->type != ANTLR::Runtime::Token->EOF;
197}
198
199=begin later
200
201	public String toString() {
202		String channelStr = "";
203		if ( channel>0 ) {
204			channelStr=",channel="+channel;
205		}
206		String txt = getText();
207		if ( txt!=null ) {
208			txt = txt.replaceAll("\n","\\\\n");
209			txt = txt.replaceAll("\r","\\\\r");
210			txt = txt.replaceAll("\t","\\\\t");
211		}
212		else {
213			txt = "<no text>";
214		}
215		return "[@"+getTokenIndex()+","+start+":"+stop+"='"+txt+"',<"+type+">"+channelStr+","+line+":"+getCharPositionInLine()+"]";
216	}
217
218=end later
219
220=cut
221
222no Moose;
223__PACKAGE__->meta->make_immutable();
2241;
225