aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-07-18 13:30:59 +0100
committergingerBill <bill@gingerbill.org>2023-07-18 13:30:59 +0100
commitfeda213c0c83761612f1ecd947dcf95e07d13b5f (patch)
tree42c41e8fe6be85dd44266dff38f5b8320df89d52 /src
parentc6593e8cdee3bbe3057be7a4728db3293265b663 (diff)
Mock out `cg_append_tuple_values`
Diffstat (limited to 'src')
-rw-r--r--src/tilde_backend.cpp8
-rw-r--r--src/tilde_backend.hpp11
-rw-r--r--src/tilde_stmt.cpp20
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);
}