diff options
Diffstat (limited to 'bootstrap/cgen.c')
| -rw-r--r-- | bootstrap/cgen.c | 10 |
1 files changed, 8 insertions, 2 deletions
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: |