This commit is contained in:
gingerBill
2020-04-30 17:48:46 +01:00
2 changed files with 6 additions and 0 deletions

View File

@@ -609,6 +609,7 @@ Union_Type :: struct {
variants: []^Expr,
where_token: tokenizer.Token,
where_clauses: []^Expr,
is_maybe: bool,
}
Enum_Type :: struct {

View File

@@ -2224,6 +2224,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr {
tok := expect_token(p, .Union);
poly_params: ^ast.Field_List;
align: ^ast.Expr;
is_maybe: bool;
if allow_token(p, .Open_Paren) {
param_count: int;
@@ -2244,6 +2245,9 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr {
case "align":
if align != nil do error(p, tag.pos, "duplicate union tag '#%s'", tag.text);
align = parse_expr(p, true);
case "maybe":
if is_maybe do error(p, tag.pos, "duplicate union tag '#%s'", tag.text);
is_maybe = true;
case:
error(p, tag.pos, "invalid union tag '#%s", tag.text);
}
@@ -2282,6 +2286,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr {
ut.align = align;
ut.where_token = where_token;
ut.where_clauses = where_clauses;
ut.is_maybe = is_maybe;
return ut;