mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
adds Num.subWrap
This commit is contained in:
parent
c6b258c50c
commit
176cdd0274
7 changed files with 23 additions and 2 deletions
|
@ -104,6 +104,12 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
|
|||
),
|
||||
);
|
||||
|
||||
// subWrap : Int, Int -> Int
|
||||
add_type(
|
||||
Symbol::NUM_SUB_WRAP,
|
||||
top_level_function(vec![int_type(), int_type()], Box::new(int_type())),
|
||||
);
|
||||
|
||||
// mul or (*) : Num a, Num a -> Num a
|
||||
add_type(
|
||||
Symbol::NUM_MUL,
|
||||
|
|
|
@ -174,6 +174,12 @@ pub fn types() -> MutMap<Symbol, (SolvedType, Region)> {
|
|||
unique_function(vec![num_type(u, num), num_type(v, num)], num_type(w, num))
|
||||
});
|
||||
|
||||
// subWrap : Num a, Num a -> Num a
|
||||
add_type(Symbol::NUM_SUB_WRAP, {
|
||||
let_tvars! { u, v, w, num };
|
||||
unique_function(vec![num_type(u, num), num_type(v, num)], num_type(w, num))
|
||||
});
|
||||
|
||||
// mul or (*) : Num a, Num a -> Num a
|
||||
add_type(Symbol::NUM_MUL, {
|
||||
let_tvars! { u, v, w, num };
|
||||
|
|
|
@ -82,6 +82,7 @@ pub fn builtin_defs_map(symbol: Symbol, var_store: &mut VarStore) -> Option<Def>
|
|||
NUM_ADD_CHECKED => num_add_checked,
|
||||
NUM_ADD_WRAP => num_add_wrap,
|
||||
NUM_SUB => num_sub,
|
||||
NUM_SUB_WRAP => num_sub_wrap,
|
||||
NUM_MUL => num_mul,
|
||||
NUM_GT => num_gt,
|
||||
NUM_GTE => num_gte,
|
||||
|
@ -472,6 +473,11 @@ fn num_sub(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
|||
num_binop(symbol, var_store, LowLevel::NumSub)
|
||||
}
|
||||
|
||||
/// Num.subWrap : Num a, Num a -> Num a
|
||||
fn num_sub_wrap(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
num_binop(symbol, var_store, LowLevel::NumSubWrap)
|
||||
}
|
||||
|
||||
/// Num.mul : Num a, Num a -> Num a
|
||||
fn num_mul(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
num_binop(symbol, var_store, LowLevel::NumMul)
|
||||
|
|
|
@ -3002,7 +3002,7 @@ fn run_low_level<'a, 'ctx, 'env>(
|
|||
}
|
||||
|
||||
NumAdd | NumSub | NumMul | NumLt | NumLte | NumGt | NumGte | NumRemUnchecked
|
||||
| NumAddWrap | NumAddChecked | NumDivUnchecked | NumPow | NumPowInt => {
|
||||
| NumAddWrap | NumAddChecked | NumDivUnchecked | NumPow | NumPowInt | NumSubWrap => {
|
||||
debug_assert_eq!(args.len(), 2);
|
||||
|
||||
let (lhs_arg, lhs_layout) = load_symbol_and_layout(env, scope, &args[0]);
|
||||
|
@ -3256,6 +3256,7 @@ fn build_int_binop<'a, 'ctx, 'env>(
|
|||
|
||||
sub_result
|
||||
}
|
||||
NumSubWrap => bd.build_int_sub(lhs, rhs, "sub_int").into(),
|
||||
NumMul => bd.build_int_mul(lhs, rhs, "mul_int").into(),
|
||||
NumGt => bd.build_int_compare(SGT, lhs, rhs, "int_gt").into(),
|
||||
NumGte => bd.build_int_compare(SGE, lhs, rhs, "int_gte").into(),
|
||||
|
|
|
@ -31,6 +31,7 @@ pub enum LowLevel {
|
|||
NumAddWrap,
|
||||
NumAddChecked,
|
||||
NumSub,
|
||||
NumSubWrap,
|
||||
NumMul,
|
||||
NumGt,
|
||||
NumGte,
|
||||
|
|
|
@ -798,6 +798,7 @@ define_builtins! {
|
|||
55 NUM_ACOS: "acos"
|
||||
56 NUM_ASIN: "asin"
|
||||
57 NUM_BITWISE_AND: "bitwiseAnd"
|
||||
58 NUM_SUB_WRAP: "subWrap"
|
||||
}
|
||||
2 BOOL: "Bool" => {
|
||||
0 BOOL_BOOL: "Bool" imported // the Bool.Bool type alias
|
||||
|
|
|
@ -539,7 +539,7 @@ pub fn lowlevel_borrow_signature(arena: &Bump, op: LowLevel) -> &[bool] {
|
|||
ListWalkBackwards => arena.alloc_slice_copy(&[borrowed, irrelevant, owned]),
|
||||
ListSum => arena.alloc_slice_copy(&[borrowed]),
|
||||
|
||||
Eq | NotEq | And | Or | NumAdd | NumAddWrap | NumAddChecked | NumSub | NumMul | NumGt
|
||||
Eq | NotEq | And | Or | NumAdd | NumAddWrap | NumAddChecked | NumSub | NumSubWrap | NumMul | NumGt
|
||||
| NumGte | NumLt | NumLte | NumCompare | NumDivUnchecked | NumRemUnchecked | NumPow
|
||||
| NumPowInt | NumBitwiseAnd => arena.alloc_slice_copy(&[irrelevant, irrelevant]),
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue