Skip to content

Commit 009fe49

Browse files
committed
Continued working on namespaces by creating a new token kind for namespaced identifiers
1 parent c21e06c commit 009fe49

File tree

5 files changed

+25
-43
lines changed

5 files changed

+25
-43
lines changed

Diff for: src/ident.rs

-40
This file was deleted.

Diff for: src/lexer/identifier_state.rs

+14-2
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,28 @@
11
use crate::{
22
source_files::Source,
3-
token::{Token, TokenKind},
3+
token::{NamespacedIndentifier, Token, TokenKind},
44
};
55

66
pub struct IdentifierState {
77
pub identifier: String,
88
pub start_source: Source,
9+
pub last_slash: Option<usize>,
910
}
1011

1112
impl IdentifierState {
1213
pub fn finalize(&mut self) -> Token {
13-
let identifier = std::mem::take(&mut self.identifier);
14+
let mut identifier = std::mem::take(&mut self.identifier);
15+
16+
if let Some(last_slash) = self.last_slash {
17+
let basename = identifier.split_off(last_slash + 1);
18+
let namespace = identifier;
19+
20+
return TokenKind::NamespacedIdentifier(NamespacedIndentifier {
21+
namespace,
22+
basename,
23+
})
24+
.at(self.start_source);
25+
}
1426

1527
match identifier.as_str() {
1628
"func" => TokenKind::FuncKeyword,

Diff for: src/lexer/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ impl<T: Text + Send> Lexer<T> {
295295
self.state = State::Identifier(IdentifierState {
296296
identifier: String::from(c),
297297
start_source: source,
298+
last_slash: None,
298299
});
299300
Waiting
300301
}
@@ -313,6 +314,7 @@ impl<T: Text + Send> Lexer<T> {
313314
Waiting
314315
}
315316
Character::At('/', _) if self.characters.peek_nth(1).is_alphabetic() => {
317+
state.last_slash = Some(state.identifier.len());
316318
state.identifier.push(self.characters.next().unwrap().0);
317319
Waiting
318320
}

Diff for: src/main.rs

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ mod compiler;
1616
mod data_units;
1717
mod diagnostics;
1818
mod generate_workspace;
19-
mod ident;
2019
mod index_map_ext;
2120
mod inflow;
2221
mod interpreter;

Diff for: src/token.rs

+9
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,19 @@ pub struct StringLiteral {
4646
pub modifier: StringModifier,
4747
}
4848

49+
#[derive(Clone, Debug, PartialEq)]
50+
pub struct NamespacedIndentifier {
51+
pub namespace: String,
52+
pub basename: String,
53+
}
54+
4955
#[derive(Clone, Debug, PartialEq, IsVariant, Unwrap)]
5056
pub enum TokenKind {
5157
EndOfFile,
5258
Error(String),
5359
Newline,
5460
Identifier(String),
61+
NamespacedIdentifier(NamespacedIndentifier),
5562
OpenCurly,
5663
CloseCurly,
5764
OpenParen,
@@ -135,6 +142,7 @@ impl Display for TokenKind {
135142
TokenKind::Error(message) => write!(f, "'lex error - {}'", message),
136143
TokenKind::Newline => f.write_str("'newline'"),
137144
TokenKind::Identifier(_) => f.write_str("'identifier'"),
145+
TokenKind::NamespacedIdentifier(_) => f.write_str("'namespaced identifier'"),
138146
TokenKind::OpenCurly => f.write_str("'{'"),
139147
TokenKind::CloseCurly => f.write_str("'}'"),
140148
TokenKind::OpenParen => f.write_str("'('"),
@@ -262,6 +270,7 @@ impl TokenKind {
262270
| TokenKind::Error(_)
263271
| TokenKind::Newline
264272
| TokenKind::Identifier(_)
273+
| TokenKind::NamespacedIdentifier(_)
265274
| TokenKind::CloseCurly
266275
| TokenKind::OpenParen
267276
| TokenKind::CloseParen

0 commit comments

Comments
 (0)