mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 04:24:43 +00:00
Clean: add and change to block comment
This commit is contained in:
parent
24fe41c7b3
commit
ecb7ffb7f1
1 changed files with 35 additions and 38 deletions
|
@ -247,6 +247,7 @@ impl Context {
|
||||||
let mut mutizable = Self::builtin_mono_trait("Mutizable", 2);
|
let mut mutizable = Self::builtin_mono_trait("Mutizable", 2);
|
||||||
mutizable.register_builtin_decl("MutType!", Type, Public);
|
mutizable.register_builtin_decl("MutType!", Type, Public);
|
||||||
let pathlike = Self::builtin_mono_trait("PathLike", 2);
|
let pathlike = Self::builtin_mono_trait("PathLike", 2);
|
||||||
|
/* Readable */
|
||||||
let mut readable = Self::builtin_mono_trait("Readable!", 2);
|
let mut readable = Self::builtin_mono_trait("Readable!", 2);
|
||||||
let t_read = pr_met(
|
let t_read = pr_met(
|
||||||
ref_mut(mono_q("Self"), None),
|
ref_mut(mono_q("Self"), None),
|
||||||
|
@ -260,6 +261,7 @@ impl Context {
|
||||||
set! { subtypeof(mono_q("Self"), builtin_mono("Readable!")) },
|
set! { subtypeof(mono_q("Self"), builtin_mono("Readable!")) },
|
||||||
);
|
);
|
||||||
readable.register_builtin_decl("read!", t_read, Public);
|
readable.register_builtin_decl("read!", t_read, Public);
|
||||||
|
/* Show */
|
||||||
let mut show = Self::builtin_mono_trait("Show", 2);
|
let mut show = Self::builtin_mono_trait("Show", 2);
|
||||||
let t_show = fn0_met(ref_(mono_q("Self")), Str);
|
let t_show = fn0_met(ref_(mono_q("Self")), Str);
|
||||||
let t_show = quant(
|
let t_show = quant(
|
||||||
|
@ -267,6 +269,7 @@ impl Context {
|
||||||
set! { subtypeof(mono_q("Self"), builtin_mono("Show")) },
|
set! { subtypeof(mono_q("Self"), builtin_mono("Show")) },
|
||||||
);
|
);
|
||||||
show.register_builtin_decl("to_str", t_show, Public);
|
show.register_builtin_decl("to_str", t_show, Public);
|
||||||
|
/* In */
|
||||||
let mut in_ = Self::builtin_poly_trait("In", vec![PS::t("T", NonDefault)], 2);
|
let mut in_ = Self::builtin_poly_trait("In", vec![PS::t("T", NonDefault)], 2);
|
||||||
let params = vec![PS::t("T", NonDefault)];
|
let params = vec![PS::t("T", NonDefault)];
|
||||||
let input = Self::builtin_poly_trait("Input", params.clone(), 2);
|
let input = Self::builtin_poly_trait("Input", params.clone(), 2);
|
||||||
|
@ -278,6 +281,7 @@ impl Context {
|
||||||
set! { static_instance("T", Type), subtypeof(mono_q("I"), builtin_poly("In", vec![ty_tp(mono_q("T"))])) },
|
set! { static_instance("T", Type), subtypeof(mono_q("I"), builtin_poly("In", vec![ty_tp(mono_q("T"))])) },
|
||||||
);
|
);
|
||||||
in_.register_builtin_decl("__in__", op_t, Public);
|
in_.register_builtin_decl("__in__", op_t, Public);
|
||||||
|
/* Eq */
|
||||||
// Erg does not have a trait equivalent to `PartialEq` in Rust
|
// Erg does not have a trait equivalent to `PartialEq` in Rust
|
||||||
// This means, Erg's `Float` cannot be compared with other `Float`
|
// This means, Erg's `Float` cannot be compared with other `Float`
|
||||||
// use `l - r < EPSILON` to check if two floats are almost equal
|
// use `l - r < EPSILON` to check if two floats are almost equal
|
||||||
|
@ -293,6 +297,7 @@ impl Context {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
eq.register_builtin_decl("__eq__", op_t, Public);
|
eq.register_builtin_decl("__eq__", op_t, Public);
|
||||||
|
/* Partial_ord */
|
||||||
let mut partial_ord =
|
let mut partial_ord =
|
||||||
Self::builtin_poly_trait("PartialOrd", vec![PS::t("R", WithDefault)], 2);
|
Self::builtin_poly_trait("PartialOrd", vec![PS::t("R", WithDefault)], 2);
|
||||||
partial_ord.register_superclass(builtin_poly("Eq", vec![ty_tp(mono_q("R"))]), &eq);
|
partial_ord.register_superclass(builtin_poly("Eq", vec![ty_tp(mono_q("R"))]), &eq);
|
||||||
|
@ -309,6 +314,7 @@ impl Context {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
partial_ord.register_builtin_decl("__partial_cmp__", op_t, Public);
|
partial_ord.register_builtin_decl("__partial_cmp__", op_t, Public);
|
||||||
|
/* Ord */
|
||||||
let mut ord = Self::builtin_mono_trait("Ord", 2);
|
let mut ord = Self::builtin_mono_trait("Ord", 2);
|
||||||
ord.register_superclass(builtin_poly("Eq", vec![ty_tp(builtin_mono("Self"))]), &eq);
|
ord.register_superclass(builtin_poly("Eq", vec![ty_tp(builtin_mono("Self"))]), &eq);
|
||||||
ord.register_superclass(
|
ord.register_superclass(
|
||||||
|
@ -316,12 +322,14 @@ impl Context {
|
||||||
&partial_ord,
|
&partial_ord,
|
||||||
);
|
);
|
||||||
// FIXME: poly trait
|
// FIXME: poly trait
|
||||||
|
/* Num */
|
||||||
let num = Self::builtin_mono_trait("Num", 2);
|
let num = Self::builtin_mono_trait("Num", 2);
|
||||||
/* vec![
|
/* vec![
|
||||||
poly("Add", vec![]),
|
poly("Add", vec![]),
|
||||||
poly("Sub", vec![]),
|
poly("Sub", vec![]),
|
||||||
poly("Mul", vec![]),
|
poly("Mul", vec![]),
|
||||||
], */
|
], */
|
||||||
|
/* Seq */
|
||||||
let mut seq = Self::builtin_poly_trait("Seq", vec![PS::t("T", NonDefault)], 2);
|
let mut seq = Self::builtin_poly_trait("Seq", vec![PS::t("T", NonDefault)], 2);
|
||||||
seq.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("T"))]), &output);
|
seq.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("T"))]), &output);
|
||||||
let self_t = mono_q("Self");
|
let self_t = mono_q("Self");
|
||||||
|
@ -342,6 +350,7 @@ impl Context {
|
||||||
let r_bound = static_instance("R", Type);
|
let r_bound = static_instance("R", Type);
|
||||||
let params = vec![PS::t("R", WithDefault)];
|
let params = vec![PS::t("R", WithDefault)];
|
||||||
let ty_params = vec![ty_tp(mono_q("R"))];
|
let ty_params = vec![ty_tp(mono_q("R"))];
|
||||||
|
/* Num */
|
||||||
let mut add = Self::builtin_poly_trait("Add", params.clone(), 2);
|
let mut add = Self::builtin_poly_trait("Add", params.clone(), 2);
|
||||||
// Rについて共変(__add__の型とは関係ない)
|
// Rについて共変(__add__の型とは関係ない)
|
||||||
add.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
add.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
||||||
|
@ -354,6 +363,7 @@ impl Context {
|
||||||
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
||||||
add.register_builtin_decl("__add__", op_t, Public);
|
add.register_builtin_decl("__add__", op_t, Public);
|
||||||
add.register_builtin_decl("Output", Type, Public);
|
add.register_builtin_decl("Output", Type, Public);
|
||||||
|
/* Sub */
|
||||||
let mut sub = Self::builtin_poly_trait("Sub", params.clone(), 2);
|
let mut sub = Self::builtin_poly_trait("Sub", params.clone(), 2);
|
||||||
sub.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
sub.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
||||||
let op_t = fn1_met(
|
let op_t = fn1_met(
|
||||||
|
@ -365,6 +375,7 @@ impl Context {
|
||||||
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
||||||
sub.register_builtin_decl("__sub__", op_t, Public);
|
sub.register_builtin_decl("__sub__", op_t, Public);
|
||||||
sub.register_builtin_decl("Output", Type, Public);
|
sub.register_builtin_decl("Output", Type, Public);
|
||||||
|
/* Mul */
|
||||||
let mut mul = Self::builtin_poly_trait("Mul", params.clone(), 2);
|
let mut mul = Self::builtin_poly_trait("Mul", params.clone(), 2);
|
||||||
mul.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
mul.register_superclass(builtin_poly("Output", vec![ty_tp(mono_q("R"))]), &output);
|
||||||
let op_t = fn1_met(
|
let op_t = fn1_met(
|
||||||
|
@ -376,6 +387,7 @@ impl Context {
|
||||||
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
let op_t = quant(op_t, set! {r_bound.clone(), self_bound});
|
||||||
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 */
|
||||||
let mut div = Self::builtin_poly_trait("Div", params, 2);
|
let mut div = Self::builtin_poly_trait("Div", params, 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, mono_proj(mono_q("Self"), "Output"));
|
||||||
|
@ -443,7 +455,7 @@ impl Context {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_builtin_classes(&mut self) {
|
fn init_builtin_classes(&mut self) {
|
||||||
// *** Obj *** //
|
/* Obj */
|
||||||
let mut obj = Self::builtin_mono_class("Obj", 2);
|
let mut obj = Self::builtin_mono_class("Obj", 2);
|
||||||
let t = fn0_met(mono_q("Self"), mono_q("Self"));
|
let t = fn0_met(mono_q("Self"), mono_q("Self"));
|
||||||
let t = quant(t, set! {subtypeof(mono_q("Self"), builtin_mono("Obj"))});
|
let t = quant(t, set! {subtypeof(mono_q("Self"), builtin_mono("Obj"))});
|
||||||
|
@ -466,7 +478,7 @@ impl Context {
|
||||||
obj_mutizable.register_builtin_const("MutType!", ValueObj::builtin_t(builtin_mono("Obj!")));
|
obj_mutizable.register_builtin_const("MutType!", ValueObj::builtin_t(builtin_mono("Obj!")));
|
||||||
obj.register_trait(Obj, builtin_mono("Mutizable"), obj_mutizable);
|
obj.register_trait(Obj, builtin_mono("Mutizable"), obj_mutizable);
|
||||||
|
|
||||||
// *** Float *** //
|
/* Float */
|
||||||
let mut float = Self::builtin_mono_class("Float", 2);
|
let mut float = Self::builtin_mono_class("Float", 2);
|
||||||
float.register_superclass(Obj, &obj);
|
float.register_superclass(Obj, &obj);
|
||||||
// TODO: support multi platform
|
// TODO: support multi platform
|
||||||
|
@ -516,7 +528,7 @@ impl Context {
|
||||||
float_show.register_builtin_impl("to_str", t, Immutable, Public);
|
float_show.register_builtin_impl("to_str", t, Immutable, Public);
|
||||||
float.register_trait(Float, builtin_mono("Show"), float_show);
|
float.register_trait(Float, builtin_mono("Show"), float_show);
|
||||||
|
|
||||||
// *** Ratio *** //
|
/* Ratio */
|
||||||
// TODO: Int, Nat, Boolの継承元をRatioにする(今はFloat)
|
// TODO: Int, Nat, Boolの継承元をRatioにする(今はFloat)
|
||||||
let mut ratio = Self::builtin_mono_class("Ratio", 2);
|
let mut ratio = Self::builtin_mono_class("Ratio", 2);
|
||||||
ratio.register_superclass(Obj, &obj);
|
ratio.register_superclass(Obj, &obj);
|
||||||
|
@ -567,7 +579,7 @@ impl Context {
|
||||||
ratio_show.register_builtin_impl("to_str", t, Immutable, Public);
|
ratio_show.register_builtin_impl("to_str", t, Immutable, Public);
|
||||||
ratio.register_trait(Ratio, builtin_mono("Show"), ratio_show);
|
ratio.register_trait(Ratio, builtin_mono("Show"), ratio_show);
|
||||||
|
|
||||||
// *** Int *** //
|
/* Int */
|
||||||
let mut int = Self::builtin_mono_class("Int", 2);
|
let mut int = Self::builtin_mono_class("Int", 2);
|
||||||
int.register_superclass(Float, &float); // TODO: Float -> Ratio
|
int.register_superclass(Float, &float); // TODO: Float -> Ratio
|
||||||
int.register_marker_trait(builtin_mono("Num"));
|
int.register_marker_trait(builtin_mono("Num"));
|
||||||
|
@ -616,7 +628,7 @@ impl Context {
|
||||||
int.register_builtin_impl("Real", Int, Const, Public);
|
int.register_builtin_impl("Real", Int, Const, Public);
|
||||||
int.register_builtin_impl("Imag", Int, Const, Public);
|
int.register_builtin_impl("Imag", Int, Const, Public);
|
||||||
|
|
||||||
// *** Nat *** //
|
/* Nat */
|
||||||
let mut nat = Self::builtin_mono_class("Nat", 10);
|
let mut nat = Self::builtin_mono_class("Nat", 10);
|
||||||
nat.register_superclass(Int, &int);
|
nat.register_superclass(Int, &int);
|
||||||
// class("Rational"),
|
// class("Rational"),
|
||||||
|
@ -666,7 +678,7 @@ impl Context {
|
||||||
nat.register_builtin_impl("Real", Nat, Const, Public);
|
nat.register_builtin_impl("Real", Nat, Const, Public);
|
||||||
nat.register_builtin_impl("Imag", Nat, Const, Public);
|
nat.register_builtin_impl("Imag", Nat, Const, Public);
|
||||||
|
|
||||||
// *** Bool *** //
|
/* Bool */
|
||||||
let mut bool_ = Self::builtin_mono_class("Bool", 10);
|
let mut bool_ = Self::builtin_mono_class("Bool", 10);
|
||||||
bool_.register_superclass(Nat, &nat);
|
bool_.register_superclass(Nat, &nat);
|
||||||
// class("Rational"),
|
// class("Rational"),
|
||||||
|
@ -702,6 +714,7 @@ impl Context {
|
||||||
let mut bool_show = Self::builtin_methods("Show", 1);
|
let mut bool_show = Self::builtin_methods("Show", 1);
|
||||||
bool_show.register_builtin_impl("to_str", fn0_met(Bool, Str), Immutable, Public);
|
bool_show.register_builtin_impl("to_str", fn0_met(Bool, Str), Immutable, Public);
|
||||||
bool_.register_trait(Bool, builtin_mono("Show"), bool_show);
|
bool_.register_trait(Bool, builtin_mono("Show"), bool_show);
|
||||||
|
/* Str */
|
||||||
let mut str_ = Self::builtin_mono_class("Str", 10);
|
let mut str_ = Self::builtin_mono_class("Str", 10);
|
||||||
str_.register_superclass(Obj, &obj);
|
str_.register_superclass(Obj, &obj);
|
||||||
str_.register_marker_trait(builtin_mono("Ord"));
|
str_.register_marker_trait(builtin_mono("Ord"));
|
||||||
|
@ -730,7 +743,6 @@ impl Context {
|
||||||
Immutable,
|
Immutable,
|
||||||
Public,
|
Public,
|
||||||
);
|
);
|
||||||
// *** Str *** //
|
|
||||||
let mut str_eq = Self::builtin_methods("Eq", 2);
|
let mut str_eq = Self::builtin_methods("Eq", 2);
|
||||||
str_eq.register_builtin_impl("__eq__", fn1_met(Str, Str, Bool), Const, Public);
|
str_eq.register_builtin_impl("__eq__", fn1_met(Str, Str, Bool), Const, Public);
|
||||||
str_.register_trait(Str, builtin_poly("Eq", vec![ty_tp(Str)]), str_eq);
|
str_.register_trait(Str, builtin_poly("Eq", vec![ty_tp(Str)]), str_eq);
|
||||||
|
@ -752,6 +764,7 @@ impl Context {
|
||||||
let mut str_show = Self::builtin_methods("Show", 1);
|
let mut str_show = Self::builtin_methods("Show", 1);
|
||||||
str_show.register_builtin_impl("to_str", fn0_met(Str, Str), Immutable, Public);
|
str_show.register_builtin_impl("to_str", fn0_met(Str, Str), Immutable, Public);
|
||||||
str_.register_trait(Str, builtin_mono("Show"), str_show);
|
str_.register_trait(Str, builtin_mono("Show"), str_show);
|
||||||
|
/* Type */
|
||||||
let mut type_ = Self::builtin_mono_class("Type", 2);
|
let mut type_ = Self::builtin_mono_class("Type", 2);
|
||||||
type_.register_superclass(Obj, &obj);
|
type_.register_superclass(Obj, &obj);
|
||||||
type_.register_builtin_impl("mro", array(Type, TyParam::erased(Nat)), Immutable, Public);
|
type_.register_builtin_impl("mro", array(Type, TyParam::erased(Nat)), Immutable, Public);
|
||||||
|
@ -784,7 +797,6 @@ impl Context {
|
||||||
let module_t = module(mono_q_tp("Path"));
|
let module_t = module(mono_q_tp("Path"));
|
||||||
let mut module = Self::builtin_poly_class("Module", vec![PS::named_nd("Path", Str)], 2);
|
let mut module = Self::builtin_poly_class("Module", vec![PS::named_nd("Path", Str)], 2);
|
||||||
module.register_superclass(g_module_t.clone(), &generic_module);
|
module.register_superclass(g_module_t.clone(), &generic_module);
|
||||||
|
|
||||||
/* Array */
|
/* Array */
|
||||||
let mut array_ =
|
let mut array_ =
|
||||||
Self::builtin_poly_class("Array", vec![PS::t_nd("T"), PS::named_nd("N", Nat)], 10);
|
Self::builtin_poly_class("Array", vec![PS::t_nd("T"), PS::named_nd("N", Nat)], 10);
|
||||||
|
@ -875,8 +887,7 @@ impl Context {
|
||||||
let mut set_show = Self::builtin_methods("Show", 1);
|
let mut set_show = Self::builtin_methods("Show", 1);
|
||||||
set_show.register_builtin_impl("to_str", fn0_met(set_t.clone(), Str), Immutable, Public);
|
set_show.register_builtin_impl("to_str", fn0_met(set_t.clone(), Str), Immutable, Public);
|
||||||
set_.register_trait(set_t, builtin_mono("Show"), set_show);
|
set_.register_trait(set_t, builtin_mono("Show"), set_show);
|
||||||
|
/* Bytes */
|
||||||
// *** Bytes *** //
|
|
||||||
let mut bytes = Self::builtin_mono_class("Bytes", 2);
|
let mut bytes = Self::builtin_mono_class("Bytes", 2);
|
||||||
bytes.register_superclass(Obj, &obj);
|
bytes.register_superclass(Obj, &obj);
|
||||||
// FIXME: replace to Tuple Ts (e.g. Tuple [Int, Str])
|
// FIXME: replace to Tuple Ts (e.g. Tuple [Int, Str])
|
||||||
|
@ -915,8 +926,7 @@ impl Context {
|
||||||
),
|
),
|
||||||
tuple1_eq,
|
tuple1_eq,
|
||||||
);
|
);
|
||||||
|
/* Tuple(n) */
|
||||||
// *** Tuple(n) *** //
|
|
||||||
let mut tuple2 = Self::builtin_poly_class("Tuple2", vec![PS::t_nd("A"), PS::t_nd("B")], 2);
|
let mut tuple2 = Self::builtin_poly_class("Tuple2", vec![PS::t_nd("A"), PS::t_nd("B")], 2);
|
||||||
tuple2.register_superclass(builtin_mono("Tuple"), &tuple_);
|
tuple2.register_superclass(builtin_mono("Tuple"), &tuple_);
|
||||||
let mut tuple2_eq = Self::builtin_methods("Eq", 2);
|
let mut tuple2_eq = Self::builtin_methods("Eq", 2);
|
||||||
|
@ -1333,15 +1343,13 @@ impl Context {
|
||||||
),
|
),
|
||||||
tuple8_eq,
|
tuple8_eq,
|
||||||
);
|
);
|
||||||
|
/* record */
|
||||||
// *** record *** //
|
|
||||||
let mut record = Self::builtin_mono_class("Record", 2);
|
let mut record = Self::builtin_mono_class("Record", 2);
|
||||||
record.register_superclass(Obj, &obj);
|
record.register_superclass(Obj, &obj);
|
||||||
let mut record_type = Self::builtin_mono_class("RecordType", 2);
|
let mut record_type = Self::builtin_mono_class("RecordType", 2);
|
||||||
record_type.register_superclass(builtin_mono("Record"), &record);
|
record_type.register_superclass(builtin_mono("Record"), &record);
|
||||||
record_type.register_superclass(builtin_mono("Type"), &type_);
|
record_type.register_superclass(builtin_mono("Type"), &type_);
|
||||||
|
/* Float_mut */
|
||||||
// *** Float_mut *** //
|
|
||||||
let mut float_mut = Self::builtin_mono_class("Float!", 2);
|
let mut float_mut = Self::builtin_mono_class("Float!", 2);
|
||||||
float_mut.register_superclass(Float, &float);
|
float_mut.register_superclass(Float, &float);
|
||||||
let mut float_mut_mutable = Self::builtin_methods("Mutable", 2);
|
let mut float_mut_mutable = Self::builtin_methods("Mutable", 2);
|
||||||
|
@ -1360,8 +1368,7 @@ impl Context {
|
||||||
builtin_mono("Mutable"),
|
builtin_mono("Mutable"),
|
||||||
float_mut_mutable,
|
float_mut_mutable,
|
||||||
);
|
);
|
||||||
|
/* Ratio_mut */
|
||||||
// *** Ratio_mut *** //
|
|
||||||
let mut ratio_mut = Self::builtin_mono_class("Ratio!", 2);
|
let mut ratio_mut = Self::builtin_mono_class("Ratio!", 2);
|
||||||
ratio_mut.register_superclass(Ratio, &ratio);
|
ratio_mut.register_superclass(Ratio, &ratio);
|
||||||
let mut ratio_mut_mutable = Self::builtin_methods("Mutable", 2);
|
let mut ratio_mut_mutable = Self::builtin_methods("Mutable", 2);
|
||||||
|
@ -1388,8 +1395,7 @@ impl Context {
|
||||||
builtin_mono("Mutable"),
|
builtin_mono("Mutable"),
|
||||||
ratio_mut_mutable,
|
ratio_mut_mutable,
|
||||||
);
|
);
|
||||||
|
/* Int_mut */
|
||||||
// *** Int_mut *** //
|
|
||||||
let mut int_mut = Self::builtin_mono_class("Int!", 2);
|
let mut int_mut = Self::builtin_mono_class("Int!", 2);
|
||||||
int_mut.register_superclass(Int, &int);
|
int_mut.register_superclass(Int, &int);
|
||||||
int_mut.register_superclass(builtin_mono("Float!"), &float_mut);
|
int_mut.register_superclass(builtin_mono("Float!"), &float_mut);
|
||||||
|
@ -1412,8 +1418,7 @@ impl Context {
|
||||||
let mut nat_mut = Self::builtin_mono_class("Nat!", 2);
|
let mut nat_mut = Self::builtin_mono_class("Nat!", 2);
|
||||||
nat_mut.register_superclass(Nat, &nat);
|
nat_mut.register_superclass(Nat, &nat);
|
||||||
nat_mut.register_superclass(builtin_mono("Int!"), &int_mut);
|
nat_mut.register_superclass(builtin_mono("Int!"), &int_mut);
|
||||||
|
/* Nat_mut */
|
||||||
// *** Nat_mut *** //
|
|
||||||
let mut nat_mut_mutable = Self::builtin_methods("Mutable", 2);
|
let mut nat_mut_mutable = Self::builtin_methods("Mutable", 2);
|
||||||
nat_mut_mutable.register_builtin_const("ImmutType", ValueObj::builtin_t(Nat));
|
nat_mut_mutable.register_builtin_const("ImmutType", ValueObj::builtin_t(Nat));
|
||||||
let f_t = kw("f", func(vec![kw("old", Nat)], None, vec![], Nat));
|
let f_t = kw("f", func(vec![kw("old", Nat)], None, vec![], Nat));
|
||||||
|
@ -1430,8 +1435,7 @@ impl Context {
|
||||||
builtin_mono("Mutable"),
|
builtin_mono("Mutable"),
|
||||||
nat_mut_mutable,
|
nat_mut_mutable,
|
||||||
);
|
);
|
||||||
|
/* Bool_mut */
|
||||||
// *** Bool_mut *** //
|
|
||||||
let mut bool_mut = Self::builtin_mono_class("Bool!", 2);
|
let mut bool_mut = Self::builtin_mono_class("Bool!", 2);
|
||||||
bool_mut.register_superclass(Bool, &bool_);
|
bool_mut.register_superclass(Bool, &bool_);
|
||||||
bool_mut.register_superclass(builtin_mono("Nat!"), &nat_mut);
|
bool_mut.register_superclass(builtin_mono("Nat!"), &nat_mut);
|
||||||
|
@ -1451,8 +1455,7 @@ impl Context {
|
||||||
builtin_mono("Mutable"),
|
builtin_mono("Mutable"),
|
||||||
bool_mut_mutable,
|
bool_mut_mutable,
|
||||||
);
|
);
|
||||||
|
/* Str_mut */
|
||||||
// *** Str_mut *** //
|
|
||||||
let mut str_mut = Self::builtin_mono_class("Str!", 2);
|
let mut str_mut = Self::builtin_mono_class("Str!", 2);
|
||||||
str_mut.register_superclass(Str, &str_);
|
str_mut.register_superclass(Str, &str_);
|
||||||
let mut str_mut_mutable = Self::builtin_methods("Mutable", 2);
|
let mut str_mut_mutable = Self::builtin_methods("Mutable", 2);
|
||||||
|
@ -1471,8 +1474,7 @@ impl Context {
|
||||||
builtin_mono("Mutable"),
|
builtin_mono("Mutable"),
|
||||||
str_mut_mutable,
|
str_mut_mutable,
|
||||||
);
|
);
|
||||||
|
/* File_mut */
|
||||||
// *** File_mut *** //
|
|
||||||
let mut file_mut = Self::builtin_mono_class("File!", 2);
|
let mut file_mut = Self::builtin_mono_class("File!", 2);
|
||||||
let mut file_mut_readable = Self::builtin_methods("Readable!", 1);
|
let mut file_mut_readable = Self::builtin_methods("Readable!", 1);
|
||||||
file_mut_readable.register_builtin_impl(
|
file_mut_readable.register_builtin_impl(
|
||||||
|
@ -1492,8 +1494,7 @@ impl Context {
|
||||||
builtin_mono("Readable!"),
|
builtin_mono("Readable!"),
|
||||||
file_mut_readable,
|
file_mut_readable,
|
||||||
);
|
);
|
||||||
|
/* Array_mut */
|
||||||
// *** Array_mut *** //
|
|
||||||
let array_t = builtin_poly("Array", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
let array_t = builtin_poly("Array", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
||||||
let array_mut_t = builtin_poly("Array!", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
let array_mut_t = builtin_poly("Array!", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
||||||
let mut array_mut_ = Self::builtin_poly_class(
|
let mut array_mut_ = Self::builtin_poly_class(
|
||||||
|
@ -1555,8 +1556,7 @@ impl Context {
|
||||||
builtin_mono("Mutable"),
|
builtin_mono("Mutable"),
|
||||||
array_mut_mutable,
|
array_mut_mutable,
|
||||||
);
|
);
|
||||||
|
/* Set_mut */
|
||||||
// *** Set_mut *** //
|
|
||||||
let set_t = builtin_poly("Set", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
let set_t = builtin_poly("Set", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
||||||
let set_mut_t = builtin_poly("Set!", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
let set_mut_t = builtin_poly("Set!", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);
|
||||||
let mut set_mut_ = Self::builtin_poly_class(
|
let mut set_mut_ = Self::builtin_poly_class(
|
||||||
|
@ -1609,8 +1609,7 @@ impl Context {
|
||||||
let mut set_mut_mutable = Self::builtin_methods("Mutable", 2);
|
let mut set_mut_mutable = Self::builtin_methods("Mutable", 2);
|
||||||
set_mut_mutable.register_builtin_impl("update!", t, Immutable, Public);
|
set_mut_mutable.register_builtin_impl("update!", t, Immutable, Public);
|
||||||
set_mut_.register_trait(set_mut_t.clone(), builtin_mono("Mutable"), set_mut_mutable);
|
set_mut_.register_trait(set_mut_t.clone(), builtin_mono("Mutable"), set_mut_mutable);
|
||||||
|
/* Range */
|
||||||
// *** Range *** //
|
|
||||||
let range_t = builtin_poly("Range", vec![TyParam::t(mono_q("T"))]);
|
let range_t = builtin_poly("Range", vec![TyParam::t(mono_q("T"))]);
|
||||||
let mut range = Self::builtin_poly_class("Range", vec![PS::t_nd("T")], 2);
|
let mut range = Self::builtin_poly_class("Range", vec![PS::t_nd("T")], 2);
|
||||||
range.register_superclass(Obj, &obj);
|
range.register_superclass(Obj, &obj);
|
||||||
|
@ -1627,15 +1626,13 @@ impl Context {
|
||||||
builtin_poly("Eq", vec![ty_tp(range_t.clone())]),
|
builtin_poly("Eq", vec![ty_tp(range_t.clone())]),
|
||||||
range_eq,
|
range_eq,
|
||||||
);
|
);
|
||||||
|
/* Proc */
|
||||||
// *** Proc *** //
|
|
||||||
let mut proc = Self::builtin_mono_class("Proc", 2);
|
let mut proc = Self::builtin_mono_class("Proc", 2);
|
||||||
proc.register_superclass(Obj, &obj);
|
proc.register_superclass(Obj, &obj);
|
||||||
let mut named_proc = Self::builtin_mono_class("NamedProc", 2);
|
let mut named_proc = Self::builtin_mono_class("NamedProc", 2);
|
||||||
named_proc.register_superclass(Obj, &obj);
|
named_proc.register_superclass(Obj, &obj);
|
||||||
named_proc.register_marker_trait(builtin_mono("Named"));
|
named_proc.register_marker_trait(builtin_mono("Named"));
|
||||||
|
/* Func */
|
||||||
// *** Func *** //
|
|
||||||
let mut func = Self::builtin_mono_class("Func", 2);
|
let mut func = Self::builtin_mono_class("Func", 2);
|
||||||
func.register_superclass(builtin_mono("Proc"), &proc);
|
func.register_superclass(builtin_mono("Proc"), &proc);
|
||||||
let mut named_func = Self::builtin_mono_class("NamedFunc", 2);
|
let mut named_func = Self::builtin_mono_class("NamedFunc", 2);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue