From 44065f447dc3a2f4b1441b97b9687d1c1b85afbf Mon Sep 17 00:00:00 2001 From: Zyad Hassan Date: Wed, 3 Apr 2024 18:59:58 -0700 Subject: Add builtins for some checked ops such as checked_add --- compiler/ExtractBuiltin.ml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'compiler') diff --git a/compiler/ExtractBuiltin.ml b/compiler/ExtractBuiltin.ml index 401d0137..a2983573 100644 --- a/compiler/ExtractBuiltin.ml +++ b/compiler/ExtractBuiltin.ml @@ -240,6 +240,27 @@ let builtin_funs () : (pattern * bool list option * builtin_fun_info) list = let f = { extract_name = basename } in (rust_name, filter, f) in + let mk_scalar_fun (rust_name_prefix : string) (rust_name_suffix : string) + (extract_name : string option) (filter : bool list option) : + (pattern * bool list option * builtin_fun_info) list = + List.map + (fun ty -> + mk_fun (rust_name_prefix ^ ty ^ rust_name_suffix) extract_name filter) + [ + "usize"; + "u8"; + "u16"; + "u32"; + "u64"; + "u128"; + "isize"; + "i8"; + "i16"; + "i32"; + "i64"; + "i128"; + ] + in [ mk_fun "core::mem::replace" None None; mk_fun "core::slice::{[@T]}::len" @@ -325,6 +346,16 @@ let builtin_funs () : (pattern * bool list option * builtin_fun_info) list = [@T]>}::index_mut" (Some "core_slice_index_Slice_index_mut") None; ] + @ mk_scalar_fun "core::num::{" "}::checked_add" (Some "core.num.checked_add") + None + @ mk_scalar_fun "core::num::{" "}::checked_sub" (Some "core.num.checked_sub") + None + @ mk_scalar_fun "core::num::{" "}::checked_mul" (Some "core.num.checked_mul") + None + @ mk_scalar_fun "core::num::{" "}::checked_div" (Some "core.num.checked_div") + None + @ mk_scalar_fun "core::num::{" "}::checked_rem" (Some "core.num.checked_rem") + None let mk_builtin_funs_map () = let m = -- cgit v1.2.3 From 502f25a653a0afe7787b92a3004374e7670ea69b Mon Sep 17 00:00:00 2001 From: Son Ho Date: Fri, 12 Apr 2024 08:48:13 +0200 Subject: Update the bindings for the extraction --- compiler/ExtractBuiltin.ml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'compiler') diff --git a/compiler/ExtractBuiltin.ml b/compiler/ExtractBuiltin.ml index a2983573..3ba8d11d 100644 --- a/compiler/ExtractBuiltin.ml +++ b/compiler/ExtractBuiltin.ml @@ -240,12 +240,11 @@ let builtin_funs () : (pattern * bool list option * builtin_fun_info) list = let f = { extract_name = basename } in (rust_name, filter, f) in - let mk_scalar_fun (rust_name_prefix : string) (rust_name_suffix : string) - (extract_name : string option) (filter : bool list option) : + let mk_scalar_fun (rust_name : string -> string) + (extract_name : string -> string) : (pattern * bool list option * builtin_fun_info) list = List.map - (fun ty -> - mk_fun (rust_name_prefix ^ ty ^ rust_name_suffix) extract_name filter) + (fun ty -> mk_fun (rust_name ty) (Some (extract_name ty)) None) [ "usize"; "u8"; @@ -346,16 +345,14 @@ let builtin_funs () : (pattern * bool list option * builtin_fun_info) list = [@T]>}::index_mut" (Some "core_slice_index_Slice_index_mut") None; ] - @ mk_scalar_fun "core::num::{" "}::checked_add" (Some "core.num.checked_add") - None - @ mk_scalar_fun "core::num::{" "}::checked_sub" (Some "core.num.checked_sub") - None - @ mk_scalar_fun "core::num::{" "}::checked_mul" (Some "core.num.checked_mul") - None - @ mk_scalar_fun "core::num::{" "}::checked_div" (Some "core.num.checked_div") - None - @ mk_scalar_fun "core::num::{" "}::checked_rem" (Some "core.num.checked_rem") - None + @ List.flatten + (List.map + (fun op -> + mk_scalar_fun + (fun ty -> "core::num::{" ^ ty ^ "}::checked_" ^ op) + (fun ty -> + StringUtils.capitalize_first_letter ty ^ ".checked_" ^ op)) + [ "add"; "sub"; "mul"; "div"; "rem" ]) let mk_builtin_funs_map () = let m = -- cgit v1.2.3