mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 12:14:43 +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 FILE_LIKE: &str = "FileLike";
|
||||||
const MUTABLE_FILE_LIKE: &str = "FileLike!";
|
const MUTABLE_FILE_LIKE: &str = "FileLike!";
|
||||||
const SHOW: &str = "Show";
|
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 INPUT: &str = "Input";
|
||||||
const OUTPUT: &str = "Output";
|
const OUTPUT: &str = "Output";
|
||||||
const POW_OUTPUT: &str = "PowOutput";
|
const POW_OUTPUT: &str = "PowOutput";
|
||||||
|
@ -494,6 +498,7 @@ const FUNC_SLICE: &str = "slice";
|
||||||
const FUNC_SORTED: &str = "sorted";
|
const FUNC_SORTED: &str = "sorted";
|
||||||
const FUNC_STATICMETHOD: &str = "staticmethod";
|
const FUNC_STATICMETHOD: &str = "staticmethod";
|
||||||
const FUNC_SUM: &str = "sum";
|
const FUNC_SUM: &str = "sum";
|
||||||
|
const FUNC_VARS: &str = "vars";
|
||||||
const FUNC_IF: &str = "if";
|
const FUNC_IF: &str = "if";
|
||||||
const FUNC_IF__: &str = "if__";
|
const FUNC_IF__: &str = "if__";
|
||||||
const FUNC_DISCARD: &str = "discard";
|
const FUNC_DISCARD: &str = "discard";
|
||||||
|
@ -571,9 +576,15 @@ const FUNDAMENTAL_CALL: &str = "__call__";
|
||||||
const FUNDAMENTAL_NAME: &str = "__name__";
|
const FUNDAMENTAL_NAME: &str = "__name__";
|
||||||
const FUNDAMENTAL_FILE: &str = "__file__";
|
const FUNDAMENTAL_FILE: &str = "__file__";
|
||||||
const FUNDAMENTAL_PACKAGE: &str = "__package__";
|
const FUNDAMENTAL_PACKAGE: &str = "__package__";
|
||||||
const FUNDAMENTAL_STR: &str = "__str__";
|
|
||||||
const FUNDAMENTAL_HASH: &str = "__hash__";
|
const FUNDAMENTAL_HASH: &str = "__hash__";
|
||||||
|
const FUNDAMENTAL_STR: &str = "__str__";
|
||||||
const FUNDAMENTAL_INT: &str = "__int__";
|
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_ITER: &str = "__iter__";
|
||||||
const FUNDAMENTAL_NEXT: &str = "__next__";
|
const FUNDAMENTAL_NEXT: &str = "__next__";
|
||||||
const FUNDAMENTAL_MODULE: &str = "__module__";
|
const FUNDAMENTAL_MODULE: &str = "__module__";
|
||||||
|
@ -708,6 +719,7 @@ const KW_OTHER: &str = "other";
|
||||||
const KW_CONFLICT_RESOLVER: &str = "conflict_resolver";
|
const KW_CONFLICT_RESOLVER: &str = "conflict_resolver";
|
||||||
const KW_EPSILON: &str = "epsilon";
|
const KW_EPSILON: &str = "epsilon";
|
||||||
const KW_PATH: &str = "Path";
|
const KW_PATH: &str = "Path";
|
||||||
|
const KW_NDIGITS: &str = "ndigits";
|
||||||
|
|
||||||
pub fn builtins_path() -> PathBuf {
|
pub fn builtins_path() -> PathBuf {
|
||||||
erg_pystd_path().join("builtins.d.er")
|
erg_pystd_path().join("builtins.d.er")
|
||||||
|
|
|
@ -445,6 +445,41 @@ impl Context {
|
||||||
num.register_superclass(poly(ADD, vec![]), &add);
|
num.register_superclass(poly(ADD, vec![]), &add);
|
||||||
num.register_superclass(poly(SUB, vec![]), &sub);
|
num.register_superclass(poly(SUB, vec![]), &sub);
|
||||||
num.register_superclass(poly(MUL, vec![]), &mul);
|
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(UNPACK), unpack, vis.clone(), Const, None);
|
||||||
self.register_builtin_type(
|
self.register_builtin_type(
|
||||||
mono(INHERITABLE_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(PARTIAL_ORD), partial_ord, vis.clone(), Const, None);
|
||||||
self.register_builtin_type(mono(ORD), 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(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(
|
self.register_builtin_type(
|
||||||
poly(SEQUENCE, vec![ty_tp(T.clone())]),
|
poly(SEQUENCE, vec![ty_tp(T.clone())]),
|
||||||
sequence,
|
sequence,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue