diff options
| author | gingerBill <bill@gingerbill.org> | 2023-07-18 13:30:59 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-07-18 13:30:59 +0100 |
| commit | feda213c0c83761612f1ecd947dcf95e07d13b5f (patch) | |
| tree | 42c41e8fe6be85dd44266dff38f5b8320df89d52 /src | |
| parent | c6593e8cdee3bbe3057be7a4728db3293265b663 (diff) | |
Mock out `cg_append_tuple_values`
Diffstat (limited to 'src')
| -rw-r--r-- | src/tilde_backend.cpp | 8 | ||||
| -rw-r--r-- | src/tilde_backend.hpp | 11 | ||||
| -rw-r--r-- | src/tilde_stmt.cpp | 20 |
3 files changed, 18 insertions, 21 deletions
diff --git a/src/tilde_backend.cpp b/src/tilde_backend.cpp index 9c4b9b9a2..9ac2d2f12 100644 --- a/src/tilde_backend.cpp +++ b/src/tilde_backend.cpp @@ -118,15 +118,15 @@ gb_internal cgValue cg_lvalue_addr(TB_Node *node, Type *type) { return v; } -gb_internal cgValue cg_value_multi(cgValueMultiNodes *multi_nodes, Type *type) { +gb_internal cgValue cg_value_multi(cgValueMulti *multi, Type *type) { GB_ASSERT(type->kind == Type_Tuple); - GB_ASSERT(multi_nodes != nullptr); + GB_ASSERT(multi != nullptr); GB_ASSERT(type->Tuple.variables.count > 1); - GB_ASSERT(multi_nodes->nodes.count == type->Tuple.variables.count); + GB_ASSERT(multi->values.count == type->Tuple.variables.count); cgValue v = {}; v.kind = cgValue_Multi; v.type = type; - v.multi_nodes = multi_nodes; + v.multi = multi; return v; } diff --git a/src/tilde_backend.hpp b/src/tilde_backend.hpp index f84a6feae..d84158066 100644 --- a/src/tilde_backend.hpp +++ b/src/tilde_backend.hpp @@ -36,9 +36,7 @@ enum cgValueKind : u32 { cgValue_Multi, }; -struct cgValueMultiNodes { - Slice<TB_Node *> nodes; -}; +struct cgValueMulti; struct cgValue { cgValueKind kind; @@ -46,10 +44,15 @@ struct cgValue { union { TB_Symbol *symbol; TB_Node * node; - cgValueMultiNodes *multi_nodes; + cgValueMulti *multi; }; }; +struct cgValueMulti { + Slice<cgValue> values; +}; + + enum cgAddrKind { cgAddr_Default, cgAddr_Map, diff --git a/src/tilde_stmt.cpp b/src/tilde_stmt.cpp index cc15c2abc..ff4c007ea 100644 --- a/src/tilde_stmt.cpp +++ b/src/tilde_stmt.cpp @@ -155,7 +155,7 @@ gb_internal bool cg_addr_is_empty(cgAddr const &addr) { case cgValue_Symbol: return addr.addr.symbol == nullptr; case cgValue_Multi: - return addr.addr.multi_nodes == nullptr; + return addr.addr.multi == nullptr; } return true; } @@ -710,18 +710,12 @@ gb_internal isize cg_append_tuple_values(cgProcedure *p, Array<cgValue> *dst_val isize init_count = dst_values->count; Type *t = src_value.type; if (t && t->kind == Type_Tuple) { - GB_PANIC("TODO(bill): tuple assignments"); - // cgTupleFix *tf = map_get(&p->tuple_fix_map, src_value.value); - // if (tf) { - // for (cgValue const &value : tf->values) { - // array_add(dst_values, value); - // } - // } else { - // for_array(i, t->Tuple.variables) { - // cgValue v = cg_emit_tuple_ev(p, src_value, cast(i32)i); - // array_add(dst_values, v); - // } - // } + GB_ASSERT(src_value.kind == cgValue_Multi); + GB_ASSERT(src_value.multi != nullptr); + GB_ASSERT(src_value.multi->values.count == t->Tuple.variables.count); + for (cgValue const &value : src_value.multi->values) { + array_add(dst_values, value); + } } else { array_add(dst_values, src_value); } |