minor cleanup
This commit is contained in:
+14
-12
@@ -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
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user