1
Fork 0

Use ThinVec in ast::AngleBracketedArgs.

This commit is contained in:
Nicholas Nethercote 2023-01-30 14:37:06 +11:00
parent b14b7ba5dd
commit 1807027248
6 changed files with 9 additions and 8 deletions

View file

@ -209,7 +209,7 @@ pub struct AngleBracketedArgs {
/// The overall span. /// The overall span.
pub span: Span, pub span: Span,
/// The comma separated parts in the `<...>`. /// The comma separated parts in the `<...>`.
pub args: Vec<AngleBracketedArg>, pub args: ThinVec<AngleBracketedArg>,
} }
/// Either an argument for a parameter e.g., `'a`, `Vec<u8>`, `0`, /// Either an argument for a parameter e.g., `'a`, `Vec<u8>`, `0`,

View file

@ -577,7 +577,7 @@ pub fn noop_visit_angle_bracketed_parameter_data<T: MutVisitor>(
vis: &mut T, vis: &mut T,
) { ) {
let AngleBracketedArgs { args, span } = data; let AngleBracketedArgs { args, span } = data;
visit_vec(args, |arg| match arg { visit_thin_vec(args, |arg| match arg {
AngleBracketedArg::Arg(arg) => vis.visit_generic_arg(arg), AngleBracketedArg::Arg(arg) => vis.visit_generic_arg(arg),
AngleBracketedArg::Constraint(constraint) => vis.visit_constraint(constraint), AngleBracketedArg::Constraint(constraint) => vis.visit_constraint(constraint),
}); });

View file

@ -376,7 +376,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
// Split the arguments into const generics and normal arguments // Split the arguments into const generics and normal arguments
let mut real_args = vec![]; let mut real_args = vec![];
let mut generic_args = vec![]; let mut generic_args = ThinVec::new();
for (idx, arg) in args.into_iter().enumerate() { for (idx, arg) in args.into_iter().enumerate() {
if legacy_args_idx.contains(&idx) { if legacy_args_idx.contains(&idx) {
let parent_def_id = self.current_hir_id_owner; let parent_def_id = self.current_hir_id_owner;

View file

@ -27,6 +27,7 @@ use rustc_span::Span;
use rustc_target::spec::abi; use rustc_target::spec::abi;
use std::mem; use std::mem;
use std::ops::{Deref, DerefMut}; use std::ops::{Deref, DerefMut};
use thin_vec::thin_vec;
use crate::errors::*; use crate::errors::*;
@ -1615,7 +1616,7 @@ fn deny_equality_constraints(
empty_args => { empty_args => {
*empty_args = AngleBracketedArgs { *empty_args = AngleBracketedArgs {
span: ident.span, span: ident.span,
args: vec![arg], args: thin_vec![arg],
} }
.into(); .into();
} }

View file

@ -2199,7 +2199,7 @@ impl<'a> Parser<'a> {
/// like the user has forgotten them. /// like the user has forgotten them.
pub fn handle_ambiguous_unbraced_const_arg( pub fn handle_ambiguous_unbraced_const_arg(
&mut self, &mut self,
args: &mut Vec<AngleBracketedArg>, args: &mut ThinVec<AngleBracketedArg>,
) -> PResult<'a, bool> { ) -> PResult<'a, bool> {
// If we haven't encountered a closing `>`, then the argument is malformed. // If we haven't encountered a closing `>`, then the argument is malformed.
// It's likely that the user has written a const expression without enclosing it // It's likely that the user has written a const expression without enclosing it

View file

@ -332,7 +332,7 @@ impl<'a> Parser<'a> {
style: PathStyle, style: PathStyle,
lo: Span, lo: Span,
ty_generics: Option<&Generics>, ty_generics: Option<&Generics>,
) -> PResult<'a, Vec<AngleBracketedArg>> { ) -> PResult<'a, ThinVec<AngleBracketedArg>> {
// We need to detect whether there are extra leading left angle brackets and produce an // We need to detect whether there are extra leading left angle brackets and produce an
// appropriate error and suggestion. This cannot be implemented by looking ahead at // appropriate error and suggestion. This cannot be implemented by looking ahead at
// upcoming tokens for a matching `>` character - if there are unmatched `<` tokens // upcoming tokens for a matching `>` character - if there are unmatched `<` tokens
@ -472,8 +472,8 @@ impl<'a> Parser<'a> {
pub(super) fn parse_angle_args( pub(super) fn parse_angle_args(
&mut self, &mut self,
ty_generics: Option<&Generics>, ty_generics: Option<&Generics>,
) -> PResult<'a, Vec<AngleBracketedArg>> { ) -> PResult<'a, ThinVec<AngleBracketedArg>> {
let mut args = Vec::new(); let mut args = ThinVec::new();
while let Some(arg) = self.parse_angle_arg(ty_generics)? { while let Some(arg) = self.parse_angle_arg(ty_generics)? {
args.push(arg); args.push(arg);
if !self.eat(&token::Comma) { if !self.eat(&token::Comma) {