Polymorphism Fixes #104

Merged
sb10q merged 1 commits from polymorphism_fixes into master 2024-08-17 17:37:19 +08:00
2 changed files with 6 additions and 4 deletions
Showing only changes of commit 49476d06e1 - Show all commits

View File

@ -148,8 +148,9 @@ impl ConcreteTypeStore {
.borrow()
.iter()
.filter_map(|(name, ty)| {
// filter out functions as they can have type vars and
// will not affect codegen
// here we should not have type vars, but some partial instantiated
// class methods can still have uninstantiated type vars, so
// filter out all the methods, as this will not affect codegen
if let TypeEnum::TFunc( .. ) = &*unifier.get_ty(ty.0) {
None
} else {

View File

@ -725,8 +725,9 @@ impl Unifier {
if let TypeEnum::TVar { id, range, .. } =
self.unification_table.probe_value(*v).as_ref()
{
// need to do this for partial instantiated function
// (in class methods that contains type vars not in class)
// for class methods that contain type vars not in class declaration,
// as long as there exits one uninstantiated type var, the function is not instantiated,
// and need to do substitution on those type vars
if k == id {
instantiated = false;
vars.push((*k, range.clone()));