summaryrefslogtreecommitdiff
path: root/cgen.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2020-02-19 11:13:17 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2020-02-19 11:13:17 -0500
commit9bb0fab71acd8c730fff396bd93154f916ba397b (patch)
tree7910460de8e35fc322505178db3870ecce07fc62 /cgen.c
parentdc2445ffcf7e88fd33bbf8d878c0812ec2732ccf (diff)
struct parameters seem to be working
Diffstat (limited to 'cgen.c')
-rw-r--r--cgen.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/cgen.c b/cgen.c
index 7628bd2..27cf651 100644
--- a/cgen.c
+++ b/cgen.c
@@ -338,6 +338,19 @@ static bool cgen_uses_ptr(Type *t) {
return false;
}
+static void cgen_struct_name(CGenerator *g, StructDef *sdef) {
+ if (sdef->name) {
+ cgen_ident(g, sdef->name);
+ } else {
+ assert(sdef->c.id);
+ cgen_ident_id(g, sdef->c.id);
+ }
+ if (sdef->instance_id) {
+ possibly_static_assert(sizeof sdef->instance_id == 8);
+ cgen_write(g, U64_FMT, sdef->instance_id);
+ }
+}
+
static bool cgen_type_pre(CGenerator *g, Type *t, Location where) {
assert(t->flags & TYPE_IS_RESOLVED);
switch (t->kind) {
@@ -387,13 +400,7 @@ static bool cgen_type_pre(CGenerator *g, Type *t, Location where) {
return false;
case TYPE_STRUCT:
cgen_write(g, "struct ");
- if (t->struc->name) {
- cgen_ident(g, t->struc->name);
- } else if (t->struc->c.id) {
- cgen_ident_id(g, t->struc->c.id);
- } else {
- assert(0);
- }
+ cgen_struct_name(g, t->struc);
break;
case TYPE_TUPLE:
case TYPE_EXPR:
@@ -1591,7 +1598,7 @@ static bool cgen_expr(CGenerator *g, Expression *e) {
case BUILTIN_SIZEOF_SIZE_T:
case BUILTIN_TSIZEOF_SIZE_T: {
Value val = get_builtin_val(e->builtin.which.val);
- cgen_write(g, "%"I64_FMT, val.i64);
+ cgen_write(g, I64_FMT, val.i64);
} break;
}
break;