Merge pull request #1393 from Tetralux/odin-parse-no-nil

core:odin/parser: Parse #no_nil on unions
This commit is contained in:
Jeroen van Rijn
2021-12-25 20:12:01 +01:00
committed by GitHub
2 changed files with 8 additions and 0 deletions

View File

@@ -711,6 +711,7 @@ Union_Type :: struct {
poly_params: ^Field_List,
align: ^Expr,
is_maybe: bool,
is_no_nil: bool,
where_token: tokenizer.Token,
where_clauses: []^Expr,
variants: []^Expr,

View File

@@ -2600,6 +2600,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr {
poly_params: ^ast.Field_List
align: ^ast.Expr
is_maybe: bool
is_no_nil: bool
if allow_token(p, .Open_Paren) {
param_count: int
@@ -2626,6 +2627,11 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr {
error(p, tag.pos, "duplicate union tag '#%s'", tag.text)
}
is_maybe = true
case "no_nil":
if is_no_nil {
error(p, tag.pos, "duplicate union tag '#%s'", tag.text)
}
is_no_nil = true
case:
error(p, tag.pos, "invalid union tag '#%s", tag.text)
}
@@ -2669,6 +2675,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr {
ut.where_token = where_token
ut.where_clauses = where_clauses
ut.is_maybe = is_maybe
ut.is_no_nil = is_no_nil
return ut