gccrs: Allow type parameter bounds to use forward-declared generics
gccrs now correctly handles type parameter bounds that reference forward-declared generic parameters.
This commit updates gccrs to allow type parameter bounds to correctly reference forward-declared generic parameters. Previously, the compiler might have incorrectly disallowed this usage, potentially hindering the definition of complex generic structures. The change ensures that bounds within a type parameter can properly refer to other generic parameters that have been declared but not yet fully defined.
In Details
The DefaultResolver::visit(TypeParam) in gccrs was updated to correctly handle situations where type parameter bounds refer to other generic parameters that are forward-declared. The resolver now visits bounds outside of the ForwardTypeParamBan rib, allowing for valid usage of forward-declared generic parameters within trait bounds on other type parameters. This enhances the compiler's ability to parse and resolve complex generic type definitions in Rust code.
- gccrs
- The GCC Rust frontend, responsible for parsing, type-checking, and generating code for Rust programs using the GCC compiler infrastructure.
- type parameter
- A placeholder for a type in generic code. For example,
Tinstruct Point<T> { x: T, y: T }. - bound
- A constraint on a generic parameter, specifying traits that the parameter type must implement. For example,
T: DisplaymeansTmust implement theDisplaytrait. - forward-declared
- A declaration of an entity (like a type or function) without providing its full definition. This allows the entity to be referenced in other parts of the code before its complete implementation is available.
- rib
- A data structure used in name resolution, often representing a scope or a set of declarations. In gccrs, different types of 'ribs' manage namespaces, types, and other entities.