hide parser utility functions
This commit is contained in:
@@ -218,25 +218,30 @@ parse_primary proc(state @mut State) NodeId ! mem.AllocError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
next_is proc(state @mut State, token_kind TokenKind) bool {
|
next_is proc(state @mut State, token_kind TokenKind) bool {
|
||||||
return state.tokens[state.next_token].kind == token_kind
|
return state.tokens[state.next_token].kind == token_kind
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
next_is_either proc(state @mut State, token_kinds []TokenKind) bool {
|
next_is_either proc(state @mut State, token_kinds []TokenKind) bool {
|
||||||
is_either := false
|
is_either := false
|
||||||
for (token_kinds) |kind| is_either = is_either or next_is(state, kind)
|
for (token_kinds) |kind| is_either = is_either or next_is(state, kind)
|
||||||
return is_either
|
return is_either
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
expect proc(state @mut State, token_kind TokenKind) void ! ErrorCode {
|
expect proc(state @mut State, token_kind TokenKind) void ! ErrorCode {
|
||||||
if (state.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, token_kinds []TokenKind) void ! ErrorCode {
|
expect_either proc(state @mut State, token_kinds []TokenKind) void ! ErrorCode {
|
||||||
for (token_kinds) |kind| if (state.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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
consume proc(state @mut State, token_kind TokenKind) TokenId ! ErrorCode {
|
consume proc(state @mut State, token_kind TokenKind) TokenId ! ErrorCode {
|
||||||
try expect(state, token_kind)
|
try expect(state, token_kind)
|
||||||
id :: TokenId(state.next_token)
|
id :: TokenId(state.next_token)
|
||||||
@@ -244,6 +249,7 @@ consume proc(state @mut State, token_kind TokenKind) TokenId ! ErrorCode {
|
|||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
consume_either proc(state @mut State, token_kinds []TokenKind) TokenId ! ErrorCode {
|
consume_either proc(state @mut State, token_kinds []TokenKind) TokenId ! ErrorCode {
|
||||||
try expect_either(state, token_kinds)
|
try expect_either(state, token_kinds)
|
||||||
id :: TokenId(state.next_token)
|
id :: TokenId(state.next_token)
|
||||||
@@ -251,12 +257,14 @@ consume_either proc(state @mut State, token_kinds []TokenKind) TokenId ! ErrorCo
|
|||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
add_node proc(state @mut State, node Node) NodeId ! mem.AllocError {
|
add_node proc(state @mut State, node Node) NodeId ! mem.AllocError {
|
||||||
id :: ast.node_id(state.nodes.items.len)
|
id :: ast.node_id(state.nodes.items.len)
|
||||||
try arraylist.append(&state.nodes, node)
|
try arraylist.append(&state.nodes, node)
|
||||||
return id
|
return id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@hide
|
||||||
add_extra proc(state @mut State, data u32) ExtraId ! mem.AllocError {
|
add_extra proc(state @mut State, data u32) ExtraId ! mem.AllocError {
|
||||||
id :: ast.extra_id(state.extra.items.len)
|
id :: ast.extra_id(state.extra.items.len)
|
||||||
try arraylist.append(&state.extra, data)
|
try arraylist.append(&state.extra, data)
|
||||||
|
|||||||
Reference in New Issue
Block a user