mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 06:44:46 +00:00
fix Dict.get
This commit is contained in:
parent
7ad5cfa26e
commit
7e0c44b955
1 changed files with 15 additions and 5 deletions
|
@ -283,6 +283,8 @@ pub fn dict_get<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(value_layout.stack_size(env.target_info) as u64, false);
|
.const_int(value_layout.stack_size(env.target_info) as u64, false);
|
||||||
|
|
||||||
|
let value_bt = basic_type_from_layout(env, value_layout);
|
||||||
|
|
||||||
let alignment = Alignment::from_key_value_layout(key_layout, value_layout, env.target_info);
|
let alignment = Alignment::from_key_value_layout(key_layout, value_layout, env.target_info);
|
||||||
let alignment_iv = alignment.as_int_value(env.context);
|
let alignment_iv = alignment.as_int_value(env.context);
|
||||||
|
|
||||||
|
@ -308,17 +310,26 @@ pub fn dict_get<'a, 'ctx, 'env>(
|
||||||
)
|
)
|
||||||
.into_struct_value();
|
.into_struct_value();
|
||||||
|
|
||||||
let flag = env
|
let flag_u8 = env
|
||||||
.builder
|
.builder
|
||||||
.build_extract_value(result, 1, "get_flag")
|
.build_extract_value(result, 1, "get_flag")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.into_int_value();
|
.into_int_value();
|
||||||
|
|
||||||
|
let flag = env
|
||||||
|
.builder
|
||||||
|
.build_int_cast(flag_u8, env.context.bool_type(), "to_bool");
|
||||||
|
|
||||||
|
let value_u8_ptr_int = env
|
||||||
|
.builder
|
||||||
|
.build_extract_value(result, 0, "get_value_ptr_int")
|
||||||
|
.unwrap()
|
||||||
|
.into_int_value();
|
||||||
|
|
||||||
|
let ptr_type = value_bt.ptr_type(AddressSpace::Generic);
|
||||||
let value_u8_ptr = env
|
let value_u8_ptr = env
|
||||||
.builder
|
.builder
|
||||||
.build_extract_value(result, 0, "get_value_ptr")
|
.build_int_to_ptr(value_u8_ptr_int, ptr_type, "opaque_value_ptr");
|
||||||
.unwrap()
|
|
||||||
.into_pointer_value();
|
|
||||||
|
|
||||||
let start_block = env.builder.get_insert_block().unwrap();
|
let start_block = env.builder.get_insert_block().unwrap();
|
||||||
let parent = start_block.get_parent().unwrap();
|
let parent = start_block.get_parent().unwrap();
|
||||||
|
@ -326,7 +337,6 @@ pub fn dict_get<'a, 'ctx, 'env>(
|
||||||
let if_not_null = env.context.append_basic_block(parent, "if_not_null");
|
let if_not_null = env.context.append_basic_block(parent, "if_not_null");
|
||||||
let done_block = env.context.append_basic_block(parent, "done");
|
let done_block = env.context.append_basic_block(parent, "done");
|
||||||
|
|
||||||
let value_bt = basic_type_from_layout(env, value_layout);
|
|
||||||
let default = value_bt.const_zero();
|
let default = value_bt.const_zero();
|
||||||
|
|
||||||
env.builder
|
env.builder
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue