minor cleanup

This commit is contained in:
2026-08-02 20:58:39 +02:00
parent 90c7195d4b
commit d693711a59
2 changed files with 15 additions and 14 deletions
+14 -12
View File
@@ -67,6 +67,7 @@ State :: struct {
#! array of indexes into the nodes array. #! array of indexes into the nodes array.
extra std.ArrayList(NodeId) extra std.ArrayList(NodeId)
tokens []Token = &[]
next_token TokenId = TokenId(0) next_token TokenId = TokenId(0)
} }
@@ -83,24 +84,25 @@ deinit proc(state @mut State) void {
} }
parse proc(state @mut State, tokens []Token) void ! ParseError { parse proc(state @mut State, tokens []Token) void ! ParseError {
_ = try parse_decl(state, tokens) state.tokens = tokens
_ = try parse_decl(state)
} }
parse_decl proc(state @mut State, tokens []Token) NodeId ! ParseError { parse_decl proc(state @mut State) NodeId ! ParseError {
# expect identifier # expect identifier
try expect(state, tokens, .ident) try expect(state, .ident)
ident_token :: state.next_token ident_token :: state.next_token
state.next_token += 1 state.next_token += 1
# expect `::` (immutable assignment) # expect `::` (immutable assignment)
try expect(state, tokens, .double_colon) try expect(state, .double_colon)
state.next_token += 1 state.next_token += 1
# expect expression # expect expression
expr :: try parse_primary(state, tokens) expr :: try parse_primary(state)
# expect statement terminator (newline) # expect statement terminator (newline)
try expect_either(state, tokens, &[.newline, .eof]) try expect_either(state, &[.newline, .eof])
state.next_token += 1 state.next_token += 1
decl :: try add_node(&state.nodes, Node{ decl :: try add_node(&state.nodes, Node{
@@ -112,10 +114,10 @@ parse_decl proc(state @mut State, tokens []Token) NodeId ! ParseError {
return decl return decl
} }
parse_primary proc(state @mut State, tokens []Token) NodeId ! mem.AllocError { parse_primary proc(state @mut State) NodeId ! mem.AllocError {
start_token :: state.next_token start_token :: state.next_token
state.next_token += 1 state.next_token += 1
return match tokens[start_token].kind { return match state.tokens[start_token].kind {
.int: try add_node(&state.nodes, Node{ .int: try add_node(&state.nodes, Node{
kind = .literal_int, kind = .literal_int,
main_token = start_token, main_token = start_token,
@@ -135,12 +137,12 @@ parse_primary proc(state @mut State, tokens []Token) NodeId ! mem.AllocError {
} }
} }
hide expect proc(state @mut State, tokens []Token, token_kind TokenKind) void ! ErrorCode { hide expect proc(state @mut State, token_kind TokenKind) void ! ErrorCode {
if (tokens[state.next_token].kind != token_kind) return .unexpected_token if (state.tokens[state.next_token].kind != token_kind) return .unexpected_token
} }
hide expect_either proc(state @mut State, tokens []Token, token_kinds []TokenKind) void ! ErrorCode { hide expect_either proc(state @mut State, token_kinds []TokenKind) void ! ErrorCode {
for (token_kinds) |kind| if (tokens[state.next_token].kind == kind) return for (token_kinds) |kind| if (state.tokens[state.next_token].kind == kind) return
return .unexpected_token return .unexpected_token
} }
+1 -2
View File
@@ -327,6 +327,7 @@ hide format_field_name proc($T type, index usize) []u8 {
else: compile_error!("io.print arguments must be a tuple") else: compile_error!("io.print arguments must be a tuple")
} }
} }
hide distinct_value proc($Backing, $Distinct type, value Distinct) Backing { hide distinct_value proc($Backing, $Distinct type, value Distinct) Backing {
return ptrcast!(Backing, &value)^ return ptrcast!(Backing, &value)^
} }
@@ -341,8 +342,6 @@ hide scalar_or_distinct_type proc($T type) bool {
} }
} }
hide write_integer proc(output Writer, $T type, value T, base u64, uppercase bool) void ! WriteError { hide write_integer proc(output Writer, $T type, value T, base u64, uppercase bool) void ! WriteError {
match typeinfo!(T) { match typeinfo!(T) {
.integer: if minval!(T) < 0 { .integer: if minval!(T) < 0 {