Fix Readable type

This commit is contained in:
Shunsuke Shibayama 2022-09-30 14:31:39 +09:00
parent 9dd2da9628
commit 99ced41c87
3 changed files with 12 additions and 8 deletions

View file

@ -218,7 +218,7 @@ fn convert_to_python_attr(class: &str, uniq_obj_name: Option<&str>, name: Str) -
("Array!", _, "push!") => Str::ever("append"),
("Complex" | "Float" | "Ratio" | "Int" | "Nat" | "Bool", _, "Real") => Str::ever("real"),
("Complex" | "Float" | "Ratio" | "Int" | "Nat" | "Bool", _, "Imag") => Str::ever("imag"),
("File!", _, "read") => Str::ever("read"),
("File!", _, "read!") => Str::ever("read"),
(_, _, "__new__") => Str::ever("__call__"),
("StringIO!", _, "getvalue!") => Str::ever("getvalue"),
("Module", Some("importlib"), "reload!") => Str::ever("reload"),

View file

@ -224,9 +224,9 @@ impl Context {
let mut mutizable = Self::builtin_mono_trait("Mutizable", 2);
mutizable.register_builtin_decl("MutType!", Type, Public);
let pathlike = Self::builtin_mono_trait("PathLike", 2);
let mut readable = Self::builtin_mono_trait("Readable", 2);
let mut readable = Self::builtin_mono_trait("Readable!", 2);
let t_read = pr_met(
ref_(mono_q("Self")),
ref_mut(mono_q("Self"), None),
vec![],
None,
vec![param_t("n", Int)],
@ -234,7 +234,7 @@ impl Context {
);
let t_read = quant(
t_read,
set! { subtypeof(mono_q("Self"), builtin_mono("Readable")) },
set! { subtypeof(mono_q("Self"), builtin_mono("Readable!")) },
);
readable.register_builtin_decl("read!", t_read, Public);
let mut in_ = Self::builtin_poly_trait("In", vec![PS::t("T", NonDefault)], 2);
@ -360,7 +360,7 @@ impl Context {
self.register_builtin_type(builtin_mono("Immutizable"), immutizable, Const);
self.register_builtin_type(builtin_mono("Mutizable"), mutizable, Const);
self.register_builtin_type(builtin_mono("PathLike"), pathlike, Const);
self.register_builtin_type(builtin_mono("Readable"), readable, Const);
self.register_builtin_type(builtin_mono("Readable!"), readable, Const);
self.register_builtin_type(
builtin_poly("Input", vec![ty_tp(mono_q("T"))]),
input,
@ -1364,11 +1364,11 @@ impl Context {
str_mut_mutable,
);
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(
"read!",
pr_met(
ref_(builtin_mono("File!")),
ref_mut(builtin_mono("File!"), None),
vec![],
None,
vec![param_t("n", Int)],
@ -1379,7 +1379,7 @@ impl Context {
);
file_mut.register_trait(
builtin_mono("File!"),
builtin_mono("Readable"),
builtin_mono("Readable!"),
file_mut_readable,
);
let array_t = builtin_poly("Array", vec![ty_tp(mono_q("T")), mono_q_tp("N")]);

View file

@ -559,9 +559,13 @@ impl Context {
let loc = call.loc();
let t = call.signature_mut_t().unwrap();
*t = self.deref_tyvar(mem::take(t), Covariant, loc)?;
self.resolve_expr_t(&mut call.obj)?;
for arg in call.args.pos_args.iter_mut() {
self.resolve_expr_t(&mut arg.expr)?;
}
if let Some(var_args) = &mut call.args.var_args {
self.resolve_expr_t(&mut var_args.expr)?;
}
for arg in call.args.kw_args.iter_mut() {
self.resolve_expr_t(&mut arg.expr)?;
}