Coverage Report

Created: 2025-11-16 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/pp-rs-0.2.1/src/token.rs
Line
Count
Source
1
//TODO: Source file
2
#[derive(Clone, Copy, PartialEq, Debug)]
3
pub struct Location {
4
    /// Byte offset into the source string where the first char begins
5
    pub start: u32,
6
    /// Byte offset into the source string where the first char not belonging to
7
    /// this `Location` begins
8
    pub end: u32,
9
    /// used internally in the `#line` directive and the `__LINE__` macro
10
    pub(crate) line: u32,
11
}
12
13
impl Default for Location {
14
0
    fn default() -> Self {
15
0
        Location {
16
0
            start: 0,
17
0
            end: 0,
18
0
            line: 1,
19
0
        }
20
0
    }
21
}
22
23
#[derive(Clone, Copy, PartialEq, Debug)]
24
pub enum Punct {
25
    // Compound assignments
26
    AddAssign,
27
    SubAssign,
28
    MulAssign,
29
    DivAssign,
30
    ModAssign,
31
    LeftShiftAssign,
32
    RightShiftAssign,
33
    AndAssign,
34
    XorAssign,
35
    OrAssign,
36
37
    // Two character punctuation
38
    Increment,
39
    Decrement,
40
    LogicalAnd,
41
    LogicalOr,
42
    LogicalXor,
43
    LessEqual,
44
    GreaterEqual,
45
    EqualEqual,
46
    NotEqual,
47
    LeftShift,
48
    RightShift,
49
50
    // Parenthesis or similar
51
    LeftBrace,
52
    RightBrace,
53
    LeftParen,
54
    RightParen,
55
    LeftBracket,
56
    RightBracket,
57
58
    // Other one character punctuation
59
    LeftAngle,
60
    RightAngle,
61
    Semicolon,
62
    Comma,
63
    Colon,
64
    Dot,
65
    Equal,
66
    Bang,
67
    Minus,
68
    Tilde,
69
    Plus,
70
    Star,
71
    Slash,
72
    Percent,
73
    Pipe,
74
    Caret,
75
    Ampersand,
76
    Question,
77
}
78
79
#[derive(Clone, PartialEq, Debug)]
80
// TODO location?
81
pub enum PreprocessorError {
82
    IntegerOverflow,
83
    FloatParsingError,
84
    UnexpectedCharacter,
85
    UnexpectedToken(TokenValue),
86
    UnexpectedHash,
87
    UnexpectedNewLine,
88
    UnexpectedEndOfInput,
89
    TooFewDefineArguments,
90
    TooManyDefineArguments,
91
    ErrorDirective,
92
    DuplicateParameter,
93
    UnknownDirective,
94
    DefineRedefined,
95
    ElifOutsideOfBlock,
96
    ElseOutsideOfBlock,
97
    EndifOutsideOfBlock,
98
    ElifAfterElse,
99
    MoreThanOneElse,
100
    UnfinishedBlock,
101
    LineOverflow,
102
    NotSupported16BitLiteral,
103
    NotSupported64BitLiteral,
104
    MacroNotDefined,
105
    RecursionLimitReached,
106
    DivisionByZero,
107
    RemainderByZero,
108
}
109
110
#[derive(Clone, PartialEq, Debug)]
111
pub struct Integer {
112
    pub value: u64,
113
    pub signed: bool,
114
    pub width: i32,
115
}
116
117
#[derive(Clone, PartialEq, Debug)]
118
pub struct Float {
119
    pub value: f32,
120
    pub width: i32,
121
}
122
123
#[derive(Clone, PartialEq, Debug)]
124
pub struct Version {
125
    pub tokens: Vec<Token>,
126
    pub is_first_directive: bool,
127
    pub has_comments_before: bool,
128
}
129
130
#[derive(Clone, PartialEq, Debug)]
131
pub struct Extension {
132
    pub tokens: Vec<Token>,
133
    pub has_non_directive_before: bool,
134
}
135
136
#[derive(Clone, PartialEq, Debug)]
137
pub struct Pragma {
138
    pub tokens: Vec<Token>,
139
}
140
141
#[derive(Clone, PartialEq, Debug)]
142
pub enum TokenValue {
143
    Ident(String),
144
145
    Integer(Integer),
146
    Float(Float),
147
    Punct(Punct),
148
149
    Version(Version),
150
    Extension(Extension),
151
    Pragma(Pragma),
152
}
153
154
#[derive(Clone, PartialEq, Debug)]
155
pub struct Token {
156
    pub value: TokenValue,
157
    pub location: Location,
158
    // TODO macro invocation stack?
159
}