mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
Use Str.split bitcode with proper arguments and names
This commit is contained in:
parent
006bc6163b
commit
5561f9787e
2 changed files with 30 additions and 9 deletions
|
@ -3078,8 +3078,7 @@ fn build_float_binop<'a, 'ctx, 'env>(
|
||||||
let result = bd.build_float_add(lhs, rhs, "add_float");
|
let result = bd.build_float_add(lhs, rhs, "add_float");
|
||||||
|
|
||||||
let is_finite =
|
let is_finite =
|
||||||
call_bitcode_fn(NumIsFinite, env, &[result.into()], &bitcode::MATH_IS_FINITE)
|
call_bitcode_fn(env, &[result.into()], &bitcode::MATH_IS_FINITE).into_int_value();
|
||||||
.into_int_value();
|
|
||||||
|
|
||||||
let then_block = context.append_basic_block(parent, "then_block");
|
let then_block = context.append_basic_block(parent, "then_block");
|
||||||
let throw_block = context.append_basic_block(parent, "throw_block");
|
let throw_block = context.append_basic_block(parent, "throw_block");
|
||||||
|
@ -3099,7 +3098,8 @@ fn build_float_binop<'a, 'ctx, 'env>(
|
||||||
|
|
||||||
let result = bd.build_float_add(lhs, rhs, "add_float");
|
let result = bd.build_float_add(lhs, rhs, "add_float");
|
||||||
|
|
||||||
let is_finite = call_bitcode_fn(env, &[result.into()], "is_finite_").into_int_value();
|
let is_finite =
|
||||||
|
call_bitcode_fn(env, &[result.into()], &bitcode::MATH_IS_FINITE).into_int_value();
|
||||||
let is_infinite = bd.build_not(is_finite, "negate");
|
let is_infinite = bd.build_not(is_finite, "negate");
|
||||||
|
|
||||||
let struct_type = context.struct_type(
|
let struct_type = context.struct_type(
|
||||||
|
|
|
@ -7,6 +7,7 @@ use inkwell::builder::Builder;
|
||||||
use inkwell::types::BasicTypeEnum;
|
use inkwell::types::BasicTypeEnum;
|
||||||
use inkwell::values::{BasicValueEnum, FunctionValue, IntValue, PointerValue, StructValue};
|
use inkwell::values::{BasicValueEnum, FunctionValue, IntValue, PointerValue, StructValue};
|
||||||
use inkwell::{AddressSpace, IntPredicate};
|
use inkwell::{AddressSpace, IntPredicate};
|
||||||
|
use roc_builtins::bitcode;
|
||||||
use roc_module::symbol::Symbol;
|
use roc_module::symbol::Symbol;
|
||||||
use roc_mono::layout::{Builtin, Layout};
|
use roc_mono::layout::{Builtin, Layout};
|
||||||
|
|
||||||
|
@ -34,25 +35,45 @@ pub fn str_split<'a, 'ctx, 'env>(
|
||||||
parent,
|
parent,
|
||||||
*str_ptr,
|
*str_ptr,
|
||||||
str_wrapper_type,
|
str_wrapper_type,
|
||||||
|_, _str_len, _str_smallness| {
|
|_, str_len, _str_smallness| {
|
||||||
load_str(
|
load_str(
|
||||||
env,
|
env,
|
||||||
parent,
|
parent,
|
||||||
*delimiter_ptr,
|
*delimiter_ptr,
|
||||||
str_wrapper_type,
|
str_wrapper_type,
|
||||||
|_, _delimiter_len, _delimiter_smallness| {
|
|_, delimiter_len, _delimiter_smallness| {
|
||||||
let str_ = builder.build_load(*str_ptr, "get_str");
|
let str_ = builder.build_load(*str_ptr, "get_str");
|
||||||
|
|
||||||
let delimiter = builder.build_load(*delimiter_ptr, "get_delimiter");
|
let delimiter = builder.build_load(*delimiter_ptr, "get_delimiter");
|
||||||
|
|
||||||
let segment_count = call_bitcode_fn(env, &[str_, delimiter], "count_segments_")
|
let segment_count = call_bitcode_fn(
|
||||||
.into_int_value();
|
env,
|
||||||
|
&[
|
||||||
|
str_,
|
||||||
|
BasicValueEnum::IntValue(str_len),
|
||||||
|
delimiter,
|
||||||
|
BasicValueEnum::IntValue(delimiter_len),
|
||||||
|
],
|
||||||
|
&bitcode::STR_COUNT_SEGMENTS,
|
||||||
|
);
|
||||||
|
|
||||||
let ret_list_ptr = allocate_list(env, inplace, &CHAR_LAYOUT, segment_count);
|
let ret_list_ptr =
|
||||||
|
allocate_list(env, inplace, &CHAR_LAYOUT, segment_count.into_int_value());
|
||||||
|
|
||||||
let ret_list = builder.build_load(ret_list_ptr, "get_str_split_ret_list");
|
let ret_list = builder.build_load(ret_list_ptr, "get_str_split_ret_list");
|
||||||
|
|
||||||
call_bitcode_fn(env, &[ret_list, str_, delimiter], "str_split_")
|
call_bitcode_fn(
|
||||||
|
env,
|
||||||
|
&[
|
||||||
|
ret_list,
|
||||||
|
segment_count,
|
||||||
|
str_,
|
||||||
|
BasicValueEnum::IntValue(str_len),
|
||||||
|
delimiter,
|
||||||
|
BasicValueEnum::IntValue(delimiter_len),
|
||||||
|
],
|
||||||
|
&bitcode::STR_STR_SPLIT_IN_PLACE,
|
||||||
|
)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue