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 is_finite =
|
||||
call_bitcode_fn(NumIsFinite, env, &[result.into()], &bitcode::MATH_IS_FINITE)
|
||||
.into_int_value();
|
||||
call_bitcode_fn(env, &[result.into()], &bitcode::MATH_IS_FINITE).into_int_value();
|
||||
|
||||
let then_block = context.append_basic_block(parent, "then_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 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 struct_type = context.struct_type(
|
||||
|
|
|
@ -7,6 +7,7 @@ use inkwell::builder::Builder;
|
|||
use inkwell::types::BasicTypeEnum;
|
||||
use inkwell::values::{BasicValueEnum, FunctionValue, IntValue, PointerValue, StructValue};
|
||||
use inkwell::{AddressSpace, IntPredicate};
|
||||
use roc_builtins::bitcode;
|
||||
use roc_module::symbol::Symbol;
|
||||
use roc_mono::layout::{Builtin, Layout};
|
||||
|
||||
|
@ -34,25 +35,45 @@ pub fn str_split<'a, 'ctx, 'env>(
|
|||
parent,
|
||||
*str_ptr,
|
||||
str_wrapper_type,
|
||||
|_, _str_len, _str_smallness| {
|
||||
|_, str_len, _str_smallness| {
|
||||
load_str(
|
||||
env,
|
||||
parent,
|
||||
*delimiter_ptr,
|
||||
str_wrapper_type,
|
||||
|_, _delimiter_len, _delimiter_smallness| {
|
||||
|_, delimiter_len, _delimiter_smallness| {
|
||||
let str_ = builder.build_load(*str_ptr, "get_str");
|
||||
|
||||
let delimiter = builder.build_load(*delimiter_ptr, "get_delimiter");
|
||||
|
||||
let segment_count = call_bitcode_fn(env, &[str_, delimiter], "count_segments_")
|
||||
.into_int_value();
|
||||
let segment_count = call_bitcode_fn(
|
||||
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");
|
||||
|
||||
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