Str.trim and friends

This commit is contained in:
Folkert 2022-03-26 18:03:53 +01:00
parent 57ff0e8212
commit 576e02ed85
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
2 changed files with 13 additions and 51 deletions

View file

@ -2,7 +2,8 @@ use std::convert::{TryFrom, TryInto};
use std::path::Path; use std::path::Path;
use crate::llvm::bitcode::{ use crate::llvm::bitcode::{
call_bitcode_fn, call_bitcode_fn_fixing_for_convention, call_void_bitcode_fn, call_bitcode_fn, call_bitcode_fn_fixing_for_convention, call_str_bitcode_fn,
call_void_bitcode_fn,
}; };
use crate::llvm::build_dict::{ use crate::llvm::build_dict::{
self, dict_contains, dict_difference, dict_empty, dict_get, dict_insert, dict_intersection, self, dict_contains, dict_difference, dict_empty, dict_get, dict_insert, dict_intersection,
@ -17,10 +18,9 @@ use crate::llvm::build_list::{
list_single, list_sort_with, list_sublist, list_swap, list_to_c_abi, list_single, list_sort_with, list_sublist, list_swap, list_to_c_abi,
}; };
use crate::llvm::build_str::{ use crate::llvm::build_str::{
str_concat, str_count_graphemes, str_ends_with, str_from_float, str_from_int, str_from_utf8, str_concat, str_ends_with, str_from_float, str_from_int, str_from_utf8, str_from_utf8_range,
str_from_utf8_range, str_join_with, str_number_of_bytes, str_repeat, str_split, str_join_with, str_number_of_bytes, str_repeat, str_split, str_starts_with,
str_starts_with, str_starts_with_code_point, str_to_utf8, str_trim, str_trim_left, str_starts_with_code_point, str_to_utf8,
str_trim_right,
}; };
use crate::llvm::compare::{generic_eq, generic_neq}; use crate::llvm::compare::{generic_eq, generic_neq};
use crate::llvm::convert::{ use crate::llvm::convert::{
@ -5473,25 +5473,29 @@ fn run_low_level<'a, 'ctx, 'env>(
// Str.countGraphemes : Str -> Int // Str.countGraphemes : Str -> Int
debug_assert_eq!(args.len(), 1); debug_assert_eq!(args.len(), 1);
str_count_graphemes(env, scope, args[0]) let string = load_symbol(scope, &args[0]);
call_bitcode_fn(env, &[string], bitcode::STR_COUNT_GRAPEHEME_CLUSTERS)
} }
StrTrim => { StrTrim => {
// Str.trim : Str -> Str // Str.trim : Str -> Str
debug_assert_eq!(args.len(), 1); debug_assert_eq!(args.len(), 1);
str_trim(env, scope, args[0]) let string = load_symbol(scope, &args[0]);
call_str_bitcode_fn(env, &[string], bitcode::STR_TRIM)
} }
StrTrimLeft => { StrTrimLeft => {
// Str.trim : Str -> Str // Str.trim : Str -> Str
debug_assert_eq!(args.len(), 1); debug_assert_eq!(args.len(), 1);
str_trim_left(env, scope, args[0]) let string = load_symbol(scope, &args[0]);
call_str_bitcode_fn(env, &[string], bitcode::STR_TRIM_LEFT)
} }
StrTrimRight => { StrTrimRight => {
// Str.trim : Str -> Str // Str.trim : Str -> Str
debug_assert_eq!(args.len(), 1); debug_assert_eq!(args.len(), 1);
str_trim_right(env, scope, args[0]) let string = load_symbol(scope, &args[0]);
call_str_bitcode_fn(env, &[string], bitcode::STR_TRIM_RIGHT)
} }
ListLen => { ListLen => {
// List.len : List * -> Int // List.len : List * -> Int

View file

@ -220,48 +220,6 @@ pub fn str_ends_with<'a, 'ctx, 'env>(
) )
} }
/// Str.countGraphemes : Str -> Int
pub fn str_count_graphemes<'a, 'ctx, 'env>(
env: &Env<'a, 'ctx, 'env>,
scope: &Scope<'a, 'ctx>,
str_symbol: Symbol,
) -> BasicValueEnum<'ctx> {
let string = load_symbol(scope, &str_symbol);
call_bitcode_fn(env, &[string], bitcode::STR_COUNT_GRAPEHEME_CLUSTERS)
}
/// Str.trim : Str -> Str
pub fn str_trim<'a, 'ctx, 'env>(
env: &Env<'a, 'ctx, 'env>,
scope: &Scope<'a, 'ctx>,
str_symbol: Symbol,
) -> BasicValueEnum<'ctx> {
let str_i128 = str_symbol_to_c_abi(env, scope, str_symbol);
call_str_bitcode_fn(env, &[str_i128.into()], bitcode::STR_TRIM)
}
/// Str.trimLeft : Str -> Str
pub fn str_trim_left<'a, 'ctx, 'env>(
env: &Env<'a, 'ctx, 'env>,
scope: &Scope<'a, 'ctx>,
str_symbol: Symbol,
) -> BasicValueEnum<'ctx> {
let str_i128 = str_symbol_to_c_abi(env, scope, str_symbol);
call_str_bitcode_fn(env, &[str_i128.into()], bitcode::STR_TRIM_LEFT)
}
/// Str.trimRight : Str -> Str
pub fn str_trim_right<'a, 'ctx, 'env>(
env: &Env<'a, 'ctx, 'env>,
scope: &Scope<'a, 'ctx>,
str_symbol: Symbol,
) -> BasicValueEnum<'ctx> {
let str_i128 = str_symbol_to_c_abi(env, scope, str_symbol);
call_str_bitcode_fn(env, &[str_i128.into()], bitcode::STR_TRIM_RIGHT)
}
/// Str.fromInt : Int -> Str /// Str.fromInt : Int -> Str
pub fn str_from_int<'a, 'ctx, 'env>( pub fn str_from_int<'a, 'ctx, 'env>(
env: &Env<'a, 'ctx, 'env>, env: &Env<'a, 'ctx, 'env>,