Skip to content

Commit 72a9986

Browse files
Recursive (#70)
* feat: 🎸 init * feat: 🎸 more sketch * fix: 🐛 fmt
1 parent 4b5fdbf commit 72a9986

File tree

7 files changed

+421
-1
lines changed

7 files changed

+421
-1
lines changed

Cargo.lock

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/recursive-parser/Cargo.toml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
[package]
2+
name = "recursive-parser"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7+
8+
[dependencies]
9+
10+
# cssparser = "0.29.0"
11+
tokenizer = { path = "../tokenizer" }
12+
mimalloc-rust = "0.1"
13+
14+
[profile.release]
15+
lto = true
16+
codegen-units = 1
17+
panic = "abort"
18+
19+
[dev-dependencies]
20+
criterion = "0.3.5"

crates/recursive-parser/src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
pub mod parser;
2+
use tokenizer::{Token, TokenType, Tokenizer};
3+
4+
pub(crate) struct Lexer<'a> {
5+
inner: Tokenizer<'a>,
6+
}
7+
8+
impl<'a> Lexer<'a> {
9+
pub(crate) fn new(input: &'a str) -> Self {
10+
Self {
11+
inner: Tokenizer::new(input, false),
12+
}
13+
}
14+
}
15+
16+
impl<'a> Iterator for Lexer<'a> {
17+
type Item = Token<'a>;
18+
19+
fn next(&mut self) -> Option<Self::Item> {
20+
if !self.inner.end_of_file() {
21+
let token = self.inner.next_token(false);
22+
Some(token)
23+
} else {
24+
None
25+
}
26+
}
27+
}

crates/recursive-parser/src/main.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use std::time::Instant;
2+
3+
use mimalloc_rust::*;
4+
use recursive_parser::parser;
5+
6+
#[global_allocator]
7+
static GLOBAL_MIMALLOC: GlobalMiMalloc = GlobalMiMalloc;
8+
fn main() {
9+
let str = include_str!("../../../assets/bootstrap.css");
10+
let start = Instant::now();
11+
let mut parser = parser::Parser::new(str);
12+
let _root = parser.parse();
13+
println!("{:?}", start.elapsed());
14+
}

0 commit comments

Comments
 (0)