mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
Add canonical Expr implementation for NumPow
This commit is contained in:
parent
5bbee6217b
commit
51a6e0bde0
4 changed files with 26 additions and 2 deletions
|
@ -90,6 +90,7 @@ pub fn builtin_defs(var_store: &mut VarStore) -> MutMap<Symbol, Def> {
|
||||||
Symbol::NUM_IS_POSITIVE => num_is_positive,
|
Symbol::NUM_IS_POSITIVE => num_is_positive,
|
||||||
Symbol::NUM_IS_NEGATIVE => num_is_negative,
|
Symbol::NUM_IS_NEGATIVE => num_is_negative,
|
||||||
Symbol::NUM_TO_FLOAT => num_to_float,
|
Symbol::NUM_TO_FLOAT => num_to_float,
|
||||||
|
Symbol::NUM_POW => num_pow,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -578,6 +579,28 @@ fn num_round(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Num.pow : Float, Float -> Float
|
||||||
|
fn num_pow(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
|
let float_var = var_store.fresh();
|
||||||
|
|
||||||
|
let body = RunLowLevel {
|
||||||
|
op: LowLevel::NumPow,
|
||||||
|
args: vec![
|
||||||
|
(float_var, Var(Symbol::ARG_1)),
|
||||||
|
(float_var, Var(Symbol::ARG_2)),
|
||||||
|
],
|
||||||
|
ret_var: float_var,
|
||||||
|
};
|
||||||
|
|
||||||
|
defn(
|
||||||
|
symbol,
|
||||||
|
vec![(float_var, Symbol::ARG_1), (float_var, Symbol::ARG_2)],
|
||||||
|
var_store,
|
||||||
|
body,
|
||||||
|
float_var,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/// List.isEmpty : List * -> Bool
|
/// List.isEmpty : List * -> Bool
|
||||||
fn list_is_empty(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
fn list_is_empty(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||||
let list_var = var_store.fresh();
|
let list_var = var_store.fresh();
|
||||||
|
|
|
@ -1733,7 +1733,7 @@ fn run_low_level<'a, 'ctx, 'env>(
|
||||||
}
|
}
|
||||||
|
|
||||||
NumAdd | NumSub | NumMul | NumLt | NumLte | NumGt | NumGte | NumRemUnchecked
|
NumAdd | NumSub | NumMul | NumLt | NumLte | NumGt | NumGte | NumRemUnchecked
|
||||||
| NumDivUnchecked => {
|
| NumDivUnchecked | NumPow => {
|
||||||
debug_assert_eq!(args.len(), 2);
|
debug_assert_eq!(args.len(), 2);
|
||||||
|
|
||||||
let (lhs_arg, lhs_layout) = load_symbol_and_layout(env, scope, &args[0]);
|
let (lhs_arg, lhs_layout) = load_symbol_and_layout(env, scope, &args[0]);
|
||||||
|
|
|
@ -35,6 +35,7 @@ pub enum LowLevel {
|
||||||
NumSqrtUnchecked,
|
NumSqrtUnchecked,
|
||||||
NumRound,
|
NumRound,
|
||||||
NumToFloat,
|
NumToFloat,
|
||||||
|
NumPow,
|
||||||
Eq,
|
Eq,
|
||||||
NotEq,
|
NotEq,
|
||||||
And,
|
And,
|
||||||
|
|
|
@ -522,7 +522,7 @@ pub fn lowlevel_borrow_signature(arena: &Bump, op: LowLevel) -> &[bool] {
|
||||||
ListWalkRight => arena.alloc_slice_copy(&[borrowed, irrelevant, owned]),
|
ListWalkRight => arena.alloc_slice_copy(&[borrowed, irrelevant, owned]),
|
||||||
|
|
||||||
Eq | NotEq | And | Or | NumAdd | NumSub | NumMul | NumGt | NumGte | NumLt | NumLte
|
Eq | NotEq | And | Or | NumAdd | NumSub | NumMul | NumGt | NumGte | NumLt | NumLte
|
||||||
| NumCompare | NumDivUnchecked | NumRemUnchecked => {
|
| NumCompare | NumDivUnchecked | NumRemUnchecked | NumPow => {
|
||||||
arena.alloc_slice_copy(&[irrelevant, irrelevant])
|
arena.alloc_slice_copy(&[irrelevant, irrelevant])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue