1use crate::{ContextError, Module};
4use std::num::ParseIntError;
5
6pub fn module() -> Result<Module, ContextError> {
8 let mut module = Module::with_crate_item("std", &["int"]);
9
10 module.ty::<ParseIntError>()?;
11
12 module.function(&["parse"], parse)?;
13 module.function(&["max"], i64::max)?;
14 module.function(&["min"], i64::min)?;
15 module.function(&["abs"], i64::abs)?;
16
17 module.inst_fn("to_float", to_float)?;
18
19 module.inst_fn("abs", i64::abs)?;
20 module.inst_fn("checked_add", i64::checked_add)?;
21 module.inst_fn("checked_sub", i64::checked_sub)?;
22 module.inst_fn("checked_div", i64::checked_div)?;
23 module.inst_fn("checked_mul", i64::checked_mul)?;
24 module.inst_fn("checked_rem", i64::checked_rem)?;
25
26 module.inst_fn("wrapping_add", i64::wrapping_add)?;
27 module.inst_fn("wrapping_sub", i64::wrapping_sub)?;
28 module.inst_fn("wrapping_div", i64::wrapping_div)?;
29 module.inst_fn("wrapping_mul", i64::wrapping_mul)?;
30 module.inst_fn("wrapping_rem", i64::wrapping_rem)?;
31
32 module.inst_fn("saturating_add", i64::saturating_add)?;
33 module.inst_fn("saturating_sub", i64::saturating_sub)?;
34 module.inst_fn("saturating_mul", i64::saturating_mul)?;
35 module.inst_fn("saturating_abs", i64::saturating_abs)?;
36 module.inst_fn("saturating_pow", i64::saturating_pow)?;
37
38 module.inst_fn("pow", i64::pow)?;
39 Ok(module)
40}
41
42fn parse(s: &str) -> Result<i64, ParseIntError> {
44 Ok(str::parse::<i64>(s)?)
45}
46
47fn to_float(value: i64) -> f64 {
49 value as f64
50}
51
52crate::__internal_impl_any!(ParseIntError);