Skip to content

Commit

Permalink
Fix ABI when logging generic types (FuelLabs#5528)
Browse files Browse the repository at this point in the history
## Description

This PR solves an issue when generating the ABI. When logging something
through generic types, sometimes the generic type was being exported,
instead of the concrete type.

So for example `Result::expect` was generating the types below.

```
 {
      "typeId": 2,
      "type": "E",
      "components": null,
      "typeParameters": null
    },
    {
      "typeId": 3,
      "type": "M",
      "components": null,
      "typeParameters": null
    },
```

## Checklist

- [x] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [x] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [x] 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
xunilrj and JoshuaBatty authored Jan 31, 2024
1 parent 279da83 commit ed82a34
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions sway-core/src/abi_generation/fuel_abi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,7 @@ impl TypeId {
)
}
_ => type_engine
.get(*self)
.get(resolved_type_id)
.abi_str(ctx, type_engine, decl_engine),
}
}
Expand Down Expand Up @@ -524,6 +524,7 @@ impl TypeId {
),
})
.collect::<Vec<_>>();

types.extend(fields_types);

// Generate the JSON data for the tuple. This is basically a list of
Expand Down Expand Up @@ -611,7 +612,20 @@ impl TypeId {
None
}
}

TypeInfo::UnknownGeneric { .. } => {
// avoid infinite recursion
if *self == resolved_type_id {
None
} else {
resolved_type_id.get_abi_type_components(
ctx,
type_engine,
decl_engine,
types,
resolved_type_id,
)
}
}
_ => None,
}
}
Expand Down

0 comments on commit ed82a34

Please sign in to comment.