From 9b456aaff9d423e000c1afe537591497962029df Mon Sep 17 00:00:00 2001 From: lemon Date: Fri, 19 Aug 2022 12:53:37 +0200 Subject: #tag lvalue --- src/parse.cff | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/parse.cff b/src/parse.cff index 4f78b21..5caa998 100644 --- a/src/parse.cff +++ b/src/parse.cff @@ -1044,6 +1044,8 @@ fn islvalue(ex Expr) bool { return #t; case Dot; return #t; + case EUTag; + return #t; } return #f; } @@ -1556,7 +1558,8 @@ fn pexpostfix(P *Parser) Expr { if !ty->is(:Agg) or ty.u.Agg.kind != :EUnion { fatal(P, ex.loc, "invalid operand to #tag (%t)", ex.ty); } - ex = { tok.loc, ty.u.Agg.enumty, :EUTag(exprdup(P.alloc, ex)) }; + let enumty = ty.u.Agg.enumty; + ex = { tok.loc, ty.konst ? constify(enumty) : enumty, :EUTag(exprdup(P.alloc, ex)) }; case else; lexexpects(P, :ident, "field name"); -- cgit v1.2.3