stage2 大量优化代码使其自举编译时间大幅缩短

This commit is contained in:
zzy committed 2026-09-20 09:33:20 +08:00
1 parent e02b0c633a
commit 846f441e3a
38 files changed
+2418 -835

No files matched your search

+7 -9
View File
@@ -42,11 +42,8 @@ fn new(ast: *Ast, toks: Vec, diag: *Diag): Parser {
// ---- token 访问 ----
fn token_ptr(self: *Parser, index: usize): *Token {
match Vec.get(&self.toks, index) {
.Ok(ptr) => { ret ptr as *Token; },
.Err(error) => { ret null; },
}
ret null;
if index >= self.toks.len { ret null; }
ret (self.toks.data as *Token) + index;
}
fn is_trivia(kind: TokenKind): bool {
@@ -61,16 +58,17 @@ fn is_trivia(kind: TokenKind): bool {
// 跳过 trivia;返回当前 token(含 EOF)。越界返回 null。
fn peek(self: *Parser): *Token {
var n = self.toks.len;
var base = self.toks.data as *Token;
var i = self.pos;
while i < n {
var t = token_ptr(self, i);
if t == null { break; }
if base == null { break; }
var t = base + i;
if !is_trivia(t.kind) { break; }
i = i + 1;
}
self.pos = i;
if i >= n { ret null; }
ret token_ptr(self, i);
if i >= n || base == null { ret null; }
ret base + i;
}
fn advance(self: *Parser): *Token {