mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-30 12:51:10 +00:00
Fix #177
This commit is contained in:
parent
5366bfadc4
commit
c6de914f3f
2 changed files with 9 additions and 6 deletions
|
@ -396,6 +396,7 @@ impl Context {
|
|||
float.register_builtin_impl("Real", Float, Const, Public);
|
||||
float.register_builtin_impl("Imag", Float, Const, Public);
|
||||
float.register_marker_trait(builtin_mono("Num"));
|
||||
float.register_marker_trait(builtin_mono("Ord"));
|
||||
let mut float_partial_ord = Self::methods("PartialOrd", None, Self::TOP_LEVEL);
|
||||
float_partial_ord.register_builtin_impl(
|
||||
"__cmp__",
|
||||
|
@ -438,7 +439,7 @@ impl Context {
|
|||
ratio.register_builtin_impl("Real", Ratio, Const, Public);
|
||||
ratio.register_builtin_impl("Imag", Ratio, Const, Public);
|
||||
ratio.register_marker_trait(builtin_mono("Num"));
|
||||
// ratio.register_marker_trait(mono("Ord"));
|
||||
ratio.register_marker_trait(builtin_mono("Ord"));
|
||||
let mut ratio_partial_ord = Self::methods("PartialOrd", None, Self::TOP_LEVEL);
|
||||
ratio_partial_ord.register_builtin_impl(
|
||||
"__cmp__",
|
||||
|
@ -481,7 +482,7 @@ impl Context {
|
|||
int.register_superclass(Float, &float); // TODO: Float -> Ratio
|
||||
int.register_superclass(Obj, &obj);
|
||||
int.register_marker_trait(builtin_mono("Num"));
|
||||
// int.register_marker_trait(mono("Ord"));
|
||||
int.register_marker_trait(builtin_mono("Ord"));
|
||||
int.register_marker_trait(poly("Eq", vec![ty_tp(Int)]));
|
||||
// class("Rational"),
|
||||
// class("Integral"),
|
||||
|
@ -536,7 +537,7 @@ impl Context {
|
|||
Public,
|
||||
);
|
||||
nat.register_marker_trait(builtin_mono("Num"));
|
||||
// nat.register_marker_trait(mono("Ord"));
|
||||
nat.register_marker_trait(builtin_mono("Ord"));
|
||||
let mut nat_eq = Self::methods("Eq", None, Self::TOP_LEVEL);
|
||||
nat_eq.register_builtin_impl("__eq__", fn1_met(Nat, Nat, Bool), Const, Public);
|
||||
nat.register_trait(Nat, poly("Eq", vec![ty_tp(Nat)]), nat_eq);
|
||||
|
@ -574,7 +575,7 @@ impl Context {
|
|||
bool_.register_builtin_impl("__and__", fn1_met(Bool, Bool, Bool), Const, Public);
|
||||
bool_.register_builtin_impl("__or__", fn1_met(Bool, Bool, Bool), Const, Public);
|
||||
bool_.register_marker_trait(builtin_mono("Num"));
|
||||
// bool_.register_marker_trait(mono("Ord"));
|
||||
bool_.register_marker_trait(builtin_mono("Ord"));
|
||||
let mut bool_partial_ord = Self::methods("PartialOrd", None, Self::TOP_LEVEL);
|
||||
bool_partial_ord.register_builtin_impl(
|
||||
"__cmp__",
|
||||
|
@ -600,6 +601,7 @@ impl Context {
|
|||
bool_.register_trait(Bool, builtin_mono("Mutizable"), bool_mutizable);
|
||||
let mut str_ = Self::mono_class("Str", None, Self::TOP_LEVEL);
|
||||
str_.register_superclass(Obj, &obj);
|
||||
str_.register_marker_trait(builtin_mono("Ord"));
|
||||
str_.register_builtin_impl(
|
||||
"replace",
|
||||
fn_met(
|
||||
|
|
|
@ -1460,7 +1460,8 @@ impl Context {
|
|||
if let Some((_, ctx)) = self.get_nominal_type_ctx(typ) {
|
||||
ctx.kind.is_class()
|
||||
} else {
|
||||
todo!("is_class({typ})")
|
||||
// TODO: unknown types
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1482,7 +1483,7 @@ impl Context {
|
|||
if let Some((_, ctx)) = self.get_nominal_type_ctx(typ) {
|
||||
ctx.kind.is_trait()
|
||||
} else {
|
||||
todo!("is_trait({typ})")
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue