Skip to content

Commit

Permalink
Optimizes type_engine.insert to be done inside if. (#5254)
Browse files Browse the repository at this point in the history
## Description

`check_if_trait_constraints_are_satisfied_for_type` was inserting a
`TypeInfo::Custom` for every trait impl every time it was called.

This change moves the insertion after the unify check has passed.

This optimization reduces the size of the type engine from 205665 to
138725 while compiling `/should_pass/language/supertraits` which uses
std lib.

The overall improvement is 32.5% in size.

## 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.
- [x] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers.

Co-authored-by: Joshua Batty <[email protected]>
  • Loading branch information
esdrubal and JoshuaBatty authored Nov 5, 2023
1 parent 74b2422 commit 84f6c75
Showing 1 changed file with 12 additions and 12 deletions.
24 changes: 12 additions & 12 deletions sway-core/src/semantic_analysis/namespace/trait_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1018,19 +1018,19 @@ impl TraitMap {
.filter_map(|e| {
let key = &e.key;
let suffix = &key.name.suffix;
let map_trait_type_id = type_engine.insert(
engines,
TypeInfo::Custom {
qualified_call_path: suffix.name.clone().into(),
type_arguments: if suffix.args.is_empty() {
None
} else {
Some(suffix.args.to_vec())
},
root_type_id: None,
},
);
if unify_check.check(type_id, key.type_id) {
let map_trait_type_id = type_engine.insert(
engines,
TypeInfo::Custom {
qualified_call_path: suffix.name.clone().into(),
type_arguments: if suffix.args.is_empty() {
None
} else {
Some(suffix.args.to_vec())
},
root_type_id: None,
},
);
Some((suffix.name.clone(), map_trait_type_id))
} else {
None
Expand Down

0 comments on commit 84f6c75

Please sign in to comment.