mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-03 08:34:33 +00:00
refactor some more
This commit is contained in:
parent
1f20ce23bd
commit
e5c2ece4f0
1 changed files with 21 additions and 44 deletions
|
@ -32,6 +32,7 @@ fn list_returned_from_zig<'a, 'ctx, 'env>(
|
||||||
env: &Env<'a, 'ctx, 'env>,
|
env: &Env<'a, 'ctx, 'env>,
|
||||||
output: BasicValueEnum<'ctx>,
|
output: BasicValueEnum<'ctx>,
|
||||||
) -> BasicValueEnum<'ctx> {
|
) -> BasicValueEnum<'ctx> {
|
||||||
|
// per the C ABI, our list objects are passed between functions as an i128
|
||||||
complex_bitcast(
|
complex_bitcast(
|
||||||
env.builder,
|
env.builder,
|
||||||
output,
|
output,
|
||||||
|
@ -100,15 +101,13 @@ pub fn list_repeat<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
let inc_element_fn = build_inc_wrapper(env, layout_ids, element_layout);
|
let inc_element_fn = build_inc_wrapper(env, layout_ids, element_layout);
|
||||||
|
|
||||||
call_bitcode_fn_returns_list(
|
call_bitcode_fn_returns_list(
|
||||||
env,
|
env,
|
||||||
&[
|
&[
|
||||||
list_len.into(),
|
list_len.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, element_layout),
|
||||||
env.builder.build_bitcast(element_ptr, u8_ptr, "to_u8_ptr"),
|
env.builder.build_bitcast(element_ptr, u8_ptr, "to_u8_ptr"),
|
||||||
element_width.into(),
|
element_width.into(),
|
||||||
inc_element_fn.as_global_value().as_pointer_value().into(),
|
inc_element_fn.as_global_value().as_pointer_value().into(),
|
||||||
|
@ -209,12 +208,13 @@ pub fn list_join<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
call_bitcode_fn_returns_list(
|
call_bitcode_fn_returns_list(
|
||||||
env,
|
env,
|
||||||
&[list_i128, alignment_iv.into(), element_width.into()],
|
&[
|
||||||
|
list_i128,
|
||||||
|
alignment_intvalue(env, element_layout),
|
||||||
|
element_width.into(),
|
||||||
|
],
|
||||||
&bitcode::LIST_JOIN,
|
&bitcode::LIST_JOIN,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -254,12 +254,13 @@ pub fn list_reverse<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
call_bitcode_fn_returns_list(
|
call_bitcode_fn_returns_list(
|
||||||
env,
|
env,
|
||||||
&[list_i128, alignment_iv.into(), element_width.into()],
|
&[
|
||||||
|
list_i128,
|
||||||
|
alignment_intvalue(env, &element_layout),
|
||||||
|
element_width.into(),
|
||||||
|
],
|
||||||
&bitcode::LIST_REVERSE,
|
&bitcode::LIST_REVERSE,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -325,14 +326,11 @@ pub fn list_append<'a, 'ctx, 'env>(
|
||||||
let element_ptr = builder.build_alloca(element.get_type(), "element");
|
let element_ptr = builder.build_alloca(element.get_type(), "element");
|
||||||
builder.build_store(element_ptr, element);
|
builder.build_store(element_ptr, element);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
call_bitcode_fn_returns_list(
|
call_bitcode_fn_returns_list(
|
||||||
env,
|
env,
|
||||||
&[
|
&[
|
||||||
list_i128,
|
list_i128,
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &element_layout),
|
||||||
builder.build_bitcast(
|
builder.build_bitcast(
|
||||||
element_ptr,
|
element_ptr,
|
||||||
env.context.i8_type().ptr_type(AddressSpace::Generic),
|
env.context.i8_type().ptr_type(AddressSpace::Generic),
|
||||||
|
@ -550,9 +548,6 @@ fn list_walk_generic<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(default_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(default_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
let result_ptr = env.builder.build_alloca(default.get_type(), "result");
|
let result_ptr = env.builder.build_alloca(default.get_type(), "result");
|
||||||
|
|
||||||
match variant {
|
match variant {
|
||||||
|
@ -565,7 +560,7 @@ fn list_walk_generic<'a, 'ctx, 'env>(
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
env.builder.build_bitcast(default_ptr, u8_ptr, "to_u8_ptr"),
|
env.builder.build_bitcast(default_ptr, u8_ptr, "to_u8_ptr"),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &element_layout),
|
||||||
element_width.into(),
|
element_width.into(),
|
||||||
default_width.into(),
|
default_width.into(),
|
||||||
env.builder.build_bitcast(result_ptr, u8_ptr, "to_opaque"),
|
env.builder.build_bitcast(result_ptr, u8_ptr, "to_opaque"),
|
||||||
|
@ -583,7 +578,7 @@ fn list_walk_generic<'a, 'ctx, 'env>(
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
env.builder.build_bitcast(default_ptr, u8_ptr, "to_u8_ptr"),
|
env.builder.build_bitcast(default_ptr, u8_ptr, "to_u8_ptr"),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &element_layout),
|
||||||
element_width.into(),
|
element_width.into(),
|
||||||
default_width.into(),
|
default_width.into(),
|
||||||
dec_element_fn.as_global_value().as_pointer_value().into(),
|
dec_element_fn.as_global_value().as_pointer_value().into(),
|
||||||
|
@ -725,9 +720,6 @@ pub fn list_keep_if<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
let inc_element_fn = build_inc_wrapper(env, layout_ids, element_layout);
|
let inc_element_fn = build_inc_wrapper(env, layout_ids, element_layout);
|
||||||
let dec_element_fn = build_dec_wrapper(env, layout_ids, element_layout);
|
let dec_element_fn = build_dec_wrapper(env, layout_ids, element_layout);
|
||||||
|
|
||||||
|
@ -738,7 +730,7 @@ pub fn list_keep_if<'a, 'ctx, 'env>(
|
||||||
env.builder
|
env.builder
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &element_layout),
|
||||||
element_width.into(),
|
element_width.into(),
|
||||||
inc_element_fn.as_global_value().as_pointer_value().into(),
|
inc_element_fn.as_global_value().as_pointer_value().into(),
|
||||||
dec_element_fn.as_global_value().as_pointer_value().into(),
|
dec_element_fn.as_global_value().as_pointer_value().into(),
|
||||||
|
@ -833,9 +825,6 @@ pub fn list_keep_result<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(result_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(result_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = before_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
let inc_closure = build_inc_wrapper(env, layout_ids, transform_layout);
|
let inc_closure = build_inc_wrapper(env, layout_ids, transform_layout);
|
||||||
let dec_result_fn = build_dec_wrapper(env, layout_ids, result_layout);
|
let dec_result_fn = build_dec_wrapper(env, layout_ids, result_layout);
|
||||||
|
|
||||||
|
@ -846,7 +835,7 @@ pub fn list_keep_result<'a, 'ctx, 'env>(
|
||||||
env.builder
|
env.builder
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &before_layout),
|
||||||
before_width.into(),
|
before_width.into(),
|
||||||
result_width.into(),
|
result_width.into(),
|
||||||
after_width.into(),
|
after_width.into(),
|
||||||
|
@ -879,9 +868,6 @@ pub fn list_sort_with<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(element_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
call_bitcode_fn_returns_list(
|
call_bitcode_fn_returns_list(
|
||||||
env,
|
env,
|
||||||
&[
|
&[
|
||||||
|
@ -889,7 +875,7 @@ pub fn list_sort_with<'a, 'ctx, 'env>(
|
||||||
env.builder
|
env.builder
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
compare_wrapper.into(),
|
compare_wrapper.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &element_layout),
|
||||||
element_width.into(),
|
element_width.into(),
|
||||||
],
|
],
|
||||||
bitcode::LIST_SORT_WITH,
|
bitcode::LIST_SORT_WITH,
|
||||||
|
@ -976,9 +962,6 @@ fn list_map_generic<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(return_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(return_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = element_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
call_bitcode_fn_returns_list(
|
call_bitcode_fn_returns_list(
|
||||||
env,
|
env,
|
||||||
&[
|
&[
|
||||||
|
@ -986,7 +969,7 @@ fn list_map_generic<'a, 'ctx, 'env>(
|
||||||
env.builder
|
env.builder
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &element_layout),
|
||||||
old_element_width.into(),
|
old_element_width.into(),
|
||||||
new_element_width.into(),
|
new_element_width.into(),
|
||||||
],
|
],
|
||||||
|
@ -1049,9 +1032,6 @@ pub fn list_map2<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(return_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(return_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = return_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
let dec_a = build_dec_wrapper(env, layout_ids, element1_layout);
|
let dec_a = build_dec_wrapper(env, layout_ids, element1_layout);
|
||||||
let dec_b = build_dec_wrapper(env, layout_ids, element2_layout);
|
let dec_b = build_dec_wrapper(env, layout_ids, element2_layout);
|
||||||
|
|
||||||
|
@ -1063,7 +1043,7 @@ pub fn list_map2<'a, 'ctx, 'env>(
|
||||||
env.builder
|
env.builder
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, &transform_layout),
|
||||||
a_width.into(),
|
a_width.into(),
|
||||||
b_width.into(),
|
b_width.into(),
|
||||||
c_width.into(),
|
c_width.into(),
|
||||||
|
@ -1142,9 +1122,6 @@ pub fn list_map3<'a, 'ctx, 'env>(
|
||||||
.ptr_int()
|
.ptr_int()
|
||||||
.const_int(return_layout.stack_size(env.ptr_bytes) as u64, false);
|
.const_int(return_layout.stack_size(env.ptr_bytes) as u64, false);
|
||||||
|
|
||||||
let alignment = return_layout.alignment_bytes(env.ptr_bytes);
|
|
||||||
let alignment_iv = env.ptr_int().const_int(alignment as u64, false);
|
|
||||||
|
|
||||||
let dec_a = build_dec_wrapper(env, layout_ids, element1_layout);
|
let dec_a = build_dec_wrapper(env, layout_ids, element1_layout);
|
||||||
let dec_b = build_dec_wrapper(env, layout_ids, element2_layout);
|
let dec_b = build_dec_wrapper(env, layout_ids, element2_layout);
|
||||||
let dec_c = build_dec_wrapper(env, layout_ids, element3_layout);
|
let dec_c = build_dec_wrapper(env, layout_ids, element3_layout);
|
||||||
|
@ -1158,7 +1135,7 @@ pub fn list_map3<'a, 'ctx, 'env>(
|
||||||
env.builder
|
env.builder
|
||||||
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
.build_bitcast(transform_ptr, u8_ptr, "to_opaque"),
|
||||||
stepper_caller.into(),
|
stepper_caller.into(),
|
||||||
alignment_iv.into(),
|
alignment_intvalue(env, transform_layout),
|
||||||
a_width.into(),
|
a_width.into(),
|
||||||
b_width.into(),
|
b_width.into(),
|
||||||
c_width.into(),
|
c_width.into(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue