mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 23:04:49 +00:00
Fix Num.toFloat
This commit is contained in:
parent
dd8dff0f9e
commit
30a95e90d1
5 changed files with 55 additions and 43 deletions
|
@ -77,6 +77,7 @@ pub fn builtin_defs(var_store: &mut VarStore) -> MutMap<Symbol, Def> {
|
|||
Symbol::NUM_IS_ZERO => num_is_zero,
|
||||
Symbol::NUM_IS_POSITIVE => num_is_positive,
|
||||
Symbol::NUM_IS_NEGATIVE => num_is_negative,
|
||||
Symbol::NUM_TO_FLOAT => num_to_float,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -272,12 +273,12 @@ fn num_tan(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
|||
|
||||
/// Num.isZero : Float -> Bool
|
||||
fn num_is_zero(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let bool_var = var_store.fresh();
|
||||
let arg_var = var_store.fresh();
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::Eq,
|
||||
args: vec![
|
||||
(bool_var, Var(Symbol::ARG_1)),
|
||||
(bool_var, Num(var_store.fresh(), 0)),
|
||||
(arg_var, Var(Symbol::ARG_1)),
|
||||
(arg_var, Num(var_store.fresh(), 0)),
|
||||
],
|
||||
ret_var: var_store.fresh(),
|
||||
};
|
||||
|
@ -287,11 +288,12 @@ fn num_is_zero(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
|||
|
||||
/// Num.isNegative : Float -> Bool
|
||||
fn num_is_negative(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let arg_var = var_store.fresh();
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumGt,
|
||||
args: vec![
|
||||
(var_store.fresh(), Num(var_store.fresh(), 0)),
|
||||
(var_store.fresh(), Var(Symbol::ARG_1)),
|
||||
(arg_var, Num(var_store.fresh(), 0)),
|
||||
(arg_var, Var(Symbol::ARG_1)),
|
||||
],
|
||||
ret_var: var_store.fresh(),
|
||||
};
|
||||
|
@ -301,11 +303,12 @@ fn num_is_negative(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
|||
|
||||
/// Num.isPositive : Float -> Bool
|
||||
fn num_is_positive(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let arg_var = var_store.fresh();
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumGt,
|
||||
args: vec![
|
||||
(var_store.fresh(), Var(Symbol::ARG_1)),
|
||||
(var_store.fresh(), Num(var_store.fresh(), 0)),
|
||||
(arg_var, Var(Symbol::ARG_1)),
|
||||
(arg_var, Num(var_store.fresh(), 0)),
|
||||
],
|
||||
ret_var: var_store.fresh(),
|
||||
};
|
||||
|
@ -364,6 +367,17 @@ fn num_is_even(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
|||
defn(symbol, vec![Symbol::ARG_1], var_store, body)
|
||||
}
|
||||
|
||||
/// Num.toFloat : Num * -> Float
|
||||
fn num_to_float(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToFloat,
|
||||
args: vec![(var_store.fresh(), Var(Symbol::ARG_1))],
|
||||
ret_var: var_store.fresh(),
|
||||
};
|
||||
|
||||
defn(symbol, vec![Symbol::ARG_1], var_store, body)
|
||||
}
|
||||
|
||||
/// Num.sqrt : Float -> Result Float [ SqrtOfNegative ]*
|
||||
fn num_sqrt(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let body = RunLowLevel {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue