mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 04:09:05 +00:00
feat: add To{Bool, Int, Float}, Round
This commit is contained in:
parent
0e1c0a9a13
commit
8f68f55c91
2 changed files with 52 additions and 1 deletions
|
@ -92,6 +92,10 @@ const PROC_WRITE: &str = "write!";
|
|||
const FILE_LIKE: &str = "FileLike";
|
||||
const MUTABLE_FILE_LIKE: &str = "FileLike!";
|
||||
const SHOW: &str = "Show";
|
||||
const TO_BOOL: &str = "ToBool";
|
||||
const TO_INT: &str = "ToInt";
|
||||
const TO_FLOAT: &str = "ToFloat";
|
||||
const ROUND: &str = "Round";
|
||||
const INPUT: &str = "Input";
|
||||
const OUTPUT: &str = "Output";
|
||||
const POW_OUTPUT: &str = "PowOutput";
|
||||
|
@ -494,6 +498,7 @@ const FUNC_SLICE: &str = "slice";
|
|||
const FUNC_SORTED: &str = "sorted";
|
||||
const FUNC_STATICMETHOD: &str = "staticmethod";
|
||||
const FUNC_SUM: &str = "sum";
|
||||
const FUNC_VARS: &str = "vars";
|
||||
const FUNC_IF: &str = "if";
|
||||
const FUNC_IF__: &str = "if__";
|
||||
const FUNC_DISCARD: &str = "discard";
|
||||
|
@ -571,9 +576,15 @@ const FUNDAMENTAL_CALL: &str = "__call__";
|
|||
const FUNDAMENTAL_NAME: &str = "__name__";
|
||||
const FUNDAMENTAL_FILE: &str = "__file__";
|
||||
const FUNDAMENTAL_PACKAGE: &str = "__package__";
|
||||
const FUNDAMENTAL_STR: &str = "__str__";
|
||||
const FUNDAMENTAL_HASH: &str = "__hash__";
|
||||
const FUNDAMENTAL_STR: &str = "__str__";
|
||||
const FUNDAMENTAL_INT: &str = "__int__";
|
||||
const FUNDAMENTAL_BOOL: &str = "__bool__";
|
||||
const FUNDAMENTAL_FLOAT: &str = "__float__";
|
||||
const FUNDAMENTAL_ROUND: &str = "__round__";
|
||||
const FUNDAMENTAL_TRUNC: &str = "__trunc__";
|
||||
const FUNDAMENTAL_CEIL: &str = "__ceil__";
|
||||
const FUNDAMENTAL_FLOOR: &str = "__floor__";
|
||||
const FUNDAMENTAL_ITER: &str = "__iter__";
|
||||
const FUNDAMENTAL_NEXT: &str = "__next__";
|
||||
const FUNDAMENTAL_MODULE: &str = "__module__";
|
||||
|
@ -708,6 +719,7 @@ const KW_OTHER: &str = "other";
|
|||
const KW_CONFLICT_RESOLVER: &str = "conflict_resolver";
|
||||
const KW_EPSILON: &str = "epsilon";
|
||||
const KW_PATH: &str = "Path";
|
||||
const KW_NDIGITS: &str = "ndigits";
|
||||
|
||||
pub fn builtins_path() -> PathBuf {
|
||||
erg_pystd_path().join("builtins.d.er")
|
||||
|
|
|
@ -445,6 +445,41 @@ impl Context {
|
|||
num.register_superclass(poly(ADD, vec![]), &add);
|
||||
num.register_superclass(poly(SUB, vec![]), &sub);
|
||||
num.register_superclass(poly(MUL, vec![]), &mul);
|
||||
/* ToBool */
|
||||
let mut to_bool = Self::builtin_mono_trait(TO_BOOL, 2);
|
||||
let _Slf = mono_q(SELF, subtypeof(mono(TO_BOOL)));
|
||||
let op_t = fn0_met(_Slf.clone(), Bool).quantify();
|
||||
to_bool.register_builtin_erg_decl(FUNDAMENTAL_BOOL, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
/* ToInt */
|
||||
let mut to_int = Self::builtin_mono_trait(TO_INT, 2);
|
||||
let _Slf = mono_q(SELF, subtypeof(mono(TO_INT)));
|
||||
let op_t = fn0_met(_Slf.clone(), Int).quantify();
|
||||
to_int.register_builtin_erg_decl(FUNDAMENTAL_INT, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
/* ToFloat */
|
||||
let mut to_float = Self::builtin_mono_trait(TO_FLOAT, 2);
|
||||
let _Slf = mono_q(SELF, subtypeof(mono(TO_FLOAT)));
|
||||
let op_t = fn0_met(_Slf.clone(), Float).quantify();
|
||||
to_float.register_builtin_erg_decl(FUNDAMENTAL_FLOAT, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
/* Round */
|
||||
let mut round = Self::builtin_mono_trait(ROUND, 2);
|
||||
let _Slf = mono_q(SELF, subtypeof(mono(ROUND)));
|
||||
// TODO: Output <: Integral = Int # (default)
|
||||
let op_t = fn_met(
|
||||
_Slf.clone(),
|
||||
vec![],
|
||||
None,
|
||||
vec![kw_default(KW_NDIGITS, Nat, Nat)],
|
||||
None,
|
||||
Int,
|
||||
)
|
||||
.quantify();
|
||||
round.register_builtin_erg_decl(FUNDAMENTAL_ROUND, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
let op_t = fn0_met(_Slf.clone(), Int).quantify();
|
||||
round.register_builtin_erg_decl(FUNDAMENTAL_TRUNC, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
let op_t = fn0_met(_Slf.clone(), Int).quantify();
|
||||
round.register_builtin_erg_decl(FUNDAMENTAL_FLOOR, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
let op_t = fn0_met(_Slf.clone(), Int).quantify();
|
||||
round.register_builtin_erg_decl(FUNDAMENTAL_CEIL, op_t, Visibility::BUILTIN_PUBLIC);
|
||||
self.register_builtin_type(mono(UNPACK), unpack, vis.clone(), Const, None);
|
||||
self.register_builtin_type(
|
||||
mono(INHERITABLE_TYPE),
|
||||
|
@ -511,6 +546,10 @@ impl Context {
|
|||
self.register_builtin_type(mono(PARTIAL_ORD), partial_ord, vis.clone(), Const, None);
|
||||
self.register_builtin_type(mono(ORD), ord, vis.clone(), Const, None);
|
||||
self.register_builtin_type(mono(NUM), num, vis.clone(), Const, None);
|
||||
self.register_builtin_type(mono(TO_BOOL), to_bool, vis.clone(), Const, None);
|
||||
self.register_builtin_type(mono(TO_INT), to_int, vis.clone(), Const, None);
|
||||
self.register_builtin_type(mono(TO_FLOAT), to_float, vis.clone(), Const, None);
|
||||
self.register_builtin_type(mono(ROUND), round, vis.clone(), Const, None);
|
||||
self.register_builtin_type(
|
||||
poly(SEQUENCE, vec![ty_tp(T.clone())]),
|
||||
sequence,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue