authorgravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-01-06 17:49:24+01:00
committergravatar for jhc@dismail.deJimmi Holst Christensen <jhc@dismail.de> 2019-01-06 17:49:24+01:00
loge410b1f915974fe3daeebae324e8c4e4b42090dd
treecd70fbe70b7bedfe32613c43e40d51387519162a
parentdb928915878c64f9e5c479739bd768bd4ac0b912

Implemented buf_read_value_bytes for ZigTypeIdArray

* Only for x_array.special == ConstArraySpecialNone

1 files changed, 23 insertions(+), 2 deletions(-)

src/ir.cpp+23-2
......@@ -20179,8 +20179,29 @@ static Error buf_read_value_bytes(IrAnalyze *ira, AstNode *source_node, uint8_t
2017920179 val->data.x_ptr.data.hard_coded_addr.addr = bigint_as_unsigned(&bn);
2018020180 return ErrorNone;
2018120181 }
20182 case ZigTypeIdArray:
20183 zig_panic("TODO buf_read_value_bytes array type");
20182 case ZigTypeIdArray: {
20183 uint64_t elem_size = type_size(ira->codegen, val->type->data.array.child_type);
20184 size_t len = val->type->data.array.len;
20185
20186 switch (val->data.x_array.special) {
20187 case ConstArraySpecialNone:
20188 val->data.x_array.data.s_none.elements = create_const_vals(len);
20189 for (size_t i = 0; i < len; i++) {
20190 ConstExprValue *elem = &val->data.x_array.data.s_none.elements[i];
20191 elem->special = ConstValSpecialStatic;
20192 elem->type = val->type->data.array.child_type;
20193 if ((err = buf_read_value_bytes(ira, source_node, buf + (elem_size * i), elem)))
20194 return err;
20195 }
20196 break;
20197 case ConstArraySpecialUndef:
20198 zig_panic("TODO buf_read_value_bytes ConstArraySpecialUndef array type");
20199 case ConstArraySpecialBuf:
20200 zig_panic("TODO buf_read_value_bytes ConstArraySpecialBuf array type");
20201 }
20202
20203 return ErrorNone;
20204 }
2018420205 case ZigTypeIdStruct:
2018520206 switch (val->type->data.structure.layout) {
2018620207 case ContainerLayoutAuto: {