mirror of
https://github.com/erg-lang/erg.git
synced 2025-10-03 14:04:33 +00:00
Add FloorDiv
trait definition
This commit is contained in:
parent
d9d78c5ec3
commit
fcb13f5239
1 changed files with 22 additions and 5 deletions
|
@ -394,13 +394,25 @@ impl Context {
|
||||||
mul.register_builtin_decl("__mul__", op_t, Public);
|
mul.register_builtin_decl("__mul__", op_t, Public);
|
||||||
mul.register_builtin_decl("Output", Type, Public);
|
mul.register_builtin_decl("Output", Type, Public);
|
||||||
/* Div */
|
/* Div */
|
||||||
let mut div = Self::builtin_poly_trait("Div", params, 2);
|
let mut div = Self::builtin_poly_trait("Div", params.clone(), 2);
|
||||||
div.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
div.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
||||||
let op_t = fn1_met(mono_q("Self"), r, mono_proj(mono_q("Self"), "Output"));
|
let op_t = fn1_met(
|
||||||
|
mono_q("Self"),
|
||||||
|
r.clone(),
|
||||||
|
mono_proj(mono_q("Self"), "Output"),
|
||||||
|
);
|
||||||
let self_bound = subtypeof(mono_q("Self"), builtin_poly("Div", ty_params.clone()));
|
let self_bound = subtypeof(mono_q("Self"), builtin_poly("Div", ty_params.clone()));
|
||||||
let op_t = quant(op_t, set! {r_bound, self_bound});
|
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
||||||
div.register_builtin_decl("__div__", op_t, Public);
|
div.register_builtin_decl("__div__", op_t, Public);
|
||||||
div.register_builtin_decl("Output", Type, Public);
|
div.register_builtin_decl("Output", Type, Public);
|
||||||
|
/* FloorDiv */
|
||||||
|
let mut floor_div = Self::builtin_poly_trait("FloorDiv", params, 2);
|
||||||
|
floor_div.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
||||||
|
let op_t = fn1_met(mono_q("Self"), r, mono_proj(mono_q("Self"), "Output"));
|
||||||
|
let self_bound = subtypeof(mono_q("Self"), builtin_poly("FloorDiv", ty_params.clone()));
|
||||||
|
let op_t = quant(op_t, set! {r_bound, self_bound});
|
||||||
|
floor_div.register_builtin_decl("__floordiv__", op_t, Public);
|
||||||
|
floor_div.register_builtin_decl("Output", Type, Public);
|
||||||
self.register_builtin_type(builtin_mono("Unpack"), unpack, Const);
|
self.register_builtin_type(builtin_mono("Unpack"), unpack, Const);
|
||||||
self.register_builtin_type(builtin_mono("InheritableType"), inheritable_type, Const);
|
self.register_builtin_type(builtin_mono("InheritableType"), inheritable_type, Const);
|
||||||
self.register_builtin_type(builtin_mono("Named"), named, Const);
|
self.register_builtin_type(builtin_mono("Named"), named, Const);
|
||||||
|
@ -433,7 +445,8 @@ impl Context {
|
||||||
self.register_builtin_type(builtin_poly("Add", ty_params.clone()), add, Const);
|
self.register_builtin_type(builtin_poly("Add", ty_params.clone()), add, Const);
|
||||||
self.register_builtin_type(builtin_poly("Sub", ty_params.clone()), sub, Const);
|
self.register_builtin_type(builtin_poly("Sub", ty_params.clone()), sub, Const);
|
||||||
self.register_builtin_type(builtin_poly("Mul", ty_params.clone()), mul, Const);
|
self.register_builtin_type(builtin_poly("Mul", ty_params.clone()), mul, Const);
|
||||||
self.register_builtin_type(builtin_poly("Div", ty_params), div, Const);
|
self.register_builtin_type(builtin_poly("Div", ty_params.clone()), div, Const);
|
||||||
|
self.register_builtin_type(builtin_poly("FloorDiv", ty_params), floor_div, Const);
|
||||||
self.register_const_param_defaults(
|
self.register_const_param_defaults(
|
||||||
"Eq",
|
"Eq",
|
||||||
vec![ConstTemplate::Obj(ValueObj::builtin_t(mono_q("Self")))],
|
vec![ConstTemplate::Obj(ValueObj::builtin_t(mono_q("Self")))],
|
||||||
|
@ -458,6 +471,10 @@ impl Context {
|
||||||
"Div",
|
"Div",
|
||||||
vec![ConstTemplate::Obj(ValueObj::builtin_t(mono_q("Self")))],
|
vec![ConstTemplate::Obj(ValueObj::builtin_t(mono_q("Self")))],
|
||||||
);
|
);
|
||||||
|
self.register_const_param_defaults(
|
||||||
|
"FloorDiv",
|
||||||
|
vec![ConstTemplate::Obj(ValueObj::builtin_t(mono_q("Self")))],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_builtin_classes(&mut self) {
|
fn init_builtin_classes(&mut self) {
|
||||||
|
@ -586,7 +603,7 @@ impl Context {
|
||||||
ratio_floordiv.register_builtin_const("Output", ValueObj::builtin_t(Ratio));
|
ratio_floordiv.register_builtin_const("Output", ValueObj::builtin_t(Ratio));
|
||||||
ratio_floordiv.register_builtin_const("ModOutput", ValueObj::builtin_t(Ratio));
|
ratio_floordiv.register_builtin_const("ModOutput", ValueObj::builtin_t(Ratio));
|
||||||
ratio.register_trait(
|
ratio.register_trait(
|
||||||
Float,
|
Ratio,
|
||||||
builtin_poly("FloorDiv", vec![ty_tp(Ratio)]),
|
builtin_poly("FloorDiv", vec![ty_tp(Ratio)]),
|
||||||
ratio_floordiv,
|
ratio_floordiv,
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue