aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/cgen.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-11 20:27:48 +0200
committerlemon <lsof@mailbox.org>2022-08-11 20:27:48 +0200
commit19f1093f0929b989a06cdee2e7d175e6db15559c (patch)
treeacf82e3cb1b8e81ff132978b7656c178249c5f15 /bootstrap/cgen.c
parentc7961d732e5d67e8ea1b0be05e979bf24361f794 (diff)
things
Diffstat (limited to 'bootstrap/cgen.c')
-rw-r--r--bootstrap/cgen.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/bootstrap/cgen.c b/bootstrap/cgen.c
index f79e112..1629151 100644
--- a/bootstrap/cgen.c
+++ b/bootstrap/cgen.c
@@ -338,7 +338,7 @@ genstmt(struct stmt *stmt) {
pri("if (%e) ", &stmt->ifelse.test);
genblock(stmt->ifelse.t);
if (stmt->ifelse.f) {
- pri("else ");
+ pri("else\n");
genstmt(stmt->ifelse.f);
}
break;
@@ -389,7 +389,7 @@ genstmt(struct stmt *stmt) {
struct euswitchcase c = stmt->euswitch.cs.d[i];
pri("case /* %s */ %d: ", c.fld->name, c.vval);
if (c.capt)
- pri("{ %t %s_%d__ = __stmp.u.%s;\n", c.fld->ty, c.capt, c.captid, c.fld->name);
+ pri("{ %t %s_%d__ = __stmp.u.%s_;\n", c.fld->ty, c.capt, c.captid, c.fld->name);
genblock(c.t);
if (c.capt)
pri("}\n");
@@ -618,7 +618,7 @@ genfn(bool externp, const char *cname, struct fn *fn) {
pri("static ");
pri("%t %s(", fn->retty, cname);
for (int i = 0; i < fn->params.n; ++i) {
- pri("%t %s", fn->params.d[i].ty, fn->params.d[i].name);
+ pri("%t %s", fn->params.d[i].ty, fn->params.d[i].name ? fn->params.d[i].name : "");
if (i < fn->params.n - 1 || fn->variadic)
pri(", ");
}
@@ -752,6 +752,11 @@ defctype(const struct type *ty, void *_) {
*cname = (char *)unconstify(ty)->_cname;
break;
}
+ for (int i = 0; i < ty->agg.flds.n; ++i) {
+ struct aggfield *fld = &ty->agg.flds.d[i];
+ if (fld->ty)
+ defctype(fld->ty, NULL);
+ }
*cname = xasprintf("__ty%s%d", ty->agg.name ? ty->agg.name : "", id++);
pri("typedef struct %s %s;\n", *cname, *cname);
if (!ty->agg.fwd) {