mirror of
https://github.com/erg-lang/erg.git
synced 2025-08-04 02:39:20 +00:00
fix: no-panic Context::register_marker_trait
This commit is contained in:
parent
3cc4626d26
commit
192b583678
3 changed files with 148 additions and 61 deletions
|
@ -163,8 +163,8 @@ impl Context {
|
|||
Immutable,
|
||||
Visibility::BUILTIN_PUBLIC,
|
||||
);
|
||||
float.register_marker_trait(self, mono(NUM));
|
||||
float.register_marker_trait(self, mono(ORD));
|
||||
float.register_marker_trait(self, mono(NUM)).unwrap();
|
||||
float.register_marker_trait(self, mono(ORD)).unwrap();
|
||||
let mut float_ord = Self::builtin_methods(Some(mono(ORD)), 2);
|
||||
float_ord.register_builtin_erg_impl(
|
||||
OP_CMP,
|
||||
|
@ -301,8 +301,8 @@ impl Context {
|
|||
ratio.register_superclass(Obj, &obj);
|
||||
ratio.register_builtin_py_impl(REAL, Ratio, Const, Visibility::BUILTIN_PUBLIC, Some(REAL));
|
||||
ratio.register_builtin_py_impl(IMAG, Ratio, Const, Visibility::BUILTIN_PUBLIC, Some(IMAG));
|
||||
ratio.register_marker_trait(self, mono(NUM));
|
||||
ratio.register_marker_trait(self, mono(ORD));
|
||||
ratio.register_marker_trait(self, mono(NUM)).unwrap();
|
||||
ratio.register_marker_trait(self, mono(ORD)).unwrap();
|
||||
let mut ratio_ord = Self::builtin_methods(Some(mono(ORD)), 2);
|
||||
ratio_ord.register_builtin_erg_impl(
|
||||
OP_CMP,
|
||||
|
@ -411,7 +411,7 @@ impl Context {
|
|||
/* Int */
|
||||
let mut int = Self::builtin_mono_class(INT, 2);
|
||||
int.register_superclass(Float, &float); // TODO: Float -> Ratio
|
||||
int.register_marker_trait(self, mono(NUM));
|
||||
int.register_marker_trait(self, mono(NUM)).unwrap();
|
||||
// class("Rational"),
|
||||
// class("Integral"),
|
||||
int.register_py_builtin(FUNC_ABS, fn0_met(Int, Nat), Some(OP_ABS), 11);
|
||||
|
@ -594,7 +594,7 @@ impl Context {
|
|||
Immutable,
|
||||
Visibility::BUILTIN_PUBLIC,
|
||||
);
|
||||
nat.register_marker_trait(self, mono(NUM));
|
||||
nat.register_marker_trait(self, mono(NUM)).unwrap();
|
||||
let mut nat_eq = Self::builtin_methods(Some(mono(EQ)), 2);
|
||||
nat_eq.register_builtin_erg_impl(
|
||||
OP_EQ,
|
||||
|
@ -690,7 +690,7 @@ impl Context {
|
|||
Immutable,
|
||||
Visibility::BUILTIN_PUBLIC,
|
||||
);
|
||||
bool_.register_marker_trait(self, mono(NUM));
|
||||
bool_.register_marker_trait(self, mono(NUM)).unwrap();
|
||||
let mut bool_ord = Self::builtin_methods(Some(mono(ORD)), 2);
|
||||
bool_ord.register_builtin_erg_impl(
|
||||
OP_CMP,
|
||||
|
@ -727,8 +727,8 @@ impl Context {
|
|||
/* Str */
|
||||
let mut str_ = Self::builtin_mono_class(STR, 10);
|
||||
str_.register_superclass(Obj, &obj);
|
||||
str_.register_marker_trait(self, mono(ORD));
|
||||
str_.register_marker_trait(self, mono(PATH_LIKE));
|
||||
str_.register_marker_trait(self, mono(ORD)).unwrap();
|
||||
str_.register_marker_trait(self, mono(PATH_LIKE)).unwrap();
|
||||
str_.register_builtin_erg_impl(
|
||||
FUNC_REPLACE,
|
||||
fn_met(
|
||||
|
@ -1016,7 +1016,7 @@ impl Context {
|
|||
Immutable,
|
||||
Visibility::BUILTIN_PUBLIC,
|
||||
);
|
||||
type_.register_marker_trait(self, mono(NAMED));
|
||||
type_.register_marker_trait(self, mono(NAMED)).unwrap();
|
||||
let mut type_eq = Self::builtin_methods(Some(mono(EQ)), 2);
|
||||
type_eq.register_builtin_erg_impl(
|
||||
OP_EQ,
|
||||
|
@ -1027,7 +1027,7 @@ impl Context {
|
|||
type_.register_trait(Type, type_eq);
|
||||
let mut class_type = Self::builtin_mono_class(CLASS_TYPE, 2);
|
||||
class_type.register_superclass(Type, &type_);
|
||||
class_type.register_marker_trait(self, mono(NAMED));
|
||||
class_type.register_marker_trait(self, mono(NAMED)).unwrap();
|
||||
let mut class_eq = Self::builtin_methods(Some(mono(EQ)), 2);
|
||||
class_eq.register_builtin_erg_impl(
|
||||
OP_EQ,
|
||||
|
@ -1038,7 +1038,7 @@ impl Context {
|
|||
class_type.register_trait(ClassType, class_eq);
|
||||
let mut trait_type = Self::builtin_mono_class(TRAIT_TYPE, 2);
|
||||
trait_type.register_superclass(Type, &type_);
|
||||
trait_type.register_marker_trait(self, mono(NAMED));
|
||||
trait_type.register_marker_trait(self, mono(NAMED)).unwrap();
|
||||
let mut trait_eq = Self::builtin_methods(Some(mono(EQ)), 2);
|
||||
trait_eq.register_builtin_erg_impl(
|
||||
OP_EQ,
|
||||
|
@ -1141,7 +1141,9 @@ impl Context {
|
|||
let g_module_t = mono(GENERIC_MODULE);
|
||||
let mut generic_module = Self::builtin_mono_class(GENERIC_MODULE, 2);
|
||||
generic_module.register_superclass(Obj, &obj);
|
||||
generic_module.register_marker_trait(self, mono(NAMED));
|
||||
generic_module
|
||||
.register_marker_trait(self, mono(NAMED))
|
||||
.unwrap();
|
||||
let mut generic_module_eq = Self::builtin_methods(Some(mono(EQ)), 2);
|
||||
generic_module_eq.register_builtin_erg_impl(
|
||||
OP_EQ,
|
||||
|
@ -1185,7 +1187,9 @@ impl Context {
|
|||
let mut array_ =
|
||||
Self::builtin_poly_class(ARRAY, vec![PS::t_nd(TY_T), PS::named_nd(TY_N, Nat)], 10);
|
||||
array_.register_superclass(mono(GENERIC_ARRAY), &generic_array);
|
||||
array_.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
array_
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let arr_t = array_t(T.clone(), N.clone());
|
||||
let t = fn_met(
|
||||
arr_t.clone(),
|
||||
|
@ -1266,7 +1270,9 @@ impl Context {
|
|||
Visibility::BUILTIN_PUBLIC,
|
||||
);
|
||||
array_.register_trait(arr_t.clone(), array_eq);
|
||||
array_.register_marker_trait(self, poly(SEQ, vec![ty_tp(T.clone())]));
|
||||
array_
|
||||
.register_marker_trait(self, poly(SEQ, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut array_show = Self::builtin_methods(Some(mono(SHOW)), 1);
|
||||
array_show.register_builtin_py_impl(
|
||||
TO_STR,
|
||||
|
@ -1340,7 +1346,8 @@ impl Context {
|
|||
Self::builtin_poly_class(SET, vec![PS::t_nd(TY_T), PS::named_nd(TY_N, Nat)], 10);
|
||||
let set_t = set_t(T.clone(), TyParam::erased(Nat));
|
||||
set_.register_superclass(mono(GENERIC_SET), &generic_set);
|
||||
set_.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
set_.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let t = fn_met(
|
||||
set_t.clone(),
|
||||
vec![kw(KW_RHS, set_t.clone())],
|
||||
|
@ -1390,8 +1397,9 @@ impl Context {
|
|||
Visibility::BUILTIN_PUBLIC,
|
||||
);
|
||||
set_.register_trait(set_t.clone(), set_eq);
|
||||
set_.register_marker_trait(self, mono(MUTIZABLE));
|
||||
set_.register_marker_trait(self, poly(SEQ, vec![ty_tp(T.clone())]));
|
||||
set_.register_marker_trait(self, mono(MUTIZABLE)).unwrap();
|
||||
set_.register_marker_trait(self, poly(SEQ, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut set_show = Self::builtin_methods(Some(mono(SHOW)), 1);
|
||||
set_show.register_builtin_erg_impl(
|
||||
TO_STR,
|
||||
|
@ -1437,7 +1445,9 @@ impl Context {
|
|||
// TODO: D <: GenericDict
|
||||
Self::builtin_poly_class(DICT, vec![PS::named_nd(TY_D, mono(GENERIC_DICT))], 10);
|
||||
dict_.register_superclass(g_dict_t.clone(), &generic_dict);
|
||||
dict_.register_marker_trait(self, poly(OUTPUT, vec![D.clone()]));
|
||||
dict_
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![D.clone()]))
|
||||
.unwrap();
|
||||
let mut dict_mutizable = Self::builtin_methods(Some(mono(MUTIZABLE)), 2);
|
||||
dict_mutizable.register_builtin_const(
|
||||
MUTABLE_MUT_TYPE,
|
||||
|
@ -1531,7 +1541,9 @@ impl Context {
|
|||
2,
|
||||
);
|
||||
tuple_.register_superclass(mono(GENERIC_TUPLE), &generic_tuple);
|
||||
tuple_.register_marker_trait(self, poly(OUTPUT, vec![Ts.clone()]));
|
||||
tuple_
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![Ts.clone()]))
|
||||
.unwrap();
|
||||
// __Tuple_getitem__: (self: Tuple(Ts), _: {N}) -> Ts[N]
|
||||
let return_t = proj_call(Ts.clone(), FUNDAMENTAL_GETITEM, vec![N.clone()]);
|
||||
let tuple_getitem_t =
|
||||
|
@ -1588,70 +1600,123 @@ impl Context {
|
|||
/* Iterators */
|
||||
let mut str_iterator = Self::builtin_mono_class(STR_ITERATOR, 1);
|
||||
str_iterator.register_superclass(Obj, &obj);
|
||||
str_iterator.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(Str)]));
|
||||
str_iterator.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(Str)]));
|
||||
str_iterator
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(Str)]))
|
||||
.unwrap();
|
||||
str_iterator
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(Str)]))
|
||||
.unwrap();
|
||||
let mut array_iterator = Self::builtin_poly_class(ARRAY_ITERATOR, vec![PS::t_nd(TY_T)], 1);
|
||||
array_iterator.register_superclass(Obj, &obj);
|
||||
array_iterator.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
array_iterator.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
array_iterator
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
array_iterator
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut set_iterator = Self::builtin_poly_class(SET_ITERATOR, vec![PS::t_nd(TY_T)], 1);
|
||||
set_iterator.register_superclass(Obj, &obj);
|
||||
set_iterator.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
set_iterator.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
set_iterator
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
set_iterator
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut tuple_iterator = Self::builtin_poly_class(TUPLE_ITERATOR, vec![PS::t_nd(TY_T)], 1);
|
||||
tuple_iterator.register_superclass(Obj, &obj);
|
||||
tuple_iterator.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
tuple_iterator.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
tuple_iterator
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
tuple_iterator
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut range_iterator = Self::builtin_poly_class(RANGE_ITERATOR, vec![PS::t_nd(TY_T)], 1);
|
||||
range_iterator.register_superclass(Obj, &obj);
|
||||
range_iterator.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
range_iterator.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
range_iterator
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
range_iterator
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut dict_keys = Self::builtin_poly_class(DICT_KEYS, vec![PS::t_nd(TY_T)], 1);
|
||||
dict_keys.register_superclass(Obj, &obj);
|
||||
dict_keys.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
dict_keys.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
dict_keys
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
dict_keys
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut dict_values = Self::builtin_poly_class(DICT_VALUES, vec![PS::t_nd(TY_T)], 1);
|
||||
dict_values.register_superclass(Obj, &obj);
|
||||
dict_values.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
dict_values.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
dict_values
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
dict_values
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut dict_items = Self::builtin_poly_class(DICT_ITEMS, vec![PS::t_nd(TY_T)], 1);
|
||||
dict_items.register_superclass(Obj, &obj);
|
||||
dict_items.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
dict_items.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
dict_items
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
dict_items
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
/* Enumerate */
|
||||
let mut enumerate = Self::builtin_poly_class(ENUMERATE, vec![PS::t_nd(TY_T)], 2);
|
||||
enumerate.register_superclass(Obj, &obj);
|
||||
enumerate.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
enumerate.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
enumerate
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
enumerate
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
/* Filter */
|
||||
let mut filter = Self::builtin_poly_class(FILTER, vec![PS::t_nd(TY_T)], 2);
|
||||
filter.register_superclass(Obj, &obj);
|
||||
filter.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
filter.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
filter
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
filter
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
/* Map */
|
||||
let mut map = Self::builtin_poly_class(MAP, vec![PS::t_nd(TY_T)], 2);
|
||||
map.register_superclass(Obj, &obj);
|
||||
map.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
map.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
map.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
map.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
/* Reversed */
|
||||
let mut reversed = Self::builtin_poly_class(REVERSED, vec![PS::t_nd(TY_T)], 2);
|
||||
reversed.register_superclass(Obj, &obj);
|
||||
reversed.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
reversed.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
reversed
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
reversed
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
/* Zip */
|
||||
let mut zip = Self::builtin_poly_class(ZIP, vec![PS::t_nd(TY_T), PS::t_nd(TY_U)], 2);
|
||||
zip.register_superclass(Obj, &obj);
|
||||
zip.register_marker_trait(
|
||||
self,
|
||||
poly(ITERABLE, vec![ty_tp(tuple_t(vec![T.clone(), U.clone()]))]),
|
||||
);
|
||||
zip.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
zip.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(U.clone())]));
|
||||
)
|
||||
.unwrap();
|
||||
zip.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
zip.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(U.clone())]))
|
||||
.unwrap();
|
||||
let fset_t = poly(FROZENSET, vec![ty_tp(T.clone())]);
|
||||
let mut frozenset = Self::builtin_poly_class(FROZENSET, vec![PS::t_nd(TY_T)], 2);
|
||||
frozenset.register_superclass(Obj, &obj);
|
||||
frozenset.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]));
|
||||
frozenset.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
frozenset
|
||||
.register_marker_trait(self, poly(ITERABLE, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
frozenset
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let t = fn0_met(fset_t.clone(), fset_t.clone()).quantify();
|
||||
frozenset.register_py_builtin(COPY, t, Some(COPY), 3);
|
||||
let bin_t = fn1_met(fset_t.clone(), fset_t.clone(), fset_t.clone()).quantify();
|
||||
|
@ -1948,9 +2013,15 @@ impl Context {
|
|||
Some(FUNC_WRITE),
|
||||
);
|
||||
file_mut.register_trait(mono(MUT_FILE), file_mut_writable);
|
||||
file_mut.register_marker_trait(self, mono(FILE_LIKE));
|
||||
file_mut.register_marker_trait(self, mono(MUT_FILE_LIKE));
|
||||
file_mut.register_marker_trait(self, mono(CONTEXT_MANAGER));
|
||||
file_mut
|
||||
.register_marker_trait(self, mono(FILE_LIKE))
|
||||
.unwrap();
|
||||
file_mut
|
||||
.register_marker_trait(self, mono(MUT_FILE_LIKE))
|
||||
.unwrap();
|
||||
file_mut
|
||||
.register_marker_trait(self, mono(CONTEXT_MANAGER))
|
||||
.unwrap();
|
||||
/* Array! */
|
||||
let array_mut_t = poly(MUT_ARRAY, vec![ty_tp(T.clone()), N.clone()]);
|
||||
let mut array_mut_ =
|
||||
|
@ -2168,8 +2239,12 @@ impl Context {
|
|||
let mut range = Self::builtin_poly_class(RANGE, vec![PS::t_nd(TY_T)], 2);
|
||||
// range.register_superclass(Obj, &obj);
|
||||
range.register_superclass(Type, &type_);
|
||||
range.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]));
|
||||
range.register_marker_trait(self, poly(SEQ, vec![ty_tp(T.clone())]));
|
||||
range
|
||||
.register_marker_trait(self, poly(OUTPUT, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
range
|
||||
.register_marker_trait(self, poly(SEQ, vec![ty_tp(T.clone())]))
|
||||
.unwrap();
|
||||
let mut range_eq = Self::builtin_methods(Some(mono(EQ)), 2);
|
||||
range_eq.register_builtin_erg_impl(
|
||||
OP_EQ,
|
||||
|
@ -2225,13 +2300,13 @@ impl Context {
|
|||
proc.register_superclass(mono(GENERIC_CALLABLE), &g_callable);
|
||||
let mut named_proc = Self::builtin_mono_class(NAMED_PROC, 2);
|
||||
named_proc.register_superclass(mono(PROC), &proc);
|
||||
named_proc.register_marker_trait(self, mono(NAMED));
|
||||
named_proc.register_marker_trait(self, mono(NAMED)).unwrap();
|
||||
/* Func */
|
||||
let mut func = Self::builtin_mono_class(FUNC, 2);
|
||||
func.register_superclass(mono(PROC), &proc);
|
||||
let mut named_func = Self::builtin_mono_class(NAMED_FUNC, 2);
|
||||
named_func.register_superclass(mono(FUNC), &func);
|
||||
named_func.register_marker_trait(self, mono(NAMED));
|
||||
named_func.register_marker_trait(self, mono(NAMED)).unwrap();
|
||||
let mut quant = Self::builtin_mono_class(QUANTIFIED, 2);
|
||||
quant.register_superclass(mono(PROC), &proc);
|
||||
let mut qfunc = Self::builtin_mono_class(QUANTIFIED_FUNC, 2);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue