Browse Source

Mock out `cg_append_tuple_values`

gingerBill 2 years ago
parent
commit
feda213c0c
3 changed files with 18 additions and 21 deletions
  1. 4 4
      src/tilde_backend.cpp
  2. 7 4
      src/tilde_backend.hpp
  3. 7 13
      src/tilde_stmt.cpp

+ 4 - 4
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;
 }
 

+ 7 - 4
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,

+ 7 - 13
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);
 	}