gccrs: Adjust SlicePattern and RestPattern handling
gccrs modifies AST handling for SlicePattern to better accommodate RestPatterns.
GCC’s Rust front-end (gccrs) has refactored its Abstract Syntax Tree (AST) handling for SlicePattern and RestPattern. This change allows SlicePattern instances to represent multiple RestPattern children, simplifying the handling of potentially invalid patterns that are guarded by cfg attributes. The implications of RestPattern are now deferred until the HIR lowering stage, reducing complexity earlier in the compilation pipeline.
In Details
This commit reorganizes the Abstract Syntax Tree (AST) processing within gccrs for SlicePattern constructs, specifically concerning RestPattern children. Previously, the AST might have struggled to represent SlicePattern instances with more than one RestPattern. This update modifies the AST collector and visitor patterns to correctly handle such cases, including those that would be conditionally compiled out via cfg attributes. By simplifying the AST representation, the compiler defers the complex validation and processing of RestPattern implications to the High-Level Intermedia…
- SlicePattern
- A pattern in Rust used for matching slices, allowing destructuring of sequences of elements.
- RestPattern
- A special pattern element within a
SlicePatternthat matches the remaining elements of a slice after other elements have been matched. - AST
- Abstract Syntax Tree. A tree representation of the source code's structure, used by the compiler for analysis and transformation.
- HIR lowering
- The process in
gccrsof transforming the Abstract Syntax Tree (AST) into a High-Level Intermediate Representation (HIR). This stage typically simplifies code structure and prepares it for further optimization and code generation. - cfg attributes
- Attributes in Rust used for conditional compilation. They allow code blocks to be included or excluded based on features enabled during the build process.