gnu/gcc/3ce3af99a166fff35636a4f58d3d7d90b2223ecb gccrs: Move SlicePattern RestPattern handling
This allows the AST to represent SlicePattern instances with more than
one RestPattern child, which allows us to handle invalid SlicePattern
instances which would be cfg'd out and mostly avoid dealing with the
implications of a RestPattern until HIR lowering.
gcc/rust/ChangeLog:
* ast/rust-ast-collector.cc
(TokenCollector::visit (SlicePatternItemsNoRest)): Remove
function definition.
(TokenCollector::visit (SlicePatternItemsHasRest)): Likewise.
(TokenCollector::visit (SlicePattern)): Handle sub-patterns.
* ast/rust-ast-collector.h
(TokenCollector::visit (SlicePatternItemsNoRest)): Remove
function declaration.
(TokenCollector::visit (SlicePatternItemsHasRest)): Likewise.
* ast/rust-ast-full-decls.h (class SlicePatternItemsNoRest):
Remove forward declaration.
(class SlicePatternItemsHasRest): Likewise.
* ast/rust-ast-pointer-visitor.cc
(PointerVisitor::visit (SlicePatternItemsNoRest)): Remove
function definition.
(PointerVisitor::visit (SlicePatternItemsHasRest)): Likewise.
(PointerVisitor::visit (SlicePattern)): New function
definition.
* ast/rust-ast-pointer-visitor.h
(PointerVisitor::visit (SlicePatternItemsNoRest)): Remove
function declaration.
(PointerVisitor::visit (SlicePatternItemsHasRest)): Likewise.
(PointerVisitor::visit (SlicePattern)): New function
declaration.
* ast/rust-ast-visitor.cc
(DefaultASTVisitor::visit (SlicePatternItemsNoRest)): Remove
function definition.
(DefaultASTVisitor::visit (SlicePatternItemsHasRest)): Likewise.
(DefaultASTVisitor::visit (SlicePattern)): Handle sub-patterns.
* ast/rust-ast-visitor.h
(ASTVisitor::visit (SlicePatternItemsNoRest)): Remove function
declaration.
(ASTVisitor::visit (SlicePatternItemsHasRest)): Likewise.
(DefaultASTVisitor::visit (SlicePatternItemsNoRest)): Likewise.
(DefaultASTVisitor::visit (SlicePatternItemsHasRest)): Likewise.
* ast/rust-pattern.cc (SlicePatternItemsNoRest::as_string):
Remove function definition.
(SlicePatternItemsHasRest::as_string): Likewise.
(SlicePattern::as_string): Use as_string on sub patterns
directly.
(SlicePatternItemsNoRest::accept_vis): Remove function
definition.
(SlicePatternItemsHasRest::accept_vis): Likewise.
* ast/rust-pattern.h (class SlicePatternItems): Remove.
(class SlicePatternItemsNoRest): Remove.
(class SlicePatternItemsHasRest): Remove.
(SlicePattern::items): Remove member variable.
(SlicePattern::patterns): New member variable.
(SlicePattern::SlicePattern): Adjust to match member variable
adjustments.
(SlicePattern::get_items): Remove function.
(SlicePattern::get_patterns): New function.
(class CloneableDelegate<std::unique_ptr<SlicePatternItems>>):
Remove specialization.
* checks/errors/rust-ast-validation.cc
(ASTValidation::visit (SlicePattern)): New function to check for
too many RestPattern sub-patterns.
* checks/errors/rust-ast-validation.h
(ASTValidation::visit (SlicePattern)): New function declaration.
* expand/rust-cfg-strip.cc
(CfgStrip::visit (SlicePatternItemsNoRest)): Remove function
definition.
(CfgStrip::visit (SlicePatternItemsHasRest)): Likewise.
(CfgStrip::visit (SlicePattern)): Directly visit sub-patterns.
* expand/rust-cfg-strip.h
(CfgStrip::visit (SlicePatternItemsNoRest)): Remove function
declaration.
(CfgStrip::visit (SlicePatternItemsHasRest)): Likewise.
* expand/rust-derive.h
(DeriveVisitor::visit (SlicePatternItemsNoRest)): Remove
function.
(DeriveVisitor::visit (SlicePatternItemsHasRest)): Likewise.
* hir/rust-ast-lower-base.cc
(ASTLoweringBase::visit (SlicePatternItemsNoRest)): Remove
function definition.
(ASTLoweringBase::visit (SlicePatternItemsHasRest)): Likewise.
(ASTLoweringBase::lower_slice_pattern_no_rest): Likewise.
(ASTLoweringBase::lower_slice_pattern_has_rest): Likewise.
* hir/rust-ast-lower-base.h
(ASTLoweringBase::visit (SlicePatternItemsNoRest)): Remove
function declaration.
(ASTLoweringBase::visit (SlicePatternItemsHasRest)): Likewise.
(ASTLoweringBase::lower_slice_pattern_no_rest): Likewise.
(ASTLoweringBase::lower_slice_pattern_has_rest): Likewise.
* hir/rust-ast-lower-pattern.cc (lower_pattern_seq): New
function.
(ASTLoweringPattern::visit (SlicePattern)): Handle changes to
AST SlicePattern.
* parse/rust-parse-impl-pattern.hxx
(Parser::parse_slice_pattern): Likewise.
gcc/testsuite/ChangeLog:
* rust/compile/slice_rest_pattern.rs: Verify that too many rest
patterns in a slice pattern does not produce an error, if that
slice pattern is cfg'd out.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
19 files changed