Use ThinVec
in ast::Block
.
This commit is contained in:
parent
4143b101f9
commit
b14b7ba5dd
18 changed files with 92 additions and 81 deletions
|
@ -708,7 +708,7 @@ impl<'a> Parser<'a> {
|
|||
err.delay_as_bug();
|
||||
self.restore_snapshot(snapshot);
|
||||
let mut tail = self.mk_block(
|
||||
vec![self.mk_stmt_err(expr.span)],
|
||||
thin_vec![self.mk_stmt_err(expr.span)],
|
||||
s,
|
||||
lo.to(self.prev_token.span),
|
||||
);
|
||||
|
|
|
@ -1601,7 +1601,7 @@ impl<'a> Parser<'a> {
|
|||
|
||||
// Replace `'label: non_block_expr` with `'label: {non_block_expr}` in order to suppress future errors about `break 'label`.
|
||||
let stmt = self.mk_stmt(span, StmtKind::Expr(expr));
|
||||
let blk = self.mk_block(vec![stmt], BlockCheckMode::Default, span);
|
||||
let blk = self.mk_block(thin_vec![stmt], BlockCheckMode::Default, span);
|
||||
self.mk_expr(span, ExprKind::Block(blk, label))
|
||||
});
|
||||
|
||||
|
@ -2481,7 +2481,7 @@ impl<'a> Parser<'a> {
|
|||
self.sess
|
||||
.emit_err(errors::MissingExpressionInForLoop { span: expr.span.shrink_to_lo() });
|
||||
let err_expr = self.mk_expr(expr.span, ExprKind::Err);
|
||||
let block = self.mk_block(vec![], BlockCheckMode::Default, self.prev_token.span);
|
||||
let block = self.mk_block(thin_vec![], BlockCheckMode::Default, self.prev_token.span);
|
||||
return Ok(self.mk_expr(
|
||||
lo.to(self.prev_token.span),
|
||||
ExprKind::ForLoop(pat, err_expr, block, opt_label),
|
||||
|
|
|
@ -20,8 +20,8 @@ use rustc_ast::{StmtKind, DUMMY_NODE_ID};
|
|||
use rustc_errors::{Applicability, DiagnosticBuilder, ErrorGuaranteed, PResult};
|
||||
use rustc_span::source_map::{BytePos, Span};
|
||||
use rustc_span::symbol::{kw, sym};
|
||||
|
||||
use std::mem;
|
||||
use thin_vec::{thin_vec, ThinVec};
|
||||
|
||||
impl<'a> Parser<'a> {
|
||||
/// Parses a statement. This stops just before trailing semicolons on everything but items.
|
||||
|
@ -544,7 +544,7 @@ impl<'a> Parser<'a> {
|
|||
s: BlockCheckMode,
|
||||
recover: AttemptLocalParseRecovery,
|
||||
) -> PResult<'a, P<Block>> {
|
||||
let mut stmts = vec![];
|
||||
let mut stmts = ThinVec::new();
|
||||
let mut snapshot = None;
|
||||
while !self.eat(&token::CloseDelim(Delimiter::Brace)) {
|
||||
if self.token == token::Eof {
|
||||
|
@ -662,7 +662,12 @@ impl<'a> Parser<'a> {
|
|||
Ok(Some(stmt))
|
||||
}
|
||||
|
||||
pub(super) fn mk_block(&self, stmts: Vec<Stmt>, rules: BlockCheckMode, span: Span) -> P<Block> {
|
||||
pub(super) fn mk_block(
|
||||
&self,
|
||||
stmts: ThinVec<Stmt>,
|
||||
rules: BlockCheckMode,
|
||||
span: Span,
|
||||
) -> P<Block> {
|
||||
P(Block {
|
||||
stmts,
|
||||
id: DUMMY_NODE_ID,
|
||||
|
@ -682,6 +687,6 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
|
||||
pub(super) fn mk_block_err(&self, span: Span) -> P<Block> {
|
||||
self.mk_block(vec![self.mk_stmt_err(span)], BlockCheckMode::Default, span)
|
||||
self.mk_block(thin_vec![self.mk_stmt_err(span)], BlockCheckMode::Default, span)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue