mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
Implement Num.to* builtins
Just wrap over Num.intCast
This commit is contained in:
parent
e12d98af98
commit
d90915a8cd
4 changed files with 132 additions and 311 deletions
|
@ -412,252 +412,112 @@ fn lowlevel_5(symbol: Symbol, op: LowLevel, var_store: &mut VarStore) -> Def {
|
|||
|
||||
// Num.toI8 : Int * -> I8
|
||||
fn num_to_i8(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let i8_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: i8_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
i8_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toI8Checked : Int * -> Result I8 [ OutOfBounds ]*
|
||||
fn num_to_i8_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!();
|
||||
}
|
||||
|
||||
// Num.toI16 : Int * -> I16
|
||||
fn num_to_i16(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let i16_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: i16_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
i16_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toI16Checked : Int * -> Result I16 [ OutOfBounds ]*
|
||||
fn num_to_i16_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toI32 : Int * -> I32
|
||||
fn num_to_i32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let i32_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: i32_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
i32_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toI32Checked : Int * -> Result I32 [ OutOfBounds ]*
|
||||
fn num_to_i32_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toI64 : Int * -> I64
|
||||
fn num_to_i64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let i64_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: i64_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
i64_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toI64Checked : Int * -> Result I64 [ OutOfBounds ]*
|
||||
fn num_to_i64_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toI128 : Int * -> I128
|
||||
fn num_to_i128(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let i128_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: i128_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
i128_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toI128Checked : Int * -> Result I128 [ OutOfBounds ]*
|
||||
fn num_to_i128_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toU8 : Int * -> U8
|
||||
fn num_to_u8(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let u8_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: u8_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
u8_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toU8Checked : Int * -> Result U8 [ OutOfBounds ]*
|
||||
fn num_to_u8_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toU16 : Int * -> U16
|
||||
fn num_to_u16(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let u16_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: u16_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
u16_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toU16Checked : Int * -> Result U16 [ OutOfBounds ]*
|
||||
fn num_to_u16_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toU32 : Int * -> U32
|
||||
fn num_to_u32(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let u32_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: u32_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
u32_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toU32Checked : Int * -> Result U32 [ OutOfBounds ]*
|
||||
fn num_to_u32_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toU64 : Int * -> U64
|
||||
fn num_to_u64(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let u64_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: u64_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
u64_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toU64Checked : Int * -> Result U64 [ OutOfBounds ]*
|
||||
fn num_to_u64_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toU128 : Int * -> U128
|
||||
fn num_to_u128(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
let int_var = var_store.fresh();
|
||||
let u128_var = var_store.fresh();
|
||||
|
||||
let body = RunLowLevel {
|
||||
op: LowLevel::NumToStr,
|
||||
args: vec![(int_var, Var(Symbol::ARG_1))],
|
||||
ret_var: u128_var,
|
||||
};
|
||||
|
||||
defn(
|
||||
symbol,
|
||||
vec![(int_var, Symbol::ARG_1)],
|
||||
var_store,
|
||||
body,
|
||||
u128_var,
|
||||
)
|
||||
// Defer to IntCast
|
||||
lowlevel_1(symbol, LowLevel::NumIntCast, var_store)
|
||||
}
|
||||
|
||||
// Num.toU128Checked : Int * -> Result U128 [ OutOfBounds ]*
|
||||
fn num_to_u128_checked(symbol: Symbol, var_store: &mut VarStore) -> Def {
|
||||
// TODO
|
||||
todo!()
|
||||
}
|
||||
|
||||
// Num.toStr : Num a -> Str
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue