Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes insert_trait_implementaion for nested generics. #6827

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

esdrubal
Copy link
Contributor

@esdrubal esdrubal commented Jan 10, 2025

Description

The unify_checker was returning false when comparing MyOption<T> with T. And filter_by_type_inner type substitution when adding methods from MyOption<T> to MyOption<MyOption<T>> was replacing MyOption in its own type, ending up by inserting into type MyOption<MyOption<MyOption<T>>> instead of MyOption<MyOption<T>>.

Fixes #6825

Checklist

  • I have linked to any relevant issues.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have updated the documentation where relevant (API docs, the reference, and the Sway book).
  • I have added tests that prove my fix is effective or that my feature works.
  • I have added (or requested a maintainer to add) the necessary Breaking* or New Feature labels where relevant.
  • I have done my best to ensure that my PR adheres to the Fuel Labs Code Review Standards.
  • I have requested a review from the relevant team or maintainers.

The unify_checker was returning false when comparing MyOption<T> with T.
And filter_by_type_inner type substitution when adding methods from MyOption<T>
to MyOption<MyOption<T>> was replacing MyOption<T> in its own type, ending up
by inserting into type MyOption<MyOption<MyOption<T>>> instead of MyOption<MyOption<T>>.

Fixes #6825
@esdrubal esdrubal added the compiler: frontend Everything to do with type checking, control flow analysis, and everything between parsing and IRgen label Jan 10, 2025
@esdrubal esdrubal self-assigned this Jan 10, 2025
Copy link

codspeed-hq bot commented Jan 10, 2025

CodSpeed Performance Report

Merging #6827 will not alter performance

Comparing esdrubal/6825_nested_generics2 (70087aa) with master (1192b3f)

Summary

✅ 22 untouched benchmarks

@esdrubal esdrubal marked this pull request as ready for review January 10, 2025 13:01
@esdrubal esdrubal requested a review from a team as a code owner January 10, 2025 13:01
@ironcev ironcev changed the title Fixes insert_trait_implementaion for nsted generics. Fixes insert_trait_implementaion for nested generics. Jan 12, 2025
Copy link
Contributor

@jjcnn jjcnn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes are fine. I just don't understand why the code that's being removed was introduced in the first place.

I've added a nit about the length of one of the methods. Another nit is this:

The unify_checker was returning false when comparing `MyOption<T>` with `T`. 

Surely those two types don't unify (unless the two Ts are independent type variables)? AFAICT the test you've introduced also doesn't test that unification.

Comment on lines -915 to -919
type_id.subst(&SubstTypesContext::new(
engines,
&type_mapping,
matches!(code_block_first_pass, CodeBlockFirstPass::No),
));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems reasonable to remove this bit of code, but why was it there in the first place? It seems like an odd thing to write by accident, so surely there was a point to it?

Comment on lines +510 to +511
matches!(self.mode, ConstraintSubset)
|| !OccursCheck::new(self.engines).check(right, left)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: We really should refactor this method. It's extremely long, and it's hard to follow what's going on when the entire method doesn't fit on the screen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compiler: frontend Everything to do with type checking, control flow analysis, and everything between parsing and IRgen
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Methods and associated functions not found on types having nested generic type arguments
2 participants