mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-03 19:58:18 +00:00
load_roc_value by layoutrepr
This commit is contained in:
parent
07f40baf62
commit
390e9f8648
9 changed files with 95 additions and 36 deletions
|
@ -261,7 +261,7 @@ fn build_transform_caller_help<'a, 'ctx>(
|
|||
let argument = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
*layout,
|
||||
layout_interner.get_repr(*layout),
|
||||
cast_ptr,
|
||||
"zig_helper_load_opaque",
|
||||
);
|
||||
|
@ -287,8 +287,13 @@ fn build_transform_caller_help<'a, 'ctx>(
|
|||
env.builder
|
||||
.build_pointer_cast(closure_ptr, closure_type, "cast_opaque_closure");
|
||||
|
||||
let closure_data =
|
||||
load_roc_value(env, layout_interner, layout, closure_cast, "load_closure");
|
||||
let closure_data = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(layout),
|
||||
closure_cast,
|
||||
"load_closure",
|
||||
);
|
||||
|
||||
arguments_cast.push(closure_data);
|
||||
}
|
||||
|
@ -520,8 +525,20 @@ pub fn build_eq_wrapper<'a, 'ctx>(
|
|||
.build_pointer_cast(value_ptr2, value_type, "load_opaque");
|
||||
|
||||
// load_roc_value(env, *element_layout, elem_ptr, "get_elem")
|
||||
let value1 = load_roc_value(env, layout_interner, layout, value_cast1, "load_opaque");
|
||||
let value2 = load_roc_value(env, layout_interner, layout, value_cast2, "load_opaque");
|
||||
let value1 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(layout),
|
||||
value_cast1,
|
||||
"load_opaque",
|
||||
);
|
||||
let value2 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(layout),
|
||||
value_cast2,
|
||||
"load_opaque",
|
||||
);
|
||||
|
||||
let result = crate::llvm::compare::generic_eq(
|
||||
env,
|
||||
|
@ -610,8 +627,20 @@ pub fn build_compare_wrapper<'a, 'ctx>(
|
|||
env.builder
|
||||
.build_pointer_cast(value_ptr2, value_ptr_type, "load_opaque");
|
||||
|
||||
let value1 = load_roc_value(env, layout_interner, layout, value_cast1, "load_opaque");
|
||||
let value2 = load_roc_value(env, layout_interner, layout, value_cast2, "load_opaque");
|
||||
let value1 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(layout),
|
||||
value_cast1,
|
||||
"load_opaque",
|
||||
);
|
||||
let value2 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(layout),
|
||||
value_cast2,
|
||||
"load_opaque",
|
||||
);
|
||||
|
||||
increment_refcount_layout(env, layout_interner, layout_ids, 1, value1, layout);
|
||||
increment_refcount_layout(env, layout_interner, layout_ids, 1, value2, layout);
|
||||
|
|
|
@ -1125,7 +1125,7 @@ pub(crate) fn build_exp_expr<'a, 'ctx>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout,
|
||||
layout_interner.get_repr(layout),
|
||||
value.into_pointer_value(),
|
||||
"load_boxed_value",
|
||||
)
|
||||
|
@ -1357,7 +1357,7 @@ pub(crate) fn build_exp_expr<'a, 'ctx>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
field_layouts[*index as usize],
|
||||
layout_interner.get_repr(field_layouts[*index as usize]),
|
||||
element_ptr,
|
||||
"load_element",
|
||||
)
|
||||
|
@ -2054,7 +2054,7 @@ fn lookup_at_index_ptr<'a, 'ctx>(
|
|||
let result = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
field_layout,
|
||||
layout_interner.get_repr(field_layout),
|
||||
elem_ptr,
|
||||
"load_at_index_ptr_old",
|
||||
);
|
||||
|
@ -2102,7 +2102,7 @@ fn lookup_at_index_ptr2<'a, 'ctx>(
|
|||
let result = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
field_layout,
|
||||
layout_interner.get_repr(field_layout),
|
||||
elem_ptr,
|
||||
"load_at_index_ptr",
|
||||
);
|
||||
|
@ -2378,22 +2378,16 @@ fn list_literal<'a, 'ctx>(
|
|||
pub fn load_roc_value<'a, 'ctx>(
|
||||
env: &Env<'a, 'ctx, '_>,
|
||||
layout_interner: &STLayoutInterner<'a>,
|
||||
layout: InLayout<'a>,
|
||||
layout: LayoutRepr<'a>,
|
||||
source: PointerValue<'ctx>,
|
||||
name: &str,
|
||||
) -> BasicValueEnum<'ctx> {
|
||||
let basic_type = basic_type_from_layout(env, layout_interner, layout_interner.get_repr(layout));
|
||||
let basic_type = basic_type_from_layout(env, layout_interner, layout);
|
||||
|
||||
if layout_interner.is_passed_by_reference(layout) {
|
||||
if layout.is_passed_by_reference(layout_interner) {
|
||||
let alloca = entry_block_alloca_zerofill(env, basic_type, name);
|
||||
|
||||
store_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(layout),
|
||||
alloca,
|
||||
source.into(),
|
||||
);
|
||||
store_roc_value(env, layout_interner, layout, alloca, source.into());
|
||||
|
||||
alloca.into()
|
||||
} else {
|
||||
|
|
|
@ -161,7 +161,7 @@ pub(crate) fn list_get_unsafe<'a, 'ctx>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
element_layout,
|
||||
layout_interner.get_repr(element_layout),
|
||||
elem_ptr,
|
||||
"list_get_load_element",
|
||||
)
|
||||
|
@ -723,7 +723,7 @@ where
|
|||
let elem = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
element_layout,
|
||||
layout_interner.get_repr(element_layout),
|
||||
element_ptr,
|
||||
"incrementing_element_loop_load",
|
||||
);
|
||||
|
|
|
@ -25,7 +25,7 @@ pub(crate) fn decode_from_utf8_result<'a, 'ctx>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout,
|
||||
layout_interner.get_repr(layout),
|
||||
pointer,
|
||||
"load_decode_from_utf8_result",
|
||||
)
|
||||
|
|
|
@ -579,14 +579,26 @@ fn build_list_eq_help<'a, 'ctx>(
|
|||
let elem_ptr = unsafe {
|
||||
builder.new_build_in_bounds_gep(element_type, ptr1, &[curr_index], "load_index")
|
||||
};
|
||||
load_roc_value(env, layout_interner, element_layout, elem_ptr, "get_elem")
|
||||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(element_layout),
|
||||
elem_ptr,
|
||||
"get_elem",
|
||||
)
|
||||
};
|
||||
|
||||
let elem2 = {
|
||||
let elem_ptr = unsafe {
|
||||
builder.new_build_in_bounds_gep(element_type, ptr2, &[curr_index], "load_index")
|
||||
};
|
||||
load_roc_value(env, layout_interner, element_layout, elem_ptr, "get_elem")
|
||||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(element_layout),
|
||||
elem_ptr,
|
||||
"get_elem",
|
||||
)
|
||||
};
|
||||
|
||||
let are_equal = build_eq(
|
||||
|
@ -1318,14 +1330,14 @@ fn eq_ptr_to_struct<'a, 'ctx>(
|
|||
let struct1 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
struct_layout,
|
||||
layout_interner.get_repr(struct_layout),
|
||||
struct1_ptr,
|
||||
"load_struct1",
|
||||
);
|
||||
let struct2 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
struct_layout,
|
||||
layout_interner.get_repr(struct_layout),
|
||||
struct2_ptr,
|
||||
"load_struct2",
|
||||
);
|
||||
|
@ -1466,8 +1478,20 @@ fn build_box_eq_help<'a, 'ctx>(
|
|||
let box1 = box1.into_pointer_value();
|
||||
let box2 = box2.into_pointer_value();
|
||||
|
||||
let value1 = load_roc_value(env, layout_interner, inner_layout, box1, "load_box1");
|
||||
let value2 = load_roc_value(env, layout_interner, inner_layout, box2, "load_box2");
|
||||
let value1 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(inner_layout),
|
||||
box1,
|
||||
"load_box1",
|
||||
);
|
||||
let value2 = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(inner_layout),
|
||||
box2,
|
||||
"load_box2",
|
||||
);
|
||||
|
||||
let is_equal = build_eq(
|
||||
env,
|
||||
|
|
|
@ -364,7 +364,13 @@ fn build_clone<'a, 'ctx>(
|
|||
build_copy(env, ptr, cursors.offset, cursors.extra_offset.into());
|
||||
|
||||
let source = value.into_pointer_value();
|
||||
let value = load_roc_value(env, layout_interner, inner_layout, source, "inner");
|
||||
let value = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(inner_layout),
|
||||
source,
|
||||
"inner",
|
||||
);
|
||||
|
||||
let inner_width = env
|
||||
.ptr_int()
|
||||
|
|
|
@ -277,7 +277,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout,
|
||||
layout_interner.get_repr(layout),
|
||||
roc_return_alloca,
|
||||
"str_to_num_result",
|
||||
)
|
||||
|
@ -2235,7 +2235,7 @@ fn build_int_unary_op<'a, 'ctx, 'env>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
return_layout,
|
||||
layout_interner.get_repr(return_layout),
|
||||
roc_return_alloca,
|
||||
"num_to_int",
|
||||
)
|
||||
|
|
|
@ -945,7 +945,13 @@ fn modify_refcount_box_help<'a, 'ctx>(
|
|||
{
|
||||
env.builder.position_at_end(do_recurse_block);
|
||||
|
||||
let inner = load_roc_value(env, layout_interner, inner_layout, boxed, "inner");
|
||||
let inner = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
layout_interner.get_repr(inner_layout),
|
||||
boxed,
|
||||
"inner",
|
||||
);
|
||||
|
||||
modify_refcount_layout(
|
||||
env,
|
||||
|
@ -1348,7 +1354,7 @@ fn build_rec_union_recursive_decrement<'a, 'ctx>(
|
|||
let field = load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
*field_layout,
|
||||
layout_interner.get_repr(*field_layout),
|
||||
elem_pointer,
|
||||
"decrement_struct_field",
|
||||
);
|
||||
|
|
|
@ -155,7 +155,7 @@ fn index_struct_ptr<'a, 'ctx>(
|
|||
load_roc_value(
|
||||
env,
|
||||
layout_interner,
|
||||
field_layout,
|
||||
layout_interner.get_repr(field_layout),
|
||||
field_value,
|
||||
"struct_field",
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue