From f8a8add7d0e74d20304b3194e836752a9986ddc3 Mon Sep 17 00:00:00 2001 From: lemon Date: Mon, 8 Aug 2022 09:16:13 +0200 Subject: direct access of eunion fields --- bootstrap/cgen.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'bootstrap/cgen.c') diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c index 433a5a0..f54eccc 100644 --- a/bootstrap/cgen.c +++ b/bootstrap/cgen.c @@ -249,7 +249,10 @@ genexpr(struct expr *ex) { pri("((%t)%n)", ty, ex); break; case Eget: - pri("%e%s%s", ex->get.lhs, ex->get.lhs->ty->t == TYptr ? "->" : ".", ex->get.fld); + pri("%e%s%s%s", ex->get.lhs, ex->get.lhs->ty->t == TYptr ? "->" : ".", + (ex->get.lhs->ty->t == TYeunion + || (ex->get.lhs->ty->t == TYptr && ex->get.lhs->ty->child->t == TYeunion) ? "u." : ""), + ex->get.fld); break; case Emcall: decl = container_of(ex->mcall.met, struct decl, fn); @@ -273,6 +276,9 @@ genexpr(struct expr *ex) { case Elen: pri("%e.len", ex->child); break; + case Eeutag: + pri("%e%st", ex->child, ex->child->ty->t == TYptr ? "->" : "."); + break; case Eeuini: pri("((%t)", ty); geneuiniex(ex); @@ -470,7 +476,7 @@ liftnestedex(struct expr *ex) { case Eblock: liftnested(blocktostmt(ex->block)); break; - case Eas: case Elen: + case Eas: case Elen: case Eeutag: liftnestedex(ex->child); break; case Eini: -- cgit v1.2.3