Skip to content

Commit 400a4f2

Browse files
committedSep 6, 2016
Add macro configure! in ext/expand.rs.
1 parent 2f3c4f1 commit 400a4f2

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed
 

‎src/libsyntax/ext/expand.rs

+14-20
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,15 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
498498
}
499499
}
500500

501+
macro_rules! configure {
502+
($this:ident, $node:ident) => {
503+
match $this.cfg.configure($node) {
504+
Some(node) => node,
505+
None => return Default::default(),
506+
}
507+
}
508+
}
509+
501510
impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
502511
fn fold_expr(&mut self, expr: P<ast::Expr>) -> P<ast::Expr> {
503512
let mut expr = self.cfg.configure_expr(expr).unwrap();
@@ -511,10 +520,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
511520
}
512521

513522
fn fold_opt_expr(&mut self, expr: P<ast::Expr>) -> Option<P<ast::Expr>> {
514-
let mut expr = match self.cfg.configure(expr) {
515-
Some(expr) => expr.unwrap(),
516-
None => return None,
517-
};
523+
let mut expr = configure!(self, expr).unwrap();
518524
expr.node = self.cfg.configure_expr_kind(expr.node);
519525

520526
if let ast::ExprKind::Mac(mac) = expr.node {
@@ -539,10 +545,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
539545
}
540546

541547
fn fold_stmt(&mut self, stmt: ast::Stmt) -> SmallVector<ast::Stmt> {
542-
let stmt = match self.cfg.configure_stmt(stmt) {
543-
Some(stmt) => stmt,
544-
None => return SmallVector::zero(),
545-
};
548+
let stmt = configure!(self, stmt);
546549

547550
let (mac, style, attrs) = match stmt.node {
548551
StmtKind::Mac(mac) => mac.unwrap(),
@@ -573,10 +576,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
573576
}
574577

575578
fn fold_item(&mut self, item: P<ast::Item>) -> SmallVector<P<ast::Item>> {
576-
let item = match self.cfg.configure(item) {
577-
Some(item) => item,
578-
None => return SmallVector::zero(),
579-
};
579+
let item = configure!(self, item);
580580

581581
let (item, attr) = self.classify_item(item);
582582
if let Some(attr) = attr {
@@ -652,10 +652,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
652652
}
653653

654654
fn fold_trait_item(&mut self, item: ast::TraitItem) -> SmallVector<ast::TraitItem> {
655-
let item = match self.cfg.configure(item) {
656-
Some(item) => item,
657-
None => return SmallVector::zero(),
658-
};
655+
let item = configure!(self, item);
659656

660657
let (item, attr) = self.classify_item(item);
661658
if let Some(attr) = attr {
@@ -673,10 +670,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
673670
}
674671

675672
fn fold_impl_item(&mut self, item: ast::ImplItem) -> SmallVector<ast::ImplItem> {
676-
let item = match self.cfg.configure(item) {
677-
Some(item) => item,
678-
None => return SmallVector::zero(),
679-
};
673+
let item = configure!(self, item);
680674

681675
let (item, attr) = self.classify_item(item);
682676
if let Some(attr) = attr {

‎src/libsyntax/util/small_vector.rs

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ enum SmallVectorRepr<T> {
2929
Many(Vec<T>),
3030
}
3131

32+
impl<T> Default for SmallVector<T> {
33+
fn default() -> Self {
34+
SmallVector { repr: Zero }
35+
}
36+
}
37+
3238
impl<T> Into<Vec<T>> for SmallVector<T> {
3339
fn into(self) -> Vec<T> {
3440
match self.repr {

0 commit comments

Comments
 (0)