diff options
| author | gingerBill <bill@gingerbill.org> | 2023-08-07 15:04:03 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-08-07 15:04:03 +0100 |
| commit | 55c9fb7c5c416ff0b94d0a9a531c41662a4eeb54 (patch) | |
| tree | 3147103c25b86ac4c6bb1f4dccfe1a595ad669f3 /src/tilde_expr.cpp | |
| parent | 8201a9ce6ea1d2a89d51f891305d27f5196dc6c9 (diff) | |
Tilde: Begin work on #soa
Diffstat (limited to 'src/tilde_expr.cpp')
| -rw-r--r-- | src/tilde_expr.cpp | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/tilde_expr.cpp b/src/tilde_expr.cpp index 6dadc5c67..ece8e0816 100644 --- a/src/tilde_expr.cpp +++ b/src/tilde_expr.cpp @@ -147,8 +147,7 @@ gb_internal cgAddr cg_build_addr_from_entity(cgProcedure *p, Entity *e, Ast *exp // NOTE(bill): Calculate the using variable every time v = cg_get_using_variable(p, e); } else if (e->flags & EntityFlag_SoaPtrField) { - GB_PANIC("TODO(bill): cg_get_soa_variable_addr"); - // return cg_get_soa_variable_addr(p, e); + return map_must_get(&p->soa_values_map, e); } @@ -3541,15 +3540,13 @@ gb_internal cgAddr cg_build_addr_index_expr(cgProcedure *p, Ast *expr) { bool deref = is_type_pointer(t); t = base_type(type_deref(t)); if (is_type_soa_struct(t)) { - GB_PANIC("TODO(bill): #soa"); - // // SOA STRUCTURES!!!! - // lbValue val = cg_build_addr_ptr(p, ie->expr); - // if (deref) { - // val = cg_emit_load(p, val); - // } + cgValue val = cg_build_addr_ptr(p, ie->expr); + if (deref) { + val = cg_emit_load(p, val); + } - // cgValue index = cg_build_expr(p, ie->index); - // return cg_addr_soa_variable(val, index, ie->index); + cgValue index = cg_build_expr(p, ie->index); + return cg_addr_soa_variable(val, index, ie->index); } if (ie->expr->tav.mode == Addressing_SoaVariable) { @@ -3788,8 +3785,7 @@ gb_internal cgAddr cg_build_addr_internal(cgProcedure *p, Ast *expr) { cgValue value = cg_build_expr(p, de->expr); cgValue ptr = cg_emit_struct_ev(p, value, 0); cgValue idx = cg_emit_struct_ev(p, value, 1); - GB_PANIC("TODO(bill): cg_addr_soa_variable"); - // return cg_addr_soa_variable(ptr, idx, nullptr); + return cg_addr_soa_variable(ptr, idx, nullptr); } cgValue addr = cg_build_expr(p, de->expr); return cg_addr(addr); |