1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
use crate::char_stream::CharStream;
use crate::common_token_factory::TokenFactory;
use crate::token::Token;
pub trait TokenSource {
fn next_token(&mut self) -> Box<dyn Token>;
fn get_line(&self) -> isize;
fn get_char_position_in_line(&self) -> isize;
fn get_input_stream(&mut self) -> &mut dyn CharStream;
fn get_source_name(&self) -> String;
fn get_token_factory(&self) -> &dyn TokenFactory;
}
impl<T> TokenSource for &mut T where T: TokenSource {
fn next_token(&mut self) -> Box<dyn Token> {
(**self).next_token()
}
fn get_line(&self) -> isize {
(**self).get_line()
}
fn get_char_position_in_line(&self) -> isize {
(**self).get_char_position_in_line()
}
fn get_input_stream(&mut self) -> &mut dyn CharStream {
(**self).get_input_stream()
}
fn get_source_name(&self) -> String {
(**self).get_source_name()
}
fn get_token_factory(&self) -> &dyn TokenFactory {
(**self).get_token_factory()
}
}