mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Mock out cg_append_tuple_values
This commit is contained in:
@@ -118,15 +118,15 @@ gb_internal cgValue cg_lvalue_addr(TB_Node *node, Type *type) {
|
|||||||
return v;
|
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(type->kind == Type_Tuple);
|
||||||
GB_ASSERT(multi_nodes != nullptr);
|
GB_ASSERT(multi != nullptr);
|
||||||
GB_ASSERT(type->Tuple.variables.count > 1);
|
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 = {};
|
cgValue v = {};
|
||||||
v.kind = cgValue_Multi;
|
v.kind = cgValue_Multi;
|
||||||
v.type = type;
|
v.type = type;
|
||||||
v.multi_nodes = multi_nodes;
|
v.multi = multi;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,7 @@ enum cgValueKind : u32 {
|
|||||||
cgValue_Multi,
|
cgValue_Multi,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cgValueMultiNodes {
|
struct cgValueMulti;
|
||||||
Slice<TB_Node *> nodes;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct cgValue {
|
struct cgValue {
|
||||||
cgValueKind kind;
|
cgValueKind kind;
|
||||||
@@ -46,10 +44,15 @@ struct cgValue {
|
|||||||
union {
|
union {
|
||||||
TB_Symbol *symbol;
|
TB_Symbol *symbol;
|
||||||
TB_Node * node;
|
TB_Node * node;
|
||||||
cgValueMultiNodes *multi_nodes;
|
cgValueMulti *multi;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct cgValueMulti {
|
||||||
|
Slice<cgValue> values;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
enum cgAddrKind {
|
enum cgAddrKind {
|
||||||
cgAddr_Default,
|
cgAddr_Default,
|
||||||
cgAddr_Map,
|
cgAddr_Map,
|
||||||
|
|||||||
+7
-13
@@ -155,7 +155,7 @@ gb_internal bool cg_addr_is_empty(cgAddr const &addr) {
|
|||||||
case cgValue_Symbol:
|
case cgValue_Symbol:
|
||||||
return addr.addr.symbol == nullptr;
|
return addr.addr.symbol == nullptr;
|
||||||
case cgValue_Multi:
|
case cgValue_Multi:
|
||||||
return addr.addr.multi_nodes == nullptr;
|
return addr.addr.multi == nullptr;
|
||||||
}
|
}
|
||||||
return true;
|
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;
|
isize init_count = dst_values->count;
|
||||||
Type *t = src_value.type;
|
Type *t = src_value.type;
|
||||||
if (t && t->kind == Type_Tuple) {
|
if (t && t->kind == Type_Tuple) {
|
||||||
GB_PANIC("TODO(bill): tuple assignments");
|
GB_ASSERT(src_value.kind == cgValue_Multi);
|
||||||
// cgTupleFix *tf = map_get(&p->tuple_fix_map, src_value.value);
|
GB_ASSERT(src_value.multi != nullptr);
|
||||||
// if (tf) {
|
GB_ASSERT(src_value.multi->values.count == t->Tuple.variables.count);
|
||||||
// for (cgValue const &value : tf->values) {
|
for (cgValue const &value : src_value.multi->values) {
|
||||||
// array_add(dst_values, value);
|
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);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
} else {
|
} else {
|
||||||
array_add(dst_values, src_value);
|
array_add(dst_values, src_value);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user